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/MemoryBuffer.h"
118 #include "llvm/Support/Path.h"
119 #include "llvm/Support/SaveAndRestore.h"
120 #include "llvm/Support/Timer.h"
121 #include "llvm/Support/VersionTuple.h"
122 #include "llvm/Support/raw_ostream.h"
123 #include <algorithm>
124 #include <cassert>
125 #include <cstddef>
126 #include <cstdint>
127 #include <cstdio>
128 #include <ctime>
129 #include <iterator>
130 #include <limits>
131 #include <map>
132 #include <memory>
133 #include <string>
134 #include <system_error>
135 #include <tuple>
136 #include <utility>
137 #include <vector>
138 
139 using namespace clang;
140 using namespace clang::serialization;
141 using namespace clang::serialization::reader;
142 using llvm::BitstreamCursor;
143 using llvm::RoundingMode;
144 
145 //===----------------------------------------------------------------------===//
146 // ChainedASTReaderListener implementation
147 //===----------------------------------------------------------------------===//
148 
149 bool
150 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
151   return First->ReadFullVersionInformation(FullVersion) ||
152          Second->ReadFullVersionInformation(FullVersion);
153 }
154 
155 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
156   First->ReadModuleName(ModuleName);
157   Second->ReadModuleName(ModuleName);
158 }
159 
160 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
161   First->ReadModuleMapFile(ModuleMapPath);
162   Second->ReadModuleMapFile(ModuleMapPath);
163 }
164 
165 bool
166 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
167                                               bool Complain,
168                                               bool AllowCompatibleDifferences) {
169   return First->ReadLanguageOptions(LangOpts, Complain,
170                                     AllowCompatibleDifferences) ||
171          Second->ReadLanguageOptions(LangOpts, Complain,
172                                      AllowCompatibleDifferences);
173 }
174 
175 bool ChainedASTReaderListener::ReadTargetOptions(
176     const TargetOptions &TargetOpts, bool Complain,
177     bool AllowCompatibleDifferences) {
178   return First->ReadTargetOptions(TargetOpts, Complain,
179                                   AllowCompatibleDifferences) ||
180          Second->ReadTargetOptions(TargetOpts, Complain,
181                                    AllowCompatibleDifferences);
182 }
183 
184 bool ChainedASTReaderListener::ReadDiagnosticOptions(
185     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
186   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
187          Second->ReadDiagnosticOptions(DiagOpts, Complain);
188 }
189 
190 bool
191 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
192                                                 bool Complain) {
193   return First->ReadFileSystemOptions(FSOpts, Complain) ||
194          Second->ReadFileSystemOptions(FSOpts, Complain);
195 }
196 
197 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
198     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
199     bool Complain) {
200   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
201                                         Complain) ||
202          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
203                                          Complain);
204 }
205 
206 bool ChainedASTReaderListener::ReadPreprocessorOptions(
207     const PreprocessorOptions &PPOpts, bool Complain,
208     std::string &SuggestedPredefines) {
209   return First->ReadPreprocessorOptions(PPOpts, Complain,
210                                         SuggestedPredefines) ||
211          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
212 }
213 
214 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
215                                            unsigned Value) {
216   First->ReadCounter(M, Value);
217   Second->ReadCounter(M, Value);
218 }
219 
220 bool ChainedASTReaderListener::needsInputFileVisitation() {
221   return First->needsInputFileVisitation() ||
222          Second->needsInputFileVisitation();
223 }
224 
225 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
226   return First->needsSystemInputFileVisitation() ||
227   Second->needsSystemInputFileVisitation();
228 }
229 
230 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
231                                                ModuleKind Kind) {
232   First->visitModuleFile(Filename, Kind);
233   Second->visitModuleFile(Filename, Kind);
234 }
235 
236 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
237                                               bool isSystem,
238                                               bool isOverridden,
239                                               bool isExplicitModule) {
240   bool Continue = false;
241   if (First->needsInputFileVisitation() &&
242       (!isSystem || First->needsSystemInputFileVisitation()))
243     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
244                                       isExplicitModule);
245   if (Second->needsInputFileVisitation() &&
246       (!isSystem || Second->needsSystemInputFileVisitation()))
247     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
248                                        isExplicitModule);
249   return Continue;
250 }
251 
252 void ChainedASTReaderListener::readModuleFileExtension(
253        const ModuleFileExtensionMetadata &Metadata) {
254   First->readModuleFileExtension(Metadata);
255   Second->readModuleFileExtension(Metadata);
256 }
257 
258 //===----------------------------------------------------------------------===//
259 // PCH validator implementation
260 //===----------------------------------------------------------------------===//
261 
262 ASTReaderListener::~ASTReaderListener() = default;
263 
264 /// Compare the given set of language options against an existing set of
265 /// language options.
266 ///
267 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
268 /// \param AllowCompatibleDifferences If true, differences between compatible
269 ///        language options will be permitted.
270 ///
271 /// \returns true if the languagae options mis-match, false otherwise.
272 static bool checkLanguageOptions(const LangOptions &LangOpts,
273                                  const LangOptions &ExistingLangOpts,
274                                  DiagnosticsEngine *Diags,
275                                  bool AllowCompatibleDifferences = true) {
276 #define LANGOPT(Name, Bits, Default, Description)                 \
277   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
278     if (Diags)                                                    \
279       Diags->Report(diag::err_pch_langopt_mismatch)               \
280         << Description << LangOpts.Name << ExistingLangOpts.Name; \
281     return true;                                                  \
282   }
283 
284 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
285   if (ExistingLangOpts.Name != LangOpts.Name) {           \
286     if (Diags)                                            \
287       Diags->Report(diag::err_pch_langopt_value_mismatch) \
288         << Description;                                   \
289     return true;                                          \
290   }
291 
292 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
293   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
294     if (Diags)                                                 \
295       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
296         << Description;                                        \
297     return true;                                               \
298   }
299 
300 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
301   if (!AllowCompatibleDifferences)                            \
302     LANGOPT(Name, Bits, Default, Description)
303 
304 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
305   if (!AllowCompatibleDifferences)                                 \
306     ENUM_LANGOPT(Name, Bits, Default, Description)
307 
308 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
309   if (!AllowCompatibleDifferences)                                 \
310     VALUE_LANGOPT(Name, Bits, Default, Description)
311 
312 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
313 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
314 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
315 #include "clang/Basic/LangOptions.def"
316 
317   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
318     if (Diags)
319       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
320     return true;
321   }
322 
323   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
324     if (Diags)
325       Diags->Report(diag::err_pch_langopt_value_mismatch)
326       << "target Objective-C runtime";
327     return true;
328   }
329 
330   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
331       LangOpts.CommentOpts.BlockCommandNames) {
332     if (Diags)
333       Diags->Report(diag::err_pch_langopt_value_mismatch)
334         << "block command names";
335     return true;
336   }
337 
338   // Sanitizer feature mismatches are treated as compatible differences. If
339   // compatible differences aren't allowed, we still only want to check for
340   // mismatches of non-modular sanitizers (the only ones which can affect AST
341   // generation).
342   if (!AllowCompatibleDifferences) {
343     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
344     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
345     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
346     ExistingSanitizers.clear(ModularSanitizers);
347     ImportedSanitizers.clear(ModularSanitizers);
348     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
349       const std::string Flag = "-fsanitize=";
350       if (Diags) {
351 #define SANITIZER(NAME, ID)                                                    \
352   {                                                                            \
353     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
354     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
355     if (InExistingModule != InImportedModule)                                  \
356       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
357           << InExistingModule << (Flag + NAME);                                \
358   }
359 #include "clang/Basic/Sanitizers.def"
360       }
361       return true;
362     }
363   }
364 
365   return false;
366 }
367 
368 /// Compare the given set of target options against an existing set of
369 /// target options.
370 ///
371 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
372 ///
373 /// \returns true if the target options mis-match, false otherwise.
374 static bool checkTargetOptions(const TargetOptions &TargetOpts,
375                                const TargetOptions &ExistingTargetOpts,
376                                DiagnosticsEngine *Diags,
377                                bool AllowCompatibleDifferences = true) {
378 #define CHECK_TARGET_OPT(Field, Name)                             \
379   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
380     if (Diags)                                                    \
381       Diags->Report(diag::err_pch_targetopt_mismatch)             \
382         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
383     return true;                                                  \
384   }
385 
386   // The triple and ABI must match exactly.
387   CHECK_TARGET_OPT(Triple, "target");
388   CHECK_TARGET_OPT(ABI, "target ABI");
389 
390   // We can tolerate different CPUs in many cases, notably when one CPU
391   // supports a strict superset of another. When allowing compatible
392   // differences skip this check.
393   if (!AllowCompatibleDifferences)
394     CHECK_TARGET_OPT(CPU, "target CPU");
395 
396 #undef CHECK_TARGET_OPT
397 
398   // Compare feature sets.
399   SmallVector<StringRef, 4> ExistingFeatures(
400                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
401                                              ExistingTargetOpts.FeaturesAsWritten.end());
402   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
403                                          TargetOpts.FeaturesAsWritten.end());
404   llvm::sort(ExistingFeatures);
405   llvm::sort(ReadFeatures);
406 
407   // We compute the set difference in both directions explicitly so that we can
408   // diagnose the differences differently.
409   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
410   std::set_difference(
411       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
412       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
413   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
414                       ExistingFeatures.begin(), ExistingFeatures.end(),
415                       std::back_inserter(UnmatchedReadFeatures));
416 
417   // If we are allowing compatible differences and the read feature set is
418   // a strict subset of the existing feature set, there is nothing to diagnose.
419   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
420     return false;
421 
422   if (Diags) {
423     for (StringRef Feature : UnmatchedReadFeatures)
424       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
425           << /* is-existing-feature */ false << Feature;
426     for (StringRef Feature : UnmatchedExistingFeatures)
427       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
428           << /* is-existing-feature */ true << Feature;
429   }
430 
431   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
432 }
433 
434 bool
435 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
436                                   bool Complain,
437                                   bool AllowCompatibleDifferences) {
438   const LangOptions &ExistingLangOpts = PP.getLangOpts();
439   return checkLanguageOptions(LangOpts, ExistingLangOpts,
440                               Complain ? &Reader.Diags : nullptr,
441                               AllowCompatibleDifferences);
442 }
443 
444 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
445                                      bool Complain,
446                                      bool AllowCompatibleDifferences) {
447   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
448   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
449                             Complain ? &Reader.Diags : nullptr,
450                             AllowCompatibleDifferences);
451 }
452 
453 namespace {
454 
455 using MacroDefinitionsMap =
456     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
457 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
458 
459 } // namespace
460 
461 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
462                                          DiagnosticsEngine &Diags,
463                                          bool Complain) {
464   using Level = DiagnosticsEngine::Level;
465 
466   // Check current mappings for new -Werror mappings, and the stored mappings
467   // for cases that were explicitly mapped to *not* be errors that are now
468   // errors because of options like -Werror.
469   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
470 
471   for (DiagnosticsEngine *MappingSource : MappingSources) {
472     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
473       diag::kind DiagID = DiagIDMappingPair.first;
474       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
475       if (CurLevel < DiagnosticsEngine::Error)
476         continue; // not significant
477       Level StoredLevel =
478           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
479       if (StoredLevel < DiagnosticsEngine::Error) {
480         if (Complain)
481           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
482               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
483         return true;
484       }
485     }
486   }
487 
488   return false;
489 }
490 
491 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
492   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
493   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
494     return true;
495   return Ext >= diag::Severity::Error;
496 }
497 
498 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
499                                     DiagnosticsEngine &Diags,
500                                     bool IsSystem, bool Complain) {
501   // Top-level options
502   if (IsSystem) {
503     if (Diags.getSuppressSystemWarnings())
504       return false;
505     // If -Wsystem-headers was not enabled before, be conservative
506     if (StoredDiags.getSuppressSystemWarnings()) {
507       if (Complain)
508         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
509       return true;
510     }
511   }
512 
513   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
514     if (Complain)
515       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
516     return true;
517   }
518 
519   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
520       !StoredDiags.getEnableAllWarnings()) {
521     if (Complain)
522       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
523     return true;
524   }
525 
526   if (isExtHandlingFromDiagsError(Diags) &&
527       !isExtHandlingFromDiagsError(StoredDiags)) {
528     if (Complain)
529       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
530     return true;
531   }
532 
533   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
534 }
535 
536 /// Return the top import module if it is implicit, nullptr otherwise.
537 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
538                                           Preprocessor &PP) {
539   // If the original import came from a file explicitly generated by the user,
540   // don't check the diagnostic mappings.
541   // FIXME: currently this is approximated by checking whether this is not a
542   // module import of an implicitly-loaded module file.
543   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
544   // the transitive closure of its imports, since unrelated modules cannot be
545   // imported until after this module finishes validation.
546   ModuleFile *TopImport = &*ModuleMgr.rbegin();
547   while (!TopImport->ImportedBy.empty())
548     TopImport = TopImport->ImportedBy[0];
549   if (TopImport->Kind != MK_ImplicitModule)
550     return nullptr;
551 
552   StringRef ModuleName = TopImport->ModuleName;
553   assert(!ModuleName.empty() && "diagnostic options read before module name");
554 
555   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
556   assert(M && "missing module");
557   return M;
558 }
559 
560 bool PCHValidator::ReadDiagnosticOptions(
561     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
562   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
563   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
564   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
565       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
566   // This should never fail, because we would have processed these options
567   // before writing them to an ASTFile.
568   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
569 
570   ModuleManager &ModuleMgr = Reader.getModuleManager();
571   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
572 
573   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
574   if (!TopM)
575     return false;
576 
577   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
578   // contains the union of their flags.
579   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
580                                  Complain);
581 }
582 
583 /// Collect the macro definitions provided by the given preprocessor
584 /// options.
585 static void
586 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
587                         MacroDefinitionsMap &Macros,
588                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
589   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
590     StringRef Macro = PPOpts.Macros[I].first;
591     bool IsUndef = PPOpts.Macros[I].second;
592 
593     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
594     StringRef MacroName = MacroPair.first;
595     StringRef MacroBody = MacroPair.second;
596 
597     // For an #undef'd macro, we only care about the name.
598     if (IsUndef) {
599       if (MacroNames && !Macros.count(MacroName))
600         MacroNames->push_back(MacroName);
601 
602       Macros[MacroName] = std::make_pair("", true);
603       continue;
604     }
605 
606     // For a #define'd macro, figure out the actual definition.
607     if (MacroName.size() == Macro.size())
608       MacroBody = "1";
609     else {
610       // Note: GCC drops anything following an end-of-line character.
611       StringRef::size_type End = MacroBody.find_first_of("\n\r");
612       MacroBody = MacroBody.substr(0, End);
613     }
614 
615     if (MacroNames && !Macros.count(MacroName))
616       MacroNames->push_back(MacroName);
617     Macros[MacroName] = std::make_pair(MacroBody, false);
618   }
619 }
620 
621 /// Check the preprocessor options deserialized from the control block
622 /// against the preprocessor options in an existing preprocessor.
623 ///
624 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
625 /// \param Validate If true, validate preprocessor options. If false, allow
626 ///        macros defined by \p ExistingPPOpts to override those defined by
627 ///        \p PPOpts in SuggestedPredefines.
628 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
629                                      const PreprocessorOptions &ExistingPPOpts,
630                                      DiagnosticsEngine *Diags,
631                                      FileManager &FileMgr,
632                                      std::string &SuggestedPredefines,
633                                      const LangOptions &LangOpts,
634                                      bool Validate = true) {
635   // Check macro definitions.
636   MacroDefinitionsMap ASTFileMacros;
637   collectMacroDefinitions(PPOpts, ASTFileMacros);
638   MacroDefinitionsMap ExistingMacros;
639   SmallVector<StringRef, 4> ExistingMacroNames;
640   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
641 
642   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
643     // Dig out the macro definition in the existing preprocessor options.
644     StringRef MacroName = ExistingMacroNames[I];
645     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
646 
647     // Check whether we know anything about this macro name or not.
648     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
649         ASTFileMacros.find(MacroName);
650     if (!Validate || Known == ASTFileMacros.end()) {
651       // FIXME: Check whether this identifier was referenced anywhere in the
652       // AST file. If so, we should reject the AST file. Unfortunately, this
653       // information isn't in the control block. What shall we do about it?
654 
655       if (Existing.second) {
656         SuggestedPredefines += "#undef ";
657         SuggestedPredefines += MacroName.str();
658         SuggestedPredefines += '\n';
659       } else {
660         SuggestedPredefines += "#define ";
661         SuggestedPredefines += MacroName.str();
662         SuggestedPredefines += ' ';
663         SuggestedPredefines += Existing.first.str();
664         SuggestedPredefines += '\n';
665       }
666       continue;
667     }
668 
669     // If the macro was defined in one but undef'd in the other, we have a
670     // conflict.
671     if (Existing.second != Known->second.second) {
672       if (Diags) {
673         Diags->Report(diag::err_pch_macro_def_undef)
674           << MacroName << Known->second.second;
675       }
676       return true;
677     }
678 
679     // If the macro was #undef'd in both, or if the macro bodies are identical,
680     // it's fine.
681     if (Existing.second || Existing.first == Known->second.first)
682       continue;
683 
684     // The macro bodies differ; complain.
685     if (Diags) {
686       Diags->Report(diag::err_pch_macro_def_conflict)
687         << MacroName << Known->second.first << Existing.first;
688     }
689     return true;
690   }
691 
692   // Check whether we're using predefines.
693   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
694     if (Diags) {
695       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
696     }
697     return true;
698   }
699 
700   // Detailed record is important since it is used for the module cache hash.
701   if (LangOpts.Modules &&
702       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
703     if (Diags) {
704       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
705     }
706     return true;
707   }
708 
709   // Compute the #include and #include_macros lines we need.
710   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
711     StringRef File = ExistingPPOpts.Includes[I];
712 
713     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
714         !ExistingPPOpts.PCHThroughHeader.empty()) {
715       // In case the through header is an include, we must add all the includes
716       // to the predefines so the start point can be determined.
717       SuggestedPredefines += "#include \"";
718       SuggestedPredefines += File;
719       SuggestedPredefines += "\"\n";
720       continue;
721     }
722 
723     if (File == ExistingPPOpts.ImplicitPCHInclude)
724       continue;
725 
726     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
727           != PPOpts.Includes.end())
728       continue;
729 
730     SuggestedPredefines += "#include \"";
731     SuggestedPredefines += File;
732     SuggestedPredefines += "\"\n";
733   }
734 
735   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
736     StringRef File = ExistingPPOpts.MacroIncludes[I];
737     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
738                   File)
739         != PPOpts.MacroIncludes.end())
740       continue;
741 
742     SuggestedPredefines += "#__include_macros \"";
743     SuggestedPredefines += File;
744     SuggestedPredefines += "\"\n##\n";
745   }
746 
747   return false;
748 }
749 
750 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
751                                            bool Complain,
752                                            std::string &SuggestedPredefines) {
753   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
754 
755   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
756                                   Complain? &Reader.Diags : nullptr,
757                                   PP.getFileManager(),
758                                   SuggestedPredefines,
759                                   PP.getLangOpts());
760 }
761 
762 bool SimpleASTReaderListener::ReadPreprocessorOptions(
763                                   const PreprocessorOptions &PPOpts,
764                                   bool Complain,
765                                   std::string &SuggestedPredefines) {
766   return checkPreprocessorOptions(PPOpts,
767                                   PP.getPreprocessorOpts(),
768                                   nullptr,
769                                   PP.getFileManager(),
770                                   SuggestedPredefines,
771                                   PP.getLangOpts(),
772                                   false);
773 }
774 
775 /// Check the header search options deserialized from the control block
776 /// against the header search options in an existing preprocessor.
777 ///
778 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
779 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
780                                      StringRef SpecificModuleCachePath,
781                                      StringRef ExistingModuleCachePath,
782                                      DiagnosticsEngine *Diags,
783                                      const LangOptions &LangOpts) {
784   if (LangOpts.Modules) {
785     if (SpecificModuleCachePath != ExistingModuleCachePath) {
786       if (Diags)
787         Diags->Report(diag::err_pch_modulecache_mismatch)
788           << SpecificModuleCachePath << ExistingModuleCachePath;
789       return true;
790     }
791   }
792 
793   return false;
794 }
795 
796 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
797                                            StringRef SpecificModuleCachePath,
798                                            bool Complain) {
799   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
800                                   PP.getHeaderSearchInfo().getModuleCachePath(),
801                                   Complain ? &Reader.Diags : nullptr,
802                                   PP.getLangOpts());
803 }
804 
805 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
806   PP.setCounterValue(Value);
807 }
808 
809 //===----------------------------------------------------------------------===//
810 // AST reader implementation
811 //===----------------------------------------------------------------------===//
812 
813 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
814                                            bool TakeOwnership) {
815   DeserializationListener = Listener;
816   OwnsDeserializationListener = TakeOwnership;
817 }
818 
819 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
820   return serialization::ComputeHash(Sel);
821 }
822 
823 std::pair<unsigned, unsigned>
824 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
825   using namespace llvm::support;
826 
827   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
828   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
829   return std::make_pair(KeyLen, DataLen);
830 }
831 
832 ASTSelectorLookupTrait::internal_key_type
833 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
834   using namespace llvm::support;
835 
836   SelectorTable &SelTable = Reader.getContext().Selectors;
837   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
838   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
839       F, endian::readNext<uint32_t, little, unaligned>(d));
840   if (N == 0)
841     return SelTable.getNullarySelector(FirstII);
842   else if (N == 1)
843     return SelTable.getUnarySelector(FirstII);
844 
845   SmallVector<IdentifierInfo *, 16> Args;
846   Args.push_back(FirstII);
847   for (unsigned I = 1; I != N; ++I)
848     Args.push_back(Reader.getLocalIdentifier(
849         F, endian::readNext<uint32_t, little, unaligned>(d)));
850 
851   return SelTable.getSelector(N, Args.data());
852 }
853 
854 ASTSelectorLookupTrait::data_type
855 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
856                                  unsigned DataLen) {
857   using namespace llvm::support;
858 
859   data_type Result;
860 
861   Result.ID = Reader.getGlobalSelectorID(
862       F, endian::readNext<uint32_t, little, unaligned>(d));
863   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
864   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
865   Result.InstanceBits = FullInstanceBits & 0x3;
866   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
867   Result.FactoryBits = FullFactoryBits & 0x3;
868   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
869   unsigned NumInstanceMethods = FullInstanceBits >> 3;
870   unsigned NumFactoryMethods = FullFactoryBits >> 3;
871 
872   // Load instance methods
873   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
874     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
875             F, endian::readNext<uint32_t, little, unaligned>(d)))
876       Result.Instance.push_back(Method);
877   }
878 
879   // Load factory methods
880   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
881     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
882             F, endian::readNext<uint32_t, little, unaligned>(d)))
883       Result.Factory.push_back(Method);
884   }
885 
886   return Result;
887 }
888 
889 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
890   return llvm::djbHash(a);
891 }
892 
893 std::pair<unsigned, unsigned>
894 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
895   using namespace llvm::support;
896 
897   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
898   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
899   return std::make_pair(KeyLen, DataLen);
900 }
901 
902 ASTIdentifierLookupTraitBase::internal_key_type
903 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
904   assert(n >= 2 && d[n-1] == '\0');
905   return StringRef((const char*) d, n-1);
906 }
907 
908 /// Whether the given identifier is "interesting".
909 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
910                                     bool IsModule) {
911   return II.hadMacroDefinition() ||
912          II.isPoisoned() ||
913          (IsModule ? II.hasRevertedBuiltin() : II.getObjCOrBuiltinID()) ||
914          II.hasRevertedTokenIDToIdentifier() ||
915          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
916           II.getFETokenInfo());
917 }
918 
919 static bool readBit(unsigned &Bits) {
920   bool Value = Bits & 0x1;
921   Bits >>= 1;
922   return Value;
923 }
924 
925 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
926   using namespace llvm::support;
927 
928   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
929   return Reader.getGlobalIdentifierID(F, RawID >> 1);
930 }
931 
932 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
933   if (!II.isFromAST()) {
934     II.setIsFromAST();
935     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
936     if (isInterestingIdentifier(Reader, II, IsModule))
937       II.setChangedSinceDeserialization();
938   }
939 }
940 
941 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
942                                                    const unsigned char* d,
943                                                    unsigned DataLen) {
944   using namespace llvm::support;
945 
946   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
947   bool IsInteresting = RawID & 0x01;
948 
949   // Wipe out the "is interesting" bit.
950   RawID = RawID >> 1;
951 
952   // Build the IdentifierInfo and link the identifier ID with it.
953   IdentifierInfo *II = KnownII;
954   if (!II) {
955     II = &Reader.getIdentifierTable().getOwn(k);
956     KnownII = II;
957   }
958   markIdentifierFromAST(Reader, *II);
959   Reader.markIdentifierUpToDate(II);
960 
961   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
962   if (!IsInteresting) {
963     // For uninteresting identifiers, there's nothing else to do. Just notify
964     // the reader that we've finished loading this identifier.
965     Reader.SetIdentifierInfo(ID, II);
966     return II;
967   }
968 
969   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
970   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
971   bool CPlusPlusOperatorKeyword = readBit(Bits);
972   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
973   bool HasRevertedBuiltin = readBit(Bits);
974   bool Poisoned = readBit(Bits);
975   bool ExtensionToken = readBit(Bits);
976   bool HadMacroDefinition = readBit(Bits);
977 
978   assert(Bits == 0 && "Extra bits in the identifier?");
979   DataLen -= 8;
980 
981   // Set or check the various bits in the IdentifierInfo structure.
982   // Token IDs are read-only.
983   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
984     II->revertTokenIDToIdentifier();
985   if (!F.isModule())
986     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
987   else if (HasRevertedBuiltin && II->getBuiltinID()) {
988     II->revertBuiltin();
989     assert((II->hasRevertedBuiltin() ||
990             II->getObjCOrBuiltinID() == ObjCOrBuiltinID) &&
991            "Incorrect ObjC keyword or builtin ID");
992   }
993   assert(II->isExtensionToken() == ExtensionToken &&
994          "Incorrect extension token flag");
995   (void)ExtensionToken;
996   if (Poisoned)
997     II->setIsPoisoned(true);
998   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
999          "Incorrect C++ operator keyword flag");
1000   (void)CPlusPlusOperatorKeyword;
1001 
1002   // If this identifier is a macro, deserialize the macro
1003   // definition.
1004   if (HadMacroDefinition) {
1005     uint32_t MacroDirectivesOffset =
1006         endian::readNext<uint32_t, little, unaligned>(d);
1007     DataLen -= 4;
1008 
1009     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1010   }
1011 
1012   Reader.SetIdentifierInfo(ID, II);
1013 
1014   // Read all of the declarations visible at global scope with this
1015   // name.
1016   if (DataLen > 0) {
1017     SmallVector<uint32_t, 4> DeclIDs;
1018     for (; DataLen > 0; DataLen -= 4)
1019       DeclIDs.push_back(Reader.getGlobalDeclID(
1020           F, endian::readNext<uint32_t, little, unaligned>(d)));
1021     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1022   }
1023 
1024   return II;
1025 }
1026 
1027 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1028     : Kind(Name.getNameKind()) {
1029   switch (Kind) {
1030   case DeclarationName::Identifier:
1031     Data = (uint64_t)Name.getAsIdentifierInfo();
1032     break;
1033   case DeclarationName::ObjCZeroArgSelector:
1034   case DeclarationName::ObjCOneArgSelector:
1035   case DeclarationName::ObjCMultiArgSelector:
1036     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1037     break;
1038   case DeclarationName::CXXOperatorName:
1039     Data = Name.getCXXOverloadedOperator();
1040     break;
1041   case DeclarationName::CXXLiteralOperatorName:
1042     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1043     break;
1044   case DeclarationName::CXXDeductionGuideName:
1045     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1046                ->getDeclName().getAsIdentifierInfo();
1047     break;
1048   case DeclarationName::CXXConstructorName:
1049   case DeclarationName::CXXDestructorName:
1050   case DeclarationName::CXXConversionFunctionName:
1051   case DeclarationName::CXXUsingDirective:
1052     Data = 0;
1053     break;
1054   }
1055 }
1056 
1057 unsigned DeclarationNameKey::getHash() const {
1058   llvm::FoldingSetNodeID ID;
1059   ID.AddInteger(Kind);
1060 
1061   switch (Kind) {
1062   case DeclarationName::Identifier:
1063   case DeclarationName::CXXLiteralOperatorName:
1064   case DeclarationName::CXXDeductionGuideName:
1065     ID.AddString(((IdentifierInfo*)Data)->getName());
1066     break;
1067   case DeclarationName::ObjCZeroArgSelector:
1068   case DeclarationName::ObjCOneArgSelector:
1069   case DeclarationName::ObjCMultiArgSelector:
1070     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1071     break;
1072   case DeclarationName::CXXOperatorName:
1073     ID.AddInteger((OverloadedOperatorKind)Data);
1074     break;
1075   case DeclarationName::CXXConstructorName:
1076   case DeclarationName::CXXDestructorName:
1077   case DeclarationName::CXXConversionFunctionName:
1078   case DeclarationName::CXXUsingDirective:
1079     break;
1080   }
1081 
1082   return ID.ComputeHash();
1083 }
1084 
1085 ModuleFile *
1086 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1087   using namespace llvm::support;
1088 
1089   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1090   return Reader.getLocalModuleFile(F, ModuleFileID);
1091 }
1092 
1093 std::pair<unsigned, unsigned>
1094 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1095   using namespace llvm::support;
1096 
1097   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
1098   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
1099   return std::make_pair(KeyLen, DataLen);
1100 }
1101 
1102 ASTDeclContextNameLookupTrait::internal_key_type
1103 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1104   using namespace llvm::support;
1105 
1106   auto Kind = (DeclarationName::NameKind)*d++;
1107   uint64_t Data;
1108   switch (Kind) {
1109   case DeclarationName::Identifier:
1110   case DeclarationName::CXXLiteralOperatorName:
1111   case DeclarationName::CXXDeductionGuideName:
1112     Data = (uint64_t)Reader.getLocalIdentifier(
1113         F, endian::readNext<uint32_t, little, unaligned>(d));
1114     break;
1115   case DeclarationName::ObjCZeroArgSelector:
1116   case DeclarationName::ObjCOneArgSelector:
1117   case DeclarationName::ObjCMultiArgSelector:
1118     Data =
1119         (uint64_t)Reader.getLocalSelector(
1120                              F, endian::readNext<uint32_t, little, unaligned>(
1121                                     d)).getAsOpaquePtr();
1122     break;
1123   case DeclarationName::CXXOperatorName:
1124     Data = *d++; // OverloadedOperatorKind
1125     break;
1126   case DeclarationName::CXXConstructorName:
1127   case DeclarationName::CXXDestructorName:
1128   case DeclarationName::CXXConversionFunctionName:
1129   case DeclarationName::CXXUsingDirective:
1130     Data = 0;
1131     break;
1132   }
1133 
1134   return DeclarationNameKey(Kind, Data);
1135 }
1136 
1137 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1138                                                  const unsigned char *d,
1139                                                  unsigned DataLen,
1140                                                  data_type_builder &Val) {
1141   using namespace llvm::support;
1142 
1143   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1144     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1145     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1146   }
1147 }
1148 
1149 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1150                                               BitstreamCursor &Cursor,
1151                                               uint64_t Offset,
1152                                               DeclContext *DC) {
1153   assert(Offset != 0);
1154 
1155   SavedStreamPosition SavedPosition(Cursor);
1156   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1157     Error(std::move(Err));
1158     return true;
1159   }
1160 
1161   RecordData Record;
1162   StringRef Blob;
1163   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1164   if (!MaybeCode) {
1165     Error(MaybeCode.takeError());
1166     return true;
1167   }
1168   unsigned Code = MaybeCode.get();
1169 
1170   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1171   if (!MaybeRecCode) {
1172     Error(MaybeRecCode.takeError());
1173     return true;
1174   }
1175   unsigned RecCode = MaybeRecCode.get();
1176   if (RecCode != DECL_CONTEXT_LEXICAL) {
1177     Error("Expected lexical block");
1178     return true;
1179   }
1180 
1181   assert(!isa<TranslationUnitDecl>(DC) &&
1182          "expected a TU_UPDATE_LEXICAL record for TU");
1183   // If we are handling a C++ class template instantiation, we can see multiple
1184   // lexical updates for the same record. It's important that we select only one
1185   // of them, so that field numbering works properly. Just pick the first one we
1186   // see.
1187   auto &Lex = LexicalDecls[DC];
1188   if (!Lex.first) {
1189     Lex = std::make_pair(
1190         &M, llvm::makeArrayRef(
1191                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1192                     Blob.data()),
1193                 Blob.size() / 4));
1194   }
1195   DC->setHasExternalLexicalStorage(true);
1196   return false;
1197 }
1198 
1199 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1200                                               BitstreamCursor &Cursor,
1201                                               uint64_t Offset,
1202                                               DeclID ID) {
1203   assert(Offset != 0);
1204 
1205   SavedStreamPosition SavedPosition(Cursor);
1206   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1207     Error(std::move(Err));
1208     return true;
1209   }
1210 
1211   RecordData Record;
1212   StringRef Blob;
1213   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1214   if (!MaybeCode) {
1215     Error(MaybeCode.takeError());
1216     return true;
1217   }
1218   unsigned Code = MaybeCode.get();
1219 
1220   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1221   if (!MaybeRecCode) {
1222     Error(MaybeRecCode.takeError());
1223     return true;
1224   }
1225   unsigned RecCode = MaybeRecCode.get();
1226   if (RecCode != DECL_CONTEXT_VISIBLE) {
1227     Error("Expected visible lookup table block");
1228     return true;
1229   }
1230 
1231   // We can't safely determine the primary context yet, so delay attaching the
1232   // lookup table until we're done with recursive deserialization.
1233   auto *Data = (const unsigned char*)Blob.data();
1234   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1235   return false;
1236 }
1237 
1238 void ASTReader::Error(StringRef Msg) const {
1239   Error(diag::err_fe_pch_malformed, Msg);
1240   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1241       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1242     Diag(diag::note_module_cache_path)
1243       << PP.getHeaderSearchInfo().getModuleCachePath();
1244   }
1245 }
1246 
1247 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1248                       StringRef Arg3) const {
1249   if (Diags.isDiagnosticInFlight())
1250     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1251   else
1252     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1253 }
1254 
1255 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1256                       unsigned Select) const {
1257   if (!Diags.isDiagnosticInFlight())
1258     Diag(DiagID) << Arg1 << Arg2 << Select;
1259 }
1260 
1261 void ASTReader::Error(llvm::Error &&Err) const {
1262   Error(toString(std::move(Err)));
1263 }
1264 
1265 //===----------------------------------------------------------------------===//
1266 // Source Manager Deserialization
1267 //===----------------------------------------------------------------------===//
1268 
1269 /// Read the line table in the source manager block.
1270 /// \returns true if there was an error.
1271 bool ASTReader::ParseLineTable(ModuleFile &F,
1272                                const RecordData &Record) {
1273   unsigned Idx = 0;
1274   LineTableInfo &LineTable = SourceMgr.getLineTable();
1275 
1276   // Parse the file names
1277   std::map<int, int> FileIDs;
1278   FileIDs[-1] = -1; // For unspecified filenames.
1279   for (unsigned I = 0; Record[Idx]; ++I) {
1280     // Extract the file name
1281     auto Filename = ReadPath(F, Record, Idx);
1282     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1283   }
1284   ++Idx;
1285 
1286   // Parse the line entries
1287   std::vector<LineEntry> Entries;
1288   while (Idx < Record.size()) {
1289     int FID = Record[Idx++];
1290     assert(FID >= 0 && "Serialized line entries for non-local file.");
1291     // Remap FileID from 1-based old view.
1292     FID += F.SLocEntryBaseID - 1;
1293 
1294     // Extract the line entries
1295     unsigned NumEntries = Record[Idx++];
1296     assert(NumEntries && "no line entries for file ID");
1297     Entries.clear();
1298     Entries.reserve(NumEntries);
1299     for (unsigned I = 0; I != NumEntries; ++I) {
1300       unsigned FileOffset = Record[Idx++];
1301       unsigned LineNo = Record[Idx++];
1302       int FilenameID = FileIDs[Record[Idx++]];
1303       SrcMgr::CharacteristicKind FileKind
1304         = (SrcMgr::CharacteristicKind)Record[Idx++];
1305       unsigned IncludeOffset = Record[Idx++];
1306       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1307                                        FileKind, IncludeOffset));
1308     }
1309     LineTable.AddEntry(FileID::get(FID), Entries);
1310   }
1311 
1312   return false;
1313 }
1314 
1315 /// Read a source manager block
1316 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1317   using namespace SrcMgr;
1318 
1319   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1320 
1321   // Set the source-location entry cursor to the current position in
1322   // the stream. This cursor will be used to read the contents of the
1323   // source manager block initially, and then lazily read
1324   // source-location entries as needed.
1325   SLocEntryCursor = F.Stream;
1326 
1327   // The stream itself is going to skip over the source manager block.
1328   if (llvm::Error Err = F.Stream.SkipBlock()) {
1329     Error(std::move(Err));
1330     return true;
1331   }
1332 
1333   // Enter the source manager block.
1334   if (llvm::Error Err =
1335           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1336     Error(std::move(Err));
1337     return true;
1338   }
1339 
1340   RecordData Record;
1341   while (true) {
1342     Expected<llvm::BitstreamEntry> MaybeE =
1343         SLocEntryCursor.advanceSkippingSubblocks();
1344     if (!MaybeE) {
1345       Error(MaybeE.takeError());
1346       return true;
1347     }
1348     llvm::BitstreamEntry E = MaybeE.get();
1349 
1350     switch (E.Kind) {
1351     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1352     case llvm::BitstreamEntry::Error:
1353       Error("malformed block record in AST file");
1354       return true;
1355     case llvm::BitstreamEntry::EndBlock:
1356       return false;
1357     case llvm::BitstreamEntry::Record:
1358       // The interesting case.
1359       break;
1360     }
1361 
1362     // Read a record.
1363     Record.clear();
1364     StringRef Blob;
1365     Expected<unsigned> MaybeRecord =
1366         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1367     if (!MaybeRecord) {
1368       Error(MaybeRecord.takeError());
1369       return true;
1370     }
1371     switch (MaybeRecord.get()) {
1372     default:  // Default behavior: ignore.
1373       break;
1374 
1375     case SM_SLOC_FILE_ENTRY:
1376     case SM_SLOC_BUFFER_ENTRY:
1377     case SM_SLOC_EXPANSION_ENTRY:
1378       // Once we hit one of the source location entries, we're done.
1379       return false;
1380     }
1381   }
1382 }
1383 
1384 /// If a header file is not found at the path that we expect it to be
1385 /// and the PCH file was moved from its original location, try to resolve the
1386 /// file by assuming that header+PCH were moved together and the header is in
1387 /// the same place relative to the PCH.
1388 static std::string
1389 resolveFileRelativeToOriginalDir(const std::string &Filename,
1390                                  const std::string &OriginalDir,
1391                                  const std::string &CurrDir) {
1392   assert(OriginalDir != CurrDir &&
1393          "No point trying to resolve the file if the PCH dir didn't change");
1394 
1395   using namespace llvm::sys;
1396 
1397   SmallString<128> filePath(Filename);
1398   fs::make_absolute(filePath);
1399   assert(path::is_absolute(OriginalDir));
1400   SmallString<128> currPCHPath(CurrDir);
1401 
1402   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1403                        fileDirE = path::end(path::parent_path(filePath));
1404   path::const_iterator origDirI = path::begin(OriginalDir),
1405                        origDirE = path::end(OriginalDir);
1406   // Skip the common path components from filePath and OriginalDir.
1407   while (fileDirI != fileDirE && origDirI != origDirE &&
1408          *fileDirI == *origDirI) {
1409     ++fileDirI;
1410     ++origDirI;
1411   }
1412   for (; origDirI != origDirE; ++origDirI)
1413     path::append(currPCHPath, "..");
1414   path::append(currPCHPath, fileDirI, fileDirE);
1415   path::append(currPCHPath, path::filename(Filename));
1416   return std::string(currPCHPath.str());
1417 }
1418 
1419 bool ASTReader::ReadSLocEntry(int ID) {
1420   if (ID == 0)
1421     return false;
1422 
1423   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1424     Error("source location entry ID out-of-range for AST file");
1425     return true;
1426   }
1427 
1428   // Local helper to read the (possibly-compressed) buffer data following the
1429   // entry record.
1430   auto ReadBuffer = [this](
1431       BitstreamCursor &SLocEntryCursor,
1432       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1433     RecordData Record;
1434     StringRef Blob;
1435     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1436     if (!MaybeCode) {
1437       Error(MaybeCode.takeError());
1438       return nullptr;
1439     }
1440     unsigned Code = MaybeCode.get();
1441 
1442     Expected<unsigned> MaybeRecCode =
1443         SLocEntryCursor.readRecord(Code, Record, &Blob);
1444     if (!MaybeRecCode) {
1445       Error(MaybeRecCode.takeError());
1446       return nullptr;
1447     }
1448     unsigned RecCode = MaybeRecCode.get();
1449 
1450     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1451       if (!llvm::zlib::isAvailable()) {
1452         Error("zlib is not available");
1453         return nullptr;
1454       }
1455       SmallString<0> Uncompressed;
1456       if (llvm::Error E =
1457               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1458         Error("could not decompress embedded file contents: " +
1459               llvm::toString(std::move(E)));
1460         return nullptr;
1461       }
1462       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1463     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1464       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1465     } else {
1466       Error("AST record has invalid code");
1467       return nullptr;
1468     }
1469   };
1470 
1471   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1472   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1473           F->SLocEntryOffsetsBase +
1474           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1475     Error(std::move(Err));
1476     return true;
1477   }
1478 
1479   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1480   unsigned BaseOffset = F->SLocEntryBaseOffset;
1481 
1482   ++NumSLocEntriesRead;
1483   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1484   if (!MaybeEntry) {
1485     Error(MaybeEntry.takeError());
1486     return true;
1487   }
1488   llvm::BitstreamEntry Entry = MaybeEntry.get();
1489 
1490   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1491     Error("incorrectly-formatted source location entry in AST file");
1492     return true;
1493   }
1494 
1495   RecordData Record;
1496   StringRef Blob;
1497   Expected<unsigned> MaybeSLOC =
1498       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1499   if (!MaybeSLOC) {
1500     Error(MaybeSLOC.takeError());
1501     return true;
1502   }
1503   switch (MaybeSLOC.get()) {
1504   default:
1505     Error("incorrectly-formatted source location entry in AST file");
1506     return true;
1507 
1508   case SM_SLOC_FILE_ENTRY: {
1509     // We will detect whether a file changed and return 'Failure' for it, but
1510     // we will also try to fail gracefully by setting up the SLocEntry.
1511     unsigned InputID = Record[4];
1512     InputFile IF = getInputFile(*F, InputID);
1513     const FileEntry *File = IF.getFile();
1514     bool OverriddenBuffer = IF.isOverridden();
1515 
1516     // Note that we only check if a File was returned. If it was out-of-date
1517     // we have complained but we will continue creating a FileID to recover
1518     // gracefully.
1519     if (!File)
1520       return true;
1521 
1522     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1523     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1524       // This is the module's main file.
1525       IncludeLoc = getImportLocation(F);
1526     }
1527     SrcMgr::CharacteristicKind
1528       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1529     // FIXME: The FileID should be created from the FileEntryRef.
1530     FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1531                                         ID, BaseOffset + Record[0]);
1532     SrcMgr::FileInfo &FileInfo =
1533           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1534     FileInfo.NumCreatedFIDs = Record[5];
1535     if (Record[3])
1536       FileInfo.setHasLineDirectives();
1537 
1538     unsigned NumFileDecls = Record[7];
1539     if (NumFileDecls && ContextObj) {
1540       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1541       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1542       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1543                                                              NumFileDecls));
1544     }
1545 
1546     const SrcMgr::ContentCache *ContentCache
1547       = SourceMgr.getOrCreateContentCache(File, isSystem(FileCharacter));
1548     if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1549         ContentCache->ContentsEntry == ContentCache->OrigEntry &&
1550         !ContentCache->getRawBuffer()) {
1551       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1552       if (!Buffer)
1553         return true;
1554       SourceMgr.overrideFileContents(File, std::move(Buffer));
1555     }
1556 
1557     break;
1558   }
1559 
1560   case SM_SLOC_BUFFER_ENTRY: {
1561     const char *Name = Blob.data();
1562     unsigned Offset = Record[0];
1563     SrcMgr::CharacteristicKind
1564       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1565     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1566     if (IncludeLoc.isInvalid() && F->isModule()) {
1567       IncludeLoc = getImportLocation(F);
1568     }
1569 
1570     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1571     if (!Buffer)
1572       return true;
1573     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1574                            BaseOffset + Offset, IncludeLoc);
1575     break;
1576   }
1577 
1578   case SM_SLOC_EXPANSION_ENTRY: {
1579     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1580     SourceMgr.createExpansionLoc(SpellingLoc,
1581                                      ReadSourceLocation(*F, Record[2]),
1582                                      ReadSourceLocation(*F, Record[3]),
1583                                      Record[5],
1584                                      Record[4],
1585                                      ID,
1586                                      BaseOffset + Record[0]);
1587     break;
1588   }
1589   }
1590 
1591   return false;
1592 }
1593 
1594 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1595   if (ID == 0)
1596     return std::make_pair(SourceLocation(), "");
1597 
1598   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1599     Error("source location entry ID out-of-range for AST file");
1600     return std::make_pair(SourceLocation(), "");
1601   }
1602 
1603   // Find which module file this entry lands in.
1604   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1605   if (!M->isModule())
1606     return std::make_pair(SourceLocation(), "");
1607 
1608   // FIXME: Can we map this down to a particular submodule? That would be
1609   // ideal.
1610   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1611 }
1612 
1613 /// Find the location where the module F is imported.
1614 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1615   if (F->ImportLoc.isValid())
1616     return F->ImportLoc;
1617 
1618   // Otherwise we have a PCH. It's considered to be "imported" at the first
1619   // location of its includer.
1620   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1621     // Main file is the importer.
1622     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1623     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1624   }
1625   return F->ImportedBy[0]->FirstLoc;
1626 }
1627 
1628 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1629 /// the abbreviations that are at the top of the block and then leave the cursor
1630 /// pointing into the block.
1631 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) {
1632   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1633     // FIXME this drops errors on the floor.
1634     consumeError(std::move(Err));
1635     return true;
1636   }
1637 
1638   while (true) {
1639     uint64_t Offset = Cursor.GetCurrentBitNo();
1640     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1641     if (!MaybeCode) {
1642       // FIXME this drops errors on the floor.
1643       consumeError(MaybeCode.takeError());
1644       return true;
1645     }
1646     unsigned Code = MaybeCode.get();
1647 
1648     // We expect all abbrevs to be at the start of the block.
1649     if (Code != llvm::bitc::DEFINE_ABBREV) {
1650       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1651         // FIXME this drops errors on the floor.
1652         consumeError(std::move(Err));
1653         return true;
1654       }
1655       return false;
1656     }
1657     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1658       // FIXME this drops errors on the floor.
1659       consumeError(std::move(Err));
1660       return true;
1661     }
1662   }
1663 }
1664 
1665 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1666                            unsigned &Idx) {
1667   Token Tok;
1668   Tok.startToken();
1669   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1670   Tok.setLength(Record[Idx++]);
1671   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1672     Tok.setIdentifierInfo(II);
1673   Tok.setKind((tok::TokenKind)Record[Idx++]);
1674   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1675   return Tok;
1676 }
1677 
1678 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1679   BitstreamCursor &Stream = F.MacroCursor;
1680 
1681   // Keep track of where we are in the stream, then jump back there
1682   // after reading this macro.
1683   SavedStreamPosition SavedPosition(Stream);
1684 
1685   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1686     // FIXME this drops errors on the floor.
1687     consumeError(std::move(Err));
1688     return nullptr;
1689   }
1690   RecordData Record;
1691   SmallVector<IdentifierInfo*, 16> MacroParams;
1692   MacroInfo *Macro = nullptr;
1693 
1694   while (true) {
1695     // Advance to the next record, but if we get to the end of the block, don't
1696     // pop it (removing all the abbreviations from the cursor) since we want to
1697     // be able to reseek within the block and read entries.
1698     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1699     Expected<llvm::BitstreamEntry> MaybeEntry =
1700         Stream.advanceSkippingSubblocks(Flags);
1701     if (!MaybeEntry) {
1702       Error(MaybeEntry.takeError());
1703       return Macro;
1704     }
1705     llvm::BitstreamEntry Entry = MaybeEntry.get();
1706 
1707     switch (Entry.Kind) {
1708     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1709     case llvm::BitstreamEntry::Error:
1710       Error("malformed block record in AST file");
1711       return Macro;
1712     case llvm::BitstreamEntry::EndBlock:
1713       return Macro;
1714     case llvm::BitstreamEntry::Record:
1715       // The interesting case.
1716       break;
1717     }
1718 
1719     // Read a record.
1720     Record.clear();
1721     PreprocessorRecordTypes RecType;
1722     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1723       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1724     else {
1725       Error(MaybeRecType.takeError());
1726       return Macro;
1727     }
1728     switch (RecType) {
1729     case PP_MODULE_MACRO:
1730     case PP_MACRO_DIRECTIVE_HISTORY:
1731       return Macro;
1732 
1733     case PP_MACRO_OBJECT_LIKE:
1734     case PP_MACRO_FUNCTION_LIKE: {
1735       // If we already have a macro, that means that we've hit the end
1736       // of the definition of the macro we were looking for. We're
1737       // done.
1738       if (Macro)
1739         return Macro;
1740 
1741       unsigned NextIndex = 1; // Skip identifier ID.
1742       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1743       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1744       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1745       MI->setIsUsed(Record[NextIndex++]);
1746       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1747 
1748       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1749         // Decode function-like macro info.
1750         bool isC99VarArgs = Record[NextIndex++];
1751         bool isGNUVarArgs = Record[NextIndex++];
1752         bool hasCommaPasting = Record[NextIndex++];
1753         MacroParams.clear();
1754         unsigned NumArgs = Record[NextIndex++];
1755         for (unsigned i = 0; i != NumArgs; ++i)
1756           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1757 
1758         // Install function-like macro info.
1759         MI->setIsFunctionLike();
1760         if (isC99VarArgs) MI->setIsC99Varargs();
1761         if (isGNUVarArgs) MI->setIsGNUVarargs();
1762         if (hasCommaPasting) MI->setHasCommaPasting();
1763         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1764       }
1765 
1766       // Remember that we saw this macro last so that we add the tokens that
1767       // form its body to it.
1768       Macro = MI;
1769 
1770       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1771           Record[NextIndex]) {
1772         // We have a macro definition. Register the association
1773         PreprocessedEntityID
1774             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1775         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1776         PreprocessingRecord::PPEntityID PPID =
1777             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1778         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1779             PPRec.getPreprocessedEntity(PPID));
1780         if (PPDef)
1781           PPRec.RegisterMacroDefinition(Macro, PPDef);
1782       }
1783 
1784       ++NumMacrosRead;
1785       break;
1786     }
1787 
1788     case PP_TOKEN: {
1789       // If we see a TOKEN before a PP_MACRO_*, then the file is
1790       // erroneous, just pretend we didn't see this.
1791       if (!Macro) break;
1792 
1793       unsigned Idx = 0;
1794       Token Tok = ReadToken(F, Record, Idx);
1795       Macro->AddTokenToBody(Tok);
1796       break;
1797     }
1798     }
1799   }
1800 }
1801 
1802 PreprocessedEntityID
1803 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1804                                          unsigned LocalID) const {
1805   if (!M.ModuleOffsetMap.empty())
1806     ReadModuleOffsetMap(M);
1807 
1808   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1809     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1810   assert(I != M.PreprocessedEntityRemap.end()
1811          && "Invalid index into preprocessed entity index remap");
1812 
1813   return LocalID + I->second;
1814 }
1815 
1816 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1817   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1818 }
1819 
1820 HeaderFileInfoTrait::internal_key_type
1821 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1822   internal_key_type ikey = {FE->getSize(),
1823                             M.HasTimestamps ? FE->getModificationTime() : 0,
1824                             FE->getName(), /*Imported*/ false};
1825   return ikey;
1826 }
1827 
1828 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1829   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1830     return false;
1831 
1832   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1833     return true;
1834 
1835   // Determine whether the actual files are equivalent.
1836   FileManager &FileMgr = Reader.getFileManager();
1837   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1838     if (!Key.Imported) {
1839       if (auto File = FileMgr.getFile(Key.Filename))
1840         return *File;
1841       return nullptr;
1842     }
1843 
1844     std::string Resolved = std::string(Key.Filename);
1845     Reader.ResolveImportedPath(M, Resolved);
1846     if (auto File = FileMgr.getFile(Resolved))
1847       return *File;
1848     return nullptr;
1849   };
1850 
1851   const FileEntry *FEA = GetFile(a);
1852   const FileEntry *FEB = GetFile(b);
1853   return FEA && FEA == FEB;
1854 }
1855 
1856 std::pair<unsigned, unsigned>
1857 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1858   using namespace llvm::support;
1859 
1860   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1861   unsigned DataLen = (unsigned) *d++;
1862   return std::make_pair(KeyLen, DataLen);
1863 }
1864 
1865 HeaderFileInfoTrait::internal_key_type
1866 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1867   using namespace llvm::support;
1868 
1869   internal_key_type ikey;
1870   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1871   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1872   ikey.Filename = (const char *)d;
1873   ikey.Imported = true;
1874   return ikey;
1875 }
1876 
1877 HeaderFileInfoTrait::data_type
1878 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1879                               unsigned DataLen) {
1880   using namespace llvm::support;
1881 
1882   const unsigned char *End = d + DataLen;
1883   HeaderFileInfo HFI;
1884   unsigned Flags = *d++;
1885   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1886   HFI.isImport |= (Flags >> 5) & 0x01;
1887   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1888   HFI.DirInfo = (Flags >> 1) & 0x07;
1889   HFI.IndexHeaderMapHeader = Flags & 0x01;
1890   // FIXME: Find a better way to handle this. Maybe just store a
1891   // "has been included" flag?
1892   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1893                              HFI.NumIncludes);
1894   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1895       M, endian::readNext<uint32_t, little, unaligned>(d));
1896   if (unsigned FrameworkOffset =
1897           endian::readNext<uint32_t, little, unaligned>(d)) {
1898     // The framework offset is 1 greater than the actual offset,
1899     // since 0 is used as an indicator for "no framework name".
1900     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1901     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1902   }
1903 
1904   assert((End - d) % 4 == 0 &&
1905          "Wrong data length in HeaderFileInfo deserialization");
1906   while (d != End) {
1907     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1908     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1909     LocalSMID >>= 2;
1910 
1911     // This header is part of a module. Associate it with the module to enable
1912     // implicit module import.
1913     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1914     Module *Mod = Reader.getSubmodule(GlobalSMID);
1915     FileManager &FileMgr = Reader.getFileManager();
1916     ModuleMap &ModMap =
1917         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1918 
1919     std::string Filename = std::string(key.Filename);
1920     if (key.Imported)
1921       Reader.ResolveImportedPath(M, Filename);
1922     // FIXME: This is not always the right filename-as-written, but we're not
1923     // going to use this information to rebuild the module, so it doesn't make
1924     // a lot of difference.
1925     Module::Header H = {std::string(key.Filename), *FileMgr.getFile(Filename)};
1926     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1927     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1928   }
1929 
1930   // This HeaderFileInfo was externally loaded.
1931   HFI.External = true;
1932   HFI.IsValid = true;
1933   return HFI;
1934 }
1935 
1936 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1937                                 uint32_t MacroDirectivesOffset) {
1938   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1939   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1940 }
1941 
1942 void ASTReader::ReadDefinedMacros() {
1943   // Note that we are loading defined macros.
1944   Deserializing Macros(this);
1945 
1946   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1947     BitstreamCursor &MacroCursor = I.MacroCursor;
1948 
1949     // If there was no preprocessor block, skip this file.
1950     if (MacroCursor.getBitcodeBytes().empty())
1951       continue;
1952 
1953     BitstreamCursor Cursor = MacroCursor;
1954     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1955       Error(std::move(Err));
1956       return;
1957     }
1958 
1959     RecordData Record;
1960     while (true) {
1961       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1962       if (!MaybeE) {
1963         Error(MaybeE.takeError());
1964         return;
1965       }
1966       llvm::BitstreamEntry E = MaybeE.get();
1967 
1968       switch (E.Kind) {
1969       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1970       case llvm::BitstreamEntry::Error:
1971         Error("malformed block record in AST file");
1972         return;
1973       case llvm::BitstreamEntry::EndBlock:
1974         goto NextCursor;
1975 
1976       case llvm::BitstreamEntry::Record: {
1977         Record.clear();
1978         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1979         if (!MaybeRecord) {
1980           Error(MaybeRecord.takeError());
1981           return;
1982         }
1983         switch (MaybeRecord.get()) {
1984         default:  // Default behavior: ignore.
1985           break;
1986 
1987         case PP_MACRO_OBJECT_LIKE:
1988         case PP_MACRO_FUNCTION_LIKE: {
1989           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1990           if (II->isOutOfDate())
1991             updateOutOfDateIdentifier(*II);
1992           break;
1993         }
1994 
1995         case PP_TOKEN:
1996           // Ignore tokens.
1997           break;
1998         }
1999         break;
2000       }
2001       }
2002     }
2003     NextCursor:  ;
2004   }
2005 }
2006 
2007 namespace {
2008 
2009   /// Visitor class used to look up identifirs in an AST file.
2010   class IdentifierLookupVisitor {
2011     StringRef Name;
2012     unsigned NameHash;
2013     unsigned PriorGeneration;
2014     unsigned &NumIdentifierLookups;
2015     unsigned &NumIdentifierLookupHits;
2016     IdentifierInfo *Found = nullptr;
2017 
2018   public:
2019     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2020                             unsigned &NumIdentifierLookups,
2021                             unsigned &NumIdentifierLookupHits)
2022       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2023         PriorGeneration(PriorGeneration),
2024         NumIdentifierLookups(NumIdentifierLookups),
2025         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2026 
2027     bool operator()(ModuleFile &M) {
2028       // If we've already searched this module file, skip it now.
2029       if (M.Generation <= PriorGeneration)
2030         return true;
2031 
2032       ASTIdentifierLookupTable *IdTable
2033         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2034       if (!IdTable)
2035         return false;
2036 
2037       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2038                                      Found);
2039       ++NumIdentifierLookups;
2040       ASTIdentifierLookupTable::iterator Pos =
2041           IdTable->find_hashed(Name, NameHash, &Trait);
2042       if (Pos == IdTable->end())
2043         return false;
2044 
2045       // Dereferencing the iterator has the effect of building the
2046       // IdentifierInfo node and populating it with the various
2047       // declarations it needs.
2048       ++NumIdentifierLookupHits;
2049       Found = *Pos;
2050       return true;
2051     }
2052 
2053     // Retrieve the identifier info found within the module
2054     // files.
2055     IdentifierInfo *getIdentifierInfo() const { return Found; }
2056   };
2057 
2058 } // namespace
2059 
2060 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2061   // Note that we are loading an identifier.
2062   Deserializing AnIdentifier(this);
2063 
2064   unsigned PriorGeneration = 0;
2065   if (getContext().getLangOpts().Modules)
2066     PriorGeneration = IdentifierGeneration[&II];
2067 
2068   // If there is a global index, look there first to determine which modules
2069   // provably do not have any results for this identifier.
2070   GlobalModuleIndex::HitSet Hits;
2071   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2072   if (!loadGlobalIndex()) {
2073     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2074       HitsPtr = &Hits;
2075     }
2076   }
2077 
2078   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2079                                   NumIdentifierLookups,
2080                                   NumIdentifierLookupHits);
2081   ModuleMgr.visit(Visitor, HitsPtr);
2082   markIdentifierUpToDate(&II);
2083 }
2084 
2085 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2086   if (!II)
2087     return;
2088 
2089   II->setOutOfDate(false);
2090 
2091   // Update the generation for this identifier.
2092   if (getContext().getLangOpts().Modules)
2093     IdentifierGeneration[II] = getGeneration();
2094 }
2095 
2096 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2097                                     const PendingMacroInfo &PMInfo) {
2098   ModuleFile &M = *PMInfo.M;
2099 
2100   BitstreamCursor &Cursor = M.MacroCursor;
2101   SavedStreamPosition SavedPosition(Cursor);
2102   if (llvm::Error Err =
2103           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2104     Error(std::move(Err));
2105     return;
2106   }
2107 
2108   struct ModuleMacroRecord {
2109     SubmoduleID SubModID;
2110     MacroInfo *MI;
2111     SmallVector<SubmoduleID, 8> Overrides;
2112   };
2113   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2114 
2115   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2116   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2117   // macro histroy.
2118   RecordData Record;
2119   while (true) {
2120     Expected<llvm::BitstreamEntry> MaybeEntry =
2121         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2122     if (!MaybeEntry) {
2123       Error(MaybeEntry.takeError());
2124       return;
2125     }
2126     llvm::BitstreamEntry Entry = MaybeEntry.get();
2127 
2128     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2129       Error("malformed block record in AST file");
2130       return;
2131     }
2132 
2133     Record.clear();
2134     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2135     if (!MaybePP) {
2136       Error(MaybePP.takeError());
2137       return;
2138     }
2139     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2140     case PP_MACRO_DIRECTIVE_HISTORY:
2141       break;
2142 
2143     case PP_MODULE_MACRO: {
2144       ModuleMacros.push_back(ModuleMacroRecord());
2145       auto &Info = ModuleMacros.back();
2146       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2147       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2148       for (int I = 2, N = Record.size(); I != N; ++I)
2149         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2150       continue;
2151     }
2152 
2153     default:
2154       Error("malformed block record in AST file");
2155       return;
2156     }
2157 
2158     // We found the macro directive history; that's the last record
2159     // for this macro.
2160     break;
2161   }
2162 
2163   // Module macros are listed in reverse dependency order.
2164   {
2165     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2166     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2167     for (auto &MMR : ModuleMacros) {
2168       Overrides.clear();
2169       for (unsigned ModID : MMR.Overrides) {
2170         Module *Mod = getSubmodule(ModID);
2171         auto *Macro = PP.getModuleMacro(Mod, II);
2172         assert(Macro && "missing definition for overridden macro");
2173         Overrides.push_back(Macro);
2174       }
2175 
2176       bool Inserted = false;
2177       Module *Owner = getSubmodule(MMR.SubModID);
2178       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2179     }
2180   }
2181 
2182   // Don't read the directive history for a module; we don't have anywhere
2183   // to put it.
2184   if (M.isModule())
2185     return;
2186 
2187   // Deserialize the macro directives history in reverse source-order.
2188   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2189   unsigned Idx = 0, N = Record.size();
2190   while (Idx < N) {
2191     MacroDirective *MD = nullptr;
2192     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2193     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2194     switch (K) {
2195     case MacroDirective::MD_Define: {
2196       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2197       MD = PP.AllocateDefMacroDirective(MI, Loc);
2198       break;
2199     }
2200     case MacroDirective::MD_Undefine:
2201       MD = PP.AllocateUndefMacroDirective(Loc);
2202       break;
2203     case MacroDirective::MD_Visibility:
2204       bool isPublic = Record[Idx++];
2205       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2206       break;
2207     }
2208 
2209     if (!Latest)
2210       Latest = MD;
2211     if (Earliest)
2212       Earliest->setPrevious(MD);
2213     Earliest = MD;
2214   }
2215 
2216   if (Latest)
2217     PP.setLoadedMacroDirective(II, Earliest, Latest);
2218 }
2219 
2220 ASTReader::InputFileInfo
2221 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2222   // Go find this input file.
2223   BitstreamCursor &Cursor = F.InputFilesCursor;
2224   SavedStreamPosition SavedPosition(Cursor);
2225   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2226     // FIXME this drops errors on the floor.
2227     consumeError(std::move(Err));
2228   }
2229 
2230   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2231   if (!MaybeCode) {
2232     // FIXME this drops errors on the floor.
2233     consumeError(MaybeCode.takeError());
2234   }
2235   unsigned Code = MaybeCode.get();
2236   RecordData Record;
2237   StringRef Blob;
2238 
2239   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2240     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2241            "invalid record type for input file");
2242   else {
2243     // FIXME this drops errors on the floor.
2244     consumeError(Maybe.takeError());
2245   }
2246 
2247   assert(Record[0] == ID && "Bogus stored ID or offset");
2248   InputFileInfo R;
2249   R.StoredSize = static_cast<off_t>(Record[1]);
2250   R.StoredTime = static_cast<time_t>(Record[2]);
2251   R.Overridden = static_cast<bool>(Record[3]);
2252   R.Transient = static_cast<bool>(Record[4]);
2253   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2254   R.Filename = std::string(Blob);
2255   ResolveImportedPath(F, R.Filename);
2256 
2257   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2258   if (!MaybeEntry) // FIXME this drops errors on the floor.
2259     consumeError(MaybeEntry.takeError());
2260   llvm::BitstreamEntry Entry = MaybeEntry.get();
2261   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2262          "expected record type for input file hash");
2263 
2264   Record.clear();
2265   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2266     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2267            "invalid record type for input file hash");
2268   else {
2269     // FIXME this drops errors on the floor.
2270     consumeError(Maybe.takeError());
2271   }
2272   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2273                   static_cast<uint64_t>(Record[0]);
2274   return R;
2275 }
2276 
2277 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2278 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2279   // If this ID is bogus, just return an empty input file.
2280   if (ID == 0 || ID > F.InputFilesLoaded.size())
2281     return InputFile();
2282 
2283   // If we've already loaded this input file, return it.
2284   if (F.InputFilesLoaded[ID-1].getFile())
2285     return F.InputFilesLoaded[ID-1];
2286 
2287   if (F.InputFilesLoaded[ID-1].isNotFound())
2288     return InputFile();
2289 
2290   // Go find this input file.
2291   BitstreamCursor &Cursor = F.InputFilesCursor;
2292   SavedStreamPosition SavedPosition(Cursor);
2293   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2294     // FIXME this drops errors on the floor.
2295     consumeError(std::move(Err));
2296   }
2297 
2298   InputFileInfo FI = readInputFileInfo(F, ID);
2299   off_t StoredSize = FI.StoredSize;
2300   time_t StoredTime = FI.StoredTime;
2301   bool Overridden = FI.Overridden;
2302   bool Transient = FI.Transient;
2303   StringRef Filename = FI.Filename;
2304   uint64_t StoredContentHash = FI.ContentHash;
2305 
2306   const FileEntry *File = nullptr;
2307   if (auto FE = FileMgr.getFile(Filename, /*OpenFile=*/false))
2308     File = *FE;
2309 
2310   // If we didn't find the file, resolve it relative to the
2311   // original directory from which this AST file was created.
2312   if (File == nullptr && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2313       F.OriginalDir != F.BaseDirectory) {
2314     std::string Resolved = resolveFileRelativeToOriginalDir(
2315         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2316     if (!Resolved.empty())
2317       if (auto FE = FileMgr.getFile(Resolved))
2318         File = *FE;
2319   }
2320 
2321   // For an overridden file, create a virtual file with the stored
2322   // size/timestamp.
2323   if ((Overridden || Transient) && File == nullptr)
2324     File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
2325 
2326   if (File == nullptr) {
2327     if (Complain) {
2328       std::string ErrorStr = "could not find file '";
2329       ErrorStr += Filename;
2330       ErrorStr += "' referenced by AST file '";
2331       ErrorStr += F.FileName;
2332       ErrorStr += "'";
2333       Error(ErrorStr);
2334     }
2335     // Record that we didn't find the file.
2336     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2337     return InputFile();
2338   }
2339 
2340   // Check if there was a request to override the contents of the file
2341   // that was part of the precompiled header. Overriding such a file
2342   // can lead to problems when lexing using the source locations from the
2343   // PCH.
2344   SourceManager &SM = getSourceManager();
2345   // FIXME: Reject if the overrides are different.
2346   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2347     if (Complain)
2348       Error(diag::err_fe_pch_file_overridden, Filename);
2349 
2350     // After emitting the diagnostic, bypass the overriding file to recover
2351     // (this creates a separate FileEntry).
2352     File = SM.bypassFileContentsOverride(*File);
2353     if (!File) {
2354       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2355       return InputFile();
2356     }
2357   }
2358 
2359   enum ModificationType {
2360     Size,
2361     ModTime,
2362     Content,
2363     None,
2364   };
2365   auto HasInputFileChanged = [&]() {
2366     if (StoredSize != File->getSize())
2367       return ModificationType::Size;
2368     if (!DisableValidation && StoredTime &&
2369         StoredTime != File->getModificationTime()) {
2370       // In case the modification time changes but not the content,
2371       // accept the cached file as legit.
2372       if (ValidateASTInputFilesContent &&
2373           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2374         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2375         if (!MemBuffOrError) {
2376           if (!Complain)
2377             return ModificationType::ModTime;
2378           std::string ErrorStr = "could not get buffer for file '";
2379           ErrorStr += File->getName();
2380           ErrorStr += "'";
2381           Error(ErrorStr);
2382           return ModificationType::ModTime;
2383         }
2384 
2385         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2386         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2387           return ModificationType::None;
2388         return ModificationType::Content;
2389       }
2390       return ModificationType::ModTime;
2391     }
2392     return ModificationType::None;
2393   };
2394 
2395   bool IsOutOfDate = false;
2396   auto FileChange = HasInputFileChanged();
2397   // For an overridden file, there is nothing to validate.
2398   if (!Overridden && FileChange != ModificationType::None) {
2399     if (Complain) {
2400       // Build a list of the PCH imports that got us here (in reverse).
2401       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2402       while (!ImportStack.back()->ImportedBy.empty())
2403         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2404 
2405       // The top-level PCH is stale.
2406       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2407       unsigned DiagnosticKind =
2408           moduleKindForDiagnostic(ImportStack.back()->Kind);
2409       if (DiagnosticKind == 0)
2410         Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName,
2411               (unsigned)FileChange);
2412       else if (DiagnosticKind == 1)
2413         Error(diag::err_fe_module_file_modified, Filename, TopLevelPCHName,
2414               (unsigned)FileChange);
2415       else
2416         Error(diag::err_fe_ast_file_modified, Filename, TopLevelPCHName,
2417               (unsigned)FileChange);
2418 
2419       // Print the import stack.
2420       if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) {
2421         Diag(diag::note_pch_required_by)
2422           << Filename << ImportStack[0]->FileName;
2423         for (unsigned I = 1; I < ImportStack.size(); ++I)
2424           Diag(diag::note_pch_required_by)
2425             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2426       }
2427 
2428       if (!Diags.isDiagnosticInFlight())
2429         Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2430     }
2431 
2432     IsOutOfDate = true;
2433   }
2434   // FIXME: If the file is overridden and we've already opened it,
2435   // issue an error (or split it into a separate FileEntry).
2436 
2437   InputFile IF = InputFile(File, Overridden || Transient, IsOutOfDate);
2438 
2439   // Note that we've loaded this input file.
2440   F.InputFilesLoaded[ID-1] = IF;
2441   return IF;
2442 }
2443 
2444 /// If we are loading a relocatable PCH or module file, and the filename
2445 /// is not an absolute path, add the system or module root to the beginning of
2446 /// the file name.
2447 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2448   // Resolve relative to the base directory, if we have one.
2449   if (!M.BaseDirectory.empty())
2450     return ResolveImportedPath(Filename, M.BaseDirectory);
2451 }
2452 
2453 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2454   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2455     return;
2456 
2457   SmallString<128> Buffer;
2458   llvm::sys::path::append(Buffer, Prefix, Filename);
2459   Filename.assign(Buffer.begin(), Buffer.end());
2460 }
2461 
2462 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2463   switch (ARR) {
2464   case ASTReader::Failure: return true;
2465   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2466   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2467   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2468   case ASTReader::ConfigurationMismatch:
2469     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2470   case ASTReader::HadErrors: return true;
2471   case ASTReader::Success: return false;
2472   }
2473 
2474   llvm_unreachable("unknown ASTReadResult");
2475 }
2476 
2477 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2478     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2479     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2480     std::string &SuggestedPredefines) {
2481   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2482     // FIXME this drops errors on the floor.
2483     consumeError(std::move(Err));
2484     return Failure;
2485   }
2486 
2487   // Read all of the records in the options block.
2488   RecordData Record;
2489   ASTReadResult Result = Success;
2490   while (true) {
2491     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2492     if (!MaybeEntry) {
2493       // FIXME this drops errors on the floor.
2494       consumeError(MaybeEntry.takeError());
2495       return Failure;
2496     }
2497     llvm::BitstreamEntry Entry = MaybeEntry.get();
2498 
2499     switch (Entry.Kind) {
2500     case llvm::BitstreamEntry::Error:
2501     case llvm::BitstreamEntry::SubBlock:
2502       return Failure;
2503 
2504     case llvm::BitstreamEntry::EndBlock:
2505       return Result;
2506 
2507     case llvm::BitstreamEntry::Record:
2508       // The interesting case.
2509       break;
2510     }
2511 
2512     // Read and process a record.
2513     Record.clear();
2514     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2515     if (!MaybeRecordType) {
2516       // FIXME this drops errors on the floor.
2517       consumeError(MaybeRecordType.takeError());
2518       return Failure;
2519     }
2520     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2521     case LANGUAGE_OPTIONS: {
2522       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2523       if (ParseLanguageOptions(Record, Complain, Listener,
2524                                AllowCompatibleConfigurationMismatch))
2525         Result = ConfigurationMismatch;
2526       break;
2527     }
2528 
2529     case TARGET_OPTIONS: {
2530       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2531       if (ParseTargetOptions(Record, Complain, Listener,
2532                              AllowCompatibleConfigurationMismatch))
2533         Result = ConfigurationMismatch;
2534       break;
2535     }
2536 
2537     case FILE_SYSTEM_OPTIONS: {
2538       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2539       if (!AllowCompatibleConfigurationMismatch &&
2540           ParseFileSystemOptions(Record, Complain, Listener))
2541         Result = ConfigurationMismatch;
2542       break;
2543     }
2544 
2545     case HEADER_SEARCH_OPTIONS: {
2546       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2547       if (!AllowCompatibleConfigurationMismatch &&
2548           ParseHeaderSearchOptions(Record, Complain, Listener))
2549         Result = ConfigurationMismatch;
2550       break;
2551     }
2552 
2553     case PREPROCESSOR_OPTIONS:
2554       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2555       if (!AllowCompatibleConfigurationMismatch &&
2556           ParsePreprocessorOptions(Record, Complain, Listener,
2557                                    SuggestedPredefines))
2558         Result = ConfigurationMismatch;
2559       break;
2560     }
2561   }
2562 }
2563 
2564 ASTReader::ASTReadResult
2565 ASTReader::ReadControlBlock(ModuleFile &F,
2566                             SmallVectorImpl<ImportedModule> &Loaded,
2567                             const ModuleFile *ImportedBy,
2568                             unsigned ClientLoadCapabilities) {
2569   BitstreamCursor &Stream = F.Stream;
2570 
2571   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2572     Error(std::move(Err));
2573     return Failure;
2574   }
2575 
2576   // Lambda to read the unhashed control block the first time it's called.
2577   //
2578   // For PCM files, the unhashed control block cannot be read until after the
2579   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2580   // need to look ahead before reading the IMPORTS record.  For consistency,
2581   // this block is always read somehow (see BitstreamEntry::EndBlock).
2582   bool HasReadUnhashedControlBlock = false;
2583   auto readUnhashedControlBlockOnce = [&]() {
2584     if (!HasReadUnhashedControlBlock) {
2585       HasReadUnhashedControlBlock = true;
2586       if (ASTReadResult Result =
2587               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2588         return Result;
2589     }
2590     return Success;
2591   };
2592 
2593   // Read all of the records and blocks in the control block.
2594   RecordData Record;
2595   unsigned NumInputs = 0;
2596   unsigned NumUserInputs = 0;
2597   StringRef BaseDirectoryAsWritten;
2598   while (true) {
2599     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2600     if (!MaybeEntry) {
2601       Error(MaybeEntry.takeError());
2602       return Failure;
2603     }
2604     llvm::BitstreamEntry Entry = MaybeEntry.get();
2605 
2606     switch (Entry.Kind) {
2607     case llvm::BitstreamEntry::Error:
2608       Error("malformed block record in AST file");
2609       return Failure;
2610     case llvm::BitstreamEntry::EndBlock: {
2611       // Validate the module before returning.  This call catches an AST with
2612       // no module name and no imports.
2613       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2614         return Result;
2615 
2616       // Validate input files.
2617       const HeaderSearchOptions &HSOpts =
2618           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2619 
2620       // All user input files reside at the index range [0, NumUserInputs), and
2621       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2622       // loaded module files, ignore missing inputs.
2623       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2624           F.Kind != MK_PrebuiltModule) {
2625         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2626 
2627         // If we are reading a module, we will create a verification timestamp,
2628         // so we verify all input files.  Otherwise, verify only user input
2629         // files.
2630 
2631         unsigned N = NumUserInputs;
2632         if (ValidateSystemInputs ||
2633             (HSOpts.ModulesValidateOncePerBuildSession &&
2634              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2635              F.Kind == MK_ImplicitModule))
2636           N = NumInputs;
2637 
2638         for (unsigned I = 0; I < N; ++I) {
2639           InputFile IF = getInputFile(F, I+1, Complain);
2640           if (!IF.getFile() || IF.isOutOfDate())
2641             return OutOfDate;
2642         }
2643       }
2644 
2645       if (Listener)
2646         Listener->visitModuleFile(F.FileName, F.Kind);
2647 
2648       if (Listener && Listener->needsInputFileVisitation()) {
2649         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2650                                                                 : NumUserInputs;
2651         for (unsigned I = 0; I < N; ++I) {
2652           bool IsSystem = I >= NumUserInputs;
2653           InputFileInfo FI = readInputFileInfo(F, I+1);
2654           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2655                                    F.Kind == MK_ExplicitModule ||
2656                                    F.Kind == MK_PrebuiltModule);
2657         }
2658       }
2659 
2660       return Success;
2661     }
2662 
2663     case llvm::BitstreamEntry::SubBlock:
2664       switch (Entry.ID) {
2665       case INPUT_FILES_BLOCK_ID:
2666         F.InputFilesCursor = Stream;
2667         if (llvm::Error Err = Stream.SkipBlock()) {
2668           Error(std::move(Err));
2669           return Failure;
2670         }
2671         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2672           Error("malformed block record in AST file");
2673           return Failure;
2674         }
2675         continue;
2676 
2677       case OPTIONS_BLOCK_ID:
2678         // If we're reading the first module for this group, check its options
2679         // are compatible with ours. For modules it imports, no further checking
2680         // is required, because we checked them when we built it.
2681         if (Listener && !ImportedBy) {
2682           // Should we allow the configuration of the module file to differ from
2683           // the configuration of the current translation unit in a compatible
2684           // way?
2685           //
2686           // FIXME: Allow this for files explicitly specified with -include-pch.
2687           bool AllowCompatibleConfigurationMismatch =
2688               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2689 
2690           ASTReadResult Result =
2691               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2692                                AllowCompatibleConfigurationMismatch, *Listener,
2693                                SuggestedPredefines);
2694           if (Result == Failure) {
2695             Error("malformed block record in AST file");
2696             return Result;
2697           }
2698 
2699           if (DisableValidation ||
2700               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2701             Result = Success;
2702 
2703           // If we can't load the module, exit early since we likely
2704           // will rebuild the module anyway. The stream may be in the
2705           // middle of a block.
2706           if (Result != Success)
2707             return Result;
2708         } else if (llvm::Error Err = Stream.SkipBlock()) {
2709           Error(std::move(Err));
2710           return Failure;
2711         }
2712         continue;
2713 
2714       default:
2715         if (llvm::Error Err = Stream.SkipBlock()) {
2716           Error(std::move(Err));
2717           return Failure;
2718         }
2719         continue;
2720       }
2721 
2722     case llvm::BitstreamEntry::Record:
2723       // The interesting case.
2724       break;
2725     }
2726 
2727     // Read and process a record.
2728     Record.clear();
2729     StringRef Blob;
2730     Expected<unsigned> MaybeRecordType =
2731         Stream.readRecord(Entry.ID, Record, &Blob);
2732     if (!MaybeRecordType) {
2733       Error(MaybeRecordType.takeError());
2734       return Failure;
2735     }
2736     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2737     case METADATA: {
2738       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2739         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2740           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2741                                         : diag::err_pch_version_too_new);
2742         return VersionMismatch;
2743       }
2744 
2745       bool hasErrors = Record[7];
2746       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2747         Diag(diag::err_pch_with_compiler_errors);
2748         return HadErrors;
2749       }
2750       if (hasErrors) {
2751         Diags.ErrorOccurred = true;
2752         Diags.UncompilableErrorOccurred = true;
2753         Diags.UnrecoverableErrorOccurred = true;
2754       }
2755 
2756       F.RelocatablePCH = Record[4];
2757       // Relative paths in a relocatable PCH are relative to our sysroot.
2758       if (F.RelocatablePCH)
2759         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2760 
2761       F.HasTimestamps = Record[5];
2762 
2763       F.PCHHasObjectFile = Record[6];
2764 
2765       const std::string &CurBranch = getClangFullRepositoryVersion();
2766       StringRef ASTBranch = Blob;
2767       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2768         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2769           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2770         return VersionMismatch;
2771       }
2772       break;
2773     }
2774 
2775     case IMPORTS: {
2776       // Validate the AST before processing any imports (otherwise, untangling
2777       // them can be error-prone and expensive).  A module will have a name and
2778       // will already have been validated, but this catches the PCH case.
2779       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2780         return Result;
2781 
2782       // Load each of the imported PCH files.
2783       unsigned Idx = 0, N = Record.size();
2784       while (Idx < N) {
2785         // Read information about the AST file.
2786         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2787         // The import location will be the local one for now; we will adjust
2788         // all import locations of module imports after the global source
2789         // location info are setup, in ReadAST.
2790         SourceLocation ImportLoc =
2791             ReadUntranslatedSourceLocation(Record[Idx++]);
2792         off_t StoredSize = (off_t)Record[Idx++];
2793         time_t StoredModTime = (time_t)Record[Idx++];
2794         ASTFileSignature StoredSignature = {
2795             {{(uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2796               (uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2797               (uint32_t)Record[Idx++]}}};
2798 
2799         std::string ImportedName = ReadString(Record, Idx);
2800         std::string ImportedFile;
2801 
2802         // For prebuilt and explicit modules first consult the file map for
2803         // an override. Note that here we don't search prebuilt module
2804         // directories, only the explicit name to file mappings. Also, we will
2805         // still verify the size/signature making sure it is essentially the
2806         // same file but perhaps in a different location.
2807         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2808           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2809             ImportedName, /*FileMapOnly*/ true);
2810 
2811         if (ImportedFile.empty())
2812           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2813           // ModuleCache as when writing.
2814           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2815         else
2816           SkipPath(Record, Idx);
2817 
2818         // If our client can't cope with us being out of date, we can't cope with
2819         // our dependency being missing.
2820         unsigned Capabilities = ClientLoadCapabilities;
2821         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2822           Capabilities &= ~ARR_Missing;
2823 
2824         // Load the AST file.
2825         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2826                                   Loaded, StoredSize, StoredModTime,
2827                                   StoredSignature, Capabilities);
2828 
2829         // If we diagnosed a problem, produce a backtrace.
2830         if (isDiagnosedResult(Result, Capabilities))
2831           Diag(diag::note_module_file_imported_by)
2832               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2833 
2834         switch (Result) {
2835         case Failure: return Failure;
2836           // If we have to ignore the dependency, we'll have to ignore this too.
2837         case Missing:
2838         case OutOfDate: return OutOfDate;
2839         case VersionMismatch: return VersionMismatch;
2840         case ConfigurationMismatch: return ConfigurationMismatch;
2841         case HadErrors: return HadErrors;
2842         case Success: break;
2843         }
2844       }
2845       break;
2846     }
2847 
2848     case ORIGINAL_FILE:
2849       F.OriginalSourceFileID = FileID::get(Record[0]);
2850       F.ActualOriginalSourceFileName = std::string(Blob);
2851       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2852       ResolveImportedPath(F, F.OriginalSourceFileName);
2853       break;
2854 
2855     case ORIGINAL_FILE_ID:
2856       F.OriginalSourceFileID = FileID::get(Record[0]);
2857       break;
2858 
2859     case ORIGINAL_PCH_DIR:
2860       F.OriginalDir = std::string(Blob);
2861       break;
2862 
2863     case MODULE_NAME:
2864       F.ModuleName = std::string(Blob);
2865       Diag(diag::remark_module_import)
2866           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2867           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2868       if (Listener)
2869         Listener->ReadModuleName(F.ModuleName);
2870 
2871       // Validate the AST as soon as we have a name so we can exit early on
2872       // failure.
2873       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2874         return Result;
2875 
2876       break;
2877 
2878     case MODULE_DIRECTORY: {
2879       // Save the BaseDirectory as written in the PCM for computing the module
2880       // filename for the ModuleCache.
2881       BaseDirectoryAsWritten = Blob;
2882       assert(!F.ModuleName.empty() &&
2883              "MODULE_DIRECTORY found before MODULE_NAME");
2884       // If we've already loaded a module map file covering this module, we may
2885       // have a better path for it (relative to the current build).
2886       Module *M = PP.getHeaderSearchInfo().lookupModule(
2887           F.ModuleName, /*AllowSearch*/ true,
2888           /*AllowExtraModuleMapSearch*/ true);
2889       if (M && M->Directory) {
2890         // If we're implicitly loading a module, the base directory can't
2891         // change between the build and use.
2892         // Don't emit module relocation error if we have -fno-validate-pch
2893         if (!PP.getPreprocessorOpts().DisablePCHValidation &&
2894             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2895           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2896           if (!BuildDir || *BuildDir != M->Directory) {
2897             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2898               Diag(diag::err_imported_module_relocated)
2899                   << F.ModuleName << Blob << M->Directory->getName();
2900             return OutOfDate;
2901           }
2902         }
2903         F.BaseDirectory = std::string(M->Directory->getName());
2904       } else {
2905         F.BaseDirectory = std::string(Blob);
2906       }
2907       break;
2908     }
2909 
2910     case MODULE_MAP_FILE:
2911       if (ASTReadResult Result =
2912               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2913         return Result;
2914       break;
2915 
2916     case INPUT_FILE_OFFSETS:
2917       NumInputs = Record[0];
2918       NumUserInputs = Record[1];
2919       F.InputFileOffsets =
2920           (const llvm::support::unaligned_uint64_t *)Blob.data();
2921       F.InputFilesLoaded.resize(NumInputs);
2922       F.NumUserInputFiles = NumUserInputs;
2923       break;
2924     }
2925   }
2926 }
2927 
2928 ASTReader::ASTReadResult
2929 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2930   BitstreamCursor &Stream = F.Stream;
2931 
2932   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2933     Error(std::move(Err));
2934     return Failure;
2935   }
2936 
2937   // Read all of the records and blocks for the AST file.
2938   RecordData Record;
2939   while (true) {
2940     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2941     if (!MaybeEntry) {
2942       Error(MaybeEntry.takeError());
2943       return Failure;
2944     }
2945     llvm::BitstreamEntry Entry = MaybeEntry.get();
2946 
2947     switch (Entry.Kind) {
2948     case llvm::BitstreamEntry::Error:
2949       Error("error at end of module block in AST file");
2950       return Failure;
2951     case llvm::BitstreamEntry::EndBlock:
2952       // Outside of C++, we do not store a lookup map for the translation unit.
2953       // Instead, mark it as needing a lookup map to be built if this module
2954       // contains any declarations lexically within it (which it always does!).
2955       // This usually has no cost, since we very rarely need the lookup map for
2956       // the translation unit outside C++.
2957       if (ASTContext *Ctx = ContextObj) {
2958         DeclContext *DC = Ctx->getTranslationUnitDecl();
2959         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2960           DC->setMustBuildLookupTable();
2961       }
2962 
2963       return Success;
2964     case llvm::BitstreamEntry::SubBlock:
2965       switch (Entry.ID) {
2966       case DECLTYPES_BLOCK_ID:
2967         // We lazily load the decls block, but we want to set up the
2968         // DeclsCursor cursor to point into it.  Clone our current bitcode
2969         // cursor to it, enter the block and read the abbrevs in that block.
2970         // With the main cursor, we just skip over it.
2971         F.DeclsCursor = Stream;
2972         if (llvm::Error Err = Stream.SkipBlock()) {
2973           Error(std::move(Err));
2974           return Failure;
2975         }
2976         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
2977           Error("malformed block record in AST file");
2978           return Failure;
2979         }
2980         break;
2981 
2982       case PREPROCESSOR_BLOCK_ID:
2983         F.MacroCursor = Stream;
2984         if (!PP.getExternalSource())
2985           PP.setExternalSource(this);
2986 
2987         if (llvm::Error Err = Stream.SkipBlock()) {
2988           Error(std::move(Err));
2989           return Failure;
2990         }
2991         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2992           Error("malformed block record in AST file");
2993           return Failure;
2994         }
2995         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
2996         break;
2997 
2998       case PREPROCESSOR_DETAIL_BLOCK_ID:
2999         F.PreprocessorDetailCursor = Stream;
3000 
3001         if (llvm::Error Err = Stream.SkipBlock()) {
3002           Error(std::move(Err));
3003           return Failure;
3004         }
3005         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3006                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3007           Error("malformed preprocessor detail record in AST file");
3008           return Failure;
3009         }
3010         F.PreprocessorDetailStartOffset
3011         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3012 
3013         if (!PP.getPreprocessingRecord())
3014           PP.createPreprocessingRecord();
3015         if (!PP.getPreprocessingRecord()->getExternalSource())
3016           PP.getPreprocessingRecord()->SetExternalSource(*this);
3017         break;
3018 
3019       case SOURCE_MANAGER_BLOCK_ID:
3020         if (ReadSourceManagerBlock(F))
3021           return Failure;
3022         break;
3023 
3024       case SUBMODULE_BLOCK_ID:
3025         if (ASTReadResult Result =
3026                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3027           return Result;
3028         break;
3029 
3030       case COMMENTS_BLOCK_ID: {
3031         BitstreamCursor C = Stream;
3032 
3033         if (llvm::Error Err = Stream.SkipBlock()) {
3034           Error(std::move(Err));
3035           return Failure;
3036         }
3037         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3038           Error("malformed comments block in AST file");
3039           return Failure;
3040         }
3041         CommentsCursors.push_back(std::make_pair(C, &F));
3042         break;
3043       }
3044 
3045       default:
3046         if (llvm::Error Err = Stream.SkipBlock()) {
3047           Error(std::move(Err));
3048           return Failure;
3049         }
3050         break;
3051       }
3052       continue;
3053 
3054     case llvm::BitstreamEntry::Record:
3055       // The interesting case.
3056       break;
3057     }
3058 
3059     // Read and process a record.
3060     Record.clear();
3061     StringRef Blob;
3062     Expected<unsigned> MaybeRecordType =
3063         Stream.readRecord(Entry.ID, Record, &Blob);
3064     if (!MaybeRecordType) {
3065       Error(MaybeRecordType.takeError());
3066       return Failure;
3067     }
3068     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3069 
3070     // If we're not loading an AST context, we don't care about most records.
3071     if (!ContextObj) {
3072       switch (RecordType) {
3073       case IDENTIFIER_TABLE:
3074       case IDENTIFIER_OFFSET:
3075       case INTERESTING_IDENTIFIERS:
3076       case STATISTICS:
3077       case PP_CONDITIONAL_STACK:
3078       case PP_COUNTER_VALUE:
3079       case SOURCE_LOCATION_OFFSETS:
3080       case MODULE_OFFSET_MAP:
3081       case SOURCE_MANAGER_LINE_TABLE:
3082       case SOURCE_LOCATION_PRELOADS:
3083       case PPD_ENTITIES_OFFSETS:
3084       case HEADER_SEARCH_TABLE:
3085       case IMPORTED_MODULES:
3086       case MACRO_OFFSET:
3087         break;
3088       default:
3089         continue;
3090       }
3091     }
3092 
3093     switch (RecordType) {
3094     default:  // Default behavior: ignore.
3095       break;
3096 
3097     case TYPE_OFFSET: {
3098       if (F.LocalNumTypes != 0) {
3099         Error("duplicate TYPE_OFFSET record in AST file");
3100         return Failure;
3101       }
3102       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3103       F.LocalNumTypes = Record[0];
3104       unsigned LocalBaseTypeIndex = Record[1];
3105       F.BaseTypeIndex = getTotalNumTypes();
3106 
3107       if (F.LocalNumTypes > 0) {
3108         // Introduce the global -> local mapping for types within this module.
3109         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3110 
3111         // Introduce the local -> global mapping for types within this module.
3112         F.TypeRemap.insertOrReplace(
3113           std::make_pair(LocalBaseTypeIndex,
3114                          F.BaseTypeIndex - LocalBaseTypeIndex));
3115 
3116         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3117       }
3118       break;
3119     }
3120 
3121     case DECL_OFFSET: {
3122       if (F.LocalNumDecls != 0) {
3123         Error("duplicate DECL_OFFSET record in AST file");
3124         return Failure;
3125       }
3126       F.DeclOffsets = (const DeclOffset *)Blob.data();
3127       F.LocalNumDecls = Record[0];
3128       unsigned LocalBaseDeclID = Record[1];
3129       F.BaseDeclID = getTotalNumDecls();
3130 
3131       if (F.LocalNumDecls > 0) {
3132         // Introduce the global -> local mapping for declarations within this
3133         // module.
3134         GlobalDeclMap.insert(
3135           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3136 
3137         // Introduce the local -> global mapping for declarations within this
3138         // module.
3139         F.DeclRemap.insertOrReplace(
3140           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3141 
3142         // Introduce the global -> local mapping for declarations within this
3143         // module.
3144         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3145 
3146         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3147       }
3148       break;
3149     }
3150 
3151     case TU_UPDATE_LEXICAL: {
3152       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3153       LexicalContents Contents(
3154           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3155               Blob.data()),
3156           static_cast<unsigned int>(Blob.size() / 4));
3157       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3158       TU->setHasExternalLexicalStorage(true);
3159       break;
3160     }
3161 
3162     case UPDATE_VISIBLE: {
3163       unsigned Idx = 0;
3164       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3165       auto *Data = (const unsigned char*)Blob.data();
3166       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3167       // If we've already loaded the decl, perform the updates when we finish
3168       // loading this block.
3169       if (Decl *D = GetExistingDecl(ID))
3170         PendingUpdateRecords.push_back(
3171             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3172       break;
3173     }
3174 
3175     case IDENTIFIER_TABLE:
3176       F.IdentifierTableData = Blob.data();
3177       if (Record[0]) {
3178         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3179             (const unsigned char *)F.IdentifierTableData + Record[0],
3180             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
3181             (const unsigned char *)F.IdentifierTableData,
3182             ASTIdentifierLookupTrait(*this, F));
3183 
3184         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3185       }
3186       break;
3187 
3188     case IDENTIFIER_OFFSET: {
3189       if (F.LocalNumIdentifiers != 0) {
3190         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3191         return Failure;
3192       }
3193       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3194       F.LocalNumIdentifiers = Record[0];
3195       unsigned LocalBaseIdentifierID = Record[1];
3196       F.BaseIdentifierID = getTotalNumIdentifiers();
3197 
3198       if (F.LocalNumIdentifiers > 0) {
3199         // Introduce the global -> local mapping for identifiers within this
3200         // module.
3201         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3202                                                   &F));
3203 
3204         // Introduce the local -> global mapping for identifiers within this
3205         // module.
3206         F.IdentifierRemap.insertOrReplace(
3207           std::make_pair(LocalBaseIdentifierID,
3208                          F.BaseIdentifierID - LocalBaseIdentifierID));
3209 
3210         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3211                                  + F.LocalNumIdentifiers);
3212       }
3213       break;
3214     }
3215 
3216     case INTERESTING_IDENTIFIERS:
3217       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3218       break;
3219 
3220     case EAGERLY_DESERIALIZED_DECLS:
3221       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3222       // about "interesting" decls (for instance, if we're building a module).
3223       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3224         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3225       break;
3226 
3227     case MODULAR_CODEGEN_DECLS:
3228       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3229       // them (ie: if we're not codegenerating this module).
3230       if (F.Kind == MK_MainFile)
3231         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3232           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3233       break;
3234 
3235     case SPECIAL_TYPES:
3236       if (SpecialTypes.empty()) {
3237         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3238           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3239         break;
3240       }
3241 
3242       if (SpecialTypes.size() != Record.size()) {
3243         Error("invalid special-types record");
3244         return Failure;
3245       }
3246 
3247       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3248         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3249         if (!SpecialTypes[I])
3250           SpecialTypes[I] = ID;
3251         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3252         // merge step?
3253       }
3254       break;
3255 
3256     case STATISTICS:
3257       TotalNumStatements += Record[0];
3258       TotalNumMacros += Record[1];
3259       TotalLexicalDeclContexts += Record[2];
3260       TotalVisibleDeclContexts += Record[3];
3261       break;
3262 
3263     case UNUSED_FILESCOPED_DECLS:
3264       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3265         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3266       break;
3267 
3268     case DELEGATING_CTORS:
3269       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3270         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3271       break;
3272 
3273     case WEAK_UNDECLARED_IDENTIFIERS:
3274       if (Record.size() % 4 != 0) {
3275         Error("invalid weak identifiers record");
3276         return Failure;
3277       }
3278 
3279       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3280       // files. This isn't the way to do it :)
3281       WeakUndeclaredIdentifiers.clear();
3282 
3283       // Translate the weak, undeclared identifiers into global IDs.
3284       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3285         WeakUndeclaredIdentifiers.push_back(
3286           getGlobalIdentifierID(F, Record[I++]));
3287         WeakUndeclaredIdentifiers.push_back(
3288           getGlobalIdentifierID(F, Record[I++]));
3289         WeakUndeclaredIdentifiers.push_back(
3290           ReadSourceLocation(F, Record, I).getRawEncoding());
3291         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3292       }
3293       break;
3294 
3295     case SELECTOR_OFFSETS: {
3296       F.SelectorOffsets = (const uint32_t *)Blob.data();
3297       F.LocalNumSelectors = Record[0];
3298       unsigned LocalBaseSelectorID = Record[1];
3299       F.BaseSelectorID = getTotalNumSelectors();
3300 
3301       if (F.LocalNumSelectors > 0) {
3302         // Introduce the global -> local mapping for selectors within this
3303         // module.
3304         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3305 
3306         // Introduce the local -> global mapping for selectors within this
3307         // module.
3308         F.SelectorRemap.insertOrReplace(
3309           std::make_pair(LocalBaseSelectorID,
3310                          F.BaseSelectorID - LocalBaseSelectorID));
3311 
3312         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3313       }
3314       break;
3315     }
3316 
3317     case METHOD_POOL:
3318       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3319       if (Record[0])
3320         F.SelectorLookupTable
3321           = ASTSelectorLookupTable::Create(
3322                         F.SelectorLookupTableData + Record[0],
3323                         F.SelectorLookupTableData,
3324                         ASTSelectorLookupTrait(*this, F));
3325       TotalNumMethodPoolEntries += Record[1];
3326       break;
3327 
3328     case REFERENCED_SELECTOR_POOL:
3329       if (!Record.empty()) {
3330         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3331           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3332                                                                 Record[Idx++]));
3333           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3334                                               getRawEncoding());
3335         }
3336       }
3337       break;
3338 
3339     case PP_CONDITIONAL_STACK:
3340       if (!Record.empty()) {
3341         unsigned Idx = 0, End = Record.size() - 1;
3342         bool ReachedEOFWhileSkipping = Record[Idx++];
3343         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3344         if (ReachedEOFWhileSkipping) {
3345           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3346           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3347           bool FoundNonSkipPortion = Record[Idx++];
3348           bool FoundElse = Record[Idx++];
3349           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3350           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3351                            FoundElse, ElseLoc);
3352         }
3353         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3354         while (Idx < End) {
3355           auto Loc = ReadSourceLocation(F, Record, Idx);
3356           bool WasSkipping = Record[Idx++];
3357           bool FoundNonSkip = Record[Idx++];
3358           bool FoundElse = Record[Idx++];
3359           ConditionalStack.push_back(
3360               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3361         }
3362         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3363       }
3364       break;
3365 
3366     case PP_COUNTER_VALUE:
3367       if (!Record.empty() && Listener)
3368         Listener->ReadCounter(F, Record[0]);
3369       break;
3370 
3371     case FILE_SORTED_DECLS:
3372       F.FileSortedDecls = (const DeclID *)Blob.data();
3373       F.NumFileSortedDecls = Record[0];
3374       break;
3375 
3376     case SOURCE_LOCATION_OFFSETS: {
3377       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3378       F.LocalNumSLocEntries = Record[0];
3379       unsigned SLocSpaceSize = Record[1];
3380       F.SLocEntryOffsetsBase = Record[2];
3381       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3382           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3383                                               SLocSpaceSize);
3384       if (!F.SLocEntryBaseID) {
3385         Error("ran out of source locations");
3386         break;
3387       }
3388       // Make our entry in the range map. BaseID is negative and growing, so
3389       // we invert it. Because we invert it, though, we need the other end of
3390       // the range.
3391       unsigned RangeStart =
3392           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3393       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3394       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3395 
3396       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3397       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3398       GlobalSLocOffsetMap.insert(
3399           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3400                            - SLocSpaceSize,&F));
3401 
3402       // Initialize the remapping table.
3403       // Invalid stays invalid.
3404       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3405       // This module. Base was 2 when being compiled.
3406       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3407                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3408 
3409       TotalNumSLocEntries += F.LocalNumSLocEntries;
3410       break;
3411     }
3412 
3413     case MODULE_OFFSET_MAP:
3414       F.ModuleOffsetMap = Blob;
3415       break;
3416 
3417     case SOURCE_MANAGER_LINE_TABLE:
3418       if (ParseLineTable(F, Record)) {
3419         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3420         return Failure;
3421       }
3422       break;
3423 
3424     case SOURCE_LOCATION_PRELOADS: {
3425       // Need to transform from the local view (1-based IDs) to the global view,
3426       // which is based off F.SLocEntryBaseID.
3427       if (!F.PreloadSLocEntries.empty()) {
3428         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3429         return Failure;
3430       }
3431 
3432       F.PreloadSLocEntries.swap(Record);
3433       break;
3434     }
3435 
3436     case EXT_VECTOR_DECLS:
3437       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3438         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3439       break;
3440 
3441     case VTABLE_USES:
3442       if (Record.size() % 3 != 0) {
3443         Error("Invalid VTABLE_USES record");
3444         return Failure;
3445       }
3446 
3447       // Later tables overwrite earlier ones.
3448       // FIXME: Modules will have some trouble with this. This is clearly not
3449       // the right way to do this.
3450       VTableUses.clear();
3451 
3452       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3453         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3454         VTableUses.push_back(
3455           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3456         VTableUses.push_back(Record[Idx++]);
3457       }
3458       break;
3459 
3460     case PENDING_IMPLICIT_INSTANTIATIONS:
3461       if (PendingInstantiations.size() % 2 != 0) {
3462         Error("Invalid existing PendingInstantiations");
3463         return Failure;
3464       }
3465 
3466       if (Record.size() % 2 != 0) {
3467         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3468         return Failure;
3469       }
3470 
3471       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3472         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3473         PendingInstantiations.push_back(
3474           ReadSourceLocation(F, Record, I).getRawEncoding());
3475       }
3476       break;
3477 
3478     case SEMA_DECL_REFS:
3479       if (Record.size() != 3) {
3480         Error("Invalid SEMA_DECL_REFS block");
3481         return Failure;
3482       }
3483       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3484         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3485       break;
3486 
3487     case PPD_ENTITIES_OFFSETS: {
3488       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3489       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3490       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3491 
3492       unsigned LocalBasePreprocessedEntityID = Record[0];
3493 
3494       unsigned StartingID;
3495       if (!PP.getPreprocessingRecord())
3496         PP.createPreprocessingRecord();
3497       if (!PP.getPreprocessingRecord()->getExternalSource())
3498         PP.getPreprocessingRecord()->SetExternalSource(*this);
3499       StartingID
3500         = PP.getPreprocessingRecord()
3501             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3502       F.BasePreprocessedEntityID = StartingID;
3503 
3504       if (F.NumPreprocessedEntities > 0) {
3505         // Introduce the global -> local mapping for preprocessed entities in
3506         // this module.
3507         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3508 
3509         // Introduce the local -> global mapping for preprocessed entities in
3510         // this module.
3511         F.PreprocessedEntityRemap.insertOrReplace(
3512           std::make_pair(LocalBasePreprocessedEntityID,
3513             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3514       }
3515 
3516       break;
3517     }
3518 
3519     case PPD_SKIPPED_RANGES: {
3520       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3521       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3522       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3523 
3524       if (!PP.getPreprocessingRecord())
3525         PP.createPreprocessingRecord();
3526       if (!PP.getPreprocessingRecord()->getExternalSource())
3527         PP.getPreprocessingRecord()->SetExternalSource(*this);
3528       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3529           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3530 
3531       if (F.NumPreprocessedSkippedRanges > 0)
3532         GlobalSkippedRangeMap.insert(
3533             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3534       break;
3535     }
3536 
3537     case DECL_UPDATE_OFFSETS:
3538       if (Record.size() % 2 != 0) {
3539         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3540         return Failure;
3541       }
3542       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3543         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3544         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3545 
3546         // If we've already loaded the decl, perform the updates when we finish
3547         // loading this block.
3548         if (Decl *D = GetExistingDecl(ID))
3549           PendingUpdateRecords.push_back(
3550               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3551       }
3552       break;
3553 
3554     case OBJC_CATEGORIES_MAP:
3555       if (F.LocalNumObjCCategoriesInMap != 0) {
3556         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3557         return Failure;
3558       }
3559 
3560       F.LocalNumObjCCategoriesInMap = Record[0];
3561       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3562       break;
3563 
3564     case OBJC_CATEGORIES:
3565       F.ObjCCategories.swap(Record);
3566       break;
3567 
3568     case CUDA_SPECIAL_DECL_REFS:
3569       // Later tables overwrite earlier ones.
3570       // FIXME: Modules will have trouble with this.
3571       CUDASpecialDeclRefs.clear();
3572       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3573         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3574       break;
3575 
3576     case HEADER_SEARCH_TABLE:
3577       F.HeaderFileInfoTableData = Blob.data();
3578       F.LocalNumHeaderFileInfos = Record[1];
3579       if (Record[0]) {
3580         F.HeaderFileInfoTable
3581           = HeaderFileInfoLookupTable::Create(
3582                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3583                    (const unsigned char *)F.HeaderFileInfoTableData,
3584                    HeaderFileInfoTrait(*this, F,
3585                                        &PP.getHeaderSearchInfo(),
3586                                        Blob.data() + Record[2]));
3587 
3588         PP.getHeaderSearchInfo().SetExternalSource(this);
3589         if (!PP.getHeaderSearchInfo().getExternalLookup())
3590           PP.getHeaderSearchInfo().SetExternalLookup(this);
3591       }
3592       break;
3593 
3594     case FP_PRAGMA_OPTIONS:
3595       // Later tables overwrite earlier ones.
3596       FPPragmaOptions.swap(Record);
3597       break;
3598 
3599     case OPENCL_EXTENSIONS:
3600       for (unsigned I = 0, E = Record.size(); I != E; ) {
3601         auto Name = ReadString(Record, I);
3602         auto &Opt = OpenCLExtensions.OptMap[Name];
3603         Opt.Supported = Record[I++] != 0;
3604         Opt.Enabled = Record[I++] != 0;
3605         Opt.Avail = Record[I++];
3606         Opt.Core = Record[I++];
3607       }
3608       break;
3609 
3610     case OPENCL_EXTENSION_TYPES:
3611       for (unsigned I = 0, E = Record.size(); I != E;) {
3612         auto TypeID = static_cast<::TypeID>(Record[I++]);
3613         auto *Type = GetType(TypeID).getTypePtr();
3614         auto NumExt = static_cast<unsigned>(Record[I++]);
3615         for (unsigned II = 0; II != NumExt; ++II) {
3616           auto Ext = ReadString(Record, I);
3617           OpenCLTypeExtMap[Type].insert(Ext);
3618         }
3619       }
3620       break;
3621 
3622     case OPENCL_EXTENSION_DECLS:
3623       for (unsigned I = 0, E = Record.size(); I != E;) {
3624         auto DeclID = static_cast<::DeclID>(Record[I++]);
3625         auto *Decl = GetDecl(DeclID);
3626         auto NumExt = static_cast<unsigned>(Record[I++]);
3627         for (unsigned II = 0; II != NumExt; ++II) {
3628           auto Ext = ReadString(Record, I);
3629           OpenCLDeclExtMap[Decl].insert(Ext);
3630         }
3631       }
3632       break;
3633 
3634     case TENTATIVE_DEFINITIONS:
3635       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3636         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3637       break;
3638 
3639     case KNOWN_NAMESPACES:
3640       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3641         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3642       break;
3643 
3644     case UNDEFINED_BUT_USED:
3645       if (UndefinedButUsed.size() % 2 != 0) {
3646         Error("Invalid existing UndefinedButUsed");
3647         return Failure;
3648       }
3649 
3650       if (Record.size() % 2 != 0) {
3651         Error("invalid undefined-but-used record");
3652         return Failure;
3653       }
3654       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3655         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3656         UndefinedButUsed.push_back(
3657             ReadSourceLocation(F, Record, I).getRawEncoding());
3658       }
3659       break;
3660 
3661     case DELETE_EXPRS_TO_ANALYZE:
3662       for (unsigned I = 0, N = Record.size(); I != N;) {
3663         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3664         const uint64_t Count = Record[I++];
3665         DelayedDeleteExprs.push_back(Count);
3666         for (uint64_t C = 0; C < Count; ++C) {
3667           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3668           bool IsArrayForm = Record[I++] == 1;
3669           DelayedDeleteExprs.push_back(IsArrayForm);
3670         }
3671       }
3672       break;
3673 
3674     case IMPORTED_MODULES:
3675       if (!F.isModule()) {
3676         // If we aren't loading a module (which has its own exports), make
3677         // all of the imported modules visible.
3678         // FIXME: Deal with macros-only imports.
3679         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3680           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3681           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3682           if (GlobalID) {
3683             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3684             if (DeserializationListener)
3685               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3686           }
3687         }
3688       }
3689       break;
3690 
3691     case MACRO_OFFSET: {
3692       if (F.LocalNumMacros != 0) {
3693         Error("duplicate MACRO_OFFSET record in AST file");
3694         return Failure;
3695       }
3696       F.MacroOffsets = (const uint32_t *)Blob.data();
3697       F.LocalNumMacros = Record[0];
3698       unsigned LocalBaseMacroID = Record[1];
3699       F.MacroOffsetsBase = Record[2];
3700       F.BaseMacroID = getTotalNumMacros();
3701 
3702       if (F.LocalNumMacros > 0) {
3703         // Introduce the global -> local mapping for macros within this module.
3704         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3705 
3706         // Introduce the local -> global mapping for macros within this module.
3707         F.MacroRemap.insertOrReplace(
3708           std::make_pair(LocalBaseMacroID,
3709                          F.BaseMacroID - LocalBaseMacroID));
3710 
3711         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3712       }
3713       break;
3714     }
3715 
3716     case LATE_PARSED_TEMPLATE:
3717       LateParsedTemplates.append(Record.begin(), Record.end());
3718       break;
3719 
3720     case OPTIMIZE_PRAGMA_OPTIONS:
3721       if (Record.size() != 1) {
3722         Error("invalid pragma optimize record");
3723         return Failure;
3724       }
3725       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3726       break;
3727 
3728     case MSSTRUCT_PRAGMA_OPTIONS:
3729       if (Record.size() != 1) {
3730         Error("invalid pragma ms_struct record");
3731         return Failure;
3732       }
3733       PragmaMSStructState = Record[0];
3734       break;
3735 
3736     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3737       if (Record.size() != 2) {
3738         Error("invalid pragma ms_struct record");
3739         return Failure;
3740       }
3741       PragmaMSPointersToMembersState = Record[0];
3742       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3743       break;
3744 
3745     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3746       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3747         UnusedLocalTypedefNameCandidates.push_back(
3748             getGlobalDeclID(F, Record[I]));
3749       break;
3750 
3751     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3752       if (Record.size() != 1) {
3753         Error("invalid cuda pragma options record");
3754         return Failure;
3755       }
3756       ForceCUDAHostDeviceDepth = Record[0];
3757       break;
3758 
3759     case PACK_PRAGMA_OPTIONS: {
3760       if (Record.size() < 3) {
3761         Error("invalid pragma pack record");
3762         return Failure;
3763       }
3764       PragmaPackCurrentValue = Record[0];
3765       PragmaPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3766       unsigned NumStackEntries = Record[2];
3767       unsigned Idx = 3;
3768       // Reset the stack when importing a new module.
3769       PragmaPackStack.clear();
3770       for (unsigned I = 0; I < NumStackEntries; ++I) {
3771         PragmaPackStackEntry Entry;
3772         Entry.Value = Record[Idx++];
3773         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3774         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3775         PragmaPackStrings.push_back(ReadString(Record, Idx));
3776         Entry.SlotLabel = PragmaPackStrings.back();
3777         PragmaPackStack.push_back(Entry);
3778       }
3779       break;
3780     }
3781 
3782     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3783       if (Record.size() < 3) {
3784         Error("invalid pragma pack record");
3785         return Failure;
3786       }
3787       FpPragmaCurrentValue = Record[0];
3788       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3789       unsigned NumStackEntries = Record[2];
3790       unsigned Idx = 3;
3791       // Reset the stack when importing a new module.
3792       FpPragmaStack.clear();
3793       for (unsigned I = 0; I < NumStackEntries; ++I) {
3794         FpPragmaStackEntry Entry;
3795         Entry.Value = Record[Idx++];
3796         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3797         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3798         FpPragmaStrings.push_back(ReadString(Record, Idx));
3799         Entry.SlotLabel = FpPragmaStrings.back();
3800         FpPragmaStack.push_back(Entry);
3801       }
3802       break;
3803     }
3804 
3805     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3806       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3807         DeclsToCheckForDeferredDiags.push_back(getGlobalDeclID(F, Record[I]));
3808       break;
3809     }
3810   }
3811 }
3812 
3813 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3814   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3815 
3816   // Additional remapping information.
3817   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3818   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3819   F.ModuleOffsetMap = StringRef();
3820 
3821   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3822   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3823     F.SLocRemap.insert(std::make_pair(0U, 0));
3824     F.SLocRemap.insert(std::make_pair(2U, 1));
3825   }
3826 
3827   // Continuous range maps we may be updating in our module.
3828   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3829   RemapBuilder SLocRemap(F.SLocRemap);
3830   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3831   RemapBuilder MacroRemap(F.MacroRemap);
3832   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3833   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3834   RemapBuilder SelectorRemap(F.SelectorRemap);
3835   RemapBuilder DeclRemap(F.DeclRemap);
3836   RemapBuilder TypeRemap(F.TypeRemap);
3837 
3838   while (Data < DataEnd) {
3839     // FIXME: Looking up dependency modules by filename is horrible. Let's
3840     // start fixing this with prebuilt and explicit modules and see how it
3841     // goes...
3842     using namespace llvm::support;
3843     ModuleKind Kind = static_cast<ModuleKind>(
3844       endian::readNext<uint8_t, little, unaligned>(Data));
3845     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3846     StringRef Name = StringRef((const char*)Data, Len);
3847     Data += Len;
3848     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule
3849                       ? ModuleMgr.lookupByModuleName(Name)
3850                       : ModuleMgr.lookupByFileName(Name));
3851     if (!OM) {
3852       std::string Msg =
3853           "SourceLocation remap refers to unknown module, cannot find ";
3854       Msg.append(std::string(Name));
3855       Error(Msg);
3856       return;
3857     }
3858 
3859     uint32_t SLocOffset =
3860         endian::readNext<uint32_t, little, unaligned>(Data);
3861     uint32_t IdentifierIDOffset =
3862         endian::readNext<uint32_t, little, unaligned>(Data);
3863     uint32_t MacroIDOffset =
3864         endian::readNext<uint32_t, little, unaligned>(Data);
3865     uint32_t PreprocessedEntityIDOffset =
3866         endian::readNext<uint32_t, little, unaligned>(Data);
3867     uint32_t SubmoduleIDOffset =
3868         endian::readNext<uint32_t, little, unaligned>(Data);
3869     uint32_t SelectorIDOffset =
3870         endian::readNext<uint32_t, little, unaligned>(Data);
3871     uint32_t DeclIDOffset =
3872         endian::readNext<uint32_t, little, unaligned>(Data);
3873     uint32_t TypeIndexOffset =
3874         endian::readNext<uint32_t, little, unaligned>(Data);
3875 
3876     uint32_t None = std::numeric_limits<uint32_t>::max();
3877 
3878     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3879                          RemapBuilder &Remap) {
3880       if (Offset != None)
3881         Remap.insert(std::make_pair(Offset,
3882                                     static_cast<int>(BaseOffset - Offset)));
3883     };
3884     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3885     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3886     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3887     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3888               PreprocessedEntityRemap);
3889     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3890     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3891     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3892     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3893 
3894     // Global -> local mappings.
3895     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3896   }
3897 }
3898 
3899 ASTReader::ASTReadResult
3900 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3901                                   const ModuleFile *ImportedBy,
3902                                   unsigned ClientLoadCapabilities) {
3903   unsigned Idx = 0;
3904   F.ModuleMapPath = ReadPath(F, Record, Idx);
3905 
3906   // Try to resolve ModuleName in the current header search context and
3907   // verify that it is found in the same module map file as we saved. If the
3908   // top-level AST file is a main file, skip this check because there is no
3909   // usable header search context.
3910   assert(!F.ModuleName.empty() &&
3911          "MODULE_NAME should come before MODULE_MAP_FILE");
3912   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3913     // An implicitly-loaded module file should have its module listed in some
3914     // module map file that we've already loaded.
3915     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3916     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3917     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3918     // Don't emit module relocation error if we have -fno-validate-pch
3919     if (!PP.getPreprocessorOpts().DisablePCHValidation && !ModMap) {
3920       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3921         if (auto *ASTFE = M ? M->getASTFile() : nullptr) {
3922           // This module was defined by an imported (explicit) module.
3923           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3924                                                << ASTFE->getName();
3925         } else {
3926           // This module was built with a different module map.
3927           Diag(diag::err_imported_module_not_found)
3928               << F.ModuleName << F.FileName
3929               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3930               << !ImportedBy;
3931           // In case it was imported by a PCH, there's a chance the user is
3932           // just missing to include the search path to the directory containing
3933           // the modulemap.
3934           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3935             Diag(diag::note_imported_by_pch_module_not_found)
3936                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3937         }
3938       }
3939       return OutOfDate;
3940     }
3941 
3942     assert(M->Name == F.ModuleName && "found module with different name");
3943 
3944     // Check the primary module map file.
3945     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3946     if (!StoredModMap || *StoredModMap != ModMap) {
3947       assert(ModMap && "found module is missing module map file");
3948       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3949              "top-level import should be verified");
3950       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3951       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3952         Diag(diag::err_imported_module_modmap_changed)
3953             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3954             << ModMap->getName() << F.ModuleMapPath << NotImported;
3955       return OutOfDate;
3956     }
3957 
3958     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3959     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3960       // FIXME: we should use input files rather than storing names.
3961       std::string Filename = ReadPath(F, Record, Idx);
3962       auto F = FileMgr.getFile(Filename, false, false);
3963       if (!F) {
3964         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3965           Error("could not find file '" + Filename +"' referenced by AST file");
3966         return OutOfDate;
3967       }
3968       AdditionalStoredMaps.insert(*F);
3969     }
3970 
3971     // Check any additional module map files (e.g. module.private.modulemap)
3972     // that are not in the pcm.
3973     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3974       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3975         // Remove files that match
3976         // Note: SmallPtrSet::erase is really remove
3977         if (!AdditionalStoredMaps.erase(ModMap)) {
3978           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3979             Diag(diag::err_module_different_modmap)
3980               << F.ModuleName << /*new*/0 << ModMap->getName();
3981           return OutOfDate;
3982         }
3983       }
3984     }
3985 
3986     // Check any additional module map files that are in the pcm, but not
3987     // found in header search. Cases that match are already removed.
3988     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3989       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3990         Diag(diag::err_module_different_modmap)
3991           << F.ModuleName << /*not new*/1 << ModMap->getName();
3992       return OutOfDate;
3993     }
3994   }
3995 
3996   if (Listener)
3997     Listener->ReadModuleMapFile(F.ModuleMapPath);
3998   return Success;
3999 }
4000 
4001 /// Move the given method to the back of the global list of methods.
4002 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4003   // Find the entry for this selector in the method pool.
4004   Sema::GlobalMethodPool::iterator Known
4005     = S.MethodPool.find(Method->getSelector());
4006   if (Known == S.MethodPool.end())
4007     return;
4008 
4009   // Retrieve the appropriate method list.
4010   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4011                                                     : Known->second.second;
4012   bool Found = false;
4013   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4014     if (!Found) {
4015       if (List->getMethod() == Method) {
4016         Found = true;
4017       } else {
4018         // Keep searching.
4019         continue;
4020       }
4021     }
4022 
4023     if (List->getNext())
4024       List->setMethod(List->getNext()->getMethod());
4025     else
4026       List->setMethod(Method);
4027   }
4028 }
4029 
4030 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4031   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4032   for (Decl *D : Names) {
4033     bool wasHidden = D->isHidden();
4034     D->setVisibleDespiteOwningModule();
4035 
4036     if (wasHidden && SemaObj) {
4037       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4038         moveMethodToBackOfGlobalList(*SemaObj, Method);
4039       }
4040     }
4041   }
4042 }
4043 
4044 void ASTReader::makeModuleVisible(Module *Mod,
4045                                   Module::NameVisibilityKind NameVisibility,
4046                                   SourceLocation ImportLoc) {
4047   llvm::SmallPtrSet<Module *, 4> Visited;
4048   SmallVector<Module *, 4> Stack;
4049   Stack.push_back(Mod);
4050   while (!Stack.empty()) {
4051     Mod = Stack.pop_back_val();
4052 
4053     if (NameVisibility <= Mod->NameVisibility) {
4054       // This module already has this level of visibility (or greater), so
4055       // there is nothing more to do.
4056       continue;
4057     }
4058 
4059     if (Mod->isUnimportable()) {
4060       // Modules that aren't importable cannot be made visible.
4061       continue;
4062     }
4063 
4064     // Update the module's name visibility.
4065     Mod->NameVisibility = NameVisibility;
4066 
4067     // If we've already deserialized any names from this module,
4068     // mark them as visible.
4069     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4070     if (Hidden != HiddenNamesMap.end()) {
4071       auto HiddenNames = std::move(*Hidden);
4072       HiddenNamesMap.erase(Hidden);
4073       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4074       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4075              "making names visible added hidden names");
4076     }
4077 
4078     // Push any exported modules onto the stack to be marked as visible.
4079     SmallVector<Module *, 16> Exports;
4080     Mod->getExportedModules(Exports);
4081     for (SmallVectorImpl<Module *>::iterator
4082            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4083       Module *Exported = *I;
4084       if (Visited.insert(Exported).second)
4085         Stack.push_back(Exported);
4086     }
4087   }
4088 }
4089 
4090 /// We've merged the definition \p MergedDef into the existing definition
4091 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4092 /// visible.
4093 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4094                                           NamedDecl *MergedDef) {
4095   if (Def->isHidden()) {
4096     // If MergedDef is visible or becomes visible, make the definition visible.
4097     if (!MergedDef->isHidden())
4098       Def->setVisibleDespiteOwningModule();
4099     else {
4100       getContext().mergeDefinitionIntoModule(
4101           Def, MergedDef->getImportedOwningModule(),
4102           /*NotifyListeners*/ false);
4103       PendingMergedDefinitionsToDeduplicate.insert(Def);
4104     }
4105   }
4106 }
4107 
4108 bool ASTReader::loadGlobalIndex() {
4109   if (GlobalIndex)
4110     return false;
4111 
4112   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4113       !PP.getLangOpts().Modules)
4114     return true;
4115 
4116   // Try to load the global index.
4117   TriedLoadingGlobalIndex = true;
4118   StringRef ModuleCachePath
4119     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4120   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4121       GlobalModuleIndex::readIndex(ModuleCachePath);
4122   if (llvm::Error Err = std::move(Result.second)) {
4123     assert(!Result.first);
4124     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4125     return true;
4126   }
4127 
4128   GlobalIndex.reset(Result.first);
4129   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4130   return false;
4131 }
4132 
4133 bool ASTReader::isGlobalIndexUnavailable() const {
4134   return PP.getLangOpts().Modules && UseGlobalIndex &&
4135          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4136 }
4137 
4138 static void updateModuleTimestamp(ModuleFile &MF) {
4139   // Overwrite the timestamp file contents so that file's mtime changes.
4140   std::string TimestampFilename = MF.getTimestampFilename();
4141   std::error_code EC;
4142   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4143   if (EC)
4144     return;
4145   OS << "Timestamp file\n";
4146   OS.close();
4147   OS.clear_error(); // Avoid triggering a fatal error.
4148 }
4149 
4150 /// Given a cursor at the start of an AST file, scan ahead and drop the
4151 /// cursor into the start of the given block ID, returning false on success and
4152 /// true on failure.
4153 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4154   while (true) {
4155     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4156     if (!MaybeEntry) {
4157       // FIXME this drops errors on the floor.
4158       consumeError(MaybeEntry.takeError());
4159       return true;
4160     }
4161     llvm::BitstreamEntry Entry = MaybeEntry.get();
4162 
4163     switch (Entry.Kind) {
4164     case llvm::BitstreamEntry::Error:
4165     case llvm::BitstreamEntry::EndBlock:
4166       return true;
4167 
4168     case llvm::BitstreamEntry::Record:
4169       // Ignore top-level records.
4170       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4171         break;
4172       else {
4173         // FIXME this drops errors on the floor.
4174         consumeError(Skipped.takeError());
4175         return true;
4176       }
4177 
4178     case llvm::BitstreamEntry::SubBlock:
4179       if (Entry.ID == BlockID) {
4180         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4181           // FIXME this drops the error on the floor.
4182           consumeError(std::move(Err));
4183           return true;
4184         }
4185         // Found it!
4186         return false;
4187       }
4188 
4189       if (llvm::Error Err = Cursor.SkipBlock()) {
4190         // FIXME this drops the error on the floor.
4191         consumeError(std::move(Err));
4192         return true;
4193       }
4194     }
4195   }
4196 }
4197 
4198 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4199                                             ModuleKind Type,
4200                                             SourceLocation ImportLoc,
4201                                             unsigned ClientLoadCapabilities,
4202                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4203   llvm::SaveAndRestore<SourceLocation>
4204     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4205 
4206   // Defer any pending actions until we get to the end of reading the AST file.
4207   Deserializing AnASTFile(this);
4208 
4209   // Bump the generation number.
4210   unsigned PreviousGeneration = 0;
4211   if (ContextObj)
4212     PreviousGeneration = incrementGeneration(*ContextObj);
4213 
4214   unsigned NumModules = ModuleMgr.size();
4215   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4216     assert(ReadResult && "expected to return error");
4217     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4218                             PP.getLangOpts().Modules
4219                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4220                                 : nullptr);
4221 
4222     // If we find that any modules are unusable, the global index is going
4223     // to be out-of-date. Just remove it.
4224     GlobalIndex.reset();
4225     ModuleMgr.setGlobalIndex(nullptr);
4226     return ReadResult;
4227   };
4228 
4229   SmallVector<ImportedModule, 4> Loaded;
4230   switch (ASTReadResult ReadResult =
4231               ReadASTCore(FileName, Type, ImportLoc,
4232                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4233                           ASTFileSignature(), ClientLoadCapabilities)) {
4234   case Failure:
4235   case Missing:
4236   case OutOfDate:
4237   case VersionMismatch:
4238   case ConfigurationMismatch:
4239   case HadErrors:
4240     return removeModulesAndReturn(ReadResult);
4241   case Success:
4242     break;
4243   }
4244 
4245   // Here comes stuff that we only do once the entire chain is loaded.
4246 
4247   // Load the AST blocks of all of the modules that we loaded.  We can still
4248   // hit errors parsing the ASTs at this point.
4249   for (ImportedModule &M : Loaded) {
4250     ModuleFile &F = *M.Mod;
4251 
4252     // Read the AST block.
4253     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4254       return removeModulesAndReturn(Result);
4255 
4256     // The AST block should always have a definition for the main module.
4257     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4258       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4259       return removeModulesAndReturn(Failure);
4260     }
4261 
4262     // Read the extension blocks.
4263     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4264       if (ASTReadResult Result = ReadExtensionBlock(F))
4265         return removeModulesAndReturn(Result);
4266     }
4267 
4268     // Once read, set the ModuleFile bit base offset and update the size in
4269     // bits of all files we've seen.
4270     F.GlobalBitOffset = TotalModulesSizeInBits;
4271     TotalModulesSizeInBits += F.SizeInBits;
4272     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4273   }
4274 
4275   // Preload source locations and interesting indentifiers.
4276   for (ImportedModule &M : Loaded) {
4277     ModuleFile &F = *M.Mod;
4278 
4279     // Preload SLocEntries.
4280     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4281       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4282       // Load it through the SourceManager and don't call ReadSLocEntry()
4283       // directly because the entry may have already been loaded in which case
4284       // calling ReadSLocEntry() directly would trigger an assertion in
4285       // SourceManager.
4286       SourceMgr.getLoadedSLocEntryByID(Index);
4287     }
4288 
4289     // Map the original source file ID into the ID space of the current
4290     // compilation.
4291     if (F.OriginalSourceFileID.isValid()) {
4292       F.OriginalSourceFileID = FileID::get(
4293           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4294     }
4295 
4296     // Preload all the pending interesting identifiers by marking them out of
4297     // date.
4298     for (auto Offset : F.PreloadIdentifierOffsets) {
4299       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
4300           F.IdentifierTableData + Offset);
4301 
4302       ASTIdentifierLookupTrait Trait(*this, F);
4303       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4304       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4305       auto &II = PP.getIdentifierTable().getOwn(Key);
4306       II.setOutOfDate(true);
4307 
4308       // Mark this identifier as being from an AST file so that we can track
4309       // whether we need to serialize it.
4310       markIdentifierFromAST(*this, II);
4311 
4312       // Associate the ID with the identifier so that the writer can reuse it.
4313       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4314       SetIdentifierInfo(ID, &II);
4315     }
4316   }
4317 
4318   // Setup the import locations and notify the module manager that we've
4319   // committed to these module files.
4320   for (ImportedModule &M : Loaded) {
4321     ModuleFile &F = *M.Mod;
4322 
4323     ModuleMgr.moduleFileAccepted(&F);
4324 
4325     // Set the import location.
4326     F.DirectImportLoc = ImportLoc;
4327     // FIXME: We assume that locations from PCH / preamble do not need
4328     // any translation.
4329     if (!M.ImportedBy)
4330       F.ImportLoc = M.ImportLoc;
4331     else
4332       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4333   }
4334 
4335   if (!PP.getLangOpts().CPlusPlus ||
4336       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4337        Type != MK_PrebuiltModule)) {
4338     // Mark all of the identifiers in the identifier table as being out of date,
4339     // so that various accessors know to check the loaded modules when the
4340     // identifier is used.
4341     //
4342     // For C++ modules, we don't need information on many identifiers (just
4343     // those that provide macros or are poisoned), so we mark all of
4344     // the interesting ones via PreloadIdentifierOffsets.
4345     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4346                                 IdEnd = PP.getIdentifierTable().end();
4347          Id != IdEnd; ++Id)
4348       Id->second->setOutOfDate(true);
4349   }
4350   // Mark selectors as out of date.
4351   for (auto Sel : SelectorGeneration)
4352     SelectorOutOfDate[Sel.first] = true;
4353 
4354   // Resolve any unresolved module exports.
4355   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4356     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4357     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4358     Module *ResolvedMod = getSubmodule(GlobalID);
4359 
4360     switch (Unresolved.Kind) {
4361     case UnresolvedModuleRef::Conflict:
4362       if (ResolvedMod) {
4363         Module::Conflict Conflict;
4364         Conflict.Other = ResolvedMod;
4365         Conflict.Message = Unresolved.String.str();
4366         Unresolved.Mod->Conflicts.push_back(Conflict);
4367       }
4368       continue;
4369 
4370     case UnresolvedModuleRef::Import:
4371       if (ResolvedMod)
4372         Unresolved.Mod->Imports.insert(ResolvedMod);
4373       continue;
4374 
4375     case UnresolvedModuleRef::Export:
4376       if (ResolvedMod || Unresolved.IsWildcard)
4377         Unresolved.Mod->Exports.push_back(
4378           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4379       continue;
4380     }
4381   }
4382   UnresolvedModuleRefs.clear();
4383 
4384   if (Imported)
4385     Imported->append(ImportedModules.begin(),
4386                      ImportedModules.end());
4387 
4388   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4389   // Might be unnecessary as use declarations are only used to build the
4390   // module itself.
4391 
4392   if (ContextObj)
4393     InitializeContext();
4394 
4395   if (SemaObj)
4396     UpdateSema();
4397 
4398   if (DeserializationListener)
4399     DeserializationListener->ReaderInitialized(this);
4400 
4401   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4402   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4403     // If this AST file is a precompiled preamble, then set the
4404     // preamble file ID of the source manager to the file source file
4405     // from which the preamble was built.
4406     if (Type == MK_Preamble) {
4407       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4408     } else if (Type == MK_MainFile) {
4409       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4410     }
4411   }
4412 
4413   // For any Objective-C class definitions we have already loaded, make sure
4414   // that we load any additional categories.
4415   if (ContextObj) {
4416     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4417       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4418                          ObjCClassesLoaded[I],
4419                          PreviousGeneration);
4420     }
4421   }
4422 
4423   if (PP.getHeaderSearchInfo()
4424           .getHeaderSearchOpts()
4425           .ModulesValidateOncePerBuildSession) {
4426     // Now we are certain that the module and all modules it depends on are
4427     // up to date.  Create or update timestamp files for modules that are
4428     // located in the module cache (not for PCH files that could be anywhere
4429     // in the filesystem).
4430     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4431       ImportedModule &M = Loaded[I];
4432       if (M.Mod->Kind == MK_ImplicitModule) {
4433         updateModuleTimestamp(*M.Mod);
4434       }
4435     }
4436   }
4437 
4438   return Success;
4439 }
4440 
4441 static ASTFileSignature readASTFileSignature(StringRef PCH);
4442 
4443 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4444 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4445   // FIXME checking magic headers is done in other places such as
4446   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4447   // always done the same. Unify it all with a helper.
4448   if (!Stream.canSkipToPos(4))
4449     return llvm::createStringError(std::errc::illegal_byte_sequence,
4450                                    "file too small to contain AST file magic");
4451   for (unsigned C : {'C', 'P', 'C', 'H'})
4452     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4453       if (Res.get() != C)
4454         return llvm::createStringError(
4455             std::errc::illegal_byte_sequence,
4456             "file doesn't start with AST file magic");
4457     } else
4458       return Res.takeError();
4459   return llvm::Error::success();
4460 }
4461 
4462 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4463   switch (Kind) {
4464   case MK_PCH:
4465     return 0; // PCH
4466   case MK_ImplicitModule:
4467   case MK_ExplicitModule:
4468   case MK_PrebuiltModule:
4469     return 1; // module
4470   case MK_MainFile:
4471   case MK_Preamble:
4472     return 2; // main source file
4473   }
4474   llvm_unreachable("unknown module kind");
4475 }
4476 
4477 ASTReader::ASTReadResult
4478 ASTReader::ReadASTCore(StringRef FileName,
4479                        ModuleKind Type,
4480                        SourceLocation ImportLoc,
4481                        ModuleFile *ImportedBy,
4482                        SmallVectorImpl<ImportedModule> &Loaded,
4483                        off_t ExpectedSize, time_t ExpectedModTime,
4484                        ASTFileSignature ExpectedSignature,
4485                        unsigned ClientLoadCapabilities) {
4486   ModuleFile *M;
4487   std::string ErrorStr;
4488   ModuleManager::AddModuleResult AddResult
4489     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4490                           getGeneration(), ExpectedSize, ExpectedModTime,
4491                           ExpectedSignature, readASTFileSignature,
4492                           M, ErrorStr);
4493 
4494   switch (AddResult) {
4495   case ModuleManager::AlreadyLoaded:
4496     Diag(diag::remark_module_import)
4497         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4498         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4499     return Success;
4500 
4501   case ModuleManager::NewlyLoaded:
4502     // Load module file below.
4503     break;
4504 
4505   case ModuleManager::Missing:
4506     // The module file was missing; if the client can handle that, return
4507     // it.
4508     if (ClientLoadCapabilities & ARR_Missing)
4509       return Missing;
4510 
4511     // Otherwise, return an error.
4512     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
4513                                           << FileName << !ErrorStr.empty()
4514                                           << ErrorStr;
4515     return Failure;
4516 
4517   case ModuleManager::OutOfDate:
4518     // We couldn't load the module file because it is out-of-date. If the
4519     // client can handle out-of-date, return it.
4520     if (ClientLoadCapabilities & ARR_OutOfDate)
4521       return OutOfDate;
4522 
4523     // Otherwise, return an error.
4524     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
4525                                             << FileName << !ErrorStr.empty()
4526                                             << ErrorStr;
4527     return Failure;
4528   }
4529 
4530   assert(M && "Missing module file");
4531 
4532   bool ShouldFinalizePCM = false;
4533   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4534     auto &MC = getModuleManager().getModuleCache();
4535     if (ShouldFinalizePCM)
4536       MC.finalizePCM(FileName);
4537     else
4538       MC.tryToDropPCM(FileName);
4539   });
4540   ModuleFile &F = *M;
4541   BitstreamCursor &Stream = F.Stream;
4542   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4543   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4544 
4545   // Sniff for the signature.
4546   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4547     Diag(diag::err_module_file_invalid)
4548         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4549     return Failure;
4550   }
4551 
4552   // This is used for compatibility with older PCH formats.
4553   bool HaveReadControlBlock = false;
4554   while (true) {
4555     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4556     if (!MaybeEntry) {
4557       Error(MaybeEntry.takeError());
4558       return Failure;
4559     }
4560     llvm::BitstreamEntry Entry = MaybeEntry.get();
4561 
4562     switch (Entry.Kind) {
4563     case llvm::BitstreamEntry::Error:
4564     case llvm::BitstreamEntry::Record:
4565     case llvm::BitstreamEntry::EndBlock:
4566       Error("invalid record at top-level of AST file");
4567       return Failure;
4568 
4569     case llvm::BitstreamEntry::SubBlock:
4570       break;
4571     }
4572 
4573     switch (Entry.ID) {
4574     case CONTROL_BLOCK_ID:
4575       HaveReadControlBlock = true;
4576       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4577       case Success:
4578         // Check that we didn't try to load a non-module AST file as a module.
4579         //
4580         // FIXME: Should we also perform the converse check? Loading a module as
4581         // a PCH file sort of works, but it's a bit wonky.
4582         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4583              Type == MK_PrebuiltModule) &&
4584             F.ModuleName.empty()) {
4585           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4586           if (Result != OutOfDate ||
4587               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4588             Diag(diag::err_module_file_not_module) << FileName;
4589           return Result;
4590         }
4591         break;
4592 
4593       case Failure: return Failure;
4594       case Missing: return Missing;
4595       case OutOfDate: return OutOfDate;
4596       case VersionMismatch: return VersionMismatch;
4597       case ConfigurationMismatch: return ConfigurationMismatch;
4598       case HadErrors: return HadErrors;
4599       }
4600       break;
4601 
4602     case AST_BLOCK_ID:
4603       if (!HaveReadControlBlock) {
4604         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4605           Diag(diag::err_pch_version_too_old);
4606         return VersionMismatch;
4607       }
4608 
4609       // Record that we've loaded this module.
4610       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4611       ShouldFinalizePCM = true;
4612       return Success;
4613 
4614     case UNHASHED_CONTROL_BLOCK_ID:
4615       // This block is handled using look-ahead during ReadControlBlock.  We
4616       // shouldn't get here!
4617       Error("malformed block record in AST file");
4618       return Failure;
4619 
4620     default:
4621       if (llvm::Error Err = Stream.SkipBlock()) {
4622         Error(std::move(Err));
4623         return Failure;
4624       }
4625       break;
4626     }
4627   }
4628 
4629   llvm_unreachable("unexpected break; expected return");
4630 }
4631 
4632 ASTReader::ASTReadResult
4633 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4634                                     unsigned ClientLoadCapabilities) {
4635   const HeaderSearchOptions &HSOpts =
4636       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4637   bool AllowCompatibleConfigurationMismatch =
4638       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4639 
4640   ASTReadResult Result = readUnhashedControlBlockImpl(
4641       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4642       Listener.get(),
4643       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4644 
4645   // If F was directly imported by another module, it's implicitly validated by
4646   // the importing module.
4647   if (DisableValidation || WasImportedBy ||
4648       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4649     return Success;
4650 
4651   if (Result == Failure) {
4652     Error("malformed block record in AST file");
4653     return Failure;
4654   }
4655 
4656   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4657     // If this module has already been finalized in the ModuleCache, we're stuck
4658     // with it; we can only load a single version of each module.
4659     //
4660     // This can happen when a module is imported in two contexts: in one, as a
4661     // user module; in another, as a system module (due to an import from
4662     // another module marked with the [system] flag).  It usually indicates a
4663     // bug in the module map: this module should also be marked with [system].
4664     //
4665     // If -Wno-system-headers (the default), and the first import is as a
4666     // system module, then validation will fail during the as-user import,
4667     // since -Werror flags won't have been validated.  However, it's reasonable
4668     // to treat this consistently as a system module.
4669     //
4670     // If -Wsystem-headers, the PCM on disk was built with
4671     // -Wno-system-headers, and the first import is as a user module, then
4672     // validation will fail during the as-system import since the PCM on disk
4673     // doesn't guarantee that -Werror was respected.  However, the -Werror
4674     // flags were checked during the initial as-user import.
4675     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4676       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4677       return Success;
4678     }
4679   }
4680 
4681   return Result;
4682 }
4683 
4684 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4685     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4686     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4687     bool ValidateDiagnosticOptions) {
4688   // Initialize a stream.
4689   BitstreamCursor Stream(StreamData);
4690 
4691   // Sniff for the signature.
4692   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4693     // FIXME this drops the error on the floor.
4694     consumeError(std::move(Err));
4695     return Failure;
4696   }
4697 
4698   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4699   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4700     return Failure;
4701 
4702   // Read all of the records in the options block.
4703   RecordData Record;
4704   ASTReadResult Result = Success;
4705   while (true) {
4706     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4707     if (!MaybeEntry) {
4708       // FIXME this drops the error on the floor.
4709       consumeError(MaybeEntry.takeError());
4710       return Failure;
4711     }
4712     llvm::BitstreamEntry Entry = MaybeEntry.get();
4713 
4714     switch (Entry.Kind) {
4715     case llvm::BitstreamEntry::Error:
4716     case llvm::BitstreamEntry::SubBlock:
4717       return Failure;
4718 
4719     case llvm::BitstreamEntry::EndBlock:
4720       return Result;
4721 
4722     case llvm::BitstreamEntry::Record:
4723       // The interesting case.
4724       break;
4725     }
4726 
4727     // Read and process a record.
4728     Record.clear();
4729     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4730     if (!MaybeRecordType) {
4731       // FIXME this drops the error.
4732       return Failure;
4733     }
4734     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4735     case SIGNATURE:
4736       if (F)
4737         std::copy(Record.begin(), Record.end(), F->Signature.data());
4738       break;
4739     case DIAGNOSTIC_OPTIONS: {
4740       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4741       if (Listener && ValidateDiagnosticOptions &&
4742           !AllowCompatibleConfigurationMismatch &&
4743           ParseDiagnosticOptions(Record, Complain, *Listener))
4744         Result = OutOfDate; // Don't return early.  Read the signature.
4745       break;
4746     }
4747     case DIAG_PRAGMA_MAPPINGS:
4748       if (!F)
4749         break;
4750       if (F->PragmaDiagMappings.empty())
4751         F->PragmaDiagMappings.swap(Record);
4752       else
4753         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4754                                      Record.begin(), Record.end());
4755       break;
4756     }
4757   }
4758 }
4759 
4760 /// Parse a record and blob containing module file extension metadata.
4761 static bool parseModuleFileExtensionMetadata(
4762               const SmallVectorImpl<uint64_t> &Record,
4763               StringRef Blob,
4764               ModuleFileExtensionMetadata &Metadata) {
4765   if (Record.size() < 4) return true;
4766 
4767   Metadata.MajorVersion = Record[0];
4768   Metadata.MinorVersion = Record[1];
4769 
4770   unsigned BlockNameLen = Record[2];
4771   unsigned UserInfoLen = Record[3];
4772 
4773   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4774 
4775   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4776   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4777                                   Blob.data() + BlockNameLen + UserInfoLen);
4778   return false;
4779 }
4780 
4781 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4782   BitstreamCursor &Stream = F.Stream;
4783 
4784   RecordData Record;
4785   while (true) {
4786     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4787     if (!MaybeEntry) {
4788       Error(MaybeEntry.takeError());
4789       return Failure;
4790     }
4791     llvm::BitstreamEntry Entry = MaybeEntry.get();
4792 
4793     switch (Entry.Kind) {
4794     case llvm::BitstreamEntry::SubBlock:
4795       if (llvm::Error Err = Stream.SkipBlock()) {
4796         Error(std::move(Err));
4797         return Failure;
4798       }
4799       continue;
4800 
4801     case llvm::BitstreamEntry::EndBlock:
4802       return Success;
4803 
4804     case llvm::BitstreamEntry::Error:
4805       return HadErrors;
4806 
4807     case llvm::BitstreamEntry::Record:
4808       break;
4809     }
4810 
4811     Record.clear();
4812     StringRef Blob;
4813     Expected<unsigned> MaybeRecCode =
4814         Stream.readRecord(Entry.ID, Record, &Blob);
4815     if (!MaybeRecCode) {
4816       Error(MaybeRecCode.takeError());
4817       return Failure;
4818     }
4819     switch (MaybeRecCode.get()) {
4820     case EXTENSION_METADATA: {
4821       ModuleFileExtensionMetadata Metadata;
4822       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4823         Error("malformed EXTENSION_METADATA in AST file");
4824         return Failure;
4825       }
4826 
4827       // Find a module file extension with this block name.
4828       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4829       if (Known == ModuleFileExtensions.end()) break;
4830 
4831       // Form a reader.
4832       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4833                                                              F, Stream)) {
4834         F.ExtensionReaders.push_back(std::move(Reader));
4835       }
4836 
4837       break;
4838     }
4839     }
4840   }
4841 
4842   return Success;
4843 }
4844 
4845 void ASTReader::InitializeContext() {
4846   assert(ContextObj && "no context to initialize");
4847   ASTContext &Context = *ContextObj;
4848 
4849   // If there's a listener, notify them that we "read" the translation unit.
4850   if (DeserializationListener)
4851     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4852                                       Context.getTranslationUnitDecl());
4853 
4854   // FIXME: Find a better way to deal with collisions between these
4855   // built-in types. Right now, we just ignore the problem.
4856 
4857   // Load the special types.
4858   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4859     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4860       if (!Context.CFConstantStringTypeDecl)
4861         Context.setCFConstantStringType(GetType(String));
4862     }
4863 
4864     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4865       QualType FileType = GetType(File);
4866       if (FileType.isNull()) {
4867         Error("FILE type is NULL");
4868         return;
4869       }
4870 
4871       if (!Context.FILEDecl) {
4872         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4873           Context.setFILEDecl(Typedef->getDecl());
4874         else {
4875           const TagType *Tag = FileType->getAs<TagType>();
4876           if (!Tag) {
4877             Error("Invalid FILE type in AST file");
4878             return;
4879           }
4880           Context.setFILEDecl(Tag->getDecl());
4881         }
4882       }
4883     }
4884 
4885     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4886       QualType Jmp_bufType = GetType(Jmp_buf);
4887       if (Jmp_bufType.isNull()) {
4888         Error("jmp_buf type is NULL");
4889         return;
4890       }
4891 
4892       if (!Context.jmp_bufDecl) {
4893         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4894           Context.setjmp_bufDecl(Typedef->getDecl());
4895         else {
4896           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4897           if (!Tag) {
4898             Error("Invalid jmp_buf type in AST file");
4899             return;
4900           }
4901           Context.setjmp_bufDecl(Tag->getDecl());
4902         }
4903       }
4904     }
4905 
4906     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4907       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4908       if (Sigjmp_bufType.isNull()) {
4909         Error("sigjmp_buf type is NULL");
4910         return;
4911       }
4912 
4913       if (!Context.sigjmp_bufDecl) {
4914         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4915           Context.setsigjmp_bufDecl(Typedef->getDecl());
4916         else {
4917           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4918           assert(Tag && "Invalid sigjmp_buf type in AST file");
4919           Context.setsigjmp_bufDecl(Tag->getDecl());
4920         }
4921       }
4922     }
4923 
4924     if (unsigned ObjCIdRedef
4925           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4926       if (Context.ObjCIdRedefinitionType.isNull())
4927         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4928     }
4929 
4930     if (unsigned ObjCClassRedef
4931           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4932       if (Context.ObjCClassRedefinitionType.isNull())
4933         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4934     }
4935 
4936     if (unsigned ObjCSelRedef
4937           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4938       if (Context.ObjCSelRedefinitionType.isNull())
4939         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4940     }
4941 
4942     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4943       QualType Ucontext_tType = GetType(Ucontext_t);
4944       if (Ucontext_tType.isNull()) {
4945         Error("ucontext_t type is NULL");
4946         return;
4947       }
4948 
4949       if (!Context.ucontext_tDecl) {
4950         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4951           Context.setucontext_tDecl(Typedef->getDecl());
4952         else {
4953           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4954           assert(Tag && "Invalid ucontext_t type in AST file");
4955           Context.setucontext_tDecl(Tag->getDecl());
4956         }
4957       }
4958     }
4959   }
4960 
4961   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4962 
4963   // If there were any CUDA special declarations, deserialize them.
4964   if (!CUDASpecialDeclRefs.empty()) {
4965     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4966     Context.setcudaConfigureCallDecl(
4967                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4968   }
4969 
4970   // Re-export any modules that were imported by a non-module AST file.
4971   // FIXME: This does not make macro-only imports visible again.
4972   for (auto &Import : ImportedModules) {
4973     if (Module *Imported = getSubmodule(Import.ID)) {
4974       makeModuleVisible(Imported, Module::AllVisible,
4975                         /*ImportLoc=*/Import.ImportLoc);
4976       if (Import.ImportLoc.isValid())
4977         PP.makeModuleVisible(Imported, Import.ImportLoc);
4978       // FIXME: should we tell Sema to make the module visible too?
4979     }
4980   }
4981   ImportedModules.clear();
4982 }
4983 
4984 void ASTReader::finalizeForWriting() {
4985   // Nothing to do for now.
4986 }
4987 
4988 /// Reads and return the signature record from \p PCH's control block, or
4989 /// else returns 0.
4990 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4991   BitstreamCursor Stream(PCH);
4992   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4993     // FIXME this drops the error on the floor.
4994     consumeError(std::move(Err));
4995     return ASTFileSignature();
4996   }
4997 
4998   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4999   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5000     return ASTFileSignature();
5001 
5002   // Scan for SIGNATURE inside the diagnostic options block.
5003   ASTReader::RecordData Record;
5004   while (true) {
5005     Expected<llvm::BitstreamEntry> MaybeEntry =
5006         Stream.advanceSkippingSubblocks();
5007     if (!MaybeEntry) {
5008       // FIXME this drops the error on the floor.
5009       consumeError(MaybeEntry.takeError());
5010       return ASTFileSignature();
5011     }
5012     llvm::BitstreamEntry Entry = MaybeEntry.get();
5013 
5014     if (Entry.Kind != llvm::BitstreamEntry::Record)
5015       return ASTFileSignature();
5016 
5017     Record.clear();
5018     StringRef Blob;
5019     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5020     if (!MaybeRecord) {
5021       // FIXME this drops the error on the floor.
5022       consumeError(MaybeRecord.takeError());
5023       return ASTFileSignature();
5024     }
5025     if (SIGNATURE == MaybeRecord.get())
5026       return {{{(uint32_t)Record[0], (uint32_t)Record[1], (uint32_t)Record[2],
5027                 (uint32_t)Record[3], (uint32_t)Record[4]}}};
5028   }
5029 }
5030 
5031 /// Retrieve the name of the original source file name
5032 /// directly from the AST file, without actually loading the AST
5033 /// file.
5034 std::string ASTReader::getOriginalSourceFile(
5035     const std::string &ASTFileName, FileManager &FileMgr,
5036     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5037   // Open the AST file.
5038   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5039   if (!Buffer) {
5040     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5041         << ASTFileName << Buffer.getError().message();
5042     return std::string();
5043   }
5044 
5045   // Initialize the stream
5046   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5047 
5048   // Sniff for the signature.
5049   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5050     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5051     return std::string();
5052   }
5053 
5054   // Scan for the CONTROL_BLOCK_ID block.
5055   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5056     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5057     return std::string();
5058   }
5059 
5060   // Scan for ORIGINAL_FILE inside the control block.
5061   RecordData Record;
5062   while (true) {
5063     Expected<llvm::BitstreamEntry> MaybeEntry =
5064         Stream.advanceSkippingSubblocks();
5065     if (!MaybeEntry) {
5066       // FIXME this drops errors on the floor.
5067       consumeError(MaybeEntry.takeError());
5068       return std::string();
5069     }
5070     llvm::BitstreamEntry Entry = MaybeEntry.get();
5071 
5072     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5073       return std::string();
5074 
5075     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5076       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5077       return std::string();
5078     }
5079 
5080     Record.clear();
5081     StringRef Blob;
5082     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5083     if (!MaybeRecord) {
5084       // FIXME this drops the errors on the floor.
5085       consumeError(MaybeRecord.takeError());
5086       return std::string();
5087     }
5088     if (ORIGINAL_FILE == MaybeRecord.get())
5089       return Blob.str();
5090   }
5091 }
5092 
5093 namespace {
5094 
5095   class SimplePCHValidator : public ASTReaderListener {
5096     const LangOptions &ExistingLangOpts;
5097     const TargetOptions &ExistingTargetOpts;
5098     const PreprocessorOptions &ExistingPPOpts;
5099     std::string ExistingModuleCachePath;
5100     FileManager &FileMgr;
5101 
5102   public:
5103     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5104                        const TargetOptions &ExistingTargetOpts,
5105                        const PreprocessorOptions &ExistingPPOpts,
5106                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5107         : ExistingLangOpts(ExistingLangOpts),
5108           ExistingTargetOpts(ExistingTargetOpts),
5109           ExistingPPOpts(ExistingPPOpts),
5110           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5111 
5112     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5113                              bool AllowCompatibleDifferences) override {
5114       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5115                                   AllowCompatibleDifferences);
5116     }
5117 
5118     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5119                            bool AllowCompatibleDifferences) override {
5120       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5121                                 AllowCompatibleDifferences);
5122     }
5123 
5124     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5125                                  StringRef SpecificModuleCachePath,
5126                                  bool Complain) override {
5127       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5128                                       ExistingModuleCachePath,
5129                                       nullptr, ExistingLangOpts);
5130     }
5131 
5132     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5133                                  bool Complain,
5134                                  std::string &SuggestedPredefines) override {
5135       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5136                                       SuggestedPredefines, ExistingLangOpts);
5137     }
5138   };
5139 
5140 } // namespace
5141 
5142 bool ASTReader::readASTFileControlBlock(
5143     StringRef Filename, FileManager &FileMgr,
5144     const PCHContainerReader &PCHContainerRdr,
5145     bool FindModuleFileExtensions,
5146     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5147   // Open the AST file.
5148   // FIXME: This allows use of the VFS; we do not allow use of the
5149   // VFS when actually loading a module.
5150   auto Buffer = FileMgr.getBufferForFile(Filename);
5151   if (!Buffer) {
5152     return true;
5153   }
5154 
5155   // Initialize the stream
5156   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5157   BitstreamCursor Stream(Bytes);
5158 
5159   // Sniff for the signature.
5160   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5161     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5162     return true;
5163   }
5164 
5165   // Scan for the CONTROL_BLOCK_ID block.
5166   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5167     return true;
5168 
5169   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5170   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5171   bool NeedsImports = Listener.needsImportVisitation();
5172   BitstreamCursor InputFilesCursor;
5173 
5174   RecordData Record;
5175   std::string ModuleDir;
5176   bool DoneWithControlBlock = false;
5177   while (!DoneWithControlBlock) {
5178     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5179     if (!MaybeEntry) {
5180       // FIXME this drops the error on the floor.
5181       consumeError(MaybeEntry.takeError());
5182       return true;
5183     }
5184     llvm::BitstreamEntry Entry = MaybeEntry.get();
5185 
5186     switch (Entry.Kind) {
5187     case llvm::BitstreamEntry::SubBlock: {
5188       switch (Entry.ID) {
5189       case OPTIONS_BLOCK_ID: {
5190         std::string IgnoredSuggestedPredefines;
5191         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5192                              /*AllowCompatibleConfigurationMismatch*/ false,
5193                              Listener, IgnoredSuggestedPredefines) != Success)
5194           return true;
5195         break;
5196       }
5197 
5198       case INPUT_FILES_BLOCK_ID:
5199         InputFilesCursor = Stream;
5200         if (llvm::Error Err = Stream.SkipBlock()) {
5201           // FIXME this drops the error on the floor.
5202           consumeError(std::move(Err));
5203           return true;
5204         }
5205         if (NeedsInputFiles &&
5206             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5207           return true;
5208         break;
5209 
5210       default:
5211         if (llvm::Error Err = Stream.SkipBlock()) {
5212           // FIXME this drops the error on the floor.
5213           consumeError(std::move(Err));
5214           return true;
5215         }
5216         break;
5217       }
5218 
5219       continue;
5220     }
5221 
5222     case llvm::BitstreamEntry::EndBlock:
5223       DoneWithControlBlock = true;
5224       break;
5225 
5226     case llvm::BitstreamEntry::Error:
5227       return true;
5228 
5229     case llvm::BitstreamEntry::Record:
5230       break;
5231     }
5232 
5233     if (DoneWithControlBlock) break;
5234 
5235     Record.clear();
5236     StringRef Blob;
5237     Expected<unsigned> MaybeRecCode =
5238         Stream.readRecord(Entry.ID, Record, &Blob);
5239     if (!MaybeRecCode) {
5240       // FIXME this drops the error.
5241       return Failure;
5242     }
5243     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5244     case METADATA:
5245       if (Record[0] != VERSION_MAJOR)
5246         return true;
5247       if (Listener.ReadFullVersionInformation(Blob))
5248         return true;
5249       break;
5250     case MODULE_NAME:
5251       Listener.ReadModuleName(Blob);
5252       break;
5253     case MODULE_DIRECTORY:
5254       ModuleDir = std::string(Blob);
5255       break;
5256     case MODULE_MAP_FILE: {
5257       unsigned Idx = 0;
5258       auto Path = ReadString(Record, Idx);
5259       ResolveImportedPath(Path, ModuleDir);
5260       Listener.ReadModuleMapFile(Path);
5261       break;
5262     }
5263     case INPUT_FILE_OFFSETS: {
5264       if (!NeedsInputFiles)
5265         break;
5266 
5267       unsigned NumInputFiles = Record[0];
5268       unsigned NumUserFiles = Record[1];
5269       const llvm::support::unaligned_uint64_t *InputFileOffs =
5270           (const llvm::support::unaligned_uint64_t *)Blob.data();
5271       for (unsigned I = 0; I != NumInputFiles; ++I) {
5272         // Go find this input file.
5273         bool isSystemFile = I >= NumUserFiles;
5274 
5275         if (isSystemFile && !NeedsSystemInputFiles)
5276           break; // the rest are system input files
5277 
5278         BitstreamCursor &Cursor = InputFilesCursor;
5279         SavedStreamPosition SavedPosition(Cursor);
5280         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5281           // FIXME this drops errors on the floor.
5282           consumeError(std::move(Err));
5283         }
5284 
5285         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5286         if (!MaybeCode) {
5287           // FIXME this drops errors on the floor.
5288           consumeError(MaybeCode.takeError());
5289         }
5290         unsigned Code = MaybeCode.get();
5291 
5292         RecordData Record;
5293         StringRef Blob;
5294         bool shouldContinue = false;
5295         Expected<unsigned> MaybeRecordType =
5296             Cursor.readRecord(Code, Record, &Blob);
5297         if (!MaybeRecordType) {
5298           // FIXME this drops errors on the floor.
5299           consumeError(MaybeRecordType.takeError());
5300         }
5301         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5302         case INPUT_FILE_HASH:
5303           break;
5304         case INPUT_FILE:
5305           bool Overridden = static_cast<bool>(Record[3]);
5306           std::string Filename = std::string(Blob);
5307           ResolveImportedPath(Filename, ModuleDir);
5308           shouldContinue = Listener.visitInputFile(
5309               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5310           break;
5311         }
5312         if (!shouldContinue)
5313           break;
5314       }
5315       break;
5316     }
5317 
5318     case IMPORTS: {
5319       if (!NeedsImports)
5320         break;
5321 
5322       unsigned Idx = 0, N = Record.size();
5323       while (Idx < N) {
5324         // Read information about the AST file.
5325         Idx += 1+1+1+1+5; // Kind, ImportLoc, Size, ModTime, Signature
5326         std::string ModuleName = ReadString(Record, Idx);
5327         std::string Filename = ReadString(Record, Idx);
5328         ResolveImportedPath(Filename, ModuleDir);
5329         Listener.visitImport(ModuleName, Filename);
5330       }
5331       break;
5332     }
5333 
5334     default:
5335       // No other validation to perform.
5336       break;
5337     }
5338   }
5339 
5340   // Look for module file extension blocks, if requested.
5341   if (FindModuleFileExtensions) {
5342     BitstreamCursor SavedStream = Stream;
5343     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5344       bool DoneWithExtensionBlock = false;
5345       while (!DoneWithExtensionBlock) {
5346         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5347         if (!MaybeEntry) {
5348           // FIXME this drops the error.
5349           return true;
5350         }
5351         llvm::BitstreamEntry Entry = MaybeEntry.get();
5352 
5353         switch (Entry.Kind) {
5354         case llvm::BitstreamEntry::SubBlock:
5355           if (llvm::Error Err = Stream.SkipBlock()) {
5356             // FIXME this drops the error on the floor.
5357             consumeError(std::move(Err));
5358             return true;
5359           }
5360           continue;
5361 
5362         case llvm::BitstreamEntry::EndBlock:
5363           DoneWithExtensionBlock = true;
5364           continue;
5365 
5366         case llvm::BitstreamEntry::Error:
5367           return true;
5368 
5369         case llvm::BitstreamEntry::Record:
5370           break;
5371         }
5372 
5373        Record.clear();
5374        StringRef Blob;
5375        Expected<unsigned> MaybeRecCode =
5376            Stream.readRecord(Entry.ID, Record, &Blob);
5377        if (!MaybeRecCode) {
5378          // FIXME this drops the error.
5379          return true;
5380        }
5381        switch (MaybeRecCode.get()) {
5382        case EXTENSION_METADATA: {
5383          ModuleFileExtensionMetadata Metadata;
5384          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5385            return true;
5386 
5387          Listener.readModuleFileExtension(Metadata);
5388          break;
5389        }
5390        }
5391       }
5392     }
5393     Stream = SavedStream;
5394   }
5395 
5396   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5397   if (readUnhashedControlBlockImpl(
5398           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5399           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5400           ValidateDiagnosticOptions) != Success)
5401     return true;
5402 
5403   return false;
5404 }
5405 
5406 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5407                                     const PCHContainerReader &PCHContainerRdr,
5408                                     const LangOptions &LangOpts,
5409                                     const TargetOptions &TargetOpts,
5410                                     const PreprocessorOptions &PPOpts,
5411                                     StringRef ExistingModuleCachePath) {
5412   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5413                                ExistingModuleCachePath, FileMgr);
5414   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5415                                   /*FindModuleFileExtensions=*/false,
5416                                   validator,
5417                                   /*ValidateDiagnosticOptions=*/true);
5418 }
5419 
5420 ASTReader::ASTReadResult
5421 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5422   // Enter the submodule block.
5423   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5424     Error(std::move(Err));
5425     return Failure;
5426   }
5427 
5428   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5429   bool First = true;
5430   Module *CurrentModule = nullptr;
5431   RecordData Record;
5432   while (true) {
5433     Expected<llvm::BitstreamEntry> MaybeEntry =
5434         F.Stream.advanceSkippingSubblocks();
5435     if (!MaybeEntry) {
5436       Error(MaybeEntry.takeError());
5437       return Failure;
5438     }
5439     llvm::BitstreamEntry Entry = MaybeEntry.get();
5440 
5441     switch (Entry.Kind) {
5442     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5443     case llvm::BitstreamEntry::Error:
5444       Error("malformed block record in AST file");
5445       return Failure;
5446     case llvm::BitstreamEntry::EndBlock:
5447       return Success;
5448     case llvm::BitstreamEntry::Record:
5449       // The interesting case.
5450       break;
5451     }
5452 
5453     // Read a record.
5454     StringRef Blob;
5455     Record.clear();
5456     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5457     if (!MaybeKind) {
5458       Error(MaybeKind.takeError());
5459       return Failure;
5460     }
5461     unsigned Kind = MaybeKind.get();
5462 
5463     if ((Kind == SUBMODULE_METADATA) != First) {
5464       Error("submodule metadata record should be at beginning of block");
5465       return Failure;
5466     }
5467     First = false;
5468 
5469     // Submodule information is only valid if we have a current module.
5470     // FIXME: Should we error on these cases?
5471     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5472         Kind != SUBMODULE_DEFINITION)
5473       continue;
5474 
5475     switch (Kind) {
5476     default:  // Default behavior: ignore.
5477       break;
5478 
5479     case SUBMODULE_DEFINITION: {
5480       if (Record.size() < 12) {
5481         Error("malformed module definition");
5482         return Failure;
5483       }
5484 
5485       StringRef Name = Blob;
5486       unsigned Idx = 0;
5487       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5488       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5489       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5490       bool IsFramework = Record[Idx++];
5491       bool IsExplicit = Record[Idx++];
5492       bool IsSystem = Record[Idx++];
5493       bool IsExternC = Record[Idx++];
5494       bool InferSubmodules = Record[Idx++];
5495       bool InferExplicitSubmodules = Record[Idx++];
5496       bool InferExportWildcard = Record[Idx++];
5497       bool ConfigMacrosExhaustive = Record[Idx++];
5498       bool ModuleMapIsPrivate = Record[Idx++];
5499 
5500       Module *ParentModule = nullptr;
5501       if (Parent)
5502         ParentModule = getSubmodule(Parent);
5503 
5504       // Retrieve this (sub)module from the module map, creating it if
5505       // necessary.
5506       CurrentModule =
5507           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5508               .first;
5509 
5510       // FIXME: set the definition loc for CurrentModule, or call
5511       // ModMap.setInferredModuleAllowedBy()
5512 
5513       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5514       if (GlobalIndex >= SubmodulesLoaded.size() ||
5515           SubmodulesLoaded[GlobalIndex]) {
5516         Error("too many submodules");
5517         return Failure;
5518       }
5519 
5520       if (!ParentModule) {
5521         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5522           // Don't emit module relocation error if we have -fno-validate-pch
5523           if (!PP.getPreprocessorOpts().DisablePCHValidation &&
5524               CurFile != F.File) {
5525             Error(diag::err_module_file_conflict,
5526                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5527                   F.File->getName());
5528             return Failure;
5529           }
5530         }
5531 
5532         F.DidReadTopLevelSubmodule = true;
5533         CurrentModule->setASTFile(F.File);
5534         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5535       }
5536 
5537       CurrentModule->Kind = Kind;
5538       CurrentModule->Signature = F.Signature;
5539       CurrentModule->IsFromModuleFile = true;
5540       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5541       CurrentModule->IsExternC = IsExternC;
5542       CurrentModule->InferSubmodules = InferSubmodules;
5543       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5544       CurrentModule->InferExportWildcard = InferExportWildcard;
5545       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5546       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5547       if (DeserializationListener)
5548         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5549 
5550       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5551 
5552       // Clear out data that will be replaced by what is in the module file.
5553       CurrentModule->LinkLibraries.clear();
5554       CurrentModule->ConfigMacros.clear();
5555       CurrentModule->UnresolvedConflicts.clear();
5556       CurrentModule->Conflicts.clear();
5557 
5558       // The module is available unless it's missing a requirement; relevant
5559       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5560       // Missing headers that were present when the module was built do not
5561       // make it unavailable -- if we got this far, this must be an explicitly
5562       // imported module file.
5563       CurrentModule->Requirements.clear();
5564       CurrentModule->MissingHeaders.clear();
5565       CurrentModule->IsUnimportable =
5566           ParentModule && ParentModule->IsUnimportable;
5567       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5568       break;
5569     }
5570 
5571     case SUBMODULE_UMBRELLA_HEADER: {
5572       std::string Filename = std::string(Blob);
5573       ResolveImportedPath(F, Filename);
5574       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5575         if (!CurrentModule->getUmbrellaHeader())
5576           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5577         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5578           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5579             Error("mismatched umbrella headers in submodule");
5580           return OutOfDate;
5581         }
5582       }
5583       break;
5584     }
5585 
5586     case SUBMODULE_HEADER:
5587     case SUBMODULE_EXCLUDED_HEADER:
5588     case SUBMODULE_PRIVATE_HEADER:
5589       // We lazily associate headers with their modules via the HeaderInfo table.
5590       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5591       // of complete filenames or remove it entirely.
5592       break;
5593 
5594     case SUBMODULE_TEXTUAL_HEADER:
5595     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5596       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5597       // them here.
5598       break;
5599 
5600     case SUBMODULE_TOPHEADER:
5601       CurrentModule->addTopHeaderFilename(Blob);
5602       break;
5603 
5604     case SUBMODULE_UMBRELLA_DIR: {
5605       std::string Dirname = std::string(Blob);
5606       ResolveImportedPath(F, Dirname);
5607       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5608         if (!CurrentModule->getUmbrellaDir())
5609           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5610         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5611           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5612             Error("mismatched umbrella directories in submodule");
5613           return OutOfDate;
5614         }
5615       }
5616       break;
5617     }
5618 
5619     case SUBMODULE_METADATA: {
5620       F.BaseSubmoduleID = getTotalNumSubmodules();
5621       F.LocalNumSubmodules = Record[0];
5622       unsigned LocalBaseSubmoduleID = Record[1];
5623       if (F.LocalNumSubmodules > 0) {
5624         // Introduce the global -> local mapping for submodules within this
5625         // module.
5626         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5627 
5628         // Introduce the local -> global mapping for submodules within this
5629         // module.
5630         F.SubmoduleRemap.insertOrReplace(
5631           std::make_pair(LocalBaseSubmoduleID,
5632                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5633 
5634         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5635       }
5636       break;
5637     }
5638 
5639     case SUBMODULE_IMPORTS:
5640       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5641         UnresolvedModuleRef Unresolved;
5642         Unresolved.File = &F;
5643         Unresolved.Mod = CurrentModule;
5644         Unresolved.ID = Record[Idx];
5645         Unresolved.Kind = UnresolvedModuleRef::Import;
5646         Unresolved.IsWildcard = false;
5647         UnresolvedModuleRefs.push_back(Unresolved);
5648       }
5649       break;
5650 
5651     case SUBMODULE_EXPORTS:
5652       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5653         UnresolvedModuleRef Unresolved;
5654         Unresolved.File = &F;
5655         Unresolved.Mod = CurrentModule;
5656         Unresolved.ID = Record[Idx];
5657         Unresolved.Kind = UnresolvedModuleRef::Export;
5658         Unresolved.IsWildcard = Record[Idx + 1];
5659         UnresolvedModuleRefs.push_back(Unresolved);
5660       }
5661 
5662       // Once we've loaded the set of exports, there's no reason to keep
5663       // the parsed, unresolved exports around.
5664       CurrentModule->UnresolvedExports.clear();
5665       break;
5666 
5667     case SUBMODULE_REQUIRES:
5668       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5669                                     PP.getTargetInfo());
5670       break;
5671 
5672     case SUBMODULE_LINK_LIBRARY:
5673       ModMap.resolveLinkAsDependencies(CurrentModule);
5674       CurrentModule->LinkLibraries.push_back(
5675           Module::LinkLibrary(std::string(Blob), Record[0]));
5676       break;
5677 
5678     case SUBMODULE_CONFIG_MACRO:
5679       CurrentModule->ConfigMacros.push_back(Blob.str());
5680       break;
5681 
5682     case SUBMODULE_CONFLICT: {
5683       UnresolvedModuleRef Unresolved;
5684       Unresolved.File = &F;
5685       Unresolved.Mod = CurrentModule;
5686       Unresolved.ID = Record[0];
5687       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5688       Unresolved.IsWildcard = false;
5689       Unresolved.String = Blob;
5690       UnresolvedModuleRefs.push_back(Unresolved);
5691       break;
5692     }
5693 
5694     case SUBMODULE_INITIALIZERS: {
5695       if (!ContextObj)
5696         break;
5697       SmallVector<uint32_t, 16> Inits;
5698       for (auto &ID : Record)
5699         Inits.push_back(getGlobalDeclID(F, ID));
5700       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5701       break;
5702     }
5703 
5704     case SUBMODULE_EXPORT_AS:
5705       CurrentModule->ExportAsModule = Blob.str();
5706       ModMap.addLinkAsDependency(CurrentModule);
5707       break;
5708     }
5709   }
5710 }
5711 
5712 /// Parse the record that corresponds to a LangOptions data
5713 /// structure.
5714 ///
5715 /// This routine parses the language options from the AST file and then gives
5716 /// them to the AST listener if one is set.
5717 ///
5718 /// \returns true if the listener deems the file unacceptable, false otherwise.
5719 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5720                                      bool Complain,
5721                                      ASTReaderListener &Listener,
5722                                      bool AllowCompatibleDifferences) {
5723   LangOptions LangOpts;
5724   unsigned Idx = 0;
5725 #define LANGOPT(Name, Bits, Default, Description) \
5726   LangOpts.Name = Record[Idx++];
5727 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5728   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5729 #include "clang/Basic/LangOptions.def"
5730 #define SANITIZER(NAME, ID)                                                    \
5731   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5732 #include "clang/Basic/Sanitizers.def"
5733 
5734   for (unsigned N = Record[Idx++]; N; --N)
5735     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5736 
5737   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5738   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5739   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5740 
5741   LangOpts.CurrentModule = ReadString(Record, Idx);
5742 
5743   // Comment options.
5744   for (unsigned N = Record[Idx++]; N; --N) {
5745     LangOpts.CommentOpts.BlockCommandNames.push_back(
5746       ReadString(Record, Idx));
5747   }
5748   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5749 
5750   // OpenMP offloading options.
5751   for (unsigned N = Record[Idx++]; N; --N) {
5752     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5753   }
5754 
5755   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5756 
5757   return Listener.ReadLanguageOptions(LangOpts, Complain,
5758                                       AllowCompatibleDifferences);
5759 }
5760 
5761 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5762                                    ASTReaderListener &Listener,
5763                                    bool AllowCompatibleDifferences) {
5764   unsigned Idx = 0;
5765   TargetOptions TargetOpts;
5766   TargetOpts.Triple = ReadString(Record, Idx);
5767   TargetOpts.CPU = ReadString(Record, Idx);
5768   TargetOpts.ABI = ReadString(Record, Idx);
5769   for (unsigned N = Record[Idx++]; N; --N) {
5770     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5771   }
5772   for (unsigned N = Record[Idx++]; N; --N) {
5773     TargetOpts.Features.push_back(ReadString(Record, Idx));
5774   }
5775 
5776   return Listener.ReadTargetOptions(TargetOpts, Complain,
5777                                     AllowCompatibleDifferences);
5778 }
5779 
5780 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5781                                        ASTReaderListener &Listener) {
5782   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5783   unsigned Idx = 0;
5784 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5785 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5786   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5787 #include "clang/Basic/DiagnosticOptions.def"
5788 
5789   for (unsigned N = Record[Idx++]; N; --N)
5790     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5791   for (unsigned N = Record[Idx++]; N; --N)
5792     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5793 
5794   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5795 }
5796 
5797 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5798                                        ASTReaderListener &Listener) {
5799   FileSystemOptions FSOpts;
5800   unsigned Idx = 0;
5801   FSOpts.WorkingDir = ReadString(Record, Idx);
5802   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5803 }
5804 
5805 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5806                                          bool Complain,
5807                                          ASTReaderListener &Listener) {
5808   HeaderSearchOptions HSOpts;
5809   unsigned Idx = 0;
5810   HSOpts.Sysroot = ReadString(Record, Idx);
5811 
5812   // Include entries.
5813   for (unsigned N = Record[Idx++]; N; --N) {
5814     std::string Path = ReadString(Record, Idx);
5815     frontend::IncludeDirGroup Group
5816       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5817     bool IsFramework = Record[Idx++];
5818     bool IgnoreSysRoot = Record[Idx++];
5819     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5820                                     IgnoreSysRoot);
5821   }
5822 
5823   // System header prefixes.
5824   for (unsigned N = Record[Idx++]; N; --N) {
5825     std::string Prefix = ReadString(Record, Idx);
5826     bool IsSystemHeader = Record[Idx++];
5827     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5828   }
5829 
5830   HSOpts.ResourceDir = ReadString(Record, Idx);
5831   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5832   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5833   HSOpts.DisableModuleHash = Record[Idx++];
5834   HSOpts.ImplicitModuleMaps = Record[Idx++];
5835   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5836   HSOpts.UseBuiltinIncludes = Record[Idx++];
5837   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5838   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5839   HSOpts.UseLibcxx = Record[Idx++];
5840   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5841 
5842   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5843                                           Complain);
5844 }
5845 
5846 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5847                                          bool Complain,
5848                                          ASTReaderListener &Listener,
5849                                          std::string &SuggestedPredefines) {
5850   PreprocessorOptions PPOpts;
5851   unsigned Idx = 0;
5852 
5853   // Macro definitions/undefs
5854   for (unsigned N = Record[Idx++]; N; --N) {
5855     std::string Macro = ReadString(Record, Idx);
5856     bool IsUndef = Record[Idx++];
5857     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5858   }
5859 
5860   // Includes
5861   for (unsigned N = Record[Idx++]; N; --N) {
5862     PPOpts.Includes.push_back(ReadString(Record, Idx));
5863   }
5864 
5865   // Macro Includes
5866   for (unsigned N = Record[Idx++]; N; --N) {
5867     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5868   }
5869 
5870   PPOpts.UsePredefines = Record[Idx++];
5871   PPOpts.DetailedRecord = Record[Idx++];
5872   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5873   PPOpts.ObjCXXARCStandardLibrary =
5874     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5875   SuggestedPredefines.clear();
5876   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5877                                           SuggestedPredefines);
5878 }
5879 
5880 std::pair<ModuleFile *, unsigned>
5881 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5882   GlobalPreprocessedEntityMapType::iterator
5883   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5884   assert(I != GlobalPreprocessedEntityMap.end() &&
5885          "Corrupted global preprocessed entity map");
5886   ModuleFile *M = I->second;
5887   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5888   return std::make_pair(M, LocalIndex);
5889 }
5890 
5891 llvm::iterator_range<PreprocessingRecord::iterator>
5892 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5893   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5894     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5895                                              Mod.NumPreprocessedEntities);
5896 
5897   return llvm::make_range(PreprocessingRecord::iterator(),
5898                           PreprocessingRecord::iterator());
5899 }
5900 
5901 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5902 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5903   return llvm::make_range(
5904       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5905       ModuleDeclIterator(this, &Mod,
5906                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5907 }
5908 
5909 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5910   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5911   assert(I != GlobalSkippedRangeMap.end() &&
5912     "Corrupted global skipped range map");
5913   ModuleFile *M = I->second;
5914   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5915   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5916   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5917   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5918                     TranslateSourceLocation(*M, RawRange.getEnd()));
5919   assert(Range.isValid());
5920   return Range;
5921 }
5922 
5923 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5924   PreprocessedEntityID PPID = Index+1;
5925   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5926   ModuleFile &M = *PPInfo.first;
5927   unsigned LocalIndex = PPInfo.second;
5928   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5929 
5930   if (!PP.getPreprocessingRecord()) {
5931     Error("no preprocessing record");
5932     return nullptr;
5933   }
5934 
5935   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5936   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5937           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5938     Error(std::move(Err));
5939     return nullptr;
5940   }
5941 
5942   Expected<llvm::BitstreamEntry> MaybeEntry =
5943       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5944   if (!MaybeEntry) {
5945     Error(MaybeEntry.takeError());
5946     return nullptr;
5947   }
5948   llvm::BitstreamEntry Entry = MaybeEntry.get();
5949 
5950   if (Entry.Kind != llvm::BitstreamEntry::Record)
5951     return nullptr;
5952 
5953   // Read the record.
5954   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5955                     TranslateSourceLocation(M, PPOffs.getEnd()));
5956   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5957   StringRef Blob;
5958   RecordData Record;
5959   Expected<unsigned> MaybeRecType =
5960       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5961   if (!MaybeRecType) {
5962     Error(MaybeRecType.takeError());
5963     return nullptr;
5964   }
5965   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5966   case PPD_MACRO_EXPANSION: {
5967     bool isBuiltin = Record[0];
5968     IdentifierInfo *Name = nullptr;
5969     MacroDefinitionRecord *Def = nullptr;
5970     if (isBuiltin)
5971       Name = getLocalIdentifier(M, Record[1]);
5972     else {
5973       PreprocessedEntityID GlobalID =
5974           getGlobalPreprocessedEntityID(M, Record[1]);
5975       Def = cast<MacroDefinitionRecord>(
5976           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5977     }
5978 
5979     MacroExpansion *ME;
5980     if (isBuiltin)
5981       ME = new (PPRec) MacroExpansion(Name, Range);
5982     else
5983       ME = new (PPRec) MacroExpansion(Def, Range);
5984 
5985     return ME;
5986   }
5987 
5988   case PPD_MACRO_DEFINITION: {
5989     // Decode the identifier info and then check again; if the macro is
5990     // still defined and associated with the identifier,
5991     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
5992     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
5993 
5994     if (DeserializationListener)
5995       DeserializationListener->MacroDefinitionRead(PPID, MD);
5996 
5997     return MD;
5998   }
5999 
6000   case PPD_INCLUSION_DIRECTIVE: {
6001     const char *FullFileNameStart = Blob.data() + Record[0];
6002     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6003     const FileEntry *File = nullptr;
6004     if (!FullFileName.empty())
6005       if (auto FE = PP.getFileManager().getFile(FullFileName))
6006         File = *FE;
6007 
6008     // FIXME: Stable encoding
6009     InclusionDirective::InclusionKind Kind
6010       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6011     InclusionDirective *ID
6012       = new (PPRec) InclusionDirective(PPRec, Kind,
6013                                        StringRef(Blob.data(), Record[0]),
6014                                        Record[1], Record[3],
6015                                        File,
6016                                        Range);
6017     return ID;
6018   }
6019   }
6020 
6021   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6022 }
6023 
6024 /// Find the next module that contains entities and return the ID
6025 /// of the first entry.
6026 ///
6027 /// \param SLocMapI points at a chunk of a module that contains no
6028 /// preprocessed entities or the entities it contains are not the ones we are
6029 /// looking for.
6030 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6031                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6032   ++SLocMapI;
6033   for (GlobalSLocOffsetMapType::const_iterator
6034          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6035     ModuleFile &M = *SLocMapI->second;
6036     if (M.NumPreprocessedEntities)
6037       return M.BasePreprocessedEntityID;
6038   }
6039 
6040   return getTotalNumPreprocessedEntities();
6041 }
6042 
6043 namespace {
6044 
6045 struct PPEntityComp {
6046   const ASTReader &Reader;
6047   ModuleFile &M;
6048 
6049   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6050 
6051   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6052     SourceLocation LHS = getLoc(L);
6053     SourceLocation RHS = getLoc(R);
6054     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6055   }
6056 
6057   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6058     SourceLocation LHS = getLoc(L);
6059     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6060   }
6061 
6062   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6063     SourceLocation RHS = getLoc(R);
6064     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6065   }
6066 
6067   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6068     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6069   }
6070 };
6071 
6072 } // namespace
6073 
6074 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6075                                                        bool EndsAfter) const {
6076   if (SourceMgr.isLocalSourceLocation(Loc))
6077     return getTotalNumPreprocessedEntities();
6078 
6079   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6080       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6081   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6082          "Corrupted global sloc offset map");
6083 
6084   if (SLocMapI->second->NumPreprocessedEntities == 0)
6085     return findNextPreprocessedEntity(SLocMapI);
6086 
6087   ModuleFile &M = *SLocMapI->second;
6088 
6089   using pp_iterator = const PPEntityOffset *;
6090 
6091   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6092   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6093 
6094   size_t Count = M.NumPreprocessedEntities;
6095   size_t Half;
6096   pp_iterator First = pp_begin;
6097   pp_iterator PPI;
6098 
6099   if (EndsAfter) {
6100     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6101                            PPEntityComp(*this, M));
6102   } else {
6103     // Do a binary search manually instead of using std::lower_bound because
6104     // The end locations of entities may be unordered (when a macro expansion
6105     // is inside another macro argument), but for this case it is not important
6106     // whether we get the first macro expansion or its containing macro.
6107     while (Count > 0) {
6108       Half = Count / 2;
6109       PPI = First;
6110       std::advance(PPI, Half);
6111       if (SourceMgr.isBeforeInTranslationUnit(
6112               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6113         First = PPI;
6114         ++First;
6115         Count = Count - Half - 1;
6116       } else
6117         Count = Half;
6118     }
6119   }
6120 
6121   if (PPI == pp_end)
6122     return findNextPreprocessedEntity(SLocMapI);
6123 
6124   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6125 }
6126 
6127 /// Returns a pair of [Begin, End) indices of preallocated
6128 /// preprocessed entities that \arg Range encompasses.
6129 std::pair<unsigned, unsigned>
6130     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6131   if (Range.isInvalid())
6132     return std::make_pair(0,0);
6133   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6134 
6135   PreprocessedEntityID BeginID =
6136       findPreprocessedEntity(Range.getBegin(), false);
6137   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6138   return std::make_pair(BeginID, EndID);
6139 }
6140 
6141 /// Optionally returns true or false if the preallocated preprocessed
6142 /// entity with index \arg Index came from file \arg FID.
6143 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6144                                                              FileID FID) {
6145   if (FID.isInvalid())
6146     return false;
6147 
6148   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6149   ModuleFile &M = *PPInfo.first;
6150   unsigned LocalIndex = PPInfo.second;
6151   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6152 
6153   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6154   if (Loc.isInvalid())
6155     return false;
6156 
6157   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6158     return true;
6159   else
6160     return false;
6161 }
6162 
6163 namespace {
6164 
6165   /// Visitor used to search for information about a header file.
6166   class HeaderFileInfoVisitor {
6167     const FileEntry *FE;
6168     Optional<HeaderFileInfo> HFI;
6169 
6170   public:
6171     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6172 
6173     bool operator()(ModuleFile &M) {
6174       HeaderFileInfoLookupTable *Table
6175         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6176       if (!Table)
6177         return false;
6178 
6179       // Look in the on-disk hash table for an entry for this file name.
6180       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6181       if (Pos == Table->end())
6182         return false;
6183 
6184       HFI = *Pos;
6185       return true;
6186     }
6187 
6188     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6189   };
6190 
6191 } // namespace
6192 
6193 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6194   HeaderFileInfoVisitor Visitor(FE);
6195   ModuleMgr.visit(Visitor);
6196   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6197     return *HFI;
6198 
6199   return HeaderFileInfo();
6200 }
6201 
6202 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6203   using DiagState = DiagnosticsEngine::DiagState;
6204   SmallVector<DiagState *, 32> DiagStates;
6205 
6206   for (ModuleFile &F : ModuleMgr) {
6207     unsigned Idx = 0;
6208     auto &Record = F.PragmaDiagMappings;
6209     if (Record.empty())
6210       continue;
6211 
6212     DiagStates.clear();
6213 
6214     auto ReadDiagState =
6215         [&](const DiagState &BasedOn, SourceLocation Loc,
6216             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6217       unsigned BackrefID = Record[Idx++];
6218       if (BackrefID != 0)
6219         return DiagStates[BackrefID - 1];
6220 
6221       // A new DiagState was created here.
6222       Diag.DiagStates.push_back(BasedOn);
6223       DiagState *NewState = &Diag.DiagStates.back();
6224       DiagStates.push_back(NewState);
6225       unsigned Size = Record[Idx++];
6226       assert(Idx + Size * 2 <= Record.size() &&
6227              "Invalid data, not enough diag/map pairs");
6228       while (Size--) {
6229         unsigned DiagID = Record[Idx++];
6230         DiagnosticMapping NewMapping =
6231             DiagnosticMapping::deserialize(Record[Idx++]);
6232         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6233           continue;
6234 
6235         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6236 
6237         // If this mapping was specified as a warning but the severity was
6238         // upgraded due to diagnostic settings, simulate the current diagnostic
6239         // settings (and use a warning).
6240         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6241           NewMapping.setSeverity(diag::Severity::Warning);
6242           NewMapping.setUpgradedFromWarning(false);
6243         }
6244 
6245         Mapping = NewMapping;
6246       }
6247       return NewState;
6248     };
6249 
6250     // Read the first state.
6251     DiagState *FirstState;
6252     if (F.Kind == MK_ImplicitModule) {
6253       // Implicitly-built modules are reused with different diagnostic
6254       // settings.  Use the initial diagnostic state from Diag to simulate this
6255       // compilation's diagnostic settings.
6256       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6257       DiagStates.push_back(FirstState);
6258 
6259       // Skip the initial diagnostic state from the serialized module.
6260       assert(Record[1] == 0 &&
6261              "Invalid data, unexpected backref in initial state");
6262       Idx = 3 + Record[2] * 2;
6263       assert(Idx < Record.size() &&
6264              "Invalid data, not enough state change pairs in initial state");
6265     } else if (F.isModule()) {
6266       // For an explicit module, preserve the flags from the module build
6267       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6268       // -Wblah flags.
6269       unsigned Flags = Record[Idx++];
6270       DiagState Initial;
6271       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6272       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6273       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6274       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6275       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6276       Initial.ExtBehavior = (diag::Severity)Flags;
6277       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6278 
6279       assert(F.OriginalSourceFileID.isValid());
6280 
6281       // Set up the root buffer of the module to start with the initial
6282       // diagnostic state of the module itself, to cover files that contain no
6283       // explicit transitions (for which we did not serialize anything).
6284       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6285           .StateTransitions.push_back({FirstState, 0});
6286     } else {
6287       // For prefix ASTs, start with whatever the user configured on the
6288       // command line.
6289       Idx++; // Skip flags.
6290       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6291                                  SourceLocation(), false);
6292     }
6293 
6294     // Read the state transitions.
6295     unsigned NumLocations = Record[Idx++];
6296     while (NumLocations--) {
6297       assert(Idx < Record.size() &&
6298              "Invalid data, missing pragma diagnostic states");
6299       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6300       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6301       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6302       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6303       unsigned Transitions = Record[Idx++];
6304 
6305       // Note that we don't need to set up Parent/ParentOffset here, because
6306       // we won't be changing the diagnostic state within imported FileIDs
6307       // (other than perhaps appending to the main source file, which has no
6308       // parent).
6309       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6310       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6311       for (unsigned I = 0; I != Transitions; ++I) {
6312         unsigned Offset = Record[Idx++];
6313         auto *State =
6314             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6315         F.StateTransitions.push_back({State, Offset});
6316       }
6317     }
6318 
6319     // Read the final state.
6320     assert(Idx < Record.size() &&
6321            "Invalid data, missing final pragma diagnostic state");
6322     SourceLocation CurStateLoc =
6323         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6324     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6325 
6326     if (!F.isModule()) {
6327       Diag.DiagStatesByLoc.CurDiagState = CurState;
6328       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6329 
6330       // Preserve the property that the imaginary root file describes the
6331       // current state.
6332       FileID NullFile;
6333       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6334       if (T.empty())
6335         T.push_back({CurState, 0});
6336       else
6337         T[0].State = CurState;
6338     }
6339 
6340     // Don't try to read these mappings again.
6341     Record.clear();
6342   }
6343 }
6344 
6345 /// Get the correct cursor and offset for loading a type.
6346 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6347   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6348   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6349   ModuleFile *M = I->second;
6350   return RecordLocation(
6351       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset());
6352 }
6353 
6354 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6355   switch (code) {
6356 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6357   case TYPE_##CODE_ID: return Type::CLASS_ID;
6358 #include "clang/Serialization/TypeBitCodes.def"
6359   default: return llvm::None;
6360   }
6361 }
6362 
6363 /// Read and return the type with the given index..
6364 ///
6365 /// The index is the type ID, shifted and minus the number of predefs. This
6366 /// routine actually reads the record corresponding to the type at the given
6367 /// location. It is a helper routine for GetType, which deals with reading type
6368 /// IDs.
6369 QualType ASTReader::readTypeRecord(unsigned Index) {
6370   assert(ContextObj && "reading type with no AST context");
6371   ASTContext &Context = *ContextObj;
6372   RecordLocation Loc = TypeCursorForIndex(Index);
6373   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6374 
6375   // Keep track of where we are in the stream, then jump back there
6376   // after reading this type.
6377   SavedStreamPosition SavedPosition(DeclsCursor);
6378 
6379   ReadingKindTracker ReadingKind(Read_Type, *this);
6380 
6381   // Note that we are loading a type record.
6382   Deserializing AType(this);
6383 
6384   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6385     Error(std::move(Err));
6386     return QualType();
6387   }
6388   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6389   if (!RawCode) {
6390     Error(RawCode.takeError());
6391     return QualType();
6392   }
6393 
6394   ASTRecordReader Record(*this, *Loc.F);
6395   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6396   if (!Code) {
6397     Error(Code.takeError());
6398     return QualType();
6399   }
6400   if (Code.get() == TYPE_EXT_QUAL) {
6401     QualType baseType = Record.readQualType();
6402     Qualifiers quals = Record.readQualifiers();
6403     return Context.getQualifiedType(baseType, quals);
6404   }
6405 
6406   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6407   if (!maybeClass) {
6408     Error("Unexpected code for type");
6409     return QualType();
6410   }
6411 
6412   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6413   return TypeReader.read(*maybeClass);
6414 }
6415 
6416 namespace clang {
6417 
6418 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6419   ASTRecordReader &Reader;
6420 
6421   SourceLocation readSourceLocation() {
6422     return Reader.readSourceLocation();
6423   }
6424 
6425   TypeSourceInfo *GetTypeSourceInfo() {
6426     return Reader.readTypeSourceInfo();
6427   }
6428 
6429   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6430     return Reader.readNestedNameSpecifierLoc();
6431   }
6432 
6433   Attr *ReadAttr() {
6434     return Reader.readAttr();
6435   }
6436 
6437 public:
6438   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6439 
6440   // We want compile-time assurance that we've enumerated all of
6441   // these, so unfortunately we have to declare them first, then
6442   // define them out-of-line.
6443 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6444 #define TYPELOC(CLASS, PARENT) \
6445   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6446 #include "clang/AST/TypeLocNodes.def"
6447 
6448   void VisitFunctionTypeLoc(FunctionTypeLoc);
6449   void VisitArrayTypeLoc(ArrayTypeLoc);
6450 };
6451 
6452 } // namespace clang
6453 
6454 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6455   // nothing to do
6456 }
6457 
6458 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6459   TL.setBuiltinLoc(readSourceLocation());
6460   if (TL.needsExtraLocalData()) {
6461     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6462     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Reader.readInt()));
6463     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Reader.readInt()));
6464     TL.setModeAttr(Reader.readInt());
6465   }
6466 }
6467 
6468 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6469   TL.setNameLoc(readSourceLocation());
6470 }
6471 
6472 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6473   TL.setStarLoc(readSourceLocation());
6474 }
6475 
6476 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6477   // nothing to do
6478 }
6479 
6480 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6481   // nothing to do
6482 }
6483 
6484 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6485   TL.setExpansionLoc(readSourceLocation());
6486 }
6487 
6488 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6489   TL.setCaretLoc(readSourceLocation());
6490 }
6491 
6492 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6493   TL.setAmpLoc(readSourceLocation());
6494 }
6495 
6496 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6497   TL.setAmpAmpLoc(readSourceLocation());
6498 }
6499 
6500 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6501   TL.setStarLoc(readSourceLocation());
6502   TL.setClassTInfo(GetTypeSourceInfo());
6503 }
6504 
6505 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6506   TL.setLBracketLoc(readSourceLocation());
6507   TL.setRBracketLoc(readSourceLocation());
6508   if (Reader.readBool())
6509     TL.setSizeExpr(Reader.readExpr());
6510   else
6511     TL.setSizeExpr(nullptr);
6512 }
6513 
6514 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6515   VisitArrayTypeLoc(TL);
6516 }
6517 
6518 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6519   VisitArrayTypeLoc(TL);
6520 }
6521 
6522 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6523   VisitArrayTypeLoc(TL);
6524 }
6525 
6526 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6527                                             DependentSizedArrayTypeLoc TL) {
6528   VisitArrayTypeLoc(TL);
6529 }
6530 
6531 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6532     DependentAddressSpaceTypeLoc TL) {
6533 
6534     TL.setAttrNameLoc(readSourceLocation());
6535     TL.setAttrOperandParensRange(Reader.readSourceRange());
6536     TL.setAttrExprOperand(Reader.readExpr());
6537 }
6538 
6539 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6540                                         DependentSizedExtVectorTypeLoc TL) {
6541   TL.setNameLoc(readSourceLocation());
6542 }
6543 
6544 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6545   TL.setNameLoc(readSourceLocation());
6546 }
6547 
6548 void TypeLocReader::VisitDependentVectorTypeLoc(
6549     DependentVectorTypeLoc TL) {
6550   TL.setNameLoc(readSourceLocation());
6551 }
6552 
6553 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6554   TL.setNameLoc(readSourceLocation());
6555 }
6556 
6557 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6558   TL.setAttrNameLoc(readSourceLocation());
6559   TL.setAttrOperandParensRange(Reader.readSourceRange());
6560   TL.setAttrRowOperand(Reader.readExpr());
6561   TL.setAttrColumnOperand(Reader.readExpr());
6562 }
6563 
6564 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6565     DependentSizedMatrixTypeLoc TL) {
6566   TL.setAttrNameLoc(readSourceLocation());
6567   TL.setAttrOperandParensRange(Reader.readSourceRange());
6568   TL.setAttrRowOperand(Reader.readExpr());
6569   TL.setAttrColumnOperand(Reader.readExpr());
6570 }
6571 
6572 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6573   TL.setLocalRangeBegin(readSourceLocation());
6574   TL.setLParenLoc(readSourceLocation());
6575   TL.setRParenLoc(readSourceLocation());
6576   TL.setExceptionSpecRange(Reader.readSourceRange());
6577   TL.setLocalRangeEnd(readSourceLocation());
6578   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6579     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6580   }
6581 }
6582 
6583 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6584   VisitFunctionTypeLoc(TL);
6585 }
6586 
6587 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6588   VisitFunctionTypeLoc(TL);
6589 }
6590 
6591 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6592   TL.setNameLoc(readSourceLocation());
6593 }
6594 
6595 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6596   TL.setNameLoc(readSourceLocation());
6597 }
6598 
6599 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6600   TL.setTypeofLoc(readSourceLocation());
6601   TL.setLParenLoc(readSourceLocation());
6602   TL.setRParenLoc(readSourceLocation());
6603 }
6604 
6605 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6606   TL.setTypeofLoc(readSourceLocation());
6607   TL.setLParenLoc(readSourceLocation());
6608   TL.setRParenLoc(readSourceLocation());
6609   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6610 }
6611 
6612 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6613   TL.setNameLoc(readSourceLocation());
6614 }
6615 
6616 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6617   TL.setKWLoc(readSourceLocation());
6618   TL.setLParenLoc(readSourceLocation());
6619   TL.setRParenLoc(readSourceLocation());
6620   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6621 }
6622 
6623 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6624   TL.setNameLoc(readSourceLocation());
6625   if (Reader.readBool()) {
6626     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6627     TL.setTemplateKWLoc(readSourceLocation());
6628     TL.setConceptNameLoc(readSourceLocation());
6629     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6630     TL.setLAngleLoc(readSourceLocation());
6631     TL.setRAngleLoc(readSourceLocation());
6632     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6633       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6634                               TL.getTypePtr()->getArg(i).getKind()));
6635   }
6636 }
6637 
6638 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6639     DeducedTemplateSpecializationTypeLoc TL) {
6640   TL.setTemplateNameLoc(readSourceLocation());
6641 }
6642 
6643 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6644   TL.setNameLoc(readSourceLocation());
6645 }
6646 
6647 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6648   TL.setNameLoc(readSourceLocation());
6649 }
6650 
6651 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6652   TL.setAttr(ReadAttr());
6653 }
6654 
6655 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6656   TL.setNameLoc(readSourceLocation());
6657 }
6658 
6659 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6660                                             SubstTemplateTypeParmTypeLoc TL) {
6661   TL.setNameLoc(readSourceLocation());
6662 }
6663 
6664 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6665                                           SubstTemplateTypeParmPackTypeLoc TL) {
6666   TL.setNameLoc(readSourceLocation());
6667 }
6668 
6669 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6670                                            TemplateSpecializationTypeLoc TL) {
6671   TL.setTemplateKeywordLoc(readSourceLocation());
6672   TL.setTemplateNameLoc(readSourceLocation());
6673   TL.setLAngleLoc(readSourceLocation());
6674   TL.setRAngleLoc(readSourceLocation());
6675   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6676     TL.setArgLocInfo(
6677         i,
6678         Reader.readTemplateArgumentLocInfo(
6679           TL.getTypePtr()->getArg(i).getKind()));
6680 }
6681 
6682 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6683   TL.setLParenLoc(readSourceLocation());
6684   TL.setRParenLoc(readSourceLocation());
6685 }
6686 
6687 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6688   TL.setElaboratedKeywordLoc(readSourceLocation());
6689   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6690 }
6691 
6692 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6693   TL.setNameLoc(readSourceLocation());
6694 }
6695 
6696 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6697   TL.setElaboratedKeywordLoc(readSourceLocation());
6698   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6699   TL.setNameLoc(readSourceLocation());
6700 }
6701 
6702 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6703        DependentTemplateSpecializationTypeLoc TL) {
6704   TL.setElaboratedKeywordLoc(readSourceLocation());
6705   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6706   TL.setTemplateKeywordLoc(readSourceLocation());
6707   TL.setTemplateNameLoc(readSourceLocation());
6708   TL.setLAngleLoc(readSourceLocation());
6709   TL.setRAngleLoc(readSourceLocation());
6710   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6711     TL.setArgLocInfo(
6712         I,
6713         Reader.readTemplateArgumentLocInfo(
6714             TL.getTypePtr()->getArg(I).getKind()));
6715 }
6716 
6717 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6718   TL.setEllipsisLoc(readSourceLocation());
6719 }
6720 
6721 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6722   TL.setNameLoc(readSourceLocation());
6723 }
6724 
6725 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6726   if (TL.getNumProtocols()) {
6727     TL.setProtocolLAngleLoc(readSourceLocation());
6728     TL.setProtocolRAngleLoc(readSourceLocation());
6729   }
6730   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6731     TL.setProtocolLoc(i, readSourceLocation());
6732 }
6733 
6734 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6735   TL.setHasBaseTypeAsWritten(Reader.readBool());
6736   TL.setTypeArgsLAngleLoc(readSourceLocation());
6737   TL.setTypeArgsRAngleLoc(readSourceLocation());
6738   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6739     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6740   TL.setProtocolLAngleLoc(readSourceLocation());
6741   TL.setProtocolRAngleLoc(readSourceLocation());
6742   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6743     TL.setProtocolLoc(i, readSourceLocation());
6744 }
6745 
6746 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6747   TL.setStarLoc(readSourceLocation());
6748 }
6749 
6750 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6751   TL.setKWLoc(readSourceLocation());
6752   TL.setLParenLoc(readSourceLocation());
6753   TL.setRParenLoc(readSourceLocation());
6754 }
6755 
6756 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6757   TL.setKWLoc(readSourceLocation());
6758 }
6759 
6760 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6761   TL.setNameLoc(readSourceLocation());
6762 }
6763 void TypeLocReader::VisitDependentExtIntTypeLoc(
6764     clang::DependentExtIntTypeLoc TL) {
6765   TL.setNameLoc(readSourceLocation());
6766 }
6767 
6768 
6769 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6770   TypeLocReader TLR(*this);
6771   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6772     TLR.Visit(TL);
6773 }
6774 
6775 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6776   QualType InfoTy = readType();
6777   if (InfoTy.isNull())
6778     return nullptr;
6779 
6780   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6781   readTypeLoc(TInfo->getTypeLoc());
6782   return TInfo;
6783 }
6784 
6785 QualType ASTReader::GetType(TypeID ID) {
6786   assert(ContextObj && "reading type with no AST context");
6787   ASTContext &Context = *ContextObj;
6788 
6789   unsigned FastQuals = ID & Qualifiers::FastMask;
6790   unsigned Index = ID >> Qualifiers::FastWidth;
6791 
6792   if (Index < NUM_PREDEF_TYPE_IDS) {
6793     QualType T;
6794     switch ((PredefinedTypeIDs)Index) {
6795     case PREDEF_TYPE_NULL_ID:
6796       return QualType();
6797     case PREDEF_TYPE_VOID_ID:
6798       T = Context.VoidTy;
6799       break;
6800     case PREDEF_TYPE_BOOL_ID:
6801       T = Context.BoolTy;
6802       break;
6803     case PREDEF_TYPE_CHAR_U_ID:
6804     case PREDEF_TYPE_CHAR_S_ID:
6805       // FIXME: Check that the signedness of CharTy is correct!
6806       T = Context.CharTy;
6807       break;
6808     case PREDEF_TYPE_UCHAR_ID:
6809       T = Context.UnsignedCharTy;
6810       break;
6811     case PREDEF_TYPE_USHORT_ID:
6812       T = Context.UnsignedShortTy;
6813       break;
6814     case PREDEF_TYPE_UINT_ID:
6815       T = Context.UnsignedIntTy;
6816       break;
6817     case PREDEF_TYPE_ULONG_ID:
6818       T = Context.UnsignedLongTy;
6819       break;
6820     case PREDEF_TYPE_ULONGLONG_ID:
6821       T = Context.UnsignedLongLongTy;
6822       break;
6823     case PREDEF_TYPE_UINT128_ID:
6824       T = Context.UnsignedInt128Ty;
6825       break;
6826     case PREDEF_TYPE_SCHAR_ID:
6827       T = Context.SignedCharTy;
6828       break;
6829     case PREDEF_TYPE_WCHAR_ID:
6830       T = Context.WCharTy;
6831       break;
6832     case PREDEF_TYPE_SHORT_ID:
6833       T = Context.ShortTy;
6834       break;
6835     case PREDEF_TYPE_INT_ID:
6836       T = Context.IntTy;
6837       break;
6838     case PREDEF_TYPE_LONG_ID:
6839       T = Context.LongTy;
6840       break;
6841     case PREDEF_TYPE_LONGLONG_ID:
6842       T = Context.LongLongTy;
6843       break;
6844     case PREDEF_TYPE_INT128_ID:
6845       T = Context.Int128Ty;
6846       break;
6847     case PREDEF_TYPE_HALF_ID:
6848       T = Context.HalfTy;
6849       break;
6850     case PREDEF_TYPE_FLOAT_ID:
6851       T = Context.FloatTy;
6852       break;
6853     case PREDEF_TYPE_DOUBLE_ID:
6854       T = Context.DoubleTy;
6855       break;
6856     case PREDEF_TYPE_LONGDOUBLE_ID:
6857       T = Context.LongDoubleTy;
6858       break;
6859     case PREDEF_TYPE_SHORT_ACCUM_ID:
6860       T = Context.ShortAccumTy;
6861       break;
6862     case PREDEF_TYPE_ACCUM_ID:
6863       T = Context.AccumTy;
6864       break;
6865     case PREDEF_TYPE_LONG_ACCUM_ID:
6866       T = Context.LongAccumTy;
6867       break;
6868     case PREDEF_TYPE_USHORT_ACCUM_ID:
6869       T = Context.UnsignedShortAccumTy;
6870       break;
6871     case PREDEF_TYPE_UACCUM_ID:
6872       T = Context.UnsignedAccumTy;
6873       break;
6874     case PREDEF_TYPE_ULONG_ACCUM_ID:
6875       T = Context.UnsignedLongAccumTy;
6876       break;
6877     case PREDEF_TYPE_SHORT_FRACT_ID:
6878       T = Context.ShortFractTy;
6879       break;
6880     case PREDEF_TYPE_FRACT_ID:
6881       T = Context.FractTy;
6882       break;
6883     case PREDEF_TYPE_LONG_FRACT_ID:
6884       T = Context.LongFractTy;
6885       break;
6886     case PREDEF_TYPE_USHORT_FRACT_ID:
6887       T = Context.UnsignedShortFractTy;
6888       break;
6889     case PREDEF_TYPE_UFRACT_ID:
6890       T = Context.UnsignedFractTy;
6891       break;
6892     case PREDEF_TYPE_ULONG_FRACT_ID:
6893       T = Context.UnsignedLongFractTy;
6894       break;
6895     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6896       T = Context.SatShortAccumTy;
6897       break;
6898     case PREDEF_TYPE_SAT_ACCUM_ID:
6899       T = Context.SatAccumTy;
6900       break;
6901     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6902       T = Context.SatLongAccumTy;
6903       break;
6904     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6905       T = Context.SatUnsignedShortAccumTy;
6906       break;
6907     case PREDEF_TYPE_SAT_UACCUM_ID:
6908       T = Context.SatUnsignedAccumTy;
6909       break;
6910     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6911       T = Context.SatUnsignedLongAccumTy;
6912       break;
6913     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6914       T = Context.SatShortFractTy;
6915       break;
6916     case PREDEF_TYPE_SAT_FRACT_ID:
6917       T = Context.SatFractTy;
6918       break;
6919     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6920       T = Context.SatLongFractTy;
6921       break;
6922     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6923       T = Context.SatUnsignedShortFractTy;
6924       break;
6925     case PREDEF_TYPE_SAT_UFRACT_ID:
6926       T = Context.SatUnsignedFractTy;
6927       break;
6928     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6929       T = Context.SatUnsignedLongFractTy;
6930       break;
6931     case PREDEF_TYPE_FLOAT16_ID:
6932       T = Context.Float16Ty;
6933       break;
6934     case PREDEF_TYPE_FLOAT128_ID:
6935       T = Context.Float128Ty;
6936       break;
6937     case PREDEF_TYPE_OVERLOAD_ID:
6938       T = Context.OverloadTy;
6939       break;
6940     case PREDEF_TYPE_BOUND_MEMBER:
6941       T = Context.BoundMemberTy;
6942       break;
6943     case PREDEF_TYPE_PSEUDO_OBJECT:
6944       T = Context.PseudoObjectTy;
6945       break;
6946     case PREDEF_TYPE_DEPENDENT_ID:
6947       T = Context.DependentTy;
6948       break;
6949     case PREDEF_TYPE_UNKNOWN_ANY:
6950       T = Context.UnknownAnyTy;
6951       break;
6952     case PREDEF_TYPE_NULLPTR_ID:
6953       T = Context.NullPtrTy;
6954       break;
6955     case PREDEF_TYPE_CHAR8_ID:
6956       T = Context.Char8Ty;
6957       break;
6958     case PREDEF_TYPE_CHAR16_ID:
6959       T = Context.Char16Ty;
6960       break;
6961     case PREDEF_TYPE_CHAR32_ID:
6962       T = Context.Char32Ty;
6963       break;
6964     case PREDEF_TYPE_OBJC_ID:
6965       T = Context.ObjCBuiltinIdTy;
6966       break;
6967     case PREDEF_TYPE_OBJC_CLASS:
6968       T = Context.ObjCBuiltinClassTy;
6969       break;
6970     case PREDEF_TYPE_OBJC_SEL:
6971       T = Context.ObjCBuiltinSelTy;
6972       break;
6973 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6974     case PREDEF_TYPE_##Id##_ID: \
6975       T = Context.SingletonId; \
6976       break;
6977 #include "clang/Basic/OpenCLImageTypes.def"
6978 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
6979     case PREDEF_TYPE_##Id##_ID: \
6980       T = Context.Id##Ty; \
6981       break;
6982 #include "clang/Basic/OpenCLExtensionTypes.def"
6983     case PREDEF_TYPE_SAMPLER_ID:
6984       T = Context.OCLSamplerTy;
6985       break;
6986     case PREDEF_TYPE_EVENT_ID:
6987       T = Context.OCLEventTy;
6988       break;
6989     case PREDEF_TYPE_CLK_EVENT_ID:
6990       T = Context.OCLClkEventTy;
6991       break;
6992     case PREDEF_TYPE_QUEUE_ID:
6993       T = Context.OCLQueueTy;
6994       break;
6995     case PREDEF_TYPE_RESERVE_ID_ID:
6996       T = Context.OCLReserveIDTy;
6997       break;
6998     case PREDEF_TYPE_AUTO_DEDUCT:
6999       T = Context.getAutoDeductType();
7000       break;
7001     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7002       T = Context.getAutoRRefDeductType();
7003       break;
7004     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7005       T = Context.ARCUnbridgedCastTy;
7006       break;
7007     case PREDEF_TYPE_BUILTIN_FN:
7008       T = Context.BuiltinFnTy;
7009       break;
7010     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7011       T = Context.OMPArraySectionTy;
7012       break;
7013     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7014       T = Context.OMPArraySectionTy;
7015       break;
7016     case PREDEF_TYPE_OMP_ITERATOR:
7017       T = Context.OMPIteratorTy;
7018       break;
7019 #define SVE_TYPE(Name, Id, SingletonId) \
7020     case PREDEF_TYPE_##Id##_ID: \
7021       T = Context.SingletonId; \
7022       break;
7023 #include "clang/Basic/AArch64SVEACLETypes.def"
7024     }
7025 
7026     assert(!T.isNull() && "Unknown predefined type");
7027     return T.withFastQualifiers(FastQuals);
7028   }
7029 
7030   Index -= NUM_PREDEF_TYPE_IDS;
7031   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7032   if (TypesLoaded[Index].isNull()) {
7033     TypesLoaded[Index] = readTypeRecord(Index);
7034     if (TypesLoaded[Index].isNull())
7035       return QualType();
7036 
7037     TypesLoaded[Index]->setFromAST();
7038     if (DeserializationListener)
7039       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7040                                         TypesLoaded[Index]);
7041   }
7042 
7043   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7044 }
7045 
7046 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7047   return GetType(getGlobalTypeID(F, LocalID));
7048 }
7049 
7050 serialization::TypeID
7051 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7052   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7053   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7054 
7055   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7056     return LocalID;
7057 
7058   if (!F.ModuleOffsetMap.empty())
7059     ReadModuleOffsetMap(F);
7060 
7061   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7062     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7063   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7064 
7065   unsigned GlobalIndex = LocalIndex + I->second;
7066   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7067 }
7068 
7069 TemplateArgumentLocInfo
7070 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7071   switch (Kind) {
7072   case TemplateArgument::Expression:
7073     return readExpr();
7074   case TemplateArgument::Type:
7075     return readTypeSourceInfo();
7076   case TemplateArgument::Template: {
7077     NestedNameSpecifierLoc QualifierLoc =
7078       readNestedNameSpecifierLoc();
7079     SourceLocation TemplateNameLoc = readSourceLocation();
7080     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7081                                    SourceLocation());
7082   }
7083   case TemplateArgument::TemplateExpansion: {
7084     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7085     SourceLocation TemplateNameLoc = readSourceLocation();
7086     SourceLocation EllipsisLoc = readSourceLocation();
7087     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7088                                    EllipsisLoc);
7089   }
7090   case TemplateArgument::Null:
7091   case TemplateArgument::Integral:
7092   case TemplateArgument::Declaration:
7093   case TemplateArgument::NullPtr:
7094   case TemplateArgument::Pack:
7095     // FIXME: Is this right?
7096     return TemplateArgumentLocInfo();
7097   }
7098   llvm_unreachable("unexpected template argument loc");
7099 }
7100 
7101 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7102   TemplateArgument Arg = readTemplateArgument();
7103 
7104   if (Arg.getKind() == TemplateArgument::Expression) {
7105     if (readBool()) // bool InfoHasSameExpr.
7106       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7107   }
7108   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7109 }
7110 
7111 const ASTTemplateArgumentListInfo *
7112 ASTRecordReader::readASTTemplateArgumentListInfo() {
7113   SourceLocation LAngleLoc = readSourceLocation();
7114   SourceLocation RAngleLoc = readSourceLocation();
7115   unsigned NumArgsAsWritten = readInt();
7116   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7117   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7118     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7119   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7120 }
7121 
7122 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7123   return GetDecl(ID);
7124 }
7125 
7126 void ASTReader::CompleteRedeclChain(const Decl *D) {
7127   if (NumCurrentElementsDeserializing) {
7128     // We arrange to not care about the complete redeclaration chain while we're
7129     // deserializing. Just remember that the AST has marked this one as complete
7130     // but that it's not actually complete yet, so we know we still need to
7131     // complete it later.
7132     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7133     return;
7134   }
7135 
7136   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7137 
7138   // If this is a named declaration, complete it by looking it up
7139   // within its context.
7140   //
7141   // FIXME: Merging a function definition should merge
7142   // all mergeable entities within it.
7143   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7144       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7145     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7146       if (!getContext().getLangOpts().CPlusPlus &&
7147           isa<TranslationUnitDecl>(DC)) {
7148         // Outside of C++, we don't have a lookup table for the TU, so update
7149         // the identifier instead. (For C++ modules, we don't store decls
7150         // in the serialized identifier table, so we do the lookup in the TU.)
7151         auto *II = Name.getAsIdentifierInfo();
7152         assert(II && "non-identifier name in C?");
7153         if (II->isOutOfDate())
7154           updateOutOfDateIdentifier(*II);
7155       } else
7156         DC->lookup(Name);
7157     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7158       // Find all declarations of this kind from the relevant context.
7159       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7160         auto *DC = cast<DeclContext>(DCDecl);
7161         SmallVector<Decl*, 8> Decls;
7162         FindExternalLexicalDecls(
7163             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7164       }
7165     }
7166   }
7167 
7168   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7169     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7170   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7171     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7172   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7173     if (auto *Template = FD->getPrimaryTemplate())
7174       Template->LoadLazySpecializations();
7175   }
7176 }
7177 
7178 CXXCtorInitializer **
7179 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7180   RecordLocation Loc = getLocalBitOffset(Offset);
7181   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7182   SavedStreamPosition SavedPosition(Cursor);
7183   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7184     Error(std::move(Err));
7185     return nullptr;
7186   }
7187   ReadingKindTracker ReadingKind(Read_Decl, *this);
7188 
7189   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7190   if (!MaybeCode) {
7191     Error(MaybeCode.takeError());
7192     return nullptr;
7193   }
7194   unsigned Code = MaybeCode.get();
7195 
7196   ASTRecordReader Record(*this, *Loc.F);
7197   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7198   if (!MaybeRecCode) {
7199     Error(MaybeRecCode.takeError());
7200     return nullptr;
7201   }
7202   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7203     Error("malformed AST file: missing C++ ctor initializers");
7204     return nullptr;
7205   }
7206 
7207   return Record.readCXXCtorInitializers();
7208 }
7209 
7210 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7211   assert(ContextObj && "reading base specifiers with no AST context");
7212   ASTContext &Context = *ContextObj;
7213 
7214   RecordLocation Loc = getLocalBitOffset(Offset);
7215   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7216   SavedStreamPosition SavedPosition(Cursor);
7217   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7218     Error(std::move(Err));
7219     return nullptr;
7220   }
7221   ReadingKindTracker ReadingKind(Read_Decl, *this);
7222 
7223   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7224   if (!MaybeCode) {
7225     Error(MaybeCode.takeError());
7226     return nullptr;
7227   }
7228   unsigned Code = MaybeCode.get();
7229 
7230   ASTRecordReader Record(*this, *Loc.F);
7231   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7232   if (!MaybeRecCode) {
7233     Error(MaybeCode.takeError());
7234     return nullptr;
7235   }
7236   unsigned RecCode = MaybeRecCode.get();
7237 
7238   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7239     Error("malformed AST file: missing C++ base specifiers");
7240     return nullptr;
7241   }
7242 
7243   unsigned NumBases = Record.readInt();
7244   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7245   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7246   for (unsigned I = 0; I != NumBases; ++I)
7247     Bases[I] = Record.readCXXBaseSpecifier();
7248   return Bases;
7249 }
7250 
7251 serialization::DeclID
7252 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7253   if (LocalID < NUM_PREDEF_DECL_IDS)
7254     return LocalID;
7255 
7256   if (!F.ModuleOffsetMap.empty())
7257     ReadModuleOffsetMap(F);
7258 
7259   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7260     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7261   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7262 
7263   return LocalID + I->second;
7264 }
7265 
7266 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7267                                    ModuleFile &M) const {
7268   // Predefined decls aren't from any module.
7269   if (ID < NUM_PREDEF_DECL_IDS)
7270     return false;
7271 
7272   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7273          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7274 }
7275 
7276 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7277   if (!D->isFromASTFile())
7278     return nullptr;
7279   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7280   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7281   return I->second;
7282 }
7283 
7284 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7285   if (ID < NUM_PREDEF_DECL_IDS)
7286     return SourceLocation();
7287 
7288   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7289 
7290   if (Index > DeclsLoaded.size()) {
7291     Error("declaration ID out-of-range for AST file");
7292     return SourceLocation();
7293   }
7294 
7295   if (Decl *D = DeclsLoaded[Index])
7296     return D->getLocation();
7297 
7298   SourceLocation Loc;
7299   DeclCursorForID(ID, Loc);
7300   return Loc;
7301 }
7302 
7303 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7304   switch (ID) {
7305   case PREDEF_DECL_NULL_ID:
7306     return nullptr;
7307 
7308   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7309     return Context.getTranslationUnitDecl();
7310 
7311   case PREDEF_DECL_OBJC_ID_ID:
7312     return Context.getObjCIdDecl();
7313 
7314   case PREDEF_DECL_OBJC_SEL_ID:
7315     return Context.getObjCSelDecl();
7316 
7317   case PREDEF_DECL_OBJC_CLASS_ID:
7318     return Context.getObjCClassDecl();
7319 
7320   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7321     return Context.getObjCProtocolDecl();
7322 
7323   case PREDEF_DECL_INT_128_ID:
7324     return Context.getInt128Decl();
7325 
7326   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7327     return Context.getUInt128Decl();
7328 
7329   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7330     return Context.getObjCInstanceTypeDecl();
7331 
7332   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7333     return Context.getBuiltinVaListDecl();
7334 
7335   case PREDEF_DECL_VA_LIST_TAG:
7336     return Context.getVaListTagDecl();
7337 
7338   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7339     return Context.getBuiltinMSVaListDecl();
7340 
7341   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7342     return Context.getMSGuidTagDecl();
7343 
7344   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7345     return Context.getExternCContextDecl();
7346 
7347   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7348     return Context.getMakeIntegerSeqDecl();
7349 
7350   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7351     return Context.getCFConstantStringDecl();
7352 
7353   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7354     return Context.getCFConstantStringTagDecl();
7355 
7356   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7357     return Context.getTypePackElementDecl();
7358   }
7359   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7360 }
7361 
7362 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7363   assert(ContextObj && "reading decl with no AST context");
7364   if (ID < NUM_PREDEF_DECL_IDS) {
7365     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7366     if (D) {
7367       // Track that we have merged the declaration with ID \p ID into the
7368       // pre-existing predefined declaration \p D.
7369       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7370       if (Merged.empty())
7371         Merged.push_back(ID);
7372     }
7373     return D;
7374   }
7375 
7376   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7377 
7378   if (Index >= DeclsLoaded.size()) {
7379     assert(0 && "declaration ID out-of-range for AST file");
7380     Error("declaration ID out-of-range for AST file");
7381     return nullptr;
7382   }
7383 
7384   return DeclsLoaded[Index];
7385 }
7386 
7387 Decl *ASTReader::GetDecl(DeclID ID) {
7388   if (ID < NUM_PREDEF_DECL_IDS)
7389     return GetExistingDecl(ID);
7390 
7391   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7392 
7393   if (Index >= DeclsLoaded.size()) {
7394     assert(0 && "declaration ID out-of-range for AST file");
7395     Error("declaration ID out-of-range for AST file");
7396     return nullptr;
7397   }
7398 
7399   if (!DeclsLoaded[Index]) {
7400     ReadDeclRecord(ID);
7401     if (DeserializationListener)
7402       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7403   }
7404 
7405   return DeclsLoaded[Index];
7406 }
7407 
7408 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7409                                                   DeclID GlobalID) {
7410   if (GlobalID < NUM_PREDEF_DECL_IDS)
7411     return GlobalID;
7412 
7413   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7414   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7415   ModuleFile *Owner = I->second;
7416 
7417   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7418     = M.GlobalToLocalDeclIDs.find(Owner);
7419   if (Pos == M.GlobalToLocalDeclIDs.end())
7420     return 0;
7421 
7422   return GlobalID - Owner->BaseDeclID + Pos->second;
7423 }
7424 
7425 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7426                                             const RecordData &Record,
7427                                             unsigned &Idx) {
7428   if (Idx >= Record.size()) {
7429     Error("Corrupted AST file");
7430     return 0;
7431   }
7432 
7433   return getGlobalDeclID(F, Record[Idx++]);
7434 }
7435 
7436 /// Resolve the offset of a statement into a statement.
7437 ///
7438 /// This operation will read a new statement from the external
7439 /// source each time it is called, and is meant to be used via a
7440 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7441 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7442   // Switch case IDs are per Decl.
7443   ClearSwitchCaseIDs();
7444 
7445   // Offset here is a global offset across the entire chain.
7446   RecordLocation Loc = getLocalBitOffset(Offset);
7447   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7448     Error(std::move(Err));
7449     return nullptr;
7450   }
7451   assert(NumCurrentElementsDeserializing == 0 &&
7452          "should not be called while already deserializing");
7453   Deserializing D(this);
7454   return ReadStmtFromStream(*Loc.F);
7455 }
7456 
7457 void ASTReader::FindExternalLexicalDecls(
7458     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7459     SmallVectorImpl<Decl *> &Decls) {
7460   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7461 
7462   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7463     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7464     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7465       auto K = (Decl::Kind)+LexicalDecls[I];
7466       if (!IsKindWeWant(K))
7467         continue;
7468 
7469       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7470 
7471       // Don't add predefined declarations to the lexical context more
7472       // than once.
7473       if (ID < NUM_PREDEF_DECL_IDS) {
7474         if (PredefsVisited[ID])
7475           continue;
7476 
7477         PredefsVisited[ID] = true;
7478       }
7479 
7480       if (Decl *D = GetLocalDecl(*M, ID)) {
7481         assert(D->getKind() == K && "wrong kind for lexical decl");
7482         if (!DC->isDeclInLexicalTraversal(D))
7483           Decls.push_back(D);
7484       }
7485     }
7486   };
7487 
7488   if (isa<TranslationUnitDecl>(DC)) {
7489     for (auto Lexical : TULexicalDecls)
7490       Visit(Lexical.first, Lexical.second);
7491   } else {
7492     auto I = LexicalDecls.find(DC);
7493     if (I != LexicalDecls.end())
7494       Visit(I->second.first, I->second.second);
7495   }
7496 
7497   ++NumLexicalDeclContextsRead;
7498 }
7499 
7500 namespace {
7501 
7502 class DeclIDComp {
7503   ASTReader &Reader;
7504   ModuleFile &Mod;
7505 
7506 public:
7507   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7508 
7509   bool operator()(LocalDeclID L, LocalDeclID R) const {
7510     SourceLocation LHS = getLocation(L);
7511     SourceLocation RHS = getLocation(R);
7512     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7513   }
7514 
7515   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7516     SourceLocation RHS = getLocation(R);
7517     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7518   }
7519 
7520   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7521     SourceLocation LHS = getLocation(L);
7522     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7523   }
7524 
7525   SourceLocation getLocation(LocalDeclID ID) const {
7526     return Reader.getSourceManager().getFileLoc(
7527             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7528   }
7529 };
7530 
7531 } // namespace
7532 
7533 void ASTReader::FindFileRegionDecls(FileID File,
7534                                     unsigned Offset, unsigned Length,
7535                                     SmallVectorImpl<Decl *> &Decls) {
7536   SourceManager &SM = getSourceManager();
7537 
7538   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7539   if (I == FileDeclIDs.end())
7540     return;
7541 
7542   FileDeclsInfo &DInfo = I->second;
7543   if (DInfo.Decls.empty())
7544     return;
7545 
7546   SourceLocation
7547     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7548   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7549 
7550   DeclIDComp DIDComp(*this, *DInfo.Mod);
7551   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7552       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7553   if (BeginIt != DInfo.Decls.begin())
7554     --BeginIt;
7555 
7556   // If we are pointing at a top-level decl inside an objc container, we need
7557   // to backtrack until we find it otherwise we will fail to report that the
7558   // region overlaps with an objc container.
7559   while (BeginIt != DInfo.Decls.begin() &&
7560          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7561              ->isTopLevelDeclInObjCContainer())
7562     --BeginIt;
7563 
7564   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7565       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7566   if (EndIt != DInfo.Decls.end())
7567     ++EndIt;
7568 
7569   for (ArrayRef<serialization::LocalDeclID>::iterator
7570          DIt = BeginIt; DIt != EndIt; ++DIt)
7571     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7572 }
7573 
7574 bool
7575 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7576                                           DeclarationName Name) {
7577   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7578          "DeclContext has no visible decls in storage");
7579   if (!Name)
7580     return false;
7581 
7582   auto It = Lookups.find(DC);
7583   if (It == Lookups.end())
7584     return false;
7585 
7586   Deserializing LookupResults(this);
7587 
7588   // Load the list of declarations.
7589   SmallVector<NamedDecl *, 64> Decls;
7590   for (DeclID ID : It->second.Table.find(Name)) {
7591     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7592     if (ND->getDeclName() == Name)
7593       Decls.push_back(ND);
7594   }
7595 
7596   ++NumVisibleDeclContextsRead;
7597   SetExternalVisibleDeclsForName(DC, Name, Decls);
7598   return !Decls.empty();
7599 }
7600 
7601 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7602   if (!DC->hasExternalVisibleStorage())
7603     return;
7604 
7605   auto It = Lookups.find(DC);
7606   assert(It != Lookups.end() &&
7607          "have external visible storage but no lookup tables");
7608 
7609   DeclsMap Decls;
7610 
7611   for (DeclID ID : It->second.Table.findAll()) {
7612     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7613     Decls[ND->getDeclName()].push_back(ND);
7614   }
7615 
7616   ++NumVisibleDeclContextsRead;
7617 
7618   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7619     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7620   }
7621   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7622 }
7623 
7624 const serialization::reader::DeclContextLookupTable *
7625 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7626   auto I = Lookups.find(Primary);
7627   return I == Lookups.end() ? nullptr : &I->second;
7628 }
7629 
7630 /// Under non-PCH compilation the consumer receives the objc methods
7631 /// before receiving the implementation, and codegen depends on this.
7632 /// We simulate this by deserializing and passing to consumer the methods of the
7633 /// implementation before passing the deserialized implementation decl.
7634 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7635                                        ASTConsumer *Consumer) {
7636   assert(ImplD && Consumer);
7637 
7638   for (auto *I : ImplD->methods())
7639     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7640 
7641   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7642 }
7643 
7644 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7645   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7646     PassObjCImplDeclToConsumer(ImplD, Consumer);
7647   else
7648     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7649 }
7650 
7651 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7652   this->Consumer = Consumer;
7653 
7654   if (Consumer)
7655     PassInterestingDeclsToConsumer();
7656 
7657   if (DeserializationListener)
7658     DeserializationListener->ReaderInitialized(this);
7659 }
7660 
7661 void ASTReader::PrintStats() {
7662   std::fprintf(stderr, "*** AST File Statistics:\n");
7663 
7664   unsigned NumTypesLoaded
7665     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7666                                       QualType());
7667   unsigned NumDeclsLoaded
7668     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7669                                       (Decl *)nullptr);
7670   unsigned NumIdentifiersLoaded
7671     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7672                                             IdentifiersLoaded.end(),
7673                                             (IdentifierInfo *)nullptr);
7674   unsigned NumMacrosLoaded
7675     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7676                                        MacrosLoaded.end(),
7677                                        (MacroInfo *)nullptr);
7678   unsigned NumSelectorsLoaded
7679     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7680                                           SelectorsLoaded.end(),
7681                                           Selector());
7682 
7683   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7684     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7685                  NumSLocEntriesRead, TotalNumSLocEntries,
7686                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7687   if (!TypesLoaded.empty())
7688     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7689                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7690                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7691   if (!DeclsLoaded.empty())
7692     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7693                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7694                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7695   if (!IdentifiersLoaded.empty())
7696     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7697                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7698                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7699   if (!MacrosLoaded.empty())
7700     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7701                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7702                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7703   if (!SelectorsLoaded.empty())
7704     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7705                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7706                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7707   if (TotalNumStatements)
7708     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7709                  NumStatementsRead, TotalNumStatements,
7710                  ((float)NumStatementsRead/TotalNumStatements * 100));
7711   if (TotalNumMacros)
7712     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7713                  NumMacrosRead, TotalNumMacros,
7714                  ((float)NumMacrosRead/TotalNumMacros * 100));
7715   if (TotalLexicalDeclContexts)
7716     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7717                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7718                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7719                   * 100));
7720   if (TotalVisibleDeclContexts)
7721     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7722                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7723                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7724                   * 100));
7725   if (TotalNumMethodPoolEntries)
7726     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7727                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7728                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7729                   * 100));
7730   if (NumMethodPoolLookups)
7731     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7732                  NumMethodPoolHits, NumMethodPoolLookups,
7733                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7734   if (NumMethodPoolTableLookups)
7735     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7736                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7737                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7738                   * 100.0));
7739   if (NumIdentifierLookupHits)
7740     std::fprintf(stderr,
7741                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7742                  NumIdentifierLookupHits, NumIdentifierLookups,
7743                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7744 
7745   if (GlobalIndex) {
7746     std::fprintf(stderr, "\n");
7747     GlobalIndex->printStats();
7748   }
7749 
7750   std::fprintf(stderr, "\n");
7751   dump();
7752   std::fprintf(stderr, "\n");
7753 }
7754 
7755 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7756 LLVM_DUMP_METHOD static void
7757 dumpModuleIDMap(StringRef Name,
7758                 const ContinuousRangeMap<Key, ModuleFile *,
7759                                          InitialCapacity> &Map) {
7760   if (Map.begin() == Map.end())
7761     return;
7762 
7763   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7764 
7765   llvm::errs() << Name << ":\n";
7766   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7767        I != IEnd; ++I) {
7768     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7769       << "\n";
7770   }
7771 }
7772 
7773 LLVM_DUMP_METHOD void ASTReader::dump() {
7774   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7775   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7776   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7777   dumpModuleIDMap("Global type map", GlobalTypeMap);
7778   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7779   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7780   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7781   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7782   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7783   dumpModuleIDMap("Global preprocessed entity map",
7784                   GlobalPreprocessedEntityMap);
7785 
7786   llvm::errs() << "\n*** PCH/Modules Loaded:";
7787   for (ModuleFile &M : ModuleMgr)
7788     M.dump();
7789 }
7790 
7791 /// Return the amount of memory used by memory buffers, breaking down
7792 /// by heap-backed versus mmap'ed memory.
7793 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7794   for (ModuleFile &I : ModuleMgr) {
7795     if (llvm::MemoryBuffer *buf = I.Buffer) {
7796       size_t bytes = buf->getBufferSize();
7797       switch (buf->getBufferKind()) {
7798         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7799           sizes.malloc_bytes += bytes;
7800           break;
7801         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7802           sizes.mmap_bytes += bytes;
7803           break;
7804       }
7805     }
7806   }
7807 }
7808 
7809 void ASTReader::InitializeSema(Sema &S) {
7810   SemaObj = &S;
7811   S.addExternalSource(this);
7812 
7813   // Makes sure any declarations that were deserialized "too early"
7814   // still get added to the identifier's declaration chains.
7815   for (uint64_t ID : PreloadedDeclIDs) {
7816     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7817     pushExternalDeclIntoScope(D, D->getDeclName());
7818   }
7819   PreloadedDeclIDs.clear();
7820 
7821   // FIXME: What happens if these are changed by a module import?
7822   if (!FPPragmaOptions.empty()) {
7823     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7824     SemaObj->CurFPFeatures = FPOptions(FPPragmaOptions[0]);
7825   }
7826 
7827   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7828   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7829   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7830 
7831   UpdateSema();
7832 }
7833 
7834 void ASTReader::UpdateSema() {
7835   assert(SemaObj && "no Sema to update");
7836 
7837   // Load the offsets of the declarations that Sema references.
7838   // They will be lazily deserialized when needed.
7839   if (!SemaDeclRefs.empty()) {
7840     assert(SemaDeclRefs.size() % 3 == 0);
7841     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7842       if (!SemaObj->StdNamespace)
7843         SemaObj->StdNamespace = SemaDeclRefs[I];
7844       if (!SemaObj->StdBadAlloc)
7845         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7846       if (!SemaObj->StdAlignValT)
7847         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7848     }
7849     SemaDeclRefs.clear();
7850   }
7851 
7852   // Update the state of pragmas. Use the same API as if we had encountered the
7853   // pragma in the source.
7854   if(OptimizeOffPragmaLocation.isValid())
7855     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7856   if (PragmaMSStructState != -1)
7857     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7858   if (PointersToMembersPragmaLocation.isValid()) {
7859     SemaObj->ActOnPragmaMSPointersToMembers(
7860         (LangOptions::PragmaMSPointersToMembersKind)
7861             PragmaMSPointersToMembersState,
7862         PointersToMembersPragmaLocation);
7863   }
7864   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7865 
7866   if (PragmaPackCurrentValue) {
7867     // The bottom of the stack might have a default value. It must be adjusted
7868     // to the current value to ensure that the packing state is preserved after
7869     // popping entries that were included/imported from a PCH/module.
7870     bool DropFirst = false;
7871     if (!PragmaPackStack.empty() &&
7872         PragmaPackStack.front().Location.isInvalid()) {
7873       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
7874              "Expected a default alignment value");
7875       SemaObj->PackStack.Stack.emplace_back(
7876           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
7877           SemaObj->PackStack.CurrentPragmaLocation,
7878           PragmaPackStack.front().PushLocation);
7879       DropFirst = true;
7880     }
7881     for (const auto &Entry :
7882          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
7883       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
7884                                             Entry.Location, Entry.PushLocation);
7885     if (PragmaPackCurrentLocation.isInvalid()) {
7886       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
7887              "Expected a default alignment value");
7888       // Keep the current values.
7889     } else {
7890       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
7891       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
7892     }
7893   }
7894   if (FpPragmaCurrentValue) {
7895     // The bottom of the stack might have a default value. It must be adjusted
7896     // to the current value to ensure that fp-pragma state is preserved after
7897     // popping entries that were included/imported from a PCH/module.
7898     bool DropFirst = false;
7899     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7900       assert(FpPragmaStack.front().Value ==
7901                  SemaObj->FpPragmaStack.DefaultValue &&
7902              "Expected a default pragma float_control value");
7903       SemaObj->FpPragmaStack.Stack.emplace_back(
7904           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7905           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7906           FpPragmaStack.front().PushLocation);
7907       DropFirst = true;
7908     }
7909     for (const auto &Entry :
7910          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7911       SemaObj->FpPragmaStack.Stack.emplace_back(
7912           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7913     if (FpPragmaCurrentLocation.isInvalid()) {
7914       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7915              "Expected a default pragma float_control value");
7916       // Keep the current values.
7917     } else {
7918       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7919       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7920     }
7921   }
7922 }
7923 
7924 IdentifierInfo *ASTReader::get(StringRef Name) {
7925   // Note that we are loading an identifier.
7926   Deserializing AnIdentifier(this);
7927 
7928   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7929                                   NumIdentifierLookups,
7930                                   NumIdentifierLookupHits);
7931 
7932   // We don't need to do identifier table lookups in C++ modules (we preload
7933   // all interesting declarations, and don't need to use the scope for name
7934   // lookups). Perform the lookup in PCH files, though, since we don't build
7935   // a complete initial identifier table if we're carrying on from a PCH.
7936   if (PP.getLangOpts().CPlusPlus) {
7937     for (auto F : ModuleMgr.pch_modules())
7938       if (Visitor(*F))
7939         break;
7940   } else {
7941     // If there is a global index, look there first to determine which modules
7942     // provably do not have any results for this identifier.
7943     GlobalModuleIndex::HitSet Hits;
7944     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7945     if (!loadGlobalIndex()) {
7946       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7947         HitsPtr = &Hits;
7948       }
7949     }
7950 
7951     ModuleMgr.visit(Visitor, HitsPtr);
7952   }
7953 
7954   IdentifierInfo *II = Visitor.getIdentifierInfo();
7955   markIdentifierUpToDate(II);
7956   return II;
7957 }
7958 
7959 namespace clang {
7960 
7961   /// An identifier-lookup iterator that enumerates all of the
7962   /// identifiers stored within a set of AST files.
7963   class ASTIdentifierIterator : public IdentifierIterator {
7964     /// The AST reader whose identifiers are being enumerated.
7965     const ASTReader &Reader;
7966 
7967     /// The current index into the chain of AST files stored in
7968     /// the AST reader.
7969     unsigned Index;
7970 
7971     /// The current position within the identifier lookup table
7972     /// of the current AST file.
7973     ASTIdentifierLookupTable::key_iterator Current;
7974 
7975     /// The end position within the identifier lookup table of
7976     /// the current AST file.
7977     ASTIdentifierLookupTable::key_iterator End;
7978 
7979     /// Whether to skip any modules in the ASTReader.
7980     bool SkipModules;
7981 
7982   public:
7983     explicit ASTIdentifierIterator(const ASTReader &Reader,
7984                                    bool SkipModules = false);
7985 
7986     StringRef Next() override;
7987   };
7988 
7989 } // namespace clang
7990 
7991 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
7992                                              bool SkipModules)
7993     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
7994 }
7995 
7996 StringRef ASTIdentifierIterator::Next() {
7997   while (Current == End) {
7998     // If we have exhausted all of our AST files, we're done.
7999     if (Index == 0)
8000       return StringRef();
8001 
8002     --Index;
8003     ModuleFile &F = Reader.ModuleMgr[Index];
8004     if (SkipModules && F.isModule())
8005       continue;
8006 
8007     ASTIdentifierLookupTable *IdTable =
8008         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8009     Current = IdTable->key_begin();
8010     End = IdTable->key_end();
8011   }
8012 
8013   // We have any identifiers remaining in the current AST file; return
8014   // the next one.
8015   StringRef Result = *Current;
8016   ++Current;
8017   return Result;
8018 }
8019 
8020 namespace {
8021 
8022 /// A utility for appending two IdentifierIterators.
8023 class ChainedIdentifierIterator : public IdentifierIterator {
8024   std::unique_ptr<IdentifierIterator> Current;
8025   std::unique_ptr<IdentifierIterator> Queued;
8026 
8027 public:
8028   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8029                             std::unique_ptr<IdentifierIterator> Second)
8030       : Current(std::move(First)), Queued(std::move(Second)) {}
8031 
8032   StringRef Next() override {
8033     if (!Current)
8034       return StringRef();
8035 
8036     StringRef result = Current->Next();
8037     if (!result.empty())
8038       return result;
8039 
8040     // Try the queued iterator, which may itself be empty.
8041     Current.reset();
8042     std::swap(Current, Queued);
8043     return Next();
8044   }
8045 };
8046 
8047 } // namespace
8048 
8049 IdentifierIterator *ASTReader::getIdentifiers() {
8050   if (!loadGlobalIndex()) {
8051     std::unique_ptr<IdentifierIterator> ReaderIter(
8052         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8053     std::unique_ptr<IdentifierIterator> ModulesIter(
8054         GlobalIndex->createIdentifierIterator());
8055     return new ChainedIdentifierIterator(std::move(ReaderIter),
8056                                          std::move(ModulesIter));
8057   }
8058 
8059   return new ASTIdentifierIterator(*this);
8060 }
8061 
8062 namespace clang {
8063 namespace serialization {
8064 
8065   class ReadMethodPoolVisitor {
8066     ASTReader &Reader;
8067     Selector Sel;
8068     unsigned PriorGeneration;
8069     unsigned InstanceBits = 0;
8070     unsigned FactoryBits = 0;
8071     bool InstanceHasMoreThanOneDecl = false;
8072     bool FactoryHasMoreThanOneDecl = false;
8073     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8074     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8075 
8076   public:
8077     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8078                           unsigned PriorGeneration)
8079         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8080 
8081     bool operator()(ModuleFile &M) {
8082       if (!M.SelectorLookupTable)
8083         return false;
8084 
8085       // If we've already searched this module file, skip it now.
8086       if (M.Generation <= PriorGeneration)
8087         return true;
8088 
8089       ++Reader.NumMethodPoolTableLookups;
8090       ASTSelectorLookupTable *PoolTable
8091         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8092       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8093       if (Pos == PoolTable->end())
8094         return false;
8095 
8096       ++Reader.NumMethodPoolTableHits;
8097       ++Reader.NumSelectorsRead;
8098       // FIXME: Not quite happy with the statistics here. We probably should
8099       // disable this tracking when called via LoadSelector.
8100       // Also, should entries without methods count as misses?
8101       ++Reader.NumMethodPoolEntriesRead;
8102       ASTSelectorLookupTrait::data_type Data = *Pos;
8103       if (Reader.DeserializationListener)
8104         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8105 
8106       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8107       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8108       InstanceBits = Data.InstanceBits;
8109       FactoryBits = Data.FactoryBits;
8110       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8111       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8112       return true;
8113     }
8114 
8115     /// Retrieve the instance methods found by this visitor.
8116     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8117       return InstanceMethods;
8118     }
8119 
8120     /// Retrieve the instance methods found by this visitor.
8121     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8122       return FactoryMethods;
8123     }
8124 
8125     unsigned getInstanceBits() const { return InstanceBits; }
8126     unsigned getFactoryBits() const { return FactoryBits; }
8127 
8128     bool instanceHasMoreThanOneDecl() const {
8129       return InstanceHasMoreThanOneDecl;
8130     }
8131 
8132     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8133   };
8134 
8135 } // namespace serialization
8136 } // namespace clang
8137 
8138 /// Add the given set of methods to the method list.
8139 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8140                              ObjCMethodList &List) {
8141   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8142     S.addMethodToGlobalList(&List, Methods[I]);
8143   }
8144 }
8145 
8146 void ASTReader::ReadMethodPool(Selector Sel) {
8147   // Get the selector generation and update it to the current generation.
8148   unsigned &Generation = SelectorGeneration[Sel];
8149   unsigned PriorGeneration = Generation;
8150   Generation = getGeneration();
8151   SelectorOutOfDate[Sel] = false;
8152 
8153   // Search for methods defined with this selector.
8154   ++NumMethodPoolLookups;
8155   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8156   ModuleMgr.visit(Visitor);
8157 
8158   if (Visitor.getInstanceMethods().empty() &&
8159       Visitor.getFactoryMethods().empty())
8160     return;
8161 
8162   ++NumMethodPoolHits;
8163 
8164   if (!getSema())
8165     return;
8166 
8167   Sema &S = *getSema();
8168   Sema::GlobalMethodPool::iterator Pos
8169     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8170 
8171   Pos->second.first.setBits(Visitor.getInstanceBits());
8172   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8173   Pos->second.second.setBits(Visitor.getFactoryBits());
8174   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8175 
8176   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8177   // when building a module we keep every method individually and may need to
8178   // update hasMoreThanOneDecl as we add the methods.
8179   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8180   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8181 }
8182 
8183 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8184   if (SelectorOutOfDate[Sel])
8185     ReadMethodPool(Sel);
8186 }
8187 
8188 void ASTReader::ReadKnownNamespaces(
8189                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8190   Namespaces.clear();
8191 
8192   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8193     if (NamespaceDecl *Namespace
8194                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8195       Namespaces.push_back(Namespace);
8196   }
8197 }
8198 
8199 void ASTReader::ReadUndefinedButUsed(
8200     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8201   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8202     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8203     SourceLocation Loc =
8204         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8205     Undefined.insert(std::make_pair(D, Loc));
8206   }
8207 }
8208 
8209 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8210     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8211                                                      Exprs) {
8212   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8213     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8214     uint64_t Count = DelayedDeleteExprs[Idx++];
8215     for (uint64_t C = 0; C < Count; ++C) {
8216       SourceLocation DeleteLoc =
8217           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8218       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8219       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8220     }
8221   }
8222 }
8223 
8224 void ASTReader::ReadTentativeDefinitions(
8225                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8226   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8227     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8228     if (Var)
8229       TentativeDefs.push_back(Var);
8230   }
8231   TentativeDefinitions.clear();
8232 }
8233 
8234 void ASTReader::ReadUnusedFileScopedDecls(
8235                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8236   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8237     DeclaratorDecl *D
8238       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8239     if (D)
8240       Decls.push_back(D);
8241   }
8242   UnusedFileScopedDecls.clear();
8243 }
8244 
8245 void ASTReader::ReadDelegatingConstructors(
8246                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8247   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8248     CXXConstructorDecl *D
8249       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8250     if (D)
8251       Decls.push_back(D);
8252   }
8253   DelegatingCtorDecls.clear();
8254 }
8255 
8256 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8257   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8258     TypedefNameDecl *D
8259       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8260     if (D)
8261       Decls.push_back(D);
8262   }
8263   ExtVectorDecls.clear();
8264 }
8265 
8266 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8267     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8268   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8269        ++I) {
8270     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8271         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8272     if (D)
8273       Decls.insert(D);
8274   }
8275   UnusedLocalTypedefNameCandidates.clear();
8276 }
8277 
8278 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8279     llvm::SmallVector<Decl *, 4> &Decls) {
8280   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8281        ++I) {
8282     auto *D = dyn_cast_or_null<Decl>(
8283         GetDecl(DeclsToCheckForDeferredDiags[I]));
8284     if (D)
8285       Decls.push_back(D);
8286   }
8287   DeclsToCheckForDeferredDiags.clear();
8288 }
8289 
8290 
8291 void ASTReader::ReadReferencedSelectors(
8292        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8293   if (ReferencedSelectorsData.empty())
8294     return;
8295 
8296   // If there are @selector references added them to its pool. This is for
8297   // implementation of -Wselector.
8298   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8299   unsigned I = 0;
8300   while (I < DataSize) {
8301     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8302     SourceLocation SelLoc
8303       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8304     Sels.push_back(std::make_pair(Sel, SelLoc));
8305   }
8306   ReferencedSelectorsData.clear();
8307 }
8308 
8309 void ASTReader::ReadWeakUndeclaredIdentifiers(
8310        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8311   if (WeakUndeclaredIdentifiers.empty())
8312     return;
8313 
8314   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8315     IdentifierInfo *WeakId
8316       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8317     IdentifierInfo *AliasId
8318       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8319     SourceLocation Loc
8320       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8321     bool Used = WeakUndeclaredIdentifiers[I++];
8322     WeakInfo WI(AliasId, Loc);
8323     WI.setUsed(Used);
8324     WeakIDs.push_back(std::make_pair(WeakId, WI));
8325   }
8326   WeakUndeclaredIdentifiers.clear();
8327 }
8328 
8329 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8330   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8331     ExternalVTableUse VT;
8332     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8333     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8334     VT.DefinitionRequired = VTableUses[Idx++];
8335     VTables.push_back(VT);
8336   }
8337 
8338   VTableUses.clear();
8339 }
8340 
8341 void ASTReader::ReadPendingInstantiations(
8342        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8343   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8344     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8345     SourceLocation Loc
8346       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8347 
8348     Pending.push_back(std::make_pair(D, Loc));
8349   }
8350   PendingInstantiations.clear();
8351 }
8352 
8353 void ASTReader::ReadLateParsedTemplates(
8354     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8355         &LPTMap) {
8356   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8357        /* In loop */) {
8358     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8359 
8360     auto LT = std::make_unique<LateParsedTemplate>();
8361     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8362 
8363     ModuleFile *F = getOwningModuleFile(LT->D);
8364     assert(F && "No module");
8365 
8366     unsigned TokN = LateParsedTemplates[Idx++];
8367     LT->Toks.reserve(TokN);
8368     for (unsigned T = 0; T < TokN; ++T)
8369       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8370 
8371     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8372   }
8373 
8374   LateParsedTemplates.clear();
8375 }
8376 
8377 void ASTReader::LoadSelector(Selector Sel) {
8378   // It would be complicated to avoid reading the methods anyway. So don't.
8379   ReadMethodPool(Sel);
8380 }
8381 
8382 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8383   assert(ID && "Non-zero identifier ID required");
8384   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8385   IdentifiersLoaded[ID - 1] = II;
8386   if (DeserializationListener)
8387     DeserializationListener->IdentifierRead(ID, II);
8388 }
8389 
8390 /// Set the globally-visible declarations associated with the given
8391 /// identifier.
8392 ///
8393 /// If the AST reader is currently in a state where the given declaration IDs
8394 /// cannot safely be resolved, they are queued until it is safe to resolve
8395 /// them.
8396 ///
8397 /// \param II an IdentifierInfo that refers to one or more globally-visible
8398 /// declarations.
8399 ///
8400 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8401 /// visible at global scope.
8402 ///
8403 /// \param Decls if non-null, this vector will be populated with the set of
8404 /// deserialized declarations. These declarations will not be pushed into
8405 /// scope.
8406 void
8407 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8408                               const SmallVectorImpl<uint32_t> &DeclIDs,
8409                                    SmallVectorImpl<Decl *> *Decls) {
8410   if (NumCurrentElementsDeserializing && !Decls) {
8411     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8412     return;
8413   }
8414 
8415   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8416     if (!SemaObj) {
8417       // Queue this declaration so that it will be added to the
8418       // translation unit scope and identifier's declaration chain
8419       // once a Sema object is known.
8420       PreloadedDeclIDs.push_back(DeclIDs[I]);
8421       continue;
8422     }
8423 
8424     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8425 
8426     // If we're simply supposed to record the declarations, do so now.
8427     if (Decls) {
8428       Decls->push_back(D);
8429       continue;
8430     }
8431 
8432     // Introduce this declaration into the translation-unit scope
8433     // and add it to the declaration chain for this identifier, so
8434     // that (unqualified) name lookup will find it.
8435     pushExternalDeclIntoScope(D, II);
8436   }
8437 }
8438 
8439 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8440   if (ID == 0)
8441     return nullptr;
8442 
8443   if (IdentifiersLoaded.empty()) {
8444     Error("no identifier table in AST file");
8445     return nullptr;
8446   }
8447 
8448   ID -= 1;
8449   if (!IdentifiersLoaded[ID]) {
8450     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8451     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8452     ModuleFile *M = I->second;
8453     unsigned Index = ID - M->BaseIdentifierID;
8454     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8455 
8456     // All of the strings in the AST file are preceded by a 16-bit length.
8457     // Extract that 16-bit length to avoid having to execute strlen().
8458     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8459     //  unsigned integers.  This is important to avoid integer overflow when
8460     //  we cast them to 'unsigned'.
8461     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8462     unsigned StrLen = (((unsigned) StrLenPtr[0])
8463                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8464     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8465     IdentifiersLoaded[ID] = &II;
8466     markIdentifierFromAST(*this,  II);
8467     if (DeserializationListener)
8468       DeserializationListener->IdentifierRead(ID + 1, &II);
8469   }
8470 
8471   return IdentifiersLoaded[ID];
8472 }
8473 
8474 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8475   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8476 }
8477 
8478 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8479   if (LocalID < NUM_PREDEF_IDENT_IDS)
8480     return LocalID;
8481 
8482   if (!M.ModuleOffsetMap.empty())
8483     ReadModuleOffsetMap(M);
8484 
8485   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8486     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8487   assert(I != M.IdentifierRemap.end()
8488          && "Invalid index into identifier index remap");
8489 
8490   return LocalID + I->second;
8491 }
8492 
8493 MacroInfo *ASTReader::getMacro(MacroID ID) {
8494   if (ID == 0)
8495     return nullptr;
8496 
8497   if (MacrosLoaded.empty()) {
8498     Error("no macro table in AST file");
8499     return nullptr;
8500   }
8501 
8502   ID -= NUM_PREDEF_MACRO_IDS;
8503   if (!MacrosLoaded[ID]) {
8504     GlobalMacroMapType::iterator I
8505       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8506     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8507     ModuleFile *M = I->second;
8508     unsigned Index = ID - M->BaseMacroID;
8509     MacrosLoaded[ID] =
8510         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8511 
8512     if (DeserializationListener)
8513       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8514                                          MacrosLoaded[ID]);
8515   }
8516 
8517   return MacrosLoaded[ID];
8518 }
8519 
8520 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8521   if (LocalID < NUM_PREDEF_MACRO_IDS)
8522     return LocalID;
8523 
8524   if (!M.ModuleOffsetMap.empty())
8525     ReadModuleOffsetMap(M);
8526 
8527   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8528     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8529   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8530 
8531   return LocalID + I->second;
8532 }
8533 
8534 serialization::SubmoduleID
8535 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8536   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8537     return LocalID;
8538 
8539   if (!M.ModuleOffsetMap.empty())
8540     ReadModuleOffsetMap(M);
8541 
8542   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8543     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8544   assert(I != M.SubmoduleRemap.end()
8545          && "Invalid index into submodule index remap");
8546 
8547   return LocalID + I->second;
8548 }
8549 
8550 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8551   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8552     assert(GlobalID == 0 && "Unhandled global submodule ID");
8553     return nullptr;
8554   }
8555 
8556   if (GlobalID > SubmodulesLoaded.size()) {
8557     Error("submodule ID out of range in AST file");
8558     return nullptr;
8559   }
8560 
8561   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8562 }
8563 
8564 Module *ASTReader::getModule(unsigned ID) {
8565   return getSubmodule(ID);
8566 }
8567 
8568 bool ASTReader::DeclIsFromPCHWithObjectFile(const Decl *D) {
8569   ModuleFile *MF = getOwningModuleFile(D);
8570   return MF && MF->PCHHasObjectFile;
8571 }
8572 
8573 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8574   if (ID & 1) {
8575     // It's a module, look it up by submodule ID.
8576     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8577     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8578   } else {
8579     // It's a prefix (preamble, PCH, ...). Look it up by index.
8580     unsigned IndexFromEnd = ID >> 1;
8581     assert(IndexFromEnd && "got reference to unknown module file");
8582     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8583   }
8584 }
8585 
8586 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8587   if (!F)
8588     return 1;
8589 
8590   // For a file representing a module, use the submodule ID of the top-level
8591   // module as the file ID. For any other kind of file, the number of such
8592   // files loaded beforehand will be the same on reload.
8593   // FIXME: Is this true even if we have an explicit module file and a PCH?
8594   if (F->isModule())
8595     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8596 
8597   auto PCHModules = getModuleManager().pch_modules();
8598   auto I = llvm::find(PCHModules, F);
8599   assert(I != PCHModules.end() && "emitting reference to unknown file");
8600   return (I - PCHModules.end()) << 1;
8601 }
8602 
8603 llvm::Optional<ASTSourceDescriptor>
8604 ASTReader::getSourceDescriptor(unsigned ID) {
8605   if (Module *M = getSubmodule(ID))
8606     return ASTSourceDescriptor(*M);
8607 
8608   // If there is only a single PCH, return it instead.
8609   // Chained PCH are not supported.
8610   const auto &PCHChain = ModuleMgr.pch_modules();
8611   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8612     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8613     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8614     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8615     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8616                                MF.Signature);
8617   }
8618   return None;
8619 }
8620 
8621 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8622   auto I = DefinitionSource.find(FD);
8623   if (I == DefinitionSource.end())
8624     return EK_ReplyHazy;
8625   return I->second ? EK_Never : EK_Always;
8626 }
8627 
8628 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8629   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8630 }
8631 
8632 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8633   if (ID == 0)
8634     return Selector();
8635 
8636   if (ID > SelectorsLoaded.size()) {
8637     Error("selector ID out of range in AST file");
8638     return Selector();
8639   }
8640 
8641   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8642     // Load this selector from the selector table.
8643     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8644     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8645     ModuleFile &M = *I->second;
8646     ASTSelectorLookupTrait Trait(*this, M);
8647     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8648     SelectorsLoaded[ID - 1] =
8649       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8650     if (DeserializationListener)
8651       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8652   }
8653 
8654   return SelectorsLoaded[ID - 1];
8655 }
8656 
8657 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8658   return DecodeSelector(ID);
8659 }
8660 
8661 uint32_t ASTReader::GetNumExternalSelectors() {
8662   // ID 0 (the null selector) is considered an external selector.
8663   return getTotalNumSelectors() + 1;
8664 }
8665 
8666 serialization::SelectorID
8667 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8668   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8669     return LocalID;
8670 
8671   if (!M.ModuleOffsetMap.empty())
8672     ReadModuleOffsetMap(M);
8673 
8674   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8675     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8676   assert(I != M.SelectorRemap.end()
8677          && "Invalid index into selector index remap");
8678 
8679   return LocalID + I->second;
8680 }
8681 
8682 DeclarationNameLoc
8683 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8684   DeclarationNameLoc DNLoc;
8685   switch (Name.getNameKind()) {
8686   case DeclarationName::CXXConstructorName:
8687   case DeclarationName::CXXDestructorName:
8688   case DeclarationName::CXXConversionFunctionName:
8689     DNLoc.NamedType.TInfo = readTypeSourceInfo();
8690     break;
8691 
8692   case DeclarationName::CXXOperatorName:
8693     DNLoc.CXXOperatorName.BeginOpNameLoc
8694       = readSourceLocation().getRawEncoding();
8695     DNLoc.CXXOperatorName.EndOpNameLoc
8696       = readSourceLocation().getRawEncoding();
8697     break;
8698 
8699   case DeclarationName::CXXLiteralOperatorName:
8700     DNLoc.CXXLiteralOperatorName.OpNameLoc
8701       = readSourceLocation().getRawEncoding();
8702     break;
8703 
8704   case DeclarationName::Identifier:
8705   case DeclarationName::ObjCZeroArgSelector:
8706   case DeclarationName::ObjCOneArgSelector:
8707   case DeclarationName::ObjCMultiArgSelector:
8708   case DeclarationName::CXXUsingDirective:
8709   case DeclarationName::CXXDeductionGuideName:
8710     break;
8711   }
8712   return DNLoc;
8713 }
8714 
8715 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8716   DeclarationNameInfo NameInfo;
8717   NameInfo.setName(readDeclarationName());
8718   NameInfo.setLoc(readSourceLocation());
8719   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8720   return NameInfo;
8721 }
8722 
8723 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8724   Info.QualifierLoc = readNestedNameSpecifierLoc();
8725   unsigned NumTPLists = readInt();
8726   Info.NumTemplParamLists = NumTPLists;
8727   if (NumTPLists) {
8728     Info.TemplParamLists =
8729         new (getContext()) TemplateParameterList *[NumTPLists];
8730     for (unsigned i = 0; i != NumTPLists; ++i)
8731       Info.TemplParamLists[i] = readTemplateParameterList();
8732   }
8733 }
8734 
8735 TemplateParameterList *
8736 ASTRecordReader::readTemplateParameterList() {
8737   SourceLocation TemplateLoc = readSourceLocation();
8738   SourceLocation LAngleLoc = readSourceLocation();
8739   SourceLocation RAngleLoc = readSourceLocation();
8740 
8741   unsigned NumParams = readInt();
8742   SmallVector<NamedDecl *, 16> Params;
8743   Params.reserve(NumParams);
8744   while (NumParams--)
8745     Params.push_back(readDeclAs<NamedDecl>());
8746 
8747   bool HasRequiresClause = readBool();
8748   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8749 
8750   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8751       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8752   return TemplateParams;
8753 }
8754 
8755 void ASTRecordReader::readTemplateArgumentList(
8756                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8757                         bool Canonicalize) {
8758   unsigned NumTemplateArgs = readInt();
8759   TemplArgs.reserve(NumTemplateArgs);
8760   while (NumTemplateArgs--)
8761     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8762 }
8763 
8764 /// Read a UnresolvedSet structure.
8765 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8766   unsigned NumDecls = readInt();
8767   Set.reserve(getContext(), NumDecls);
8768   while (NumDecls--) {
8769     DeclID ID = readDeclID();
8770     AccessSpecifier AS = (AccessSpecifier) readInt();
8771     Set.addLazyDecl(getContext(), ID, AS);
8772   }
8773 }
8774 
8775 CXXBaseSpecifier
8776 ASTRecordReader::readCXXBaseSpecifier() {
8777   bool isVirtual = readBool();
8778   bool isBaseOfClass = readBool();
8779   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8780   bool inheritConstructors = readBool();
8781   TypeSourceInfo *TInfo = readTypeSourceInfo();
8782   SourceRange Range = readSourceRange();
8783   SourceLocation EllipsisLoc = readSourceLocation();
8784   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8785                           EllipsisLoc);
8786   Result.setInheritConstructors(inheritConstructors);
8787   return Result;
8788 }
8789 
8790 CXXCtorInitializer **
8791 ASTRecordReader::readCXXCtorInitializers() {
8792   ASTContext &Context = getContext();
8793   unsigned NumInitializers = readInt();
8794   assert(NumInitializers && "wrote ctor initializers but have no inits");
8795   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8796   for (unsigned i = 0; i != NumInitializers; ++i) {
8797     TypeSourceInfo *TInfo = nullptr;
8798     bool IsBaseVirtual = false;
8799     FieldDecl *Member = nullptr;
8800     IndirectFieldDecl *IndirectMember = nullptr;
8801 
8802     CtorInitializerType Type = (CtorInitializerType) readInt();
8803     switch (Type) {
8804     case CTOR_INITIALIZER_BASE:
8805       TInfo = readTypeSourceInfo();
8806       IsBaseVirtual = readBool();
8807       break;
8808 
8809     case CTOR_INITIALIZER_DELEGATING:
8810       TInfo = readTypeSourceInfo();
8811       break;
8812 
8813      case CTOR_INITIALIZER_MEMBER:
8814       Member = readDeclAs<FieldDecl>();
8815       break;
8816 
8817      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8818       IndirectMember = readDeclAs<IndirectFieldDecl>();
8819       break;
8820     }
8821 
8822     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8823     Expr *Init = readExpr();
8824     SourceLocation LParenLoc = readSourceLocation();
8825     SourceLocation RParenLoc = readSourceLocation();
8826 
8827     CXXCtorInitializer *BOMInit;
8828     if (Type == CTOR_INITIALIZER_BASE)
8829       BOMInit = new (Context)
8830           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8831                              RParenLoc, MemberOrEllipsisLoc);
8832     else if (Type == CTOR_INITIALIZER_DELEGATING)
8833       BOMInit = new (Context)
8834           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8835     else if (Member)
8836       BOMInit = new (Context)
8837           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8838                              Init, RParenLoc);
8839     else
8840       BOMInit = new (Context)
8841           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8842                              LParenLoc, Init, RParenLoc);
8843 
8844     if (/*IsWritten*/readBool()) {
8845       unsigned SourceOrder = readInt();
8846       BOMInit->setSourceOrder(SourceOrder);
8847     }
8848 
8849     CtorInitializers[i] = BOMInit;
8850   }
8851 
8852   return CtorInitializers;
8853 }
8854 
8855 NestedNameSpecifierLoc
8856 ASTRecordReader::readNestedNameSpecifierLoc() {
8857   ASTContext &Context = getContext();
8858   unsigned N = readInt();
8859   NestedNameSpecifierLocBuilder Builder;
8860   for (unsigned I = 0; I != N; ++I) {
8861     auto Kind = readNestedNameSpecifierKind();
8862     switch (Kind) {
8863     case NestedNameSpecifier::Identifier: {
8864       IdentifierInfo *II = readIdentifier();
8865       SourceRange Range = readSourceRange();
8866       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8867       break;
8868     }
8869 
8870     case NestedNameSpecifier::Namespace: {
8871       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8872       SourceRange Range = readSourceRange();
8873       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8874       break;
8875     }
8876 
8877     case NestedNameSpecifier::NamespaceAlias: {
8878       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8879       SourceRange Range = readSourceRange();
8880       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8881       break;
8882     }
8883 
8884     case NestedNameSpecifier::TypeSpec:
8885     case NestedNameSpecifier::TypeSpecWithTemplate: {
8886       bool Template = readBool();
8887       TypeSourceInfo *T = readTypeSourceInfo();
8888       if (!T)
8889         return NestedNameSpecifierLoc();
8890       SourceLocation ColonColonLoc = readSourceLocation();
8891 
8892       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8893       Builder.Extend(Context,
8894                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8895                      T->getTypeLoc(), ColonColonLoc);
8896       break;
8897     }
8898 
8899     case NestedNameSpecifier::Global: {
8900       SourceLocation ColonColonLoc = readSourceLocation();
8901       Builder.MakeGlobal(Context, ColonColonLoc);
8902       break;
8903     }
8904 
8905     case NestedNameSpecifier::Super: {
8906       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8907       SourceRange Range = readSourceRange();
8908       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8909       break;
8910     }
8911     }
8912   }
8913 
8914   return Builder.getWithLocInContext(Context);
8915 }
8916 
8917 SourceRange
8918 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8919                            unsigned &Idx) {
8920   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8921   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8922   return SourceRange(beg, end);
8923 }
8924 
8925 static FixedPointSemantics
8926 ReadFixedPointSemantics(const SmallVectorImpl<uint64_t> &Record,
8927                         unsigned &Idx) {
8928   unsigned Width = Record[Idx++];
8929   unsigned Scale = Record[Idx++];
8930   uint64_t Tmp = Record[Idx++];
8931   bool IsSigned = Tmp & 0x1;
8932   bool IsSaturated = Tmp & 0x2;
8933   bool HasUnsignedPadding = Tmp & 0x4;
8934   return FixedPointSemantics(Width, Scale, IsSigned, IsSaturated,
8935                              HasUnsignedPadding);
8936 }
8937 
8938 static const llvm::fltSemantics &
8939 readAPFloatSemantics(ASTRecordReader &reader) {
8940   return llvm::APFloatBase::EnumToSemantics(
8941     static_cast<llvm::APFloatBase::Semantics>(reader.readInt()));
8942 }
8943 
8944 APValue ASTRecordReader::readAPValue() {
8945   unsigned Kind = readInt();
8946   switch ((APValue::ValueKind) Kind) {
8947   case APValue::None:
8948     return APValue();
8949   case APValue::Indeterminate:
8950     return APValue::IndeterminateValue();
8951   case APValue::Int:
8952     return APValue(readAPSInt());
8953   case APValue::Float: {
8954     const llvm::fltSemantics &FloatSema = readAPFloatSemantics(*this);
8955     return APValue(readAPFloat(FloatSema));
8956   }
8957   case APValue::FixedPoint: {
8958     FixedPointSemantics FPSema = ReadFixedPointSemantics(Record, Idx);
8959     return APValue(APFixedPoint(readAPInt(), FPSema));
8960   }
8961   case APValue::ComplexInt: {
8962     llvm::APSInt First = readAPSInt();
8963     return APValue(std::move(First), readAPSInt());
8964   }
8965   case APValue::ComplexFloat: {
8966     const llvm::fltSemantics &FloatSema1 = readAPFloatSemantics(*this);
8967     llvm::APFloat First = readAPFloat(FloatSema1);
8968     const llvm::fltSemantics &FloatSema2 = readAPFloatSemantics(*this);
8969     return APValue(std::move(First), readAPFloat(FloatSema2));
8970   }
8971   case APValue::LValue:
8972   case APValue::Vector:
8973   case APValue::Array:
8974   case APValue::Struct:
8975   case APValue::Union:
8976   case APValue::MemberPointer:
8977   case APValue::AddrLabelDiff:
8978     // TODO : Handle all these APValue::ValueKind.
8979     return APValue();
8980   }
8981   llvm_unreachable("Invalid APValue::ValueKind");
8982 }
8983 
8984 /// Read a floating-point value
8985 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8986   return llvm::APFloat(Sem, readAPInt());
8987 }
8988 
8989 // Read a string
8990 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8991   unsigned Len = Record[Idx++];
8992   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8993   Idx += Len;
8994   return Result;
8995 }
8996 
8997 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8998                                 unsigned &Idx) {
8999   std::string Filename = ReadString(Record, Idx);
9000   ResolveImportedPath(F, Filename);
9001   return Filename;
9002 }
9003 
9004 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9005                                 const RecordData &Record, unsigned &Idx) {
9006   std::string Filename = ReadString(Record, Idx);
9007   if (!BaseDirectory.empty())
9008     ResolveImportedPath(Filename, BaseDirectory);
9009   return Filename;
9010 }
9011 
9012 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9013                                          unsigned &Idx) {
9014   unsigned Major = Record[Idx++];
9015   unsigned Minor = Record[Idx++];
9016   unsigned Subminor = Record[Idx++];
9017   if (Minor == 0)
9018     return VersionTuple(Major);
9019   if (Subminor == 0)
9020     return VersionTuple(Major, Minor - 1);
9021   return VersionTuple(Major, Minor - 1, Subminor - 1);
9022 }
9023 
9024 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9025                                           const RecordData &Record,
9026                                           unsigned &Idx) {
9027   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9028   return CXXTemporary::Create(getContext(), Decl);
9029 }
9030 
9031 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9032   return Diag(CurrentImportLoc, DiagID);
9033 }
9034 
9035 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9036   return Diags.Report(Loc, DiagID);
9037 }
9038 
9039 /// Retrieve the identifier table associated with the
9040 /// preprocessor.
9041 IdentifierTable &ASTReader::getIdentifierTable() {
9042   return PP.getIdentifierTable();
9043 }
9044 
9045 /// Record that the given ID maps to the given switch-case
9046 /// statement.
9047 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9048   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9049          "Already have a SwitchCase with this ID");
9050   (*CurrSwitchCaseStmts)[ID] = SC;
9051 }
9052 
9053 /// Retrieve the switch-case statement with the given ID.
9054 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9055   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9056   return (*CurrSwitchCaseStmts)[ID];
9057 }
9058 
9059 void ASTReader::ClearSwitchCaseIDs() {
9060   CurrSwitchCaseStmts->clear();
9061 }
9062 
9063 void ASTReader::ReadComments() {
9064   ASTContext &Context = getContext();
9065   std::vector<RawComment *> Comments;
9066   for (SmallVectorImpl<std::pair<BitstreamCursor,
9067                                  serialization::ModuleFile *>>::iterator
9068        I = CommentsCursors.begin(),
9069        E = CommentsCursors.end();
9070        I != E; ++I) {
9071     Comments.clear();
9072     BitstreamCursor &Cursor = I->first;
9073     serialization::ModuleFile &F = *I->second;
9074     SavedStreamPosition SavedPosition(Cursor);
9075 
9076     RecordData Record;
9077     while (true) {
9078       Expected<llvm::BitstreamEntry> MaybeEntry =
9079           Cursor.advanceSkippingSubblocks(
9080               BitstreamCursor::AF_DontPopBlockAtEnd);
9081       if (!MaybeEntry) {
9082         Error(MaybeEntry.takeError());
9083         return;
9084       }
9085       llvm::BitstreamEntry Entry = MaybeEntry.get();
9086 
9087       switch (Entry.Kind) {
9088       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9089       case llvm::BitstreamEntry::Error:
9090         Error("malformed block record in AST file");
9091         return;
9092       case llvm::BitstreamEntry::EndBlock:
9093         goto NextCursor;
9094       case llvm::BitstreamEntry::Record:
9095         // The interesting case.
9096         break;
9097       }
9098 
9099       // Read a record.
9100       Record.clear();
9101       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9102       if (!MaybeComment) {
9103         Error(MaybeComment.takeError());
9104         return;
9105       }
9106       switch ((CommentRecordTypes)MaybeComment.get()) {
9107       case COMMENTS_RAW_COMMENT: {
9108         unsigned Idx = 0;
9109         SourceRange SR = ReadSourceRange(F, Record, Idx);
9110         RawComment::CommentKind Kind =
9111             (RawComment::CommentKind) Record[Idx++];
9112         bool IsTrailingComment = Record[Idx++];
9113         bool IsAlmostTrailingComment = Record[Idx++];
9114         Comments.push_back(new (Context) RawComment(
9115             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9116         break;
9117       }
9118       }
9119     }
9120   NextCursor:
9121     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9122         FileToOffsetToComment;
9123     for (RawComment *C : Comments) {
9124       SourceLocation CommentLoc = C->getBeginLoc();
9125       if (CommentLoc.isValid()) {
9126         std::pair<FileID, unsigned> Loc =
9127             SourceMgr.getDecomposedLoc(CommentLoc);
9128         if (Loc.first.isValid())
9129           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9130       }
9131     }
9132   }
9133 }
9134 
9135 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9136                                 bool IncludeSystem, bool Complain,
9137                     llvm::function_ref<void(const serialization::InputFile &IF,
9138                                             bool isSystem)> Visitor) {
9139   unsigned NumUserInputs = MF.NumUserInputFiles;
9140   unsigned NumInputs = MF.InputFilesLoaded.size();
9141   assert(NumUserInputs <= NumInputs);
9142   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9143   for (unsigned I = 0; I < N; ++I) {
9144     bool IsSystem = I >= NumUserInputs;
9145     InputFile IF = getInputFile(MF, I+1, Complain);
9146     Visitor(IF, IsSystem);
9147   }
9148 }
9149 
9150 void ASTReader::visitTopLevelModuleMaps(
9151     serialization::ModuleFile &MF,
9152     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9153   unsigned NumInputs = MF.InputFilesLoaded.size();
9154   for (unsigned I = 0; I < NumInputs; ++I) {
9155     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9156     if (IFI.TopLevelModuleMap)
9157       // FIXME: This unnecessarily re-reads the InputFileInfo.
9158       if (auto *FE = getInputFile(MF, I + 1).getFile())
9159         Visitor(FE);
9160   }
9161 }
9162 
9163 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9164   // If we know the owning module, use it.
9165   if (Module *M = D->getImportedOwningModule())
9166     return M->getFullModuleName();
9167 
9168   // Otherwise, use the name of the top-level module the decl is within.
9169   if (ModuleFile *M = getOwningModuleFile(D))
9170     return M->ModuleName;
9171 
9172   // Not from a module.
9173   return {};
9174 }
9175 
9176 void ASTReader::finishPendingActions() {
9177   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9178          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9179          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9180          !PendingUpdateRecords.empty()) {
9181     // If any identifiers with corresponding top-level declarations have
9182     // been loaded, load those declarations now.
9183     using TopLevelDeclsMap =
9184         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9185     TopLevelDeclsMap TopLevelDecls;
9186 
9187     while (!PendingIdentifierInfos.empty()) {
9188       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9189       SmallVector<uint32_t, 4> DeclIDs =
9190           std::move(PendingIdentifierInfos.back().second);
9191       PendingIdentifierInfos.pop_back();
9192 
9193       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9194     }
9195 
9196     // Load each function type that we deferred loading because it was a
9197     // deduced type that might refer to a local type declared within itself.
9198     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9199       auto *FD = PendingFunctionTypes[I].first;
9200       FD->setType(GetType(PendingFunctionTypes[I].second));
9201 
9202       // If we gave a function a deduced return type, remember that we need to
9203       // propagate that along the redeclaration chain.
9204       auto *DT = FD->getReturnType()->getContainedDeducedType();
9205       if (DT && DT->isDeduced())
9206         PendingDeducedTypeUpdates.insert(
9207             {FD->getCanonicalDecl(), FD->getReturnType()});
9208     }
9209     PendingFunctionTypes.clear();
9210 
9211     // For each decl chain that we wanted to complete while deserializing, mark
9212     // it as "still needs to be completed".
9213     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9214       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9215     }
9216     PendingIncompleteDeclChains.clear();
9217 
9218     // Load pending declaration chains.
9219     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9220       loadPendingDeclChain(PendingDeclChains[I].first,
9221                            PendingDeclChains[I].second);
9222     PendingDeclChains.clear();
9223 
9224     // Make the most recent of the top-level declarations visible.
9225     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9226            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9227       IdentifierInfo *II = TLD->first;
9228       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9229         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9230       }
9231     }
9232 
9233     // Load any pending macro definitions.
9234     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9235       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9236       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9237       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9238       // Initialize the macro history from chained-PCHs ahead of module imports.
9239       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9240            ++IDIdx) {
9241         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9242         if (!Info.M->isModule())
9243           resolvePendingMacro(II, Info);
9244       }
9245       // Handle module imports.
9246       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9247            ++IDIdx) {
9248         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9249         if (Info.M->isModule())
9250           resolvePendingMacro(II, Info);
9251       }
9252     }
9253     PendingMacroIDs.clear();
9254 
9255     // Wire up the DeclContexts for Decls that we delayed setting until
9256     // recursive loading is completed.
9257     while (!PendingDeclContextInfos.empty()) {
9258       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9259       PendingDeclContextInfos.pop_front();
9260       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9261       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9262       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9263     }
9264 
9265     // Perform any pending declaration updates.
9266     while (!PendingUpdateRecords.empty()) {
9267       auto Update = PendingUpdateRecords.pop_back_val();
9268       ReadingKindTracker ReadingKind(Read_Decl, *this);
9269       loadDeclUpdateRecords(Update);
9270     }
9271   }
9272 
9273   // At this point, all update records for loaded decls are in place, so any
9274   // fake class definitions should have become real.
9275   assert(PendingFakeDefinitionData.empty() &&
9276          "faked up a class definition but never saw the real one");
9277 
9278   // If we deserialized any C++ or Objective-C class definitions, any
9279   // Objective-C protocol definitions, or any redeclarable templates, make sure
9280   // that all redeclarations point to the definitions. Note that this can only
9281   // happen now, after the redeclaration chains have been fully wired.
9282   for (Decl *D : PendingDefinitions) {
9283     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9284       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9285         // Make sure that the TagType points at the definition.
9286         const_cast<TagType*>(TagT)->decl = TD;
9287       }
9288 
9289       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9290         for (auto *R = getMostRecentExistingDecl(RD); R;
9291              R = R->getPreviousDecl()) {
9292           assert((R == D) ==
9293                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9294                  "declaration thinks it's the definition but it isn't");
9295           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9296         }
9297       }
9298 
9299       continue;
9300     }
9301 
9302     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9303       // Make sure that the ObjCInterfaceType points at the definition.
9304       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9305         ->Decl = ID;
9306 
9307       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9308         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9309 
9310       continue;
9311     }
9312 
9313     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9314       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9315         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9316 
9317       continue;
9318     }
9319 
9320     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9321     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9322       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9323   }
9324   PendingDefinitions.clear();
9325 
9326   // Load the bodies of any functions or methods we've encountered. We do
9327   // this now (delayed) so that we can be sure that the declaration chains
9328   // have been fully wired up (hasBody relies on this).
9329   // FIXME: We shouldn't require complete redeclaration chains here.
9330   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9331                                PBEnd = PendingBodies.end();
9332        PB != PBEnd; ++PB) {
9333     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9334       // For a function defined inline within a class template, force the
9335       // canonical definition to be the one inside the canonical definition of
9336       // the template. This ensures that we instantiate from a correct view
9337       // of the template.
9338       //
9339       // Sadly we can't do this more generally: we can't be sure that all
9340       // copies of an arbitrary class definition will have the same members
9341       // defined (eg, some member functions may not be instantiated, and some
9342       // special members may or may not have been implicitly defined).
9343       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9344         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9345           continue;
9346 
9347       // FIXME: Check for =delete/=default?
9348       // FIXME: Complain about ODR violations here?
9349       const FunctionDecl *Defn = nullptr;
9350       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9351         FD->setLazyBody(PB->second);
9352       } else {
9353         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9354         mergeDefinitionVisibility(NonConstDefn, FD);
9355 
9356         if (!FD->isLateTemplateParsed() &&
9357             !NonConstDefn->isLateTemplateParsed() &&
9358             FD->getODRHash() != NonConstDefn->getODRHash()) {
9359           if (!isa<CXXMethodDecl>(FD)) {
9360             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9361           } else if (FD->getLexicalParent()->isFileContext() &&
9362                      NonConstDefn->getLexicalParent()->isFileContext()) {
9363             // Only diagnose out-of-line method definitions.  If they are
9364             // in class definitions, then an error will be generated when
9365             // processing the class bodies.
9366             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9367           }
9368         }
9369       }
9370       continue;
9371     }
9372 
9373     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9374     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9375       MD->setLazyBody(PB->second);
9376   }
9377   PendingBodies.clear();
9378 
9379   // Do some cleanup.
9380   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9381     getContext().deduplicateMergedDefinitonsFor(ND);
9382   PendingMergedDefinitionsToDeduplicate.clear();
9383 }
9384 
9385 void ASTReader::diagnoseOdrViolations() {
9386   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9387       PendingFunctionOdrMergeFailures.empty() &&
9388       PendingEnumOdrMergeFailures.empty())
9389     return;
9390 
9391   // Trigger the import of the full definition of each class that had any
9392   // odr-merging problems, so we can produce better diagnostics for them.
9393   // These updates may in turn find and diagnose some ODR failures, so take
9394   // ownership of the set first.
9395   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9396   PendingOdrMergeFailures.clear();
9397   for (auto &Merge : OdrMergeFailures) {
9398     Merge.first->buildLookup();
9399     Merge.first->decls_begin();
9400     Merge.first->bases_begin();
9401     Merge.first->vbases_begin();
9402     for (auto &RecordPair : Merge.second) {
9403       auto *RD = RecordPair.first;
9404       RD->decls_begin();
9405       RD->bases_begin();
9406       RD->vbases_begin();
9407     }
9408   }
9409 
9410   // Trigger the import of functions.
9411   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9412   PendingFunctionOdrMergeFailures.clear();
9413   for (auto &Merge : FunctionOdrMergeFailures) {
9414     Merge.first->buildLookup();
9415     Merge.first->decls_begin();
9416     Merge.first->getBody();
9417     for (auto &FD : Merge.second) {
9418       FD->buildLookup();
9419       FD->decls_begin();
9420       FD->getBody();
9421     }
9422   }
9423 
9424   // Trigger the import of enums.
9425   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9426   PendingEnumOdrMergeFailures.clear();
9427   for (auto &Merge : EnumOdrMergeFailures) {
9428     Merge.first->decls_begin();
9429     for (auto &Enum : Merge.second) {
9430       Enum->decls_begin();
9431     }
9432   }
9433 
9434   // For each declaration from a merged context, check that the canonical
9435   // definition of that context also contains a declaration of the same
9436   // entity.
9437   //
9438   // Caution: this loop does things that might invalidate iterators into
9439   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9440   while (!PendingOdrMergeChecks.empty()) {
9441     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9442 
9443     // FIXME: Skip over implicit declarations for now. This matters for things
9444     // like implicitly-declared special member functions. This isn't entirely
9445     // correct; we can end up with multiple unmerged declarations of the same
9446     // implicit entity.
9447     if (D->isImplicit())
9448       continue;
9449 
9450     DeclContext *CanonDef = D->getDeclContext();
9451 
9452     bool Found = false;
9453     const Decl *DCanon = D->getCanonicalDecl();
9454 
9455     for (auto RI : D->redecls()) {
9456       if (RI->getLexicalDeclContext() == CanonDef) {
9457         Found = true;
9458         break;
9459       }
9460     }
9461     if (Found)
9462       continue;
9463 
9464     // Quick check failed, time to do the slow thing. Note, we can't just
9465     // look up the name of D in CanonDef here, because the member that is
9466     // in CanonDef might not be found by name lookup (it might have been
9467     // replaced by a more recent declaration in the lookup table), and we
9468     // can't necessarily find it in the redeclaration chain because it might
9469     // be merely mergeable, not redeclarable.
9470     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9471     for (auto *CanonMember : CanonDef->decls()) {
9472       if (CanonMember->getCanonicalDecl() == DCanon) {
9473         // This can happen if the declaration is merely mergeable and not
9474         // actually redeclarable (we looked for redeclarations earlier).
9475         //
9476         // FIXME: We should be able to detect this more efficiently, without
9477         // pulling in all of the members of CanonDef.
9478         Found = true;
9479         break;
9480       }
9481       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9482         if (ND->getDeclName() == D->getDeclName())
9483           Candidates.push_back(ND);
9484     }
9485 
9486     if (!Found) {
9487       // The AST doesn't like TagDecls becoming invalid after they've been
9488       // completed. We only really need to mark FieldDecls as invalid here.
9489       if (!isa<TagDecl>(D))
9490         D->setInvalidDecl();
9491 
9492       // Ensure we don't accidentally recursively enter deserialization while
9493       // we're producing our diagnostic.
9494       Deserializing RecursionGuard(this);
9495 
9496       std::string CanonDefModule =
9497           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9498       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9499         << D << getOwningModuleNameForDiagnostic(D)
9500         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9501 
9502       if (Candidates.empty())
9503         Diag(cast<Decl>(CanonDef)->getLocation(),
9504              diag::note_module_odr_violation_no_possible_decls) << D;
9505       else {
9506         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9507           Diag(Candidates[I]->getLocation(),
9508                diag::note_module_odr_violation_possible_decl)
9509             << Candidates[I];
9510       }
9511 
9512       DiagnosedOdrMergeFailures.insert(CanonDef);
9513     }
9514   }
9515 
9516   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9517       EnumOdrMergeFailures.empty())
9518     return;
9519 
9520   // Ensure we don't accidentally recursively enter deserialization while
9521   // we're producing our diagnostics.
9522   Deserializing RecursionGuard(this);
9523 
9524   // Common code for hashing helpers.
9525   ODRHash Hash;
9526   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9527     Hash.clear();
9528     Hash.AddQualType(Ty);
9529     return Hash.CalculateHash();
9530   };
9531 
9532   auto ComputeODRHash = [&Hash](const Stmt *S) {
9533     assert(S);
9534     Hash.clear();
9535     Hash.AddStmt(S);
9536     return Hash.CalculateHash();
9537   };
9538 
9539   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9540     assert(D);
9541     Hash.clear();
9542     Hash.AddSubDecl(D);
9543     return Hash.CalculateHash();
9544   };
9545 
9546   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9547     Hash.clear();
9548     Hash.AddTemplateArgument(TA);
9549     return Hash.CalculateHash();
9550   };
9551 
9552   auto ComputeTemplateParameterListODRHash =
9553       [&Hash](const TemplateParameterList *TPL) {
9554         assert(TPL);
9555         Hash.clear();
9556         Hash.AddTemplateParameterList(TPL);
9557         return Hash.CalculateHash();
9558       };
9559 
9560   // Used with err_module_odr_violation_mismatch_decl and
9561   // note_module_odr_violation_mismatch_decl
9562   // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9563   enum ODRMismatchDecl {
9564     EndOfClass,
9565     PublicSpecifer,
9566     PrivateSpecifer,
9567     ProtectedSpecifer,
9568     StaticAssert,
9569     Field,
9570     CXXMethod,
9571     TypeAlias,
9572     TypeDef,
9573     Var,
9574     Friend,
9575     FunctionTemplate,
9576     Other
9577   };
9578 
9579   // Used with err_module_odr_violation_mismatch_decl_diff and
9580   // note_module_odr_violation_mismatch_decl_diff
9581   enum ODRMismatchDeclDifference {
9582     StaticAssertCondition,
9583     StaticAssertMessage,
9584     StaticAssertOnlyMessage,
9585     FieldName,
9586     FieldTypeName,
9587     FieldSingleBitField,
9588     FieldDifferentWidthBitField,
9589     FieldSingleMutable,
9590     FieldSingleInitializer,
9591     FieldDifferentInitializers,
9592     MethodName,
9593     MethodDeleted,
9594     MethodDefaulted,
9595     MethodVirtual,
9596     MethodStatic,
9597     MethodVolatile,
9598     MethodConst,
9599     MethodInline,
9600     MethodNumberParameters,
9601     MethodParameterType,
9602     MethodParameterName,
9603     MethodParameterSingleDefaultArgument,
9604     MethodParameterDifferentDefaultArgument,
9605     MethodNoTemplateArguments,
9606     MethodDifferentNumberTemplateArguments,
9607     MethodDifferentTemplateArgument,
9608     MethodSingleBody,
9609     MethodDifferentBody,
9610     TypedefName,
9611     TypedefType,
9612     VarName,
9613     VarType,
9614     VarSingleInitializer,
9615     VarDifferentInitializer,
9616     VarConstexpr,
9617     FriendTypeFunction,
9618     FriendType,
9619     FriendFunction,
9620     FunctionTemplateDifferentNumberParameters,
9621     FunctionTemplateParameterDifferentKind,
9622     FunctionTemplateParameterName,
9623     FunctionTemplateParameterSingleDefaultArgument,
9624     FunctionTemplateParameterDifferentDefaultArgument,
9625     FunctionTemplateParameterDifferentType,
9626     FunctionTemplatePackParameter,
9627   };
9628 
9629   // These lambdas have the common portions of the ODR diagnostics.  This
9630   // has the same return as Diag(), so addition parameters can be passed
9631   // in with operator<<
9632   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9633                                  SourceLocation Loc, SourceRange Range,
9634                                  ODRMismatchDeclDifference DiffType) {
9635     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9636            << FirstRecord << FirstModule.empty() << FirstModule << Range
9637            << DiffType;
9638   };
9639   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9640                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9641     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9642            << SecondModule << Range << DiffType;
9643   };
9644 
9645   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9646                        &ComputeQualTypeODRHash, &ComputeODRHash](
9647                           NamedDecl *FirstRecord, StringRef FirstModule,
9648                           StringRef SecondModule, FieldDecl *FirstField,
9649                           FieldDecl *SecondField) {
9650     IdentifierInfo *FirstII = FirstField->getIdentifier();
9651     IdentifierInfo *SecondII = SecondField->getIdentifier();
9652     if (FirstII->getName() != SecondII->getName()) {
9653       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9654                        FirstField->getSourceRange(), FieldName)
9655           << FirstII;
9656       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9657                       SecondField->getSourceRange(), FieldName)
9658           << SecondII;
9659 
9660       return true;
9661     }
9662 
9663     assert(getContext().hasSameType(FirstField->getType(),
9664                                     SecondField->getType()));
9665 
9666     QualType FirstType = FirstField->getType();
9667     QualType SecondType = SecondField->getType();
9668     if (ComputeQualTypeODRHash(FirstType) !=
9669         ComputeQualTypeODRHash(SecondType)) {
9670       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9671                        FirstField->getSourceRange(), FieldTypeName)
9672           << FirstII << FirstType;
9673       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9674                       SecondField->getSourceRange(), FieldTypeName)
9675           << SecondII << SecondType;
9676 
9677       return true;
9678     }
9679 
9680     const bool IsFirstBitField = FirstField->isBitField();
9681     const bool IsSecondBitField = SecondField->isBitField();
9682     if (IsFirstBitField != IsSecondBitField) {
9683       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9684                        FirstField->getSourceRange(), FieldSingleBitField)
9685           << FirstII << IsFirstBitField;
9686       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9687                       SecondField->getSourceRange(), FieldSingleBitField)
9688           << SecondII << IsSecondBitField;
9689       return true;
9690     }
9691 
9692     if (IsFirstBitField && IsSecondBitField) {
9693       unsigned FirstBitWidthHash =
9694           ComputeODRHash(FirstField->getBitWidth());
9695       unsigned SecondBitWidthHash =
9696           ComputeODRHash(SecondField->getBitWidth());
9697       if (FirstBitWidthHash != SecondBitWidthHash) {
9698         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9699                          FirstField->getSourceRange(),
9700                          FieldDifferentWidthBitField)
9701             << FirstII << FirstField->getBitWidth()->getSourceRange();
9702         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9703                         SecondField->getSourceRange(),
9704                         FieldDifferentWidthBitField)
9705             << SecondII << SecondField->getBitWidth()->getSourceRange();
9706         return true;
9707       }
9708     }
9709 
9710     if (!PP.getLangOpts().CPlusPlus)
9711       return false;
9712 
9713     const bool IsFirstMutable = FirstField->isMutable();
9714     const bool IsSecondMutable = SecondField->isMutable();
9715     if (IsFirstMutable != IsSecondMutable) {
9716       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9717                        FirstField->getSourceRange(), FieldSingleMutable)
9718           << FirstII << IsFirstMutable;
9719       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9720                       SecondField->getSourceRange(), FieldSingleMutable)
9721           << SecondII << IsSecondMutable;
9722       return true;
9723     }
9724 
9725     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9726     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9727     if ((!FirstInitializer && SecondInitializer) ||
9728         (FirstInitializer && !SecondInitializer)) {
9729       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9730                        FirstField->getSourceRange(), FieldSingleInitializer)
9731           << FirstII << (FirstInitializer != nullptr);
9732       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9733                       SecondField->getSourceRange(), FieldSingleInitializer)
9734           << SecondII << (SecondInitializer != nullptr);
9735       return true;
9736     }
9737 
9738     if (FirstInitializer && SecondInitializer) {
9739       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9740       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9741       if (FirstInitHash != SecondInitHash) {
9742         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9743                          FirstField->getSourceRange(),
9744                          FieldDifferentInitializers)
9745             << FirstII << FirstInitializer->getSourceRange();
9746         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9747                         SecondField->getSourceRange(),
9748                         FieldDifferentInitializers)
9749             << SecondII << SecondInitializer->getSourceRange();
9750         return true;
9751       }
9752     }
9753 
9754     return false;
9755   };
9756 
9757   auto ODRDiagTypeDefOrAlias =
9758       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9759           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9760           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9761           bool IsTypeAlias) {
9762         auto FirstName = FirstTD->getDeclName();
9763         auto SecondName = SecondTD->getDeclName();
9764         if (FirstName != SecondName) {
9765           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9766                            FirstTD->getSourceRange(), TypedefName)
9767               << IsTypeAlias << FirstName;
9768           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9769                           SecondTD->getSourceRange(), TypedefName)
9770               << IsTypeAlias << SecondName;
9771           return true;
9772         }
9773 
9774         QualType FirstType = FirstTD->getUnderlyingType();
9775         QualType SecondType = SecondTD->getUnderlyingType();
9776         if (ComputeQualTypeODRHash(FirstType) !=
9777             ComputeQualTypeODRHash(SecondType)) {
9778           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9779                            FirstTD->getSourceRange(), TypedefType)
9780               << IsTypeAlias << FirstName << FirstType;
9781           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9782                           SecondTD->getSourceRange(), TypedefType)
9783               << IsTypeAlias << SecondName << SecondType;
9784           return true;
9785         }
9786 
9787         return false;
9788   };
9789 
9790   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9791                      &ComputeQualTypeODRHash, &ComputeODRHash,
9792                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9793                            StringRef SecondModule, VarDecl *FirstVD,
9794                            VarDecl *SecondVD) {
9795     auto FirstName = FirstVD->getDeclName();
9796     auto SecondName = SecondVD->getDeclName();
9797     if (FirstName != SecondName) {
9798       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9799                        FirstVD->getSourceRange(), VarName)
9800           << FirstName;
9801       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9802                       SecondVD->getSourceRange(), VarName)
9803           << SecondName;
9804       return true;
9805     }
9806 
9807     QualType FirstType = FirstVD->getType();
9808     QualType SecondType = SecondVD->getType();
9809     if (ComputeQualTypeODRHash(FirstType) !=
9810         ComputeQualTypeODRHash(SecondType)) {
9811       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9812                        FirstVD->getSourceRange(), VarType)
9813           << FirstName << FirstType;
9814       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9815                       SecondVD->getSourceRange(), VarType)
9816           << SecondName << SecondType;
9817       return true;
9818     }
9819 
9820     if (!PP.getLangOpts().CPlusPlus)
9821       return false;
9822 
9823     const Expr *FirstInit = FirstVD->getInit();
9824     const Expr *SecondInit = SecondVD->getInit();
9825     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9826       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9827                        FirstVD->getSourceRange(), VarSingleInitializer)
9828           << FirstName << (FirstInit == nullptr)
9829           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9830       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9831                       SecondVD->getSourceRange(), VarSingleInitializer)
9832           << SecondName << (SecondInit == nullptr)
9833           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9834       return true;
9835     }
9836 
9837     if (FirstInit && SecondInit &&
9838         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9839       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9840                        FirstVD->getSourceRange(), VarDifferentInitializer)
9841           << FirstName << FirstInit->getSourceRange();
9842       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9843                       SecondVD->getSourceRange(), VarDifferentInitializer)
9844           << SecondName << SecondInit->getSourceRange();
9845       return true;
9846     }
9847 
9848     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9849     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9850     if (FirstIsConstexpr != SecondIsConstexpr) {
9851       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9852                        FirstVD->getSourceRange(), VarConstexpr)
9853           << FirstName << FirstIsConstexpr;
9854       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9855                       SecondVD->getSourceRange(), VarConstexpr)
9856           << SecondName << SecondIsConstexpr;
9857       return true;
9858     }
9859     return false;
9860   };
9861 
9862   auto DifferenceSelector = [](Decl *D) {
9863     assert(D && "valid Decl required");
9864     switch (D->getKind()) {
9865     default:
9866       return Other;
9867     case Decl::AccessSpec:
9868       switch (D->getAccess()) {
9869       case AS_public:
9870         return PublicSpecifer;
9871       case AS_private:
9872         return PrivateSpecifer;
9873       case AS_protected:
9874         return ProtectedSpecifer;
9875       case AS_none:
9876         break;
9877       }
9878       llvm_unreachable("Invalid access specifier");
9879     case Decl::StaticAssert:
9880       return StaticAssert;
9881     case Decl::Field:
9882       return Field;
9883     case Decl::CXXMethod:
9884     case Decl::CXXConstructor:
9885     case Decl::CXXDestructor:
9886       return CXXMethod;
9887     case Decl::TypeAlias:
9888       return TypeAlias;
9889     case Decl::Typedef:
9890       return TypeDef;
9891     case Decl::Var:
9892       return Var;
9893     case Decl::Friend:
9894       return Friend;
9895     case Decl::FunctionTemplate:
9896       return FunctionTemplate;
9897     }
9898   };
9899 
9900   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9901   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9902                                                  RecordDecl *Record,
9903                                                  const DeclContext *DC) {
9904     for (auto *D : Record->decls()) {
9905       if (!ODRHash::isWhitelistedDecl(D, DC))
9906         continue;
9907       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9908     }
9909   };
9910 
9911   struct DiffResult {
9912     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9913     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9914   };
9915 
9916   // If there is a diagnoseable difference, FirstDiffType and
9917   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9918   // filled in if not EndOfClass.
9919   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9920                                              DeclHashes &SecondHashes) {
9921     DiffResult DR;
9922     auto FirstIt = FirstHashes.begin();
9923     auto SecondIt = SecondHashes.begin();
9924     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9925       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9926           FirstIt->second == SecondIt->second) {
9927         ++FirstIt;
9928         ++SecondIt;
9929         continue;
9930       }
9931 
9932       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9933       DR.SecondDecl =
9934           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9935 
9936       DR.FirstDiffType =
9937           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9938       DR.SecondDiffType =
9939           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9940       return DR;
9941     }
9942     return DR;
9943   };
9944 
9945   // Use this to diagnose that an unexpected Decl was encountered
9946   // or no difference was detected. This causes a generic error
9947   // message to be emitted.
9948   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9949                                       StringRef FirstModule,
9950                                       NamedDecl *SecondRecord,
9951                                       StringRef SecondModule) {
9952     Diag(FirstRecord->getLocation(),
9953          diag::err_module_odr_violation_different_definitions)
9954         << FirstRecord << FirstModule.empty() << FirstModule;
9955 
9956     if (DR.FirstDecl) {
9957       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9958           << FirstRecord << DR.FirstDecl->getSourceRange();
9959     }
9960 
9961     Diag(SecondRecord->getLocation(),
9962          diag::note_module_odr_violation_different_definitions)
9963         << SecondModule;
9964 
9965     if (DR.SecondDecl) {
9966       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9967           << DR.SecondDecl->getSourceRange();
9968     }
9969   };
9970 
9971   auto DiagnoseODRMismatch =
9972       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9973              NamedDecl *SecondRecord, StringRef SecondModule) {
9974         SourceLocation FirstLoc;
9975         SourceRange FirstRange;
9976         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9977         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9978           FirstLoc = FirstTag->getBraceRange().getEnd();
9979         } else {
9980           FirstLoc = DR.FirstDecl->getLocation();
9981           FirstRange = DR.FirstDecl->getSourceRange();
9982         }
9983         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9984             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9985             << DR.FirstDiffType;
9986 
9987         SourceLocation SecondLoc;
9988         SourceRange SecondRange;
9989         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9990         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9991           SecondLoc = SecondTag->getBraceRange().getEnd();
9992         } else {
9993           SecondLoc = DR.SecondDecl->getLocation();
9994           SecondRange = DR.SecondDecl->getSourceRange();
9995         }
9996         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9997             << SecondModule << SecondRange << DR.SecondDiffType;
9998       };
9999 
10000   // Issue any pending ODR-failure diagnostics.
10001   for (auto &Merge : OdrMergeFailures) {
10002     // If we've already pointed out a specific problem with this class, don't
10003     // bother issuing a general "something's different" diagnostic.
10004     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10005       continue;
10006 
10007     bool Diagnosed = false;
10008     CXXRecordDecl *FirstRecord = Merge.first;
10009     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10010     for (auto &RecordPair : Merge.second) {
10011       CXXRecordDecl *SecondRecord = RecordPair.first;
10012       // Multiple different declarations got merged together; tell the user
10013       // where they came from.
10014       if (FirstRecord == SecondRecord)
10015         continue;
10016 
10017       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10018 
10019       auto *FirstDD = FirstRecord->DefinitionData;
10020       auto *SecondDD = RecordPair.second;
10021 
10022       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10023 
10024       // Diagnostics from DefinitionData are emitted here.
10025       if (FirstDD != SecondDD) {
10026         enum ODRDefinitionDataDifference {
10027           NumBases,
10028           NumVBases,
10029           BaseType,
10030           BaseVirtual,
10031           BaseAccess,
10032         };
10033         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10034                                  this](SourceLocation Loc, SourceRange Range,
10035                                        ODRDefinitionDataDifference DiffType) {
10036           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10037                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10038                  << DiffType;
10039         };
10040         auto ODRDiagBaseNote = [&SecondModule,
10041                                 this](SourceLocation Loc, SourceRange Range,
10042                                       ODRDefinitionDataDifference DiffType) {
10043           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10044                  << SecondModule << Range << DiffType;
10045         };
10046 
10047         unsigned FirstNumBases = FirstDD->NumBases;
10048         unsigned FirstNumVBases = FirstDD->NumVBases;
10049         unsigned SecondNumBases = SecondDD->NumBases;
10050         unsigned SecondNumVBases = SecondDD->NumVBases;
10051 
10052         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10053           unsigned NumBases = DD->NumBases;
10054           if (NumBases == 0) return SourceRange();
10055           auto bases = DD->bases();
10056           return SourceRange(bases[0].getBeginLoc(),
10057                              bases[NumBases - 1].getEndLoc());
10058         };
10059 
10060         if (FirstNumBases != SecondNumBases) {
10061           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10062                            NumBases)
10063               << FirstNumBases;
10064           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10065                           NumBases)
10066               << SecondNumBases;
10067           Diagnosed = true;
10068           break;
10069         }
10070 
10071         if (FirstNumVBases != SecondNumVBases) {
10072           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10073                            NumVBases)
10074               << FirstNumVBases;
10075           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10076                           NumVBases)
10077               << SecondNumVBases;
10078           Diagnosed = true;
10079           break;
10080         }
10081 
10082         auto FirstBases = FirstDD->bases();
10083         auto SecondBases = SecondDD->bases();
10084         unsigned i = 0;
10085         for (i = 0; i < FirstNumBases; ++i) {
10086           auto FirstBase = FirstBases[i];
10087           auto SecondBase = SecondBases[i];
10088           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10089               ComputeQualTypeODRHash(SecondBase.getType())) {
10090             ODRDiagBaseError(FirstRecord->getLocation(),
10091                              FirstBase.getSourceRange(), BaseType)
10092                 << (i + 1) << FirstBase.getType();
10093             ODRDiagBaseNote(SecondRecord->getLocation(),
10094                             SecondBase.getSourceRange(), BaseType)
10095                 << (i + 1) << SecondBase.getType();
10096             break;
10097           }
10098 
10099           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10100             ODRDiagBaseError(FirstRecord->getLocation(),
10101                              FirstBase.getSourceRange(), BaseVirtual)
10102                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10103             ODRDiagBaseNote(SecondRecord->getLocation(),
10104                             SecondBase.getSourceRange(), BaseVirtual)
10105                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10106             break;
10107           }
10108 
10109           if (FirstBase.getAccessSpecifierAsWritten() !=
10110               SecondBase.getAccessSpecifierAsWritten()) {
10111             ODRDiagBaseError(FirstRecord->getLocation(),
10112                              FirstBase.getSourceRange(), BaseAccess)
10113                 << (i + 1) << FirstBase.getType()
10114                 << (int)FirstBase.getAccessSpecifierAsWritten();
10115             ODRDiagBaseNote(SecondRecord->getLocation(),
10116                             SecondBase.getSourceRange(), BaseAccess)
10117                 << (i + 1) << SecondBase.getType()
10118                 << (int)SecondBase.getAccessSpecifierAsWritten();
10119             break;
10120           }
10121         }
10122 
10123         if (i != FirstNumBases) {
10124           Diagnosed = true;
10125           break;
10126         }
10127       }
10128 
10129       const ClassTemplateDecl *FirstTemplate =
10130           FirstRecord->getDescribedClassTemplate();
10131       const ClassTemplateDecl *SecondTemplate =
10132           SecondRecord->getDescribedClassTemplate();
10133 
10134       assert(!FirstTemplate == !SecondTemplate &&
10135              "Both pointers should be null or non-null");
10136 
10137       enum ODRTemplateDifference {
10138         ParamEmptyName,
10139         ParamName,
10140         ParamSingleDefaultArgument,
10141         ParamDifferentDefaultArgument,
10142       };
10143 
10144       if (FirstTemplate && SecondTemplate) {
10145         DeclHashes FirstTemplateHashes;
10146         DeclHashes SecondTemplateHashes;
10147 
10148         auto PopulateTemplateParameterHashs =
10149             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10150                                      const ClassTemplateDecl *TD) {
10151               for (auto *D : TD->getTemplateParameters()->asArray()) {
10152                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10153               }
10154             };
10155 
10156         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10157         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10158 
10159         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10160                "Number of template parameters should be equal.");
10161 
10162         auto FirstIt = FirstTemplateHashes.begin();
10163         auto FirstEnd = FirstTemplateHashes.end();
10164         auto SecondIt = SecondTemplateHashes.begin();
10165         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10166           if (FirstIt->second == SecondIt->second)
10167             continue;
10168 
10169           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10170                                           SourceLocation Loc, SourceRange Range,
10171                                           ODRTemplateDifference DiffType) {
10172             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10173                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10174                    << DiffType;
10175           };
10176           auto ODRDiagTemplateNote = [&SecondModule, this](
10177                                          SourceLocation Loc, SourceRange Range,
10178                                          ODRTemplateDifference DiffType) {
10179             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10180                    << SecondModule << Range << DiffType;
10181           };
10182 
10183           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10184           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10185 
10186           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10187                  "Parameter Decl's should be the same kind.");
10188 
10189           DeclarationName FirstName = FirstDecl->getDeclName();
10190           DeclarationName SecondName = SecondDecl->getDeclName();
10191 
10192           if (FirstName != SecondName) {
10193             const bool FirstNameEmpty =
10194                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10195             const bool SecondNameEmpty =
10196                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10197             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10198                    "Both template parameters cannot be unnamed.");
10199             ODRDiagTemplateError(FirstDecl->getLocation(),
10200                                  FirstDecl->getSourceRange(),
10201                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10202                 << FirstName;
10203             ODRDiagTemplateNote(SecondDecl->getLocation(),
10204                                 SecondDecl->getSourceRange(),
10205                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10206                 << SecondName;
10207             break;
10208           }
10209 
10210           switch (FirstDecl->getKind()) {
10211           default:
10212             llvm_unreachable("Invalid template parameter type.");
10213           case Decl::TemplateTypeParm: {
10214             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10215             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10216             const bool HasFirstDefaultArgument =
10217                 FirstParam->hasDefaultArgument() &&
10218                 !FirstParam->defaultArgumentWasInherited();
10219             const bool HasSecondDefaultArgument =
10220                 SecondParam->hasDefaultArgument() &&
10221                 !SecondParam->defaultArgumentWasInherited();
10222 
10223             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10224               ODRDiagTemplateError(FirstDecl->getLocation(),
10225                                    FirstDecl->getSourceRange(),
10226                                    ParamSingleDefaultArgument)
10227                   << HasFirstDefaultArgument;
10228               ODRDiagTemplateNote(SecondDecl->getLocation(),
10229                                   SecondDecl->getSourceRange(),
10230                                   ParamSingleDefaultArgument)
10231                   << HasSecondDefaultArgument;
10232               break;
10233             }
10234 
10235             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10236                    "Expecting default arguments.");
10237 
10238             ODRDiagTemplateError(FirstDecl->getLocation(),
10239                                  FirstDecl->getSourceRange(),
10240                                  ParamDifferentDefaultArgument);
10241             ODRDiagTemplateNote(SecondDecl->getLocation(),
10242                                 SecondDecl->getSourceRange(),
10243                                 ParamDifferentDefaultArgument);
10244 
10245             break;
10246           }
10247           case Decl::NonTypeTemplateParm: {
10248             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10249             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10250             const bool HasFirstDefaultArgument =
10251                 FirstParam->hasDefaultArgument() &&
10252                 !FirstParam->defaultArgumentWasInherited();
10253             const bool HasSecondDefaultArgument =
10254                 SecondParam->hasDefaultArgument() &&
10255                 !SecondParam->defaultArgumentWasInherited();
10256 
10257             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10258               ODRDiagTemplateError(FirstDecl->getLocation(),
10259                                    FirstDecl->getSourceRange(),
10260                                    ParamSingleDefaultArgument)
10261                   << HasFirstDefaultArgument;
10262               ODRDiagTemplateNote(SecondDecl->getLocation(),
10263                                   SecondDecl->getSourceRange(),
10264                                   ParamSingleDefaultArgument)
10265                   << HasSecondDefaultArgument;
10266               break;
10267             }
10268 
10269             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10270                    "Expecting default arguments.");
10271 
10272             ODRDiagTemplateError(FirstDecl->getLocation(),
10273                                  FirstDecl->getSourceRange(),
10274                                  ParamDifferentDefaultArgument);
10275             ODRDiagTemplateNote(SecondDecl->getLocation(),
10276                                 SecondDecl->getSourceRange(),
10277                                 ParamDifferentDefaultArgument);
10278 
10279             break;
10280           }
10281           case Decl::TemplateTemplateParm: {
10282             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10283             const auto *SecondParam =
10284                 cast<TemplateTemplateParmDecl>(SecondDecl);
10285             const bool HasFirstDefaultArgument =
10286                 FirstParam->hasDefaultArgument() &&
10287                 !FirstParam->defaultArgumentWasInherited();
10288             const bool HasSecondDefaultArgument =
10289                 SecondParam->hasDefaultArgument() &&
10290                 !SecondParam->defaultArgumentWasInherited();
10291 
10292             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10293               ODRDiagTemplateError(FirstDecl->getLocation(),
10294                                    FirstDecl->getSourceRange(),
10295                                    ParamSingleDefaultArgument)
10296                   << HasFirstDefaultArgument;
10297               ODRDiagTemplateNote(SecondDecl->getLocation(),
10298                                   SecondDecl->getSourceRange(),
10299                                   ParamSingleDefaultArgument)
10300                   << HasSecondDefaultArgument;
10301               break;
10302             }
10303 
10304             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10305                    "Expecting default arguments.");
10306 
10307             ODRDiagTemplateError(FirstDecl->getLocation(),
10308                                  FirstDecl->getSourceRange(),
10309                                  ParamDifferentDefaultArgument);
10310             ODRDiagTemplateNote(SecondDecl->getLocation(),
10311                                 SecondDecl->getSourceRange(),
10312                                 ParamDifferentDefaultArgument);
10313 
10314             break;
10315           }
10316           }
10317 
10318           break;
10319         }
10320 
10321         if (FirstIt != FirstEnd) {
10322           Diagnosed = true;
10323           break;
10324         }
10325       }
10326 
10327       DeclHashes FirstHashes;
10328       DeclHashes SecondHashes;
10329       const DeclContext *DC = FirstRecord;
10330       PopulateHashes(FirstHashes, FirstRecord, DC);
10331       PopulateHashes(SecondHashes, SecondRecord, DC);
10332 
10333       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10334       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10335       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10336       Decl *FirstDecl = DR.FirstDecl;
10337       Decl *SecondDecl = DR.SecondDecl;
10338 
10339       if (FirstDiffType == Other || SecondDiffType == Other) {
10340         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10341                               SecondModule);
10342         Diagnosed = true;
10343         break;
10344       }
10345 
10346       if (FirstDiffType != SecondDiffType) {
10347         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10348                             SecondModule);
10349         Diagnosed = true;
10350         break;
10351       }
10352 
10353       assert(FirstDiffType == SecondDiffType);
10354 
10355       switch (FirstDiffType) {
10356       case Other:
10357       case EndOfClass:
10358       case PublicSpecifer:
10359       case PrivateSpecifer:
10360       case ProtectedSpecifer:
10361         llvm_unreachable("Invalid diff type");
10362 
10363       case StaticAssert: {
10364         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10365         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10366 
10367         Expr *FirstExpr = FirstSA->getAssertExpr();
10368         Expr *SecondExpr = SecondSA->getAssertExpr();
10369         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10370         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10371         if (FirstODRHash != SecondODRHash) {
10372           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10373                            FirstExpr->getSourceRange(), StaticAssertCondition);
10374           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10375                           SecondExpr->getSourceRange(), StaticAssertCondition);
10376           Diagnosed = true;
10377           break;
10378         }
10379 
10380         StringLiteral *FirstStr = FirstSA->getMessage();
10381         StringLiteral *SecondStr = SecondSA->getMessage();
10382         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10383         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10384           SourceLocation FirstLoc, SecondLoc;
10385           SourceRange FirstRange, SecondRange;
10386           if (FirstStr) {
10387             FirstLoc = FirstStr->getBeginLoc();
10388             FirstRange = FirstStr->getSourceRange();
10389           } else {
10390             FirstLoc = FirstSA->getBeginLoc();
10391             FirstRange = FirstSA->getSourceRange();
10392           }
10393           if (SecondStr) {
10394             SecondLoc = SecondStr->getBeginLoc();
10395             SecondRange = SecondStr->getSourceRange();
10396           } else {
10397             SecondLoc = SecondSA->getBeginLoc();
10398             SecondRange = SecondSA->getSourceRange();
10399           }
10400           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10401                            StaticAssertOnlyMessage)
10402               << (FirstStr == nullptr);
10403           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10404                           StaticAssertOnlyMessage)
10405               << (SecondStr == nullptr);
10406           Diagnosed = true;
10407           break;
10408         }
10409 
10410         if (FirstStr && SecondStr &&
10411             FirstStr->getString() != SecondStr->getString()) {
10412           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10413                            FirstStr->getSourceRange(), StaticAssertMessage);
10414           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10415                           SecondStr->getSourceRange(), StaticAssertMessage);
10416           Diagnosed = true;
10417           break;
10418         }
10419         break;
10420       }
10421       case Field: {
10422         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10423                                  cast<FieldDecl>(FirstDecl),
10424                                  cast<FieldDecl>(SecondDecl));
10425         break;
10426       }
10427       case CXXMethod: {
10428         enum {
10429           DiagMethod,
10430           DiagConstructor,
10431           DiagDestructor,
10432         } FirstMethodType,
10433             SecondMethodType;
10434         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10435           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10436           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10437           return DiagMethod;
10438         };
10439         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10440         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10441         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10442         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10443         auto FirstName = FirstMethod->getDeclName();
10444         auto SecondName = SecondMethod->getDeclName();
10445         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10446           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10447                            FirstMethod->getSourceRange(), MethodName)
10448               << FirstMethodType << FirstName;
10449           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10450                           SecondMethod->getSourceRange(), MethodName)
10451               << SecondMethodType << SecondName;
10452 
10453           Diagnosed = true;
10454           break;
10455         }
10456 
10457         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10458         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10459         if (FirstDeleted != SecondDeleted) {
10460           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10461                            FirstMethod->getSourceRange(), MethodDeleted)
10462               << FirstMethodType << FirstName << FirstDeleted;
10463 
10464           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10465                           SecondMethod->getSourceRange(), MethodDeleted)
10466               << SecondMethodType << SecondName << SecondDeleted;
10467           Diagnosed = true;
10468           break;
10469         }
10470 
10471         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10472         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10473         if (FirstDefaulted != SecondDefaulted) {
10474           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10475                            FirstMethod->getSourceRange(), MethodDefaulted)
10476               << FirstMethodType << FirstName << FirstDefaulted;
10477 
10478           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10479                           SecondMethod->getSourceRange(), MethodDefaulted)
10480               << SecondMethodType << SecondName << SecondDefaulted;
10481           Diagnosed = true;
10482           break;
10483         }
10484 
10485         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10486         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10487         const bool FirstPure = FirstMethod->isPure();
10488         const bool SecondPure = SecondMethod->isPure();
10489         if ((FirstVirtual || SecondVirtual) &&
10490             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10491           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10492                            FirstMethod->getSourceRange(), MethodVirtual)
10493               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10494           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10495                           SecondMethod->getSourceRange(), MethodVirtual)
10496               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10497           Diagnosed = true;
10498           break;
10499         }
10500 
10501         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10502         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10503         // class needs to be checked instead.
10504         const auto FirstStorage = FirstMethod->getStorageClass();
10505         const auto SecondStorage = SecondMethod->getStorageClass();
10506         const bool FirstStatic = FirstStorage == SC_Static;
10507         const bool SecondStatic = SecondStorage == SC_Static;
10508         if (FirstStatic != SecondStatic) {
10509           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10510                            FirstMethod->getSourceRange(), MethodStatic)
10511               << FirstMethodType << FirstName << FirstStatic;
10512           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10513                           SecondMethod->getSourceRange(), MethodStatic)
10514               << SecondMethodType << SecondName << SecondStatic;
10515           Diagnosed = true;
10516           break;
10517         }
10518 
10519         const bool FirstVolatile = FirstMethod->isVolatile();
10520         const bool SecondVolatile = SecondMethod->isVolatile();
10521         if (FirstVolatile != SecondVolatile) {
10522           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10523                            FirstMethod->getSourceRange(), MethodVolatile)
10524               << FirstMethodType << FirstName << FirstVolatile;
10525           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10526                           SecondMethod->getSourceRange(), MethodVolatile)
10527               << SecondMethodType << SecondName << SecondVolatile;
10528           Diagnosed = true;
10529           break;
10530         }
10531 
10532         const bool FirstConst = FirstMethod->isConst();
10533         const bool SecondConst = SecondMethod->isConst();
10534         if (FirstConst != SecondConst) {
10535           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10536                            FirstMethod->getSourceRange(), MethodConst)
10537               << FirstMethodType << FirstName << FirstConst;
10538           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10539                           SecondMethod->getSourceRange(), MethodConst)
10540               << SecondMethodType << SecondName << SecondConst;
10541           Diagnosed = true;
10542           break;
10543         }
10544 
10545         const bool FirstInline = FirstMethod->isInlineSpecified();
10546         const bool SecondInline = SecondMethod->isInlineSpecified();
10547         if (FirstInline != SecondInline) {
10548           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10549                            FirstMethod->getSourceRange(), MethodInline)
10550               << FirstMethodType << FirstName << FirstInline;
10551           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10552                           SecondMethod->getSourceRange(), MethodInline)
10553               << SecondMethodType << SecondName << SecondInline;
10554           Diagnosed = true;
10555           break;
10556         }
10557 
10558         const unsigned FirstNumParameters = FirstMethod->param_size();
10559         const unsigned SecondNumParameters = SecondMethod->param_size();
10560         if (FirstNumParameters != SecondNumParameters) {
10561           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10562                            FirstMethod->getSourceRange(),
10563                            MethodNumberParameters)
10564               << FirstMethodType << FirstName << FirstNumParameters;
10565           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10566                           SecondMethod->getSourceRange(),
10567                           MethodNumberParameters)
10568               << SecondMethodType << SecondName << SecondNumParameters;
10569           Diagnosed = true;
10570           break;
10571         }
10572 
10573         // Need this status boolean to know when break out of the switch.
10574         bool ParameterMismatch = false;
10575         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10576           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10577           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10578 
10579           QualType FirstParamType = FirstParam->getType();
10580           QualType SecondParamType = SecondParam->getType();
10581           if (FirstParamType != SecondParamType &&
10582               ComputeQualTypeODRHash(FirstParamType) !=
10583                   ComputeQualTypeODRHash(SecondParamType)) {
10584             if (const DecayedType *ParamDecayedType =
10585                     FirstParamType->getAs<DecayedType>()) {
10586               ODRDiagDeclError(
10587                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10588                   FirstMethod->getSourceRange(), MethodParameterType)
10589                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10590                   << true << ParamDecayedType->getOriginalType();
10591             } else {
10592               ODRDiagDeclError(
10593                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10594                   FirstMethod->getSourceRange(), MethodParameterType)
10595                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10596                   << false;
10597             }
10598 
10599             if (const DecayedType *ParamDecayedType =
10600                     SecondParamType->getAs<DecayedType>()) {
10601               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10602                               SecondMethod->getSourceRange(),
10603                               MethodParameterType)
10604                   << SecondMethodType << SecondName << (I + 1)
10605                   << SecondParamType << true
10606                   << ParamDecayedType->getOriginalType();
10607             } else {
10608               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10609                               SecondMethod->getSourceRange(),
10610                               MethodParameterType)
10611                   << SecondMethodType << SecondName << (I + 1)
10612                   << SecondParamType << false;
10613             }
10614             ParameterMismatch = true;
10615             break;
10616           }
10617 
10618           DeclarationName FirstParamName = FirstParam->getDeclName();
10619           DeclarationName SecondParamName = SecondParam->getDeclName();
10620           if (FirstParamName != SecondParamName) {
10621             ODRDiagDeclError(FirstRecord, FirstModule,
10622                              FirstMethod->getLocation(),
10623                              FirstMethod->getSourceRange(), MethodParameterName)
10624                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10625             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10626                             SecondMethod->getSourceRange(), MethodParameterName)
10627                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10628             ParameterMismatch = true;
10629             break;
10630           }
10631 
10632           const Expr *FirstInit = FirstParam->getInit();
10633           const Expr *SecondInit = SecondParam->getInit();
10634           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10635             ODRDiagDeclError(FirstRecord, FirstModule,
10636                              FirstMethod->getLocation(),
10637                              FirstMethod->getSourceRange(),
10638                              MethodParameterSingleDefaultArgument)
10639                 << FirstMethodType << FirstName << (I + 1)
10640                 << (FirstInit == nullptr)
10641                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10642             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10643                             SecondMethod->getSourceRange(),
10644                             MethodParameterSingleDefaultArgument)
10645                 << SecondMethodType << SecondName << (I + 1)
10646                 << (SecondInit == nullptr)
10647                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10648             ParameterMismatch = true;
10649             break;
10650           }
10651 
10652           if (FirstInit && SecondInit &&
10653               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10654             ODRDiagDeclError(FirstRecord, FirstModule,
10655                              FirstMethod->getLocation(),
10656                              FirstMethod->getSourceRange(),
10657                              MethodParameterDifferentDefaultArgument)
10658                 << FirstMethodType << FirstName << (I + 1)
10659                 << FirstInit->getSourceRange();
10660             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10661                             SecondMethod->getSourceRange(),
10662                             MethodParameterDifferentDefaultArgument)
10663                 << SecondMethodType << SecondName << (I + 1)
10664                 << SecondInit->getSourceRange();
10665             ParameterMismatch = true;
10666             break;
10667 
10668           }
10669         }
10670 
10671         if (ParameterMismatch) {
10672           Diagnosed = true;
10673           break;
10674         }
10675 
10676         const auto *FirstTemplateArgs =
10677             FirstMethod->getTemplateSpecializationArgs();
10678         const auto *SecondTemplateArgs =
10679             SecondMethod->getTemplateSpecializationArgs();
10680 
10681         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10682             (!FirstTemplateArgs && SecondTemplateArgs)) {
10683           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10684                            FirstMethod->getSourceRange(),
10685                            MethodNoTemplateArguments)
10686               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10687           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10688                           SecondMethod->getSourceRange(),
10689                           MethodNoTemplateArguments)
10690               << SecondMethodType << SecondName
10691               << (SecondTemplateArgs != nullptr);
10692 
10693           Diagnosed = true;
10694           break;
10695         }
10696 
10697         if (FirstTemplateArgs && SecondTemplateArgs) {
10698           // Remove pack expansions from argument list.
10699           auto ExpandTemplateArgumentList =
10700               [](const TemplateArgumentList *TAL) {
10701                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10702                 for (const TemplateArgument &TA : TAL->asArray()) {
10703                   if (TA.getKind() != TemplateArgument::Pack) {
10704                     ExpandedList.push_back(&TA);
10705                     continue;
10706                   }
10707                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10708                     ExpandedList.push_back(&PackTA);
10709                   }
10710                 }
10711                 return ExpandedList;
10712               };
10713           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10714               ExpandTemplateArgumentList(FirstTemplateArgs);
10715           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10716               ExpandTemplateArgumentList(SecondTemplateArgs);
10717 
10718           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10719             ODRDiagDeclError(FirstRecord, FirstModule,
10720                              FirstMethod->getLocation(),
10721                              FirstMethod->getSourceRange(),
10722                              MethodDifferentNumberTemplateArguments)
10723                 << FirstMethodType << FirstName
10724                 << (unsigned)FirstExpandedList.size();
10725             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10726                             SecondMethod->getSourceRange(),
10727                             MethodDifferentNumberTemplateArguments)
10728                 << SecondMethodType << SecondName
10729                 << (unsigned)SecondExpandedList.size();
10730 
10731             Diagnosed = true;
10732             break;
10733           }
10734 
10735           bool TemplateArgumentMismatch = false;
10736           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10737             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10738                                    &SecondTA = *SecondExpandedList[i];
10739             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10740                 ComputeTemplateArgumentODRHash(SecondTA)) {
10741               continue;
10742             }
10743 
10744             ODRDiagDeclError(
10745                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10746                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10747                 << FirstMethodType << FirstName << FirstTA << i + 1;
10748             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10749                             SecondMethod->getSourceRange(),
10750                             MethodDifferentTemplateArgument)
10751                 << SecondMethodType << SecondName << SecondTA << i + 1;
10752 
10753             TemplateArgumentMismatch = true;
10754             break;
10755           }
10756 
10757           if (TemplateArgumentMismatch) {
10758             Diagnosed = true;
10759             break;
10760           }
10761         }
10762 
10763         // Compute the hash of the method as if it has no body.
10764         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10765           Hash.clear();
10766           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10767           return Hash.CalculateHash();
10768         };
10769 
10770         // Compare the hash generated to the hash stored.  A difference means
10771         // that a body was present in the original source.  Due to merging,
10772         // the stardard way of detecting a body will not work.
10773         const bool HasFirstBody =
10774             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10775         const bool HasSecondBody =
10776             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10777 
10778         if (HasFirstBody != HasSecondBody) {
10779           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10780                            FirstMethod->getSourceRange(), MethodSingleBody)
10781               << FirstMethodType << FirstName << HasFirstBody;
10782           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10783                           SecondMethod->getSourceRange(), MethodSingleBody)
10784               << SecondMethodType << SecondName << HasSecondBody;
10785           Diagnosed = true;
10786           break;
10787         }
10788 
10789         if (HasFirstBody && HasSecondBody) {
10790           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10791                            FirstMethod->getSourceRange(), MethodDifferentBody)
10792               << FirstMethodType << FirstName;
10793           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10794                           SecondMethod->getSourceRange(), MethodDifferentBody)
10795               << SecondMethodType << SecondName;
10796           Diagnosed = true;
10797           break;
10798         }
10799 
10800         break;
10801       }
10802       case TypeAlias:
10803       case TypeDef: {
10804         Diagnosed = ODRDiagTypeDefOrAlias(
10805             FirstRecord, FirstModule, SecondModule,
10806             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10807             FirstDiffType == TypeAlias);
10808         break;
10809       }
10810       case Var: {
10811         Diagnosed =
10812             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10813                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10814         break;
10815       }
10816       case Friend: {
10817         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10818         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10819 
10820         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10821         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10822 
10823         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10824         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10825 
10826         if (FirstND && SecondND) {
10827           ODRDiagDeclError(FirstRecord, FirstModule,
10828                            FirstFriend->getFriendLoc(),
10829                            FirstFriend->getSourceRange(), FriendFunction)
10830               << FirstND;
10831           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10832                           SecondFriend->getSourceRange(), FriendFunction)
10833               << SecondND;
10834 
10835           Diagnosed = true;
10836           break;
10837         }
10838 
10839         if (FirstTSI && SecondTSI) {
10840           QualType FirstFriendType = FirstTSI->getType();
10841           QualType SecondFriendType = SecondTSI->getType();
10842           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10843                  ComputeQualTypeODRHash(SecondFriendType));
10844           ODRDiagDeclError(FirstRecord, FirstModule,
10845                            FirstFriend->getFriendLoc(),
10846                            FirstFriend->getSourceRange(), FriendType)
10847               << FirstFriendType;
10848           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10849                           SecondFriend->getSourceRange(), FriendType)
10850               << SecondFriendType;
10851           Diagnosed = true;
10852           break;
10853         }
10854 
10855         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10856                          FirstFriend->getSourceRange(), FriendTypeFunction)
10857             << (FirstTSI == nullptr);
10858         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10859                         SecondFriend->getSourceRange(), FriendTypeFunction)
10860             << (SecondTSI == nullptr);
10861 
10862         Diagnosed = true;
10863         break;
10864       }
10865       case FunctionTemplate: {
10866         FunctionTemplateDecl *FirstTemplate =
10867             cast<FunctionTemplateDecl>(FirstDecl);
10868         FunctionTemplateDecl *SecondTemplate =
10869             cast<FunctionTemplateDecl>(SecondDecl);
10870 
10871         TemplateParameterList *FirstTPL =
10872             FirstTemplate->getTemplateParameters();
10873         TemplateParameterList *SecondTPL =
10874             SecondTemplate->getTemplateParameters();
10875 
10876         if (FirstTPL->size() != SecondTPL->size()) {
10877           ODRDiagDeclError(FirstRecord, FirstModule,
10878                            FirstTemplate->getLocation(),
10879                            FirstTemplate->getSourceRange(),
10880                            FunctionTemplateDifferentNumberParameters)
10881               << FirstTemplate << FirstTPL->size();
10882           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10883                           SecondTemplate->getSourceRange(),
10884                           FunctionTemplateDifferentNumberParameters)
10885               << SecondTemplate << SecondTPL->size();
10886 
10887           Diagnosed = true;
10888           break;
10889         }
10890 
10891         bool ParameterMismatch = false;
10892         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10893           NamedDecl *FirstParam = FirstTPL->getParam(i);
10894           NamedDecl *SecondParam = SecondTPL->getParam(i);
10895 
10896           if (FirstParam->getKind() != SecondParam->getKind()) {
10897             enum {
10898               TemplateTypeParameter,
10899               NonTypeTemplateParameter,
10900               TemplateTemplateParameter,
10901             };
10902             auto GetParamType = [](NamedDecl *D) {
10903               switch (D->getKind()) {
10904                 default:
10905                   llvm_unreachable("Unexpected template parameter type");
10906                 case Decl::TemplateTypeParm:
10907                   return TemplateTypeParameter;
10908                 case Decl::NonTypeTemplateParm:
10909                   return NonTypeTemplateParameter;
10910                 case Decl::TemplateTemplateParm:
10911                   return TemplateTemplateParameter;
10912               }
10913             };
10914 
10915             ODRDiagDeclError(FirstRecord, FirstModule,
10916                              FirstTemplate->getLocation(),
10917                              FirstTemplate->getSourceRange(),
10918                              FunctionTemplateParameterDifferentKind)
10919                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10920             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10921                             SecondTemplate->getSourceRange(),
10922                             FunctionTemplateParameterDifferentKind)
10923                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10924 
10925             ParameterMismatch = true;
10926             break;
10927           }
10928 
10929           if (FirstParam->getName() != SecondParam->getName()) {
10930             ODRDiagDeclError(
10931                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10932                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10933                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10934                 << FirstParam;
10935             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10936                             SecondTemplate->getSourceRange(),
10937                             FunctionTemplateParameterName)
10938                 << SecondTemplate << (i + 1)
10939                 << (bool)SecondParam->getIdentifier() << SecondParam;
10940             ParameterMismatch = true;
10941             break;
10942           }
10943 
10944           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10945               isa<TemplateTypeParmDecl>(SecondParam)) {
10946             TemplateTypeParmDecl *FirstTTPD =
10947                 cast<TemplateTypeParmDecl>(FirstParam);
10948             TemplateTypeParmDecl *SecondTTPD =
10949                 cast<TemplateTypeParmDecl>(SecondParam);
10950             bool HasFirstDefaultArgument =
10951                 FirstTTPD->hasDefaultArgument() &&
10952                 !FirstTTPD->defaultArgumentWasInherited();
10953             bool HasSecondDefaultArgument =
10954                 SecondTTPD->hasDefaultArgument() &&
10955                 !SecondTTPD->defaultArgumentWasInherited();
10956             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10957               ODRDiagDeclError(FirstRecord, FirstModule,
10958                                FirstTemplate->getLocation(),
10959                                FirstTemplate->getSourceRange(),
10960                                FunctionTemplateParameterSingleDefaultArgument)
10961                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10962               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10963                               SecondTemplate->getSourceRange(),
10964                               FunctionTemplateParameterSingleDefaultArgument)
10965                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10966               ParameterMismatch = true;
10967               break;
10968             }
10969 
10970             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10971               QualType FirstType = FirstTTPD->getDefaultArgument();
10972               QualType SecondType = SecondTTPD->getDefaultArgument();
10973               if (ComputeQualTypeODRHash(FirstType) !=
10974                   ComputeQualTypeODRHash(SecondType)) {
10975                 ODRDiagDeclError(
10976                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10977                     FirstTemplate->getSourceRange(),
10978                     FunctionTemplateParameterDifferentDefaultArgument)
10979                     << FirstTemplate << (i + 1) << FirstType;
10980                 ODRDiagDeclNote(
10981                     SecondModule, SecondTemplate->getLocation(),
10982                     SecondTemplate->getSourceRange(),
10983                     FunctionTemplateParameterDifferentDefaultArgument)
10984                     << SecondTemplate << (i + 1) << SecondType;
10985                 ParameterMismatch = true;
10986                 break;
10987               }
10988             }
10989 
10990             if (FirstTTPD->isParameterPack() !=
10991                 SecondTTPD->isParameterPack()) {
10992               ODRDiagDeclError(FirstRecord, FirstModule,
10993                                FirstTemplate->getLocation(),
10994                                FirstTemplate->getSourceRange(),
10995                                FunctionTemplatePackParameter)
10996                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10997               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10998                               SecondTemplate->getSourceRange(),
10999                               FunctionTemplatePackParameter)
11000                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11001               ParameterMismatch = true;
11002               break;
11003             }
11004           }
11005 
11006           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11007               isa<TemplateTemplateParmDecl>(SecondParam)) {
11008             TemplateTemplateParmDecl *FirstTTPD =
11009                 cast<TemplateTemplateParmDecl>(FirstParam);
11010             TemplateTemplateParmDecl *SecondTTPD =
11011                 cast<TemplateTemplateParmDecl>(SecondParam);
11012 
11013             TemplateParameterList *FirstTPL =
11014                 FirstTTPD->getTemplateParameters();
11015             TemplateParameterList *SecondTPL =
11016                 SecondTTPD->getTemplateParameters();
11017 
11018             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11019                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11020               ODRDiagDeclError(FirstRecord, FirstModule,
11021                                FirstTemplate->getLocation(),
11022                                FirstTemplate->getSourceRange(),
11023                                FunctionTemplateParameterDifferentType)
11024                   << FirstTemplate << (i + 1);
11025               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11026                               SecondTemplate->getSourceRange(),
11027                               FunctionTemplateParameterDifferentType)
11028                   << SecondTemplate << (i + 1);
11029               ParameterMismatch = true;
11030               break;
11031             }
11032 
11033             bool HasFirstDefaultArgument =
11034                 FirstTTPD->hasDefaultArgument() &&
11035                 !FirstTTPD->defaultArgumentWasInherited();
11036             bool HasSecondDefaultArgument =
11037                 SecondTTPD->hasDefaultArgument() &&
11038                 !SecondTTPD->defaultArgumentWasInherited();
11039             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11040               ODRDiagDeclError(FirstRecord, FirstModule,
11041                                FirstTemplate->getLocation(),
11042                                FirstTemplate->getSourceRange(),
11043                                FunctionTemplateParameterSingleDefaultArgument)
11044                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11045               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11046                               SecondTemplate->getSourceRange(),
11047                               FunctionTemplateParameterSingleDefaultArgument)
11048                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11049               ParameterMismatch = true;
11050               break;
11051             }
11052 
11053             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11054               TemplateArgument FirstTA =
11055                   FirstTTPD->getDefaultArgument().getArgument();
11056               TemplateArgument SecondTA =
11057                   SecondTTPD->getDefaultArgument().getArgument();
11058               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11059                   ComputeTemplateArgumentODRHash(SecondTA)) {
11060                 ODRDiagDeclError(
11061                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11062                     FirstTemplate->getSourceRange(),
11063                     FunctionTemplateParameterDifferentDefaultArgument)
11064                     << FirstTemplate << (i + 1) << FirstTA;
11065                 ODRDiagDeclNote(
11066                     SecondModule, SecondTemplate->getLocation(),
11067                     SecondTemplate->getSourceRange(),
11068                     FunctionTemplateParameterDifferentDefaultArgument)
11069                     << SecondTemplate << (i + 1) << SecondTA;
11070                 ParameterMismatch = true;
11071                 break;
11072               }
11073             }
11074 
11075             if (FirstTTPD->isParameterPack() !=
11076                 SecondTTPD->isParameterPack()) {
11077               ODRDiagDeclError(FirstRecord, FirstModule,
11078                                FirstTemplate->getLocation(),
11079                                FirstTemplate->getSourceRange(),
11080                                FunctionTemplatePackParameter)
11081                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11082               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11083                               SecondTemplate->getSourceRange(),
11084                               FunctionTemplatePackParameter)
11085                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11086               ParameterMismatch = true;
11087               break;
11088             }
11089           }
11090 
11091           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11092               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11093             NonTypeTemplateParmDecl *FirstNTTPD =
11094                 cast<NonTypeTemplateParmDecl>(FirstParam);
11095             NonTypeTemplateParmDecl *SecondNTTPD =
11096                 cast<NonTypeTemplateParmDecl>(SecondParam);
11097 
11098             QualType FirstType = FirstNTTPD->getType();
11099             QualType SecondType = SecondNTTPD->getType();
11100             if (ComputeQualTypeODRHash(FirstType) !=
11101                 ComputeQualTypeODRHash(SecondType)) {
11102               ODRDiagDeclError(FirstRecord, FirstModule,
11103                                FirstTemplate->getLocation(),
11104                                FirstTemplate->getSourceRange(),
11105                                FunctionTemplateParameterDifferentType)
11106                   << FirstTemplate << (i + 1);
11107               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11108                               SecondTemplate->getSourceRange(),
11109                               FunctionTemplateParameterDifferentType)
11110                   << SecondTemplate << (i + 1);
11111               ParameterMismatch = true;
11112               break;
11113             }
11114 
11115             bool HasFirstDefaultArgument =
11116                 FirstNTTPD->hasDefaultArgument() &&
11117                 !FirstNTTPD->defaultArgumentWasInherited();
11118             bool HasSecondDefaultArgument =
11119                 SecondNTTPD->hasDefaultArgument() &&
11120                 !SecondNTTPD->defaultArgumentWasInherited();
11121             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11122               ODRDiagDeclError(FirstRecord, FirstModule,
11123                                FirstTemplate->getLocation(),
11124                                FirstTemplate->getSourceRange(),
11125                                FunctionTemplateParameterSingleDefaultArgument)
11126                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11127               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11128                               SecondTemplate->getSourceRange(),
11129                               FunctionTemplateParameterSingleDefaultArgument)
11130                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11131               ParameterMismatch = true;
11132               break;
11133             }
11134 
11135             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11136               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11137               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11138               if (ComputeODRHash(FirstDefaultArgument) !=
11139                   ComputeODRHash(SecondDefaultArgument)) {
11140                 ODRDiagDeclError(
11141                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11142                     FirstTemplate->getSourceRange(),
11143                     FunctionTemplateParameterDifferentDefaultArgument)
11144                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11145                 ODRDiagDeclNote(
11146                     SecondModule, SecondTemplate->getLocation(),
11147                     SecondTemplate->getSourceRange(),
11148                     FunctionTemplateParameterDifferentDefaultArgument)
11149                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11150                 ParameterMismatch = true;
11151                 break;
11152               }
11153             }
11154 
11155             if (FirstNTTPD->isParameterPack() !=
11156                 SecondNTTPD->isParameterPack()) {
11157               ODRDiagDeclError(FirstRecord, FirstModule,
11158                                FirstTemplate->getLocation(),
11159                                FirstTemplate->getSourceRange(),
11160                                FunctionTemplatePackParameter)
11161                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11162               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11163                               SecondTemplate->getSourceRange(),
11164                               FunctionTemplatePackParameter)
11165                   << SecondTemplate << (i + 1)
11166                   << SecondNTTPD->isParameterPack();
11167               ParameterMismatch = true;
11168               break;
11169             }
11170           }
11171         }
11172 
11173         if (ParameterMismatch) {
11174           Diagnosed = true;
11175           break;
11176         }
11177 
11178         break;
11179       }
11180       }
11181 
11182       if (Diagnosed)
11183         continue;
11184 
11185       Diag(FirstDecl->getLocation(),
11186            diag::err_module_odr_violation_mismatch_decl_unknown)
11187           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11188           << FirstDecl->getSourceRange();
11189       Diag(SecondDecl->getLocation(),
11190            diag::note_module_odr_violation_mismatch_decl_unknown)
11191           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11192       Diagnosed = true;
11193     }
11194 
11195     if (!Diagnosed) {
11196       // All definitions are updates to the same declaration. This happens if a
11197       // module instantiates the declaration of a class template specialization
11198       // and two or more other modules instantiate its definition.
11199       //
11200       // FIXME: Indicate which modules had instantiations of this definition.
11201       // FIXME: How can this even happen?
11202       Diag(Merge.first->getLocation(),
11203            diag::err_module_odr_violation_different_instantiations)
11204         << Merge.first;
11205     }
11206   }
11207 
11208   // Issue ODR failures diagnostics for functions.
11209   for (auto &Merge : FunctionOdrMergeFailures) {
11210     enum ODRFunctionDifference {
11211       ReturnType,
11212       ParameterName,
11213       ParameterType,
11214       ParameterSingleDefaultArgument,
11215       ParameterDifferentDefaultArgument,
11216       FunctionBody,
11217     };
11218 
11219     FunctionDecl *FirstFunction = Merge.first;
11220     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11221 
11222     bool Diagnosed = false;
11223     for (auto &SecondFunction : Merge.second) {
11224 
11225       if (FirstFunction == SecondFunction)
11226         continue;
11227 
11228       std::string SecondModule =
11229           getOwningModuleNameForDiagnostic(SecondFunction);
11230 
11231       auto ODRDiagError = [FirstFunction, &FirstModule,
11232                            this](SourceLocation Loc, SourceRange Range,
11233                                  ODRFunctionDifference DiffType) {
11234         return Diag(Loc, diag::err_module_odr_violation_function)
11235                << FirstFunction << FirstModule.empty() << FirstModule << Range
11236                << DiffType;
11237       };
11238       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11239                                                SourceRange Range,
11240                                                ODRFunctionDifference DiffType) {
11241         return Diag(Loc, diag::note_module_odr_violation_function)
11242                << SecondModule << Range << DiffType;
11243       };
11244 
11245       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11246           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11247         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11248                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11249             << FirstFunction->getReturnType();
11250         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11251                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11252             << SecondFunction->getReturnType();
11253         Diagnosed = true;
11254         break;
11255       }
11256 
11257       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11258              "Merged functions with different number of parameters");
11259 
11260       auto ParamSize = FirstFunction->param_size();
11261       bool ParameterMismatch = false;
11262       for (unsigned I = 0; I < ParamSize; ++I) {
11263         auto *FirstParam = FirstFunction->getParamDecl(I);
11264         auto *SecondParam = SecondFunction->getParamDecl(I);
11265 
11266         assert(getContext().hasSameType(FirstParam->getType(),
11267                                       SecondParam->getType()) &&
11268                "Merged function has different parameter types.");
11269 
11270         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11271           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11272                        ParameterName)
11273               << I + 1 << FirstParam->getDeclName();
11274           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11275                       ParameterName)
11276               << I + 1 << SecondParam->getDeclName();
11277           ParameterMismatch = true;
11278           break;
11279         };
11280 
11281         QualType FirstParamType = FirstParam->getType();
11282         QualType SecondParamType = SecondParam->getType();
11283         if (FirstParamType != SecondParamType &&
11284             ComputeQualTypeODRHash(FirstParamType) !=
11285                 ComputeQualTypeODRHash(SecondParamType)) {
11286           if (const DecayedType *ParamDecayedType =
11287                   FirstParamType->getAs<DecayedType>()) {
11288             ODRDiagError(FirstParam->getLocation(),
11289                          FirstParam->getSourceRange(), ParameterType)
11290                 << (I + 1) << FirstParamType << true
11291                 << ParamDecayedType->getOriginalType();
11292           } else {
11293             ODRDiagError(FirstParam->getLocation(),
11294                          FirstParam->getSourceRange(), ParameterType)
11295                 << (I + 1) << FirstParamType << false;
11296           }
11297 
11298           if (const DecayedType *ParamDecayedType =
11299                   SecondParamType->getAs<DecayedType>()) {
11300             ODRDiagNote(SecondParam->getLocation(),
11301                         SecondParam->getSourceRange(), ParameterType)
11302                 << (I + 1) << SecondParamType << true
11303                 << ParamDecayedType->getOriginalType();
11304           } else {
11305             ODRDiagNote(SecondParam->getLocation(),
11306                         SecondParam->getSourceRange(), ParameterType)
11307                 << (I + 1) << SecondParamType << false;
11308           }
11309           ParameterMismatch = true;
11310           break;
11311         }
11312 
11313         const Expr *FirstInit = FirstParam->getInit();
11314         const Expr *SecondInit = SecondParam->getInit();
11315         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11316           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11317                        ParameterSingleDefaultArgument)
11318               << (I + 1) << (FirstInit == nullptr)
11319               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11320           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11321                       ParameterSingleDefaultArgument)
11322               << (I + 1) << (SecondInit == nullptr)
11323               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11324           ParameterMismatch = true;
11325           break;
11326         }
11327 
11328         if (FirstInit && SecondInit &&
11329             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11330           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11331                        ParameterDifferentDefaultArgument)
11332               << (I + 1) << FirstInit->getSourceRange();
11333           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11334                       ParameterDifferentDefaultArgument)
11335               << (I + 1) << SecondInit->getSourceRange();
11336           ParameterMismatch = true;
11337           break;
11338         }
11339 
11340         assert(ComputeSubDeclODRHash(FirstParam) ==
11341                    ComputeSubDeclODRHash(SecondParam) &&
11342                "Undiagnosed parameter difference.");
11343       }
11344 
11345       if (ParameterMismatch) {
11346         Diagnosed = true;
11347         break;
11348       }
11349 
11350       // If no error has been generated before now, assume the problem is in
11351       // the body and generate a message.
11352       ODRDiagError(FirstFunction->getLocation(),
11353                    FirstFunction->getSourceRange(), FunctionBody);
11354       ODRDiagNote(SecondFunction->getLocation(),
11355                   SecondFunction->getSourceRange(), FunctionBody);
11356       Diagnosed = true;
11357       break;
11358     }
11359     (void)Diagnosed;
11360     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11361   }
11362 
11363   // Issue ODR failures diagnostics for enums.
11364   for (auto &Merge : EnumOdrMergeFailures) {
11365     enum ODREnumDifference {
11366       SingleScopedEnum,
11367       EnumTagKeywordMismatch,
11368       SingleSpecifiedType,
11369       DifferentSpecifiedTypes,
11370       DifferentNumberEnumConstants,
11371       EnumConstantName,
11372       EnumConstantSingleInitilizer,
11373       EnumConstantDifferentInitilizer,
11374     };
11375 
11376     // If we've already pointed out a specific problem with this enum, don't
11377     // bother issuing a general "something's different" diagnostic.
11378     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11379       continue;
11380 
11381     EnumDecl *FirstEnum = Merge.first;
11382     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11383 
11384     using DeclHashes =
11385         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11386     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11387                               DeclHashes &Hashes, EnumDecl *Enum) {
11388       for (auto *D : Enum->decls()) {
11389         // Due to decl merging, the first EnumDecl is the parent of
11390         // Decls in both records.
11391         if (!ODRHash::isWhitelistedDecl(D, FirstEnum))
11392           continue;
11393         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11394         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11395                             ComputeSubDeclODRHash(D));
11396       }
11397     };
11398     DeclHashes FirstHashes;
11399     PopulateHashes(FirstHashes, FirstEnum);
11400     bool Diagnosed = false;
11401     for (auto &SecondEnum : Merge.second) {
11402 
11403       if (FirstEnum == SecondEnum)
11404         continue;
11405 
11406       std::string SecondModule =
11407           getOwningModuleNameForDiagnostic(SecondEnum);
11408 
11409       auto ODRDiagError = [FirstEnum, &FirstModule,
11410                            this](SourceLocation Loc, SourceRange Range,
11411                                  ODREnumDifference DiffType) {
11412         return Diag(Loc, diag::err_module_odr_violation_enum)
11413                << FirstEnum << FirstModule.empty() << FirstModule << Range
11414                << DiffType;
11415       };
11416       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11417                                                SourceRange Range,
11418                                                ODREnumDifference DiffType) {
11419         return Diag(Loc, diag::note_module_odr_violation_enum)
11420                << SecondModule << Range << DiffType;
11421       };
11422 
11423       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11424         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11425                      SingleScopedEnum)
11426             << FirstEnum->isScoped();
11427         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11428                     SingleScopedEnum)
11429             << SecondEnum->isScoped();
11430         Diagnosed = true;
11431         continue;
11432       }
11433 
11434       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11435         if (FirstEnum->isScopedUsingClassTag() !=
11436             SecondEnum->isScopedUsingClassTag()) {
11437           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11438                        EnumTagKeywordMismatch)
11439               << FirstEnum->isScopedUsingClassTag();
11440           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11441                       EnumTagKeywordMismatch)
11442               << SecondEnum->isScopedUsingClassTag();
11443           Diagnosed = true;
11444           continue;
11445         }
11446       }
11447 
11448       QualType FirstUnderlyingType =
11449           FirstEnum->getIntegerTypeSourceInfo()
11450               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11451               : QualType();
11452       QualType SecondUnderlyingType =
11453           SecondEnum->getIntegerTypeSourceInfo()
11454               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11455               : QualType();
11456       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11457           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11458                        SingleSpecifiedType)
11459               << !FirstUnderlyingType.isNull();
11460           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11461                       SingleSpecifiedType)
11462               << !SecondUnderlyingType.isNull();
11463           Diagnosed = true;
11464           continue;
11465       }
11466 
11467       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11468         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11469             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11470           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11471                        DifferentSpecifiedTypes)
11472               << FirstUnderlyingType;
11473           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11474                       DifferentSpecifiedTypes)
11475               << SecondUnderlyingType;
11476           Diagnosed = true;
11477           continue;
11478         }
11479       }
11480 
11481       DeclHashes SecondHashes;
11482       PopulateHashes(SecondHashes, SecondEnum);
11483 
11484       if (FirstHashes.size() != SecondHashes.size()) {
11485         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11486                      DifferentNumberEnumConstants)
11487             << (int)FirstHashes.size();
11488         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11489                     DifferentNumberEnumConstants)
11490             << (int)SecondHashes.size();
11491         Diagnosed = true;
11492         continue;
11493       }
11494 
11495       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11496         if (FirstHashes[I].second == SecondHashes[I].second)
11497           continue;
11498         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11499         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11500 
11501         if (FirstEnumConstant->getDeclName() !=
11502             SecondEnumConstant->getDeclName()) {
11503 
11504           ODRDiagError(FirstEnumConstant->getLocation(),
11505                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11506               << I + 1 << FirstEnumConstant;
11507           ODRDiagNote(SecondEnumConstant->getLocation(),
11508                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11509               << I + 1 << SecondEnumConstant;
11510           Diagnosed = true;
11511           break;
11512         }
11513 
11514         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11515         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11516         if (!FirstInit && !SecondInit)
11517           continue;
11518 
11519         if (!FirstInit || !SecondInit) {
11520           ODRDiagError(FirstEnumConstant->getLocation(),
11521                        FirstEnumConstant->getSourceRange(),
11522                        EnumConstantSingleInitilizer)
11523               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11524           ODRDiagNote(SecondEnumConstant->getLocation(),
11525                       SecondEnumConstant->getSourceRange(),
11526                       EnumConstantSingleInitilizer)
11527               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11528           Diagnosed = true;
11529           break;
11530         }
11531 
11532         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11533           ODRDiagError(FirstEnumConstant->getLocation(),
11534                        FirstEnumConstant->getSourceRange(),
11535                        EnumConstantDifferentInitilizer)
11536               << I + 1 << FirstEnumConstant;
11537           ODRDiagNote(SecondEnumConstant->getLocation(),
11538                       SecondEnumConstant->getSourceRange(),
11539                       EnumConstantDifferentInitilizer)
11540               << I + 1 << SecondEnumConstant;
11541           Diagnosed = true;
11542           break;
11543         }
11544       }
11545     }
11546 
11547     (void)Diagnosed;
11548     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11549   }
11550 }
11551 
11552 void ASTReader::StartedDeserializing() {
11553   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11554     ReadTimer->startTimer();
11555 }
11556 
11557 void ASTReader::FinishedDeserializing() {
11558   assert(NumCurrentElementsDeserializing &&
11559          "FinishedDeserializing not paired with StartedDeserializing");
11560   if (NumCurrentElementsDeserializing == 1) {
11561     // We decrease NumCurrentElementsDeserializing only after pending actions
11562     // are finished, to avoid recursively re-calling finishPendingActions().
11563     finishPendingActions();
11564   }
11565   --NumCurrentElementsDeserializing;
11566 
11567   if (NumCurrentElementsDeserializing == 0) {
11568     // Propagate exception specification and deduced type updates along
11569     // redeclaration chains.
11570     //
11571     // We do this now rather than in finishPendingActions because we want to
11572     // be able to walk the complete redeclaration chains of the updated decls.
11573     while (!PendingExceptionSpecUpdates.empty() ||
11574            !PendingDeducedTypeUpdates.empty()) {
11575       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11576       PendingExceptionSpecUpdates.clear();
11577       for (auto Update : ESUpdates) {
11578         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11579         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11580         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11581         if (auto *Listener = getContext().getASTMutationListener())
11582           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11583         for (auto *Redecl : Update.second->redecls())
11584           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11585       }
11586 
11587       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11588       PendingDeducedTypeUpdates.clear();
11589       for (auto Update : DTUpdates) {
11590         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11591         // FIXME: If the return type is already deduced, check that it matches.
11592         getContext().adjustDeducedFunctionResultType(Update.first,
11593                                                      Update.second);
11594       }
11595     }
11596 
11597     if (ReadTimer)
11598       ReadTimer->stopTimer();
11599 
11600     diagnoseOdrViolations();
11601 
11602     // We are not in recursive loading, so it's safe to pass the "interesting"
11603     // decls to the consumer.
11604     if (Consumer)
11605       PassInterestingDeclsToConsumer();
11606   }
11607 }
11608 
11609 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11610   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11611     // Remove any fake results before adding any real ones.
11612     auto It = PendingFakeLookupResults.find(II);
11613     if (It != PendingFakeLookupResults.end()) {
11614       for (auto *ND : It->second)
11615         SemaObj->IdResolver.RemoveDecl(ND);
11616       // FIXME: this works around module+PCH performance issue.
11617       // Rather than erase the result from the map, which is O(n), just clear
11618       // the vector of NamedDecls.
11619       It->second.clear();
11620     }
11621   }
11622 
11623   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11624     SemaObj->TUScope->AddDecl(D);
11625   } else if (SemaObj->TUScope) {
11626     // Adding the decl to IdResolver may have failed because it was already in
11627     // (even though it was not added in scope). If it is already in, make sure
11628     // it gets in the scope as well.
11629     if (std::find(SemaObj->IdResolver.begin(Name),
11630                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11631       SemaObj->TUScope->AddDecl(D);
11632   }
11633 }
11634 
11635 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11636                      ASTContext *Context,
11637                      const PCHContainerReader &PCHContainerRdr,
11638                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11639                      StringRef isysroot, bool DisableValidation,
11640                      bool AllowASTWithCompilerErrors,
11641                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11642                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11643                      std::unique_ptr<llvm::Timer> ReadTimer)
11644     : Listener(DisableValidation
11645                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11646                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11647       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11648       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11649       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11650                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11651       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11652       DisableValidation(DisableValidation),
11653       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11654       AllowConfigurationMismatch(AllowConfigurationMismatch),
11655       ValidateSystemInputs(ValidateSystemInputs),
11656       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11657       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11658   SourceMgr.setExternalSLocEntrySource(this);
11659 
11660   for (const auto &Ext : Extensions) {
11661     auto BlockName = Ext->getExtensionMetadata().BlockName;
11662     auto Known = ModuleFileExtensions.find(BlockName);
11663     if (Known != ModuleFileExtensions.end()) {
11664       Diags.Report(diag::warn_duplicate_module_file_extension)
11665         << BlockName;
11666       continue;
11667     }
11668 
11669     ModuleFileExtensions.insert({BlockName, Ext});
11670   }
11671 }
11672 
11673 ASTReader::~ASTReader() {
11674   if (OwnsDeserializationListener)
11675     delete DeserializationListener;
11676 }
11677 
11678 IdentifierResolver &ASTReader::getIdResolver() {
11679   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11680 }
11681 
11682 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11683                                                unsigned AbbrevID) {
11684   Idx = 0;
11685   Record.clear();
11686   return Cursor.readRecord(AbbrevID, Record);
11687 }
11688 //===----------------------------------------------------------------------===//
11689 //// OMPClauseReader implementation
11690 ////===----------------------------------------------------------------------===//
11691 
11692 // This has to be in namespace clang because it's friended by all
11693 // of the OMP clauses.
11694 namespace clang {
11695 
11696 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11697   ASTRecordReader &Record;
11698   ASTContext &Context;
11699 
11700 public:
11701   OMPClauseReader(ASTRecordReader &Record)
11702       : Record(Record), Context(Record.getContext()) {}
11703 
11704 #define OMP_CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11705 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11706   OMPClause *readClause();
11707   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11708   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11709 };
11710 
11711 } // end namespace clang
11712 
11713 OMPClause *ASTRecordReader::readOMPClause() {
11714   return OMPClauseReader(*this).readClause();
11715 }
11716 
11717 OMPClause *OMPClauseReader::readClause() {
11718   OMPClause *C = nullptr;
11719   switch (llvm::omp::Clause(Record.readInt())) {
11720   case llvm::omp::OMPC_if:
11721     C = new (Context) OMPIfClause();
11722     break;
11723   case llvm::omp::OMPC_final:
11724     C = new (Context) OMPFinalClause();
11725     break;
11726   case llvm::omp::OMPC_num_threads:
11727     C = new (Context) OMPNumThreadsClause();
11728     break;
11729   case llvm::omp::OMPC_safelen:
11730     C = new (Context) OMPSafelenClause();
11731     break;
11732   case llvm::omp::OMPC_simdlen:
11733     C = new (Context) OMPSimdlenClause();
11734     break;
11735   case llvm::omp::OMPC_allocator:
11736     C = new (Context) OMPAllocatorClause();
11737     break;
11738   case llvm::omp::OMPC_collapse:
11739     C = new (Context) OMPCollapseClause();
11740     break;
11741   case llvm::omp::OMPC_default:
11742     C = new (Context) OMPDefaultClause();
11743     break;
11744   case llvm::omp::OMPC_proc_bind:
11745     C = new (Context) OMPProcBindClause();
11746     break;
11747   case llvm::omp::OMPC_schedule:
11748     C = new (Context) OMPScheduleClause();
11749     break;
11750   case llvm::omp::OMPC_ordered:
11751     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11752     break;
11753   case llvm::omp::OMPC_nowait:
11754     C = new (Context) OMPNowaitClause();
11755     break;
11756   case llvm::omp::OMPC_untied:
11757     C = new (Context) OMPUntiedClause();
11758     break;
11759   case llvm::omp::OMPC_mergeable:
11760     C = new (Context) OMPMergeableClause();
11761     break;
11762   case llvm::omp::OMPC_read:
11763     C = new (Context) OMPReadClause();
11764     break;
11765   case llvm::omp::OMPC_write:
11766     C = new (Context) OMPWriteClause();
11767     break;
11768   case llvm::omp::OMPC_update:
11769     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11770     break;
11771   case llvm::omp::OMPC_capture:
11772     C = new (Context) OMPCaptureClause();
11773     break;
11774   case llvm::omp::OMPC_seq_cst:
11775     C = new (Context) OMPSeqCstClause();
11776     break;
11777   case llvm::omp::OMPC_acq_rel:
11778     C = new (Context) OMPAcqRelClause();
11779     break;
11780   case llvm::omp::OMPC_acquire:
11781     C = new (Context) OMPAcquireClause();
11782     break;
11783   case llvm::omp::OMPC_release:
11784     C = new (Context) OMPReleaseClause();
11785     break;
11786   case llvm::omp::OMPC_relaxed:
11787     C = new (Context) OMPRelaxedClause();
11788     break;
11789   case llvm::omp::OMPC_threads:
11790     C = new (Context) OMPThreadsClause();
11791     break;
11792   case llvm::omp::OMPC_simd:
11793     C = new (Context) OMPSIMDClause();
11794     break;
11795   case llvm::omp::OMPC_nogroup:
11796     C = new (Context) OMPNogroupClause();
11797     break;
11798   case llvm::omp::OMPC_unified_address:
11799     C = new (Context) OMPUnifiedAddressClause();
11800     break;
11801   case llvm::omp::OMPC_unified_shared_memory:
11802     C = new (Context) OMPUnifiedSharedMemoryClause();
11803     break;
11804   case llvm::omp::OMPC_reverse_offload:
11805     C = new (Context) OMPReverseOffloadClause();
11806     break;
11807   case llvm::omp::OMPC_dynamic_allocators:
11808     C = new (Context) OMPDynamicAllocatorsClause();
11809     break;
11810   case llvm::omp::OMPC_atomic_default_mem_order:
11811     C = new (Context) OMPAtomicDefaultMemOrderClause();
11812     break;
11813  case llvm::omp::OMPC_private:
11814     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11815     break;
11816   case llvm::omp::OMPC_firstprivate:
11817     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11818     break;
11819   case llvm::omp::OMPC_lastprivate:
11820     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11821     break;
11822   case llvm::omp::OMPC_shared:
11823     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11824     break;
11825   case llvm::omp::OMPC_reduction:
11826     C = OMPReductionClause::CreateEmpty(Context, Record.readInt());
11827     break;
11828   case llvm::omp::OMPC_task_reduction:
11829     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11830     break;
11831   case llvm::omp::OMPC_in_reduction:
11832     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11833     break;
11834   case llvm::omp::OMPC_linear:
11835     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_aligned:
11838     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_copyin:
11841     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11842     break;
11843   case llvm::omp::OMPC_copyprivate:
11844     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11845     break;
11846   case llvm::omp::OMPC_flush:
11847     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11848     break;
11849   case llvm::omp::OMPC_depobj:
11850     C = OMPDepobjClause::CreateEmpty(Context);
11851     break;
11852   case llvm::omp::OMPC_depend: {
11853     unsigned NumVars = Record.readInt();
11854     unsigned NumLoops = Record.readInt();
11855     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11856     break;
11857   }
11858   case llvm::omp::OMPC_device:
11859     C = new (Context) OMPDeviceClause();
11860     break;
11861   case llvm::omp::OMPC_map: {
11862     OMPMappableExprListSizeTy Sizes;
11863     Sizes.NumVars = Record.readInt();
11864     Sizes.NumUniqueDeclarations = Record.readInt();
11865     Sizes.NumComponentLists = Record.readInt();
11866     Sizes.NumComponents = Record.readInt();
11867     C = OMPMapClause::CreateEmpty(Context, Sizes);
11868     break;
11869   }
11870   case llvm::omp::OMPC_num_teams:
11871     C = new (Context) OMPNumTeamsClause();
11872     break;
11873   case llvm::omp::OMPC_thread_limit:
11874     C = new (Context) OMPThreadLimitClause();
11875     break;
11876   case llvm::omp::OMPC_priority:
11877     C = new (Context) OMPPriorityClause();
11878     break;
11879   case llvm::omp::OMPC_grainsize:
11880     C = new (Context) OMPGrainsizeClause();
11881     break;
11882   case llvm::omp::OMPC_num_tasks:
11883     C = new (Context) OMPNumTasksClause();
11884     break;
11885   case llvm::omp::OMPC_hint:
11886     C = new (Context) OMPHintClause();
11887     break;
11888   case llvm::omp::OMPC_dist_schedule:
11889     C = new (Context) OMPDistScheduleClause();
11890     break;
11891   case llvm::omp::OMPC_defaultmap:
11892     C = new (Context) OMPDefaultmapClause();
11893     break;
11894   case llvm::omp::OMPC_to: {
11895     OMPMappableExprListSizeTy Sizes;
11896     Sizes.NumVars = Record.readInt();
11897     Sizes.NumUniqueDeclarations = Record.readInt();
11898     Sizes.NumComponentLists = Record.readInt();
11899     Sizes.NumComponents = Record.readInt();
11900     C = OMPToClause::CreateEmpty(Context, Sizes);
11901     break;
11902   }
11903   case llvm::omp::OMPC_from: {
11904     OMPMappableExprListSizeTy Sizes;
11905     Sizes.NumVars = Record.readInt();
11906     Sizes.NumUniqueDeclarations = Record.readInt();
11907     Sizes.NumComponentLists = Record.readInt();
11908     Sizes.NumComponents = Record.readInt();
11909     C = OMPFromClause::CreateEmpty(Context, Sizes);
11910     break;
11911   }
11912   case llvm::omp::OMPC_use_device_ptr: {
11913     OMPMappableExprListSizeTy Sizes;
11914     Sizes.NumVars = Record.readInt();
11915     Sizes.NumUniqueDeclarations = Record.readInt();
11916     Sizes.NumComponentLists = Record.readInt();
11917     Sizes.NumComponents = Record.readInt();
11918     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11919     break;
11920   }
11921   case llvm::omp::OMPC_is_device_ptr: {
11922     OMPMappableExprListSizeTy Sizes;
11923     Sizes.NumVars = Record.readInt();
11924     Sizes.NumUniqueDeclarations = Record.readInt();
11925     Sizes.NumComponentLists = Record.readInt();
11926     Sizes.NumComponents = Record.readInt();
11927     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11928     break;
11929   }
11930   case llvm::omp::OMPC_allocate:
11931     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11932     break;
11933   case llvm::omp::OMPC_nontemporal:
11934     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11935     break;
11936   case llvm::omp::OMPC_inclusive:
11937     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11938     break;
11939   case llvm::omp::OMPC_exclusive:
11940     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11941     break;
11942   case llvm::omp::OMPC_order:
11943     C = new (Context) OMPOrderClause();
11944     break;
11945   case llvm::omp::OMPC_destroy:
11946     C = new (Context) OMPDestroyClause();
11947     break;
11948   case llvm::omp::OMPC_detach:
11949     C = new (Context) OMPDetachClause();
11950     break;
11951   case llvm::omp::OMPC_uses_allocators:
11952     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11953     break;
11954 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11955   case llvm::omp::Enum:                                                        \
11956     break;
11957 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11958   }
11959   assert(C && "Unknown OMPClause type");
11960 
11961   Visit(C);
11962   C->setLocStart(Record.readSourceLocation());
11963   C->setLocEnd(Record.readSourceLocation());
11964 
11965   return C;
11966 }
11967 
11968 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11969   C->setPreInitStmt(Record.readSubStmt(),
11970                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11971 }
11972 
11973 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11974   VisitOMPClauseWithPreInit(C);
11975   C->setPostUpdateExpr(Record.readSubExpr());
11976 }
11977 
11978 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11979   VisitOMPClauseWithPreInit(C);
11980   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
11981   C->setNameModifierLoc(Record.readSourceLocation());
11982   C->setColonLoc(Record.readSourceLocation());
11983   C->setCondition(Record.readSubExpr());
11984   C->setLParenLoc(Record.readSourceLocation());
11985 }
11986 
11987 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
11988   VisitOMPClauseWithPreInit(C);
11989   C->setCondition(Record.readSubExpr());
11990   C->setLParenLoc(Record.readSourceLocation());
11991 }
11992 
11993 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
11994   VisitOMPClauseWithPreInit(C);
11995   C->setNumThreads(Record.readSubExpr());
11996   C->setLParenLoc(Record.readSourceLocation());
11997 }
11998 
11999 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12000   C->setSafelen(Record.readSubExpr());
12001   C->setLParenLoc(Record.readSourceLocation());
12002 }
12003 
12004 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12005   C->setSimdlen(Record.readSubExpr());
12006   C->setLParenLoc(Record.readSourceLocation());
12007 }
12008 
12009 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12010   C->setAllocator(Record.readExpr());
12011   C->setLParenLoc(Record.readSourceLocation());
12012 }
12013 
12014 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12015   C->setNumForLoops(Record.readSubExpr());
12016   C->setLParenLoc(Record.readSourceLocation());
12017 }
12018 
12019 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12020   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12021   C->setLParenLoc(Record.readSourceLocation());
12022   C->setDefaultKindKwLoc(Record.readSourceLocation());
12023 }
12024 
12025 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12026   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12027   C->setLParenLoc(Record.readSourceLocation());
12028   C->setProcBindKindKwLoc(Record.readSourceLocation());
12029 }
12030 
12031 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12032   VisitOMPClauseWithPreInit(C);
12033   C->setScheduleKind(
12034        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12035   C->setFirstScheduleModifier(
12036       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12037   C->setSecondScheduleModifier(
12038       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12039   C->setChunkSize(Record.readSubExpr());
12040   C->setLParenLoc(Record.readSourceLocation());
12041   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12042   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12043   C->setScheduleKindLoc(Record.readSourceLocation());
12044   C->setCommaLoc(Record.readSourceLocation());
12045 }
12046 
12047 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12048   C->setNumForLoops(Record.readSubExpr());
12049   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12050     C->setLoopNumIterations(I, Record.readSubExpr());
12051   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12052     C->setLoopCounter(I, Record.readSubExpr());
12053   C->setLParenLoc(Record.readSourceLocation());
12054 }
12055 
12056 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12057   C->setEventHandler(Record.readSubExpr());
12058   C->setLParenLoc(Record.readSourceLocation());
12059 }
12060 
12061 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12062 
12063 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12064 
12065 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12066 
12067 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12068 
12069 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12070 
12071 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12072   if (C->isExtended()) {
12073     C->setLParenLoc(Record.readSourceLocation());
12074     C->setArgumentLoc(Record.readSourceLocation());
12075     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12076   }
12077 }
12078 
12079 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12080 
12081 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12082 
12083 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12084 
12085 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12086 
12087 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12088 
12089 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12090 
12091 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12092 
12093 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12094 
12095 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12096 
12097 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *) {}
12098 
12099 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12100 
12101 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12102     OMPUnifiedSharedMemoryClause *) {}
12103 
12104 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12105 
12106 void
12107 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12108 }
12109 
12110 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12111     OMPAtomicDefaultMemOrderClause *C) {
12112   C->setAtomicDefaultMemOrderKind(
12113       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12114   C->setLParenLoc(Record.readSourceLocation());
12115   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12116 }
12117 
12118 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12119   C->setLParenLoc(Record.readSourceLocation());
12120   unsigned NumVars = C->varlist_size();
12121   SmallVector<Expr *, 16> Vars;
12122   Vars.reserve(NumVars);
12123   for (unsigned i = 0; i != NumVars; ++i)
12124     Vars.push_back(Record.readSubExpr());
12125   C->setVarRefs(Vars);
12126   Vars.clear();
12127   for (unsigned i = 0; i != NumVars; ++i)
12128     Vars.push_back(Record.readSubExpr());
12129   C->setPrivateCopies(Vars);
12130 }
12131 
12132 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12133   VisitOMPClauseWithPreInit(C);
12134   C->setLParenLoc(Record.readSourceLocation());
12135   unsigned NumVars = C->varlist_size();
12136   SmallVector<Expr *, 16> Vars;
12137   Vars.reserve(NumVars);
12138   for (unsigned i = 0; i != NumVars; ++i)
12139     Vars.push_back(Record.readSubExpr());
12140   C->setVarRefs(Vars);
12141   Vars.clear();
12142   for (unsigned i = 0; i != NumVars; ++i)
12143     Vars.push_back(Record.readSubExpr());
12144   C->setPrivateCopies(Vars);
12145   Vars.clear();
12146   for (unsigned i = 0; i != NumVars; ++i)
12147     Vars.push_back(Record.readSubExpr());
12148   C->setInits(Vars);
12149 }
12150 
12151 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12152   VisitOMPClauseWithPostUpdate(C);
12153   C->setLParenLoc(Record.readSourceLocation());
12154   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12155   C->setKindLoc(Record.readSourceLocation());
12156   C->setColonLoc(Record.readSourceLocation());
12157   unsigned NumVars = C->varlist_size();
12158   SmallVector<Expr *, 16> Vars;
12159   Vars.reserve(NumVars);
12160   for (unsigned i = 0; i != NumVars; ++i)
12161     Vars.push_back(Record.readSubExpr());
12162   C->setVarRefs(Vars);
12163   Vars.clear();
12164   for (unsigned i = 0; i != NumVars; ++i)
12165     Vars.push_back(Record.readSubExpr());
12166   C->setPrivateCopies(Vars);
12167   Vars.clear();
12168   for (unsigned i = 0; i != NumVars; ++i)
12169     Vars.push_back(Record.readSubExpr());
12170   C->setSourceExprs(Vars);
12171   Vars.clear();
12172   for (unsigned i = 0; i != NumVars; ++i)
12173     Vars.push_back(Record.readSubExpr());
12174   C->setDestinationExprs(Vars);
12175   Vars.clear();
12176   for (unsigned i = 0; i != NumVars; ++i)
12177     Vars.push_back(Record.readSubExpr());
12178   C->setAssignmentOps(Vars);
12179 }
12180 
12181 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12182   C->setLParenLoc(Record.readSourceLocation());
12183   unsigned NumVars = C->varlist_size();
12184   SmallVector<Expr *, 16> Vars;
12185   Vars.reserve(NumVars);
12186   for (unsigned i = 0; i != NumVars; ++i)
12187     Vars.push_back(Record.readSubExpr());
12188   C->setVarRefs(Vars);
12189 }
12190 
12191 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12192   VisitOMPClauseWithPostUpdate(C);
12193   C->setLParenLoc(Record.readSourceLocation());
12194   C->setModifierLoc(Record.readSourceLocation());
12195   C->setColonLoc(Record.readSourceLocation());
12196   C->setModifier(Record.readEnum<OpenMPReductionClauseModifier>());
12197   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12198   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12199   C->setQualifierLoc(NNSL);
12200   C->setNameInfo(DNI);
12201 
12202   unsigned NumVars = C->varlist_size();
12203   SmallVector<Expr *, 16> Vars;
12204   Vars.reserve(NumVars);
12205   for (unsigned i = 0; i != NumVars; ++i)
12206     Vars.push_back(Record.readSubExpr());
12207   C->setVarRefs(Vars);
12208   Vars.clear();
12209   for (unsigned i = 0; i != NumVars; ++i)
12210     Vars.push_back(Record.readSubExpr());
12211   C->setPrivates(Vars);
12212   Vars.clear();
12213   for (unsigned i = 0; i != NumVars; ++i)
12214     Vars.push_back(Record.readSubExpr());
12215   C->setLHSExprs(Vars);
12216   Vars.clear();
12217   for (unsigned i = 0; i != NumVars; ++i)
12218     Vars.push_back(Record.readSubExpr());
12219   C->setRHSExprs(Vars);
12220   Vars.clear();
12221   for (unsigned i = 0; i != NumVars; ++i)
12222     Vars.push_back(Record.readSubExpr());
12223   C->setReductionOps(Vars);
12224 }
12225 
12226 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12227   VisitOMPClauseWithPostUpdate(C);
12228   C->setLParenLoc(Record.readSourceLocation());
12229   C->setColonLoc(Record.readSourceLocation());
12230   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12231   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12232   C->setQualifierLoc(NNSL);
12233   C->setNameInfo(DNI);
12234 
12235   unsigned NumVars = C->varlist_size();
12236   SmallVector<Expr *, 16> Vars;
12237   Vars.reserve(NumVars);
12238   for (unsigned I = 0; I != NumVars; ++I)
12239     Vars.push_back(Record.readSubExpr());
12240   C->setVarRefs(Vars);
12241   Vars.clear();
12242   for (unsigned I = 0; I != NumVars; ++I)
12243     Vars.push_back(Record.readSubExpr());
12244   C->setPrivates(Vars);
12245   Vars.clear();
12246   for (unsigned I = 0; I != NumVars; ++I)
12247     Vars.push_back(Record.readSubExpr());
12248   C->setLHSExprs(Vars);
12249   Vars.clear();
12250   for (unsigned I = 0; I != NumVars; ++I)
12251     Vars.push_back(Record.readSubExpr());
12252   C->setRHSExprs(Vars);
12253   Vars.clear();
12254   for (unsigned I = 0; I != NumVars; ++I)
12255     Vars.push_back(Record.readSubExpr());
12256   C->setReductionOps(Vars);
12257 }
12258 
12259 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12260   VisitOMPClauseWithPostUpdate(C);
12261   C->setLParenLoc(Record.readSourceLocation());
12262   C->setColonLoc(Record.readSourceLocation());
12263   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12264   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12265   C->setQualifierLoc(NNSL);
12266   C->setNameInfo(DNI);
12267 
12268   unsigned NumVars = C->varlist_size();
12269   SmallVector<Expr *, 16> Vars;
12270   Vars.reserve(NumVars);
12271   for (unsigned I = 0; I != NumVars; ++I)
12272     Vars.push_back(Record.readSubExpr());
12273   C->setVarRefs(Vars);
12274   Vars.clear();
12275   for (unsigned I = 0; I != NumVars; ++I)
12276     Vars.push_back(Record.readSubExpr());
12277   C->setPrivates(Vars);
12278   Vars.clear();
12279   for (unsigned I = 0; I != NumVars; ++I)
12280     Vars.push_back(Record.readSubExpr());
12281   C->setLHSExprs(Vars);
12282   Vars.clear();
12283   for (unsigned I = 0; I != NumVars; ++I)
12284     Vars.push_back(Record.readSubExpr());
12285   C->setRHSExprs(Vars);
12286   Vars.clear();
12287   for (unsigned I = 0; I != NumVars; ++I)
12288     Vars.push_back(Record.readSubExpr());
12289   C->setReductionOps(Vars);
12290   Vars.clear();
12291   for (unsigned I = 0; I != NumVars; ++I)
12292     Vars.push_back(Record.readSubExpr());
12293   C->setTaskgroupDescriptors(Vars);
12294 }
12295 
12296 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12297   VisitOMPClauseWithPostUpdate(C);
12298   C->setLParenLoc(Record.readSourceLocation());
12299   C->setColonLoc(Record.readSourceLocation());
12300   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12301   C->setModifierLoc(Record.readSourceLocation());
12302   unsigned NumVars = C->varlist_size();
12303   SmallVector<Expr *, 16> Vars;
12304   Vars.reserve(NumVars);
12305   for (unsigned i = 0; i != NumVars; ++i)
12306     Vars.push_back(Record.readSubExpr());
12307   C->setVarRefs(Vars);
12308   Vars.clear();
12309   for (unsigned i = 0; i != NumVars; ++i)
12310     Vars.push_back(Record.readSubExpr());
12311   C->setPrivates(Vars);
12312   Vars.clear();
12313   for (unsigned i = 0; i != NumVars; ++i)
12314     Vars.push_back(Record.readSubExpr());
12315   C->setInits(Vars);
12316   Vars.clear();
12317   for (unsigned i = 0; i != NumVars; ++i)
12318     Vars.push_back(Record.readSubExpr());
12319   C->setUpdates(Vars);
12320   Vars.clear();
12321   for (unsigned i = 0; i != NumVars; ++i)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setFinals(Vars);
12324   C->setStep(Record.readSubExpr());
12325   C->setCalcStep(Record.readSubExpr());
12326   Vars.clear();
12327   for (unsigned I = 0; I != NumVars + 1; ++I)
12328     Vars.push_back(Record.readSubExpr());
12329   C->setUsedExprs(Vars);
12330 }
12331 
12332 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12333   C->setLParenLoc(Record.readSourceLocation());
12334   C->setColonLoc(Record.readSourceLocation());
12335   unsigned NumVars = C->varlist_size();
12336   SmallVector<Expr *, 16> Vars;
12337   Vars.reserve(NumVars);
12338   for (unsigned i = 0; i != NumVars; ++i)
12339     Vars.push_back(Record.readSubExpr());
12340   C->setVarRefs(Vars);
12341   C->setAlignment(Record.readSubExpr());
12342 }
12343 
12344 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12345   C->setLParenLoc(Record.readSourceLocation());
12346   unsigned NumVars = C->varlist_size();
12347   SmallVector<Expr *, 16> Exprs;
12348   Exprs.reserve(NumVars);
12349   for (unsigned i = 0; i != NumVars; ++i)
12350     Exprs.push_back(Record.readSubExpr());
12351   C->setVarRefs(Exprs);
12352   Exprs.clear();
12353   for (unsigned i = 0; i != NumVars; ++i)
12354     Exprs.push_back(Record.readSubExpr());
12355   C->setSourceExprs(Exprs);
12356   Exprs.clear();
12357   for (unsigned i = 0; i != NumVars; ++i)
12358     Exprs.push_back(Record.readSubExpr());
12359   C->setDestinationExprs(Exprs);
12360   Exprs.clear();
12361   for (unsigned i = 0; i != NumVars; ++i)
12362     Exprs.push_back(Record.readSubExpr());
12363   C->setAssignmentOps(Exprs);
12364 }
12365 
12366 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12367   C->setLParenLoc(Record.readSourceLocation());
12368   unsigned NumVars = C->varlist_size();
12369   SmallVector<Expr *, 16> Exprs;
12370   Exprs.reserve(NumVars);
12371   for (unsigned i = 0; i != NumVars; ++i)
12372     Exprs.push_back(Record.readSubExpr());
12373   C->setVarRefs(Exprs);
12374   Exprs.clear();
12375   for (unsigned i = 0; i != NumVars; ++i)
12376     Exprs.push_back(Record.readSubExpr());
12377   C->setSourceExprs(Exprs);
12378   Exprs.clear();
12379   for (unsigned i = 0; i != NumVars; ++i)
12380     Exprs.push_back(Record.readSubExpr());
12381   C->setDestinationExprs(Exprs);
12382   Exprs.clear();
12383   for (unsigned i = 0; i != NumVars; ++i)
12384     Exprs.push_back(Record.readSubExpr());
12385   C->setAssignmentOps(Exprs);
12386 }
12387 
12388 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12389   C->setLParenLoc(Record.readSourceLocation());
12390   unsigned NumVars = C->varlist_size();
12391   SmallVector<Expr *, 16> Vars;
12392   Vars.reserve(NumVars);
12393   for (unsigned i = 0; i != NumVars; ++i)
12394     Vars.push_back(Record.readSubExpr());
12395   C->setVarRefs(Vars);
12396 }
12397 
12398 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12399   C->setDepobj(Record.readSubExpr());
12400   C->setLParenLoc(Record.readSourceLocation());
12401 }
12402 
12403 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12404   C->setLParenLoc(Record.readSourceLocation());
12405   C->setModifier(Record.readSubExpr());
12406   C->setDependencyKind(
12407       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12408   C->setDependencyLoc(Record.readSourceLocation());
12409   C->setColonLoc(Record.readSourceLocation());
12410   unsigned NumVars = C->varlist_size();
12411   SmallVector<Expr *, 16> Vars;
12412   Vars.reserve(NumVars);
12413   for (unsigned I = 0; I != NumVars; ++I)
12414     Vars.push_back(Record.readSubExpr());
12415   C->setVarRefs(Vars);
12416   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12417     C->setLoopData(I, Record.readSubExpr());
12418 }
12419 
12420 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12421   VisitOMPClauseWithPreInit(C);
12422   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12423   C->setDevice(Record.readSubExpr());
12424   C->setModifierLoc(Record.readSourceLocation());
12425   C->setLParenLoc(Record.readSourceLocation());
12426 }
12427 
12428 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12429   C->setLParenLoc(Record.readSourceLocation());
12430   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12431     C->setMapTypeModifier(
12432         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12433     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12434   }
12435   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12436   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12437   C->setMapType(
12438      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12439   C->setMapLoc(Record.readSourceLocation());
12440   C->setColonLoc(Record.readSourceLocation());
12441   auto NumVars = C->varlist_size();
12442   auto UniqueDecls = C->getUniqueDeclarationsNum();
12443   auto TotalLists = C->getTotalComponentListNum();
12444   auto TotalComponents = C->getTotalComponentsNum();
12445 
12446   SmallVector<Expr *, 16> Vars;
12447   Vars.reserve(NumVars);
12448   for (unsigned i = 0; i != NumVars; ++i)
12449     Vars.push_back(Record.readExpr());
12450   C->setVarRefs(Vars);
12451 
12452   SmallVector<Expr *, 16> UDMappers;
12453   UDMappers.reserve(NumVars);
12454   for (unsigned I = 0; I < NumVars; ++I)
12455     UDMappers.push_back(Record.readExpr());
12456   C->setUDMapperRefs(UDMappers);
12457 
12458   SmallVector<ValueDecl *, 16> Decls;
12459   Decls.reserve(UniqueDecls);
12460   for (unsigned i = 0; i < UniqueDecls; ++i)
12461     Decls.push_back(Record.readDeclAs<ValueDecl>());
12462   C->setUniqueDecls(Decls);
12463 
12464   SmallVector<unsigned, 16> ListsPerDecl;
12465   ListsPerDecl.reserve(UniqueDecls);
12466   for (unsigned i = 0; i < UniqueDecls; ++i)
12467     ListsPerDecl.push_back(Record.readInt());
12468   C->setDeclNumLists(ListsPerDecl);
12469 
12470   SmallVector<unsigned, 32> ListSizes;
12471   ListSizes.reserve(TotalLists);
12472   for (unsigned i = 0; i < TotalLists; ++i)
12473     ListSizes.push_back(Record.readInt());
12474   C->setComponentListSizes(ListSizes);
12475 
12476   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12477   Components.reserve(TotalComponents);
12478   for (unsigned i = 0; i < TotalComponents; ++i) {
12479     Expr *AssociatedExpr = Record.readExpr();
12480     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12481     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12482         AssociatedExpr, AssociatedDecl));
12483   }
12484   C->setComponents(Components, ListSizes);
12485 }
12486 
12487 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12488   C->setLParenLoc(Record.readSourceLocation());
12489   C->setColonLoc(Record.readSourceLocation());
12490   C->setAllocator(Record.readSubExpr());
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::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12500   VisitOMPClauseWithPreInit(C);
12501   C->setNumTeams(Record.readSubExpr());
12502   C->setLParenLoc(Record.readSourceLocation());
12503 }
12504 
12505 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12506   VisitOMPClauseWithPreInit(C);
12507   C->setThreadLimit(Record.readSubExpr());
12508   C->setLParenLoc(Record.readSourceLocation());
12509 }
12510 
12511 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12512   VisitOMPClauseWithPreInit(C);
12513   C->setPriority(Record.readSubExpr());
12514   C->setLParenLoc(Record.readSourceLocation());
12515 }
12516 
12517 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12518   VisitOMPClauseWithPreInit(C);
12519   C->setGrainsize(Record.readSubExpr());
12520   C->setLParenLoc(Record.readSourceLocation());
12521 }
12522 
12523 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12524   VisitOMPClauseWithPreInit(C);
12525   C->setNumTasks(Record.readSubExpr());
12526   C->setLParenLoc(Record.readSourceLocation());
12527 }
12528 
12529 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12530   C->setHint(Record.readSubExpr());
12531   C->setLParenLoc(Record.readSourceLocation());
12532 }
12533 
12534 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12535   VisitOMPClauseWithPreInit(C);
12536   C->setDistScheduleKind(
12537       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12538   C->setChunkSize(Record.readSubExpr());
12539   C->setLParenLoc(Record.readSourceLocation());
12540   C->setDistScheduleKindLoc(Record.readSourceLocation());
12541   C->setCommaLoc(Record.readSourceLocation());
12542 }
12543 
12544 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12545   C->setDefaultmapKind(
12546        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12547   C->setDefaultmapModifier(
12548       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12549   C->setLParenLoc(Record.readSourceLocation());
12550   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12551   C->setDefaultmapKindLoc(Record.readSourceLocation());
12552 }
12553 
12554 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12555   C->setLParenLoc(Record.readSourceLocation());
12556   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12557   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12558   auto NumVars = C->varlist_size();
12559   auto UniqueDecls = C->getUniqueDeclarationsNum();
12560   auto TotalLists = C->getTotalComponentListNum();
12561   auto TotalComponents = C->getTotalComponentsNum();
12562 
12563   SmallVector<Expr *, 16> Vars;
12564   Vars.reserve(NumVars);
12565   for (unsigned i = 0; i != NumVars; ++i)
12566     Vars.push_back(Record.readSubExpr());
12567   C->setVarRefs(Vars);
12568 
12569   SmallVector<Expr *, 16> UDMappers;
12570   UDMappers.reserve(NumVars);
12571   for (unsigned I = 0; I < NumVars; ++I)
12572     UDMappers.push_back(Record.readSubExpr());
12573   C->setUDMapperRefs(UDMappers);
12574 
12575   SmallVector<ValueDecl *, 16> Decls;
12576   Decls.reserve(UniqueDecls);
12577   for (unsigned i = 0; i < UniqueDecls; ++i)
12578     Decls.push_back(Record.readDeclAs<ValueDecl>());
12579   C->setUniqueDecls(Decls);
12580 
12581   SmallVector<unsigned, 16> ListsPerDecl;
12582   ListsPerDecl.reserve(UniqueDecls);
12583   for (unsigned i = 0; i < UniqueDecls; ++i)
12584     ListsPerDecl.push_back(Record.readInt());
12585   C->setDeclNumLists(ListsPerDecl);
12586 
12587   SmallVector<unsigned, 32> ListSizes;
12588   ListSizes.reserve(TotalLists);
12589   for (unsigned i = 0; i < TotalLists; ++i)
12590     ListSizes.push_back(Record.readInt());
12591   C->setComponentListSizes(ListSizes);
12592 
12593   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12594   Components.reserve(TotalComponents);
12595   for (unsigned i = 0; i < TotalComponents; ++i) {
12596     Expr *AssociatedExpr = Record.readSubExpr();
12597     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12598     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12599         AssociatedExpr, AssociatedDecl));
12600   }
12601   C->setComponents(Components, ListSizes);
12602 }
12603 
12604 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12605   C->setLParenLoc(Record.readSourceLocation());
12606   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12607   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12608   auto NumVars = C->varlist_size();
12609   auto UniqueDecls = C->getUniqueDeclarationsNum();
12610   auto TotalLists = C->getTotalComponentListNum();
12611   auto TotalComponents = C->getTotalComponentsNum();
12612 
12613   SmallVector<Expr *, 16> Vars;
12614   Vars.reserve(NumVars);
12615   for (unsigned i = 0; i != NumVars; ++i)
12616     Vars.push_back(Record.readSubExpr());
12617   C->setVarRefs(Vars);
12618 
12619   SmallVector<Expr *, 16> UDMappers;
12620   UDMappers.reserve(NumVars);
12621   for (unsigned I = 0; I < NumVars; ++I)
12622     UDMappers.push_back(Record.readSubExpr());
12623   C->setUDMapperRefs(UDMappers);
12624 
12625   SmallVector<ValueDecl *, 16> Decls;
12626   Decls.reserve(UniqueDecls);
12627   for (unsigned i = 0; i < UniqueDecls; ++i)
12628     Decls.push_back(Record.readDeclAs<ValueDecl>());
12629   C->setUniqueDecls(Decls);
12630 
12631   SmallVector<unsigned, 16> ListsPerDecl;
12632   ListsPerDecl.reserve(UniqueDecls);
12633   for (unsigned i = 0; i < UniqueDecls; ++i)
12634     ListsPerDecl.push_back(Record.readInt());
12635   C->setDeclNumLists(ListsPerDecl);
12636 
12637   SmallVector<unsigned, 32> ListSizes;
12638   ListSizes.reserve(TotalLists);
12639   for (unsigned i = 0; i < TotalLists; ++i)
12640     ListSizes.push_back(Record.readInt());
12641   C->setComponentListSizes(ListSizes);
12642 
12643   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12644   Components.reserve(TotalComponents);
12645   for (unsigned i = 0; i < TotalComponents; ++i) {
12646     Expr *AssociatedExpr = Record.readSubExpr();
12647     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12648     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12649         AssociatedExpr, AssociatedDecl));
12650   }
12651   C->setComponents(Components, ListSizes);
12652 }
12653 
12654 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12655   C->setLParenLoc(Record.readSourceLocation());
12656   auto NumVars = C->varlist_size();
12657   auto UniqueDecls = C->getUniqueDeclarationsNum();
12658   auto TotalLists = C->getTotalComponentListNum();
12659   auto TotalComponents = C->getTotalComponentsNum();
12660 
12661   SmallVector<Expr *, 16> Vars;
12662   Vars.reserve(NumVars);
12663   for (unsigned i = 0; i != NumVars; ++i)
12664     Vars.push_back(Record.readSubExpr());
12665   C->setVarRefs(Vars);
12666   Vars.clear();
12667   for (unsigned i = 0; i != NumVars; ++i)
12668     Vars.push_back(Record.readSubExpr());
12669   C->setPrivateCopies(Vars);
12670   Vars.clear();
12671   for (unsigned i = 0; i != NumVars; ++i)
12672     Vars.push_back(Record.readSubExpr());
12673   C->setInits(Vars);
12674 
12675   SmallVector<ValueDecl *, 16> Decls;
12676   Decls.reserve(UniqueDecls);
12677   for (unsigned i = 0; i < UniqueDecls; ++i)
12678     Decls.push_back(Record.readDeclAs<ValueDecl>());
12679   C->setUniqueDecls(Decls);
12680 
12681   SmallVector<unsigned, 16> ListsPerDecl;
12682   ListsPerDecl.reserve(UniqueDecls);
12683   for (unsigned i = 0; i < UniqueDecls; ++i)
12684     ListsPerDecl.push_back(Record.readInt());
12685   C->setDeclNumLists(ListsPerDecl);
12686 
12687   SmallVector<unsigned, 32> ListSizes;
12688   ListSizes.reserve(TotalLists);
12689   for (unsigned i = 0; i < TotalLists; ++i)
12690     ListSizes.push_back(Record.readInt());
12691   C->setComponentListSizes(ListSizes);
12692 
12693   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12694   Components.reserve(TotalComponents);
12695   for (unsigned i = 0; i < TotalComponents; ++i) {
12696     Expr *AssociatedExpr = Record.readSubExpr();
12697     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12698     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12699         AssociatedExpr, AssociatedDecl));
12700   }
12701   C->setComponents(Components, ListSizes);
12702 }
12703 
12704 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12705   C->setLParenLoc(Record.readSourceLocation());
12706   auto NumVars = C->varlist_size();
12707   auto UniqueDecls = C->getUniqueDeclarationsNum();
12708   auto TotalLists = C->getTotalComponentListNum();
12709   auto TotalComponents = C->getTotalComponentsNum();
12710 
12711   SmallVector<Expr *, 16> Vars;
12712   Vars.reserve(NumVars);
12713   for (unsigned i = 0; i != NumVars; ++i)
12714     Vars.push_back(Record.readSubExpr());
12715   C->setVarRefs(Vars);
12716   Vars.clear();
12717 
12718   SmallVector<ValueDecl *, 16> Decls;
12719   Decls.reserve(UniqueDecls);
12720   for (unsigned i = 0; i < UniqueDecls; ++i)
12721     Decls.push_back(Record.readDeclAs<ValueDecl>());
12722   C->setUniqueDecls(Decls);
12723 
12724   SmallVector<unsigned, 16> ListsPerDecl;
12725   ListsPerDecl.reserve(UniqueDecls);
12726   for (unsigned i = 0; i < UniqueDecls; ++i)
12727     ListsPerDecl.push_back(Record.readInt());
12728   C->setDeclNumLists(ListsPerDecl);
12729 
12730   SmallVector<unsigned, 32> ListSizes;
12731   ListSizes.reserve(TotalLists);
12732   for (unsigned i = 0; i < TotalLists; ++i)
12733     ListSizes.push_back(Record.readInt());
12734   C->setComponentListSizes(ListSizes);
12735 
12736   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12737   Components.reserve(TotalComponents);
12738   for (unsigned i = 0; i < TotalComponents; ++i) {
12739     Expr *AssociatedExpr = Record.readSubExpr();
12740     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12741     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12742         AssociatedExpr, AssociatedDecl));
12743   }
12744   C->setComponents(Components, ListSizes);
12745 }
12746 
12747 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12748   C->setLParenLoc(Record.readSourceLocation());
12749   unsigned NumVars = C->varlist_size();
12750   SmallVector<Expr *, 16> Vars;
12751   Vars.reserve(NumVars);
12752   for (unsigned i = 0; i != NumVars; ++i)
12753     Vars.push_back(Record.readSubExpr());
12754   C->setVarRefs(Vars);
12755   Vars.clear();
12756   Vars.reserve(NumVars);
12757   for (unsigned i = 0; i != NumVars; ++i)
12758     Vars.push_back(Record.readSubExpr());
12759   C->setPrivateRefs(Vars);
12760 }
12761 
12762 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12763   C->setLParenLoc(Record.readSourceLocation());
12764   unsigned NumVars = C->varlist_size();
12765   SmallVector<Expr *, 16> Vars;
12766   Vars.reserve(NumVars);
12767   for (unsigned i = 0; i != NumVars; ++i)
12768     Vars.push_back(Record.readSubExpr());
12769   C->setVarRefs(Vars);
12770 }
12771 
12772 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12773   C->setLParenLoc(Record.readSourceLocation());
12774   unsigned NumVars = C->varlist_size();
12775   SmallVector<Expr *, 16> Vars;
12776   Vars.reserve(NumVars);
12777   for (unsigned i = 0; i != NumVars; ++i)
12778     Vars.push_back(Record.readSubExpr());
12779   C->setVarRefs(Vars);
12780 }
12781 
12782 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12783   C->setLParenLoc(Record.readSourceLocation());
12784   unsigned NumOfAllocators = C->getNumberOfAllocators();
12785   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12786   Data.reserve(NumOfAllocators);
12787   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12788     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12789     D.Allocator = Record.readSubExpr();
12790     D.AllocatorTraits = Record.readSubExpr();
12791     D.LParenLoc = Record.readSourceLocation();
12792     D.RParenLoc = Record.readSourceLocation();
12793   }
12794   C->setAllocatorsData(Data);
12795 }
12796 
12797 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12798   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12799   C->setLParenLoc(Record.readSourceLocation());
12800   C->setKindKwLoc(Record.readSourceLocation());
12801 }
12802 
12803 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12804   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12805   TI.Sets.resize(readUInt32());
12806   for (auto &Set : TI.Sets) {
12807     Set.Kind = readEnum<llvm::omp::TraitSet>();
12808     Set.Selectors.resize(readUInt32());
12809     for (auto &Selector : Set.Selectors) {
12810       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12811       Selector.ScoreOrCondition = nullptr;
12812       if (readBool())
12813         Selector.ScoreOrCondition = readExprRef();
12814       Selector.Properties.resize(readUInt32());
12815       for (auto &Property : Selector.Properties)
12816         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12817     }
12818   }
12819   return &TI;
12820 }
12821