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   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1340 
1341   RecordData Record;
1342   while (true) {
1343     Expected<llvm::BitstreamEntry> MaybeE =
1344         SLocEntryCursor.advanceSkippingSubblocks();
1345     if (!MaybeE) {
1346       Error(MaybeE.takeError());
1347       return true;
1348     }
1349     llvm::BitstreamEntry E = MaybeE.get();
1350 
1351     switch (E.Kind) {
1352     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1353     case llvm::BitstreamEntry::Error:
1354       Error("malformed block record in AST file");
1355       return true;
1356     case llvm::BitstreamEntry::EndBlock:
1357       return false;
1358     case llvm::BitstreamEntry::Record:
1359       // The interesting case.
1360       break;
1361     }
1362 
1363     // Read a record.
1364     Record.clear();
1365     StringRef Blob;
1366     Expected<unsigned> MaybeRecord =
1367         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1368     if (!MaybeRecord) {
1369       Error(MaybeRecord.takeError());
1370       return true;
1371     }
1372     switch (MaybeRecord.get()) {
1373     default:  // Default behavior: ignore.
1374       break;
1375 
1376     case SM_SLOC_FILE_ENTRY:
1377     case SM_SLOC_BUFFER_ENTRY:
1378     case SM_SLOC_EXPANSION_ENTRY:
1379       // Once we hit one of the source location entries, we're done.
1380       return false;
1381     }
1382   }
1383 }
1384 
1385 /// If a header file is not found at the path that we expect it to be
1386 /// and the PCH file was moved from its original location, try to resolve the
1387 /// file by assuming that header+PCH were moved together and the header is in
1388 /// the same place relative to the PCH.
1389 static std::string
1390 resolveFileRelativeToOriginalDir(const std::string &Filename,
1391                                  const std::string &OriginalDir,
1392                                  const std::string &CurrDir) {
1393   assert(OriginalDir != CurrDir &&
1394          "No point trying to resolve the file if the PCH dir didn't change");
1395 
1396   using namespace llvm::sys;
1397 
1398   SmallString<128> filePath(Filename);
1399   fs::make_absolute(filePath);
1400   assert(path::is_absolute(OriginalDir));
1401   SmallString<128> currPCHPath(CurrDir);
1402 
1403   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1404                        fileDirE = path::end(path::parent_path(filePath));
1405   path::const_iterator origDirI = path::begin(OriginalDir),
1406                        origDirE = path::end(OriginalDir);
1407   // Skip the common path components from filePath and OriginalDir.
1408   while (fileDirI != fileDirE && origDirI != origDirE &&
1409          *fileDirI == *origDirI) {
1410     ++fileDirI;
1411     ++origDirI;
1412   }
1413   for (; origDirI != origDirE; ++origDirI)
1414     path::append(currPCHPath, "..");
1415   path::append(currPCHPath, fileDirI, fileDirE);
1416   path::append(currPCHPath, path::filename(Filename));
1417   return std::string(currPCHPath.str());
1418 }
1419 
1420 bool ASTReader::ReadSLocEntry(int ID) {
1421   if (ID == 0)
1422     return false;
1423 
1424   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1425     Error("source location entry ID out-of-range for AST file");
1426     return true;
1427   }
1428 
1429   // Local helper to read the (possibly-compressed) buffer data following the
1430   // entry record.
1431   auto ReadBuffer = [this](
1432       BitstreamCursor &SLocEntryCursor,
1433       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1434     RecordData Record;
1435     StringRef Blob;
1436     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1437     if (!MaybeCode) {
1438       Error(MaybeCode.takeError());
1439       return nullptr;
1440     }
1441     unsigned Code = MaybeCode.get();
1442 
1443     Expected<unsigned> MaybeRecCode =
1444         SLocEntryCursor.readRecord(Code, Record, &Blob);
1445     if (!MaybeRecCode) {
1446       Error(MaybeRecCode.takeError());
1447       return nullptr;
1448     }
1449     unsigned RecCode = MaybeRecCode.get();
1450 
1451     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1452       if (!llvm::zlib::isAvailable()) {
1453         Error("zlib is not available");
1454         return nullptr;
1455       }
1456       SmallString<0> Uncompressed;
1457       if (llvm::Error E =
1458               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1459         Error("could not decompress embedded file contents: " +
1460               llvm::toString(std::move(E)));
1461         return nullptr;
1462       }
1463       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1464     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1465       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1466     } else {
1467       Error("AST record has invalid code");
1468       return nullptr;
1469     }
1470   };
1471 
1472   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1473   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1474           F->SLocEntryOffsetsBase +
1475           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1476     Error(std::move(Err));
1477     return true;
1478   }
1479 
1480   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1481   unsigned BaseOffset = F->SLocEntryBaseOffset;
1482 
1483   ++NumSLocEntriesRead;
1484   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1485   if (!MaybeEntry) {
1486     Error(MaybeEntry.takeError());
1487     return true;
1488   }
1489   llvm::BitstreamEntry Entry = MaybeEntry.get();
1490 
1491   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1492     Error("incorrectly-formatted source location entry in AST file");
1493     return true;
1494   }
1495 
1496   RecordData Record;
1497   StringRef Blob;
1498   Expected<unsigned> MaybeSLOC =
1499       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1500   if (!MaybeSLOC) {
1501     Error(MaybeSLOC.takeError());
1502     return true;
1503   }
1504   switch (MaybeSLOC.get()) {
1505   default:
1506     Error("incorrectly-formatted source location entry in AST file");
1507     return true;
1508 
1509   case SM_SLOC_FILE_ENTRY: {
1510     // We will detect whether a file changed and return 'Failure' for it, but
1511     // we will also try to fail gracefully by setting up the SLocEntry.
1512     unsigned InputID = Record[4];
1513     InputFile IF = getInputFile(*F, InputID);
1514     const FileEntry *File = IF.getFile();
1515     bool OverriddenBuffer = IF.isOverridden();
1516 
1517     // Note that we only check if a File was returned. If it was out-of-date
1518     // we have complained but we will continue creating a FileID to recover
1519     // gracefully.
1520     if (!File)
1521       return true;
1522 
1523     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1524     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1525       // This is the module's main file.
1526       IncludeLoc = getImportLocation(F);
1527     }
1528     SrcMgr::CharacteristicKind
1529       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1530     // FIXME: The FileID should be created from the FileEntryRef.
1531     FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1532                                         ID, BaseOffset + Record[0]);
1533     SrcMgr::FileInfo &FileInfo =
1534           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1535     FileInfo.NumCreatedFIDs = Record[5];
1536     if (Record[3])
1537       FileInfo.setHasLineDirectives();
1538 
1539     unsigned NumFileDecls = Record[7];
1540     if (NumFileDecls && ContextObj) {
1541       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1542       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1543       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1544                                                              NumFileDecls));
1545     }
1546 
1547     const SrcMgr::ContentCache *ContentCache
1548       = SourceMgr.getOrCreateContentCache(File, isSystem(FileCharacter));
1549     if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1550         ContentCache->ContentsEntry == ContentCache->OrigEntry &&
1551         !ContentCache->getRawBuffer()) {
1552       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1553       if (!Buffer)
1554         return true;
1555       SourceMgr.overrideFileContents(File, std::move(Buffer));
1556     }
1557 
1558     break;
1559   }
1560 
1561   case SM_SLOC_BUFFER_ENTRY: {
1562     const char *Name = Blob.data();
1563     unsigned Offset = Record[0];
1564     SrcMgr::CharacteristicKind
1565       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1566     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1567     if (IncludeLoc.isInvalid() && F->isModule()) {
1568       IncludeLoc = getImportLocation(F);
1569     }
1570 
1571     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1572     if (!Buffer)
1573       return true;
1574     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1575                            BaseOffset + Offset, IncludeLoc);
1576     break;
1577   }
1578 
1579   case SM_SLOC_EXPANSION_ENTRY: {
1580     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1581     SourceMgr.createExpansionLoc(SpellingLoc,
1582                                      ReadSourceLocation(*F, Record[2]),
1583                                      ReadSourceLocation(*F, Record[3]),
1584                                      Record[5],
1585                                      Record[4],
1586                                      ID,
1587                                      BaseOffset + Record[0]);
1588     break;
1589   }
1590   }
1591 
1592   return false;
1593 }
1594 
1595 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1596   if (ID == 0)
1597     return std::make_pair(SourceLocation(), "");
1598 
1599   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1600     Error("source location entry ID out-of-range for AST file");
1601     return std::make_pair(SourceLocation(), "");
1602   }
1603 
1604   // Find which module file this entry lands in.
1605   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1606   if (!M->isModule())
1607     return std::make_pair(SourceLocation(), "");
1608 
1609   // FIXME: Can we map this down to a particular submodule? That would be
1610   // ideal.
1611   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1612 }
1613 
1614 /// Find the location where the module F is imported.
1615 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1616   if (F->ImportLoc.isValid())
1617     return F->ImportLoc;
1618 
1619   // Otherwise we have a PCH. It's considered to be "imported" at the first
1620   // location of its includer.
1621   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1622     // Main file is the importer.
1623     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1624     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1625   }
1626   return F->ImportedBy[0]->FirstLoc;
1627 }
1628 
1629 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1630 /// the abbreviations that are at the top of the block and then leave the cursor
1631 /// pointing into the block.
1632 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID,
1633                                  uint64_t *StartOfBlockOffset) {
1634   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1635     // FIXME this drops errors on the floor.
1636     consumeError(std::move(Err));
1637     return true;
1638   }
1639 
1640   if (StartOfBlockOffset)
1641     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1642 
1643   while (true) {
1644     uint64_t Offset = Cursor.GetCurrentBitNo();
1645     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1646     if (!MaybeCode) {
1647       // FIXME this drops errors on the floor.
1648       consumeError(MaybeCode.takeError());
1649       return true;
1650     }
1651     unsigned Code = MaybeCode.get();
1652 
1653     // We expect all abbrevs to be at the start of the block.
1654     if (Code != llvm::bitc::DEFINE_ABBREV) {
1655       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1656         // FIXME this drops errors on the floor.
1657         consumeError(std::move(Err));
1658         return true;
1659       }
1660       return false;
1661     }
1662     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1663       // FIXME this drops errors on the floor.
1664       consumeError(std::move(Err));
1665       return true;
1666     }
1667   }
1668 }
1669 
1670 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1671                            unsigned &Idx) {
1672   Token Tok;
1673   Tok.startToken();
1674   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1675   Tok.setLength(Record[Idx++]);
1676   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1677     Tok.setIdentifierInfo(II);
1678   Tok.setKind((tok::TokenKind)Record[Idx++]);
1679   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1680   return Tok;
1681 }
1682 
1683 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1684   BitstreamCursor &Stream = F.MacroCursor;
1685 
1686   // Keep track of where we are in the stream, then jump back there
1687   // after reading this macro.
1688   SavedStreamPosition SavedPosition(Stream);
1689 
1690   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1691     // FIXME this drops errors on the floor.
1692     consumeError(std::move(Err));
1693     return nullptr;
1694   }
1695   RecordData Record;
1696   SmallVector<IdentifierInfo*, 16> MacroParams;
1697   MacroInfo *Macro = nullptr;
1698 
1699   while (true) {
1700     // Advance to the next record, but if we get to the end of the block, don't
1701     // pop it (removing all the abbreviations from the cursor) since we want to
1702     // be able to reseek within the block and read entries.
1703     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1704     Expected<llvm::BitstreamEntry> MaybeEntry =
1705         Stream.advanceSkippingSubblocks(Flags);
1706     if (!MaybeEntry) {
1707       Error(MaybeEntry.takeError());
1708       return Macro;
1709     }
1710     llvm::BitstreamEntry Entry = MaybeEntry.get();
1711 
1712     switch (Entry.Kind) {
1713     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1714     case llvm::BitstreamEntry::Error:
1715       Error("malformed block record in AST file");
1716       return Macro;
1717     case llvm::BitstreamEntry::EndBlock:
1718       return Macro;
1719     case llvm::BitstreamEntry::Record:
1720       // The interesting case.
1721       break;
1722     }
1723 
1724     // Read a record.
1725     Record.clear();
1726     PreprocessorRecordTypes RecType;
1727     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1728       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1729     else {
1730       Error(MaybeRecType.takeError());
1731       return Macro;
1732     }
1733     switch (RecType) {
1734     case PP_MODULE_MACRO:
1735     case PP_MACRO_DIRECTIVE_HISTORY:
1736       return Macro;
1737 
1738     case PP_MACRO_OBJECT_LIKE:
1739     case PP_MACRO_FUNCTION_LIKE: {
1740       // If we already have a macro, that means that we've hit the end
1741       // of the definition of the macro we were looking for. We're
1742       // done.
1743       if (Macro)
1744         return Macro;
1745 
1746       unsigned NextIndex = 1; // Skip identifier ID.
1747       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1748       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1749       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1750       MI->setIsUsed(Record[NextIndex++]);
1751       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1752 
1753       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1754         // Decode function-like macro info.
1755         bool isC99VarArgs = Record[NextIndex++];
1756         bool isGNUVarArgs = Record[NextIndex++];
1757         bool hasCommaPasting = Record[NextIndex++];
1758         MacroParams.clear();
1759         unsigned NumArgs = Record[NextIndex++];
1760         for (unsigned i = 0; i != NumArgs; ++i)
1761           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1762 
1763         // Install function-like macro info.
1764         MI->setIsFunctionLike();
1765         if (isC99VarArgs) MI->setIsC99Varargs();
1766         if (isGNUVarArgs) MI->setIsGNUVarargs();
1767         if (hasCommaPasting) MI->setHasCommaPasting();
1768         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1769       }
1770 
1771       // Remember that we saw this macro last so that we add the tokens that
1772       // form its body to it.
1773       Macro = MI;
1774 
1775       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1776           Record[NextIndex]) {
1777         // We have a macro definition. Register the association
1778         PreprocessedEntityID
1779             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1780         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1781         PreprocessingRecord::PPEntityID PPID =
1782             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1783         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1784             PPRec.getPreprocessedEntity(PPID));
1785         if (PPDef)
1786           PPRec.RegisterMacroDefinition(Macro, PPDef);
1787       }
1788 
1789       ++NumMacrosRead;
1790       break;
1791     }
1792 
1793     case PP_TOKEN: {
1794       // If we see a TOKEN before a PP_MACRO_*, then the file is
1795       // erroneous, just pretend we didn't see this.
1796       if (!Macro) break;
1797 
1798       unsigned Idx = 0;
1799       Token Tok = ReadToken(F, Record, Idx);
1800       Macro->AddTokenToBody(Tok);
1801       break;
1802     }
1803     }
1804   }
1805 }
1806 
1807 PreprocessedEntityID
1808 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1809                                          unsigned LocalID) const {
1810   if (!M.ModuleOffsetMap.empty())
1811     ReadModuleOffsetMap(M);
1812 
1813   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1814     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1815   assert(I != M.PreprocessedEntityRemap.end()
1816          && "Invalid index into preprocessed entity index remap");
1817 
1818   return LocalID + I->second;
1819 }
1820 
1821 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1822   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1823 }
1824 
1825 HeaderFileInfoTrait::internal_key_type
1826 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1827   internal_key_type ikey = {FE->getSize(),
1828                             M.HasTimestamps ? FE->getModificationTime() : 0,
1829                             FE->getName(), /*Imported*/ false};
1830   return ikey;
1831 }
1832 
1833 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1834   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1835     return false;
1836 
1837   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1838     return true;
1839 
1840   // Determine whether the actual files are equivalent.
1841   FileManager &FileMgr = Reader.getFileManager();
1842   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1843     if (!Key.Imported) {
1844       if (auto File = FileMgr.getFile(Key.Filename))
1845         return *File;
1846       return nullptr;
1847     }
1848 
1849     std::string Resolved = std::string(Key.Filename);
1850     Reader.ResolveImportedPath(M, Resolved);
1851     if (auto File = FileMgr.getFile(Resolved))
1852       return *File;
1853     return nullptr;
1854   };
1855 
1856   const FileEntry *FEA = GetFile(a);
1857   const FileEntry *FEB = GetFile(b);
1858   return FEA && FEA == FEB;
1859 }
1860 
1861 std::pair<unsigned, unsigned>
1862 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1863   using namespace llvm::support;
1864 
1865   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1866   unsigned DataLen = (unsigned) *d++;
1867   return std::make_pair(KeyLen, DataLen);
1868 }
1869 
1870 HeaderFileInfoTrait::internal_key_type
1871 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1872   using namespace llvm::support;
1873 
1874   internal_key_type ikey;
1875   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1876   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1877   ikey.Filename = (const char *)d;
1878   ikey.Imported = true;
1879   return ikey;
1880 }
1881 
1882 HeaderFileInfoTrait::data_type
1883 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1884                               unsigned DataLen) {
1885   using namespace llvm::support;
1886 
1887   const unsigned char *End = d + DataLen;
1888   HeaderFileInfo HFI;
1889   unsigned Flags = *d++;
1890   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1891   HFI.isImport |= (Flags >> 5) & 0x01;
1892   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1893   HFI.DirInfo = (Flags >> 1) & 0x07;
1894   HFI.IndexHeaderMapHeader = Flags & 0x01;
1895   // FIXME: Find a better way to handle this. Maybe just store a
1896   // "has been included" flag?
1897   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1898                              HFI.NumIncludes);
1899   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1900       M, endian::readNext<uint32_t, little, unaligned>(d));
1901   if (unsigned FrameworkOffset =
1902           endian::readNext<uint32_t, little, unaligned>(d)) {
1903     // The framework offset is 1 greater than the actual offset,
1904     // since 0 is used as an indicator for "no framework name".
1905     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1906     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1907   }
1908 
1909   assert((End - d) % 4 == 0 &&
1910          "Wrong data length in HeaderFileInfo deserialization");
1911   while (d != End) {
1912     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1913     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1914     LocalSMID >>= 2;
1915 
1916     // This header is part of a module. Associate it with the module to enable
1917     // implicit module import.
1918     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1919     Module *Mod = Reader.getSubmodule(GlobalSMID);
1920     FileManager &FileMgr = Reader.getFileManager();
1921     ModuleMap &ModMap =
1922         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1923 
1924     std::string Filename = std::string(key.Filename);
1925     if (key.Imported)
1926       Reader.ResolveImportedPath(M, Filename);
1927     // FIXME: This is not always the right filename-as-written, but we're not
1928     // going to use this information to rebuild the module, so it doesn't make
1929     // a lot of difference.
1930     Module::Header H = {std::string(key.Filename), *FileMgr.getFile(Filename)};
1931     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1932     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1933   }
1934 
1935   // This HeaderFileInfo was externally loaded.
1936   HFI.External = true;
1937   HFI.IsValid = true;
1938   return HFI;
1939 }
1940 
1941 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1942                                 uint32_t MacroDirectivesOffset) {
1943   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1944   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1945 }
1946 
1947 void ASTReader::ReadDefinedMacros() {
1948   // Note that we are loading defined macros.
1949   Deserializing Macros(this);
1950 
1951   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1952     BitstreamCursor &MacroCursor = I.MacroCursor;
1953 
1954     // If there was no preprocessor block, skip this file.
1955     if (MacroCursor.getBitcodeBytes().empty())
1956       continue;
1957 
1958     BitstreamCursor Cursor = MacroCursor;
1959     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1960       Error(std::move(Err));
1961       return;
1962     }
1963 
1964     RecordData Record;
1965     while (true) {
1966       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1967       if (!MaybeE) {
1968         Error(MaybeE.takeError());
1969         return;
1970       }
1971       llvm::BitstreamEntry E = MaybeE.get();
1972 
1973       switch (E.Kind) {
1974       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1975       case llvm::BitstreamEntry::Error:
1976         Error("malformed block record in AST file");
1977         return;
1978       case llvm::BitstreamEntry::EndBlock:
1979         goto NextCursor;
1980 
1981       case llvm::BitstreamEntry::Record: {
1982         Record.clear();
1983         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1984         if (!MaybeRecord) {
1985           Error(MaybeRecord.takeError());
1986           return;
1987         }
1988         switch (MaybeRecord.get()) {
1989         default:  // Default behavior: ignore.
1990           break;
1991 
1992         case PP_MACRO_OBJECT_LIKE:
1993         case PP_MACRO_FUNCTION_LIKE: {
1994           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1995           if (II->isOutOfDate())
1996             updateOutOfDateIdentifier(*II);
1997           break;
1998         }
1999 
2000         case PP_TOKEN:
2001           // Ignore tokens.
2002           break;
2003         }
2004         break;
2005       }
2006       }
2007     }
2008     NextCursor:  ;
2009   }
2010 }
2011 
2012 namespace {
2013 
2014   /// Visitor class used to look up identifirs in an AST file.
2015   class IdentifierLookupVisitor {
2016     StringRef Name;
2017     unsigned NameHash;
2018     unsigned PriorGeneration;
2019     unsigned &NumIdentifierLookups;
2020     unsigned &NumIdentifierLookupHits;
2021     IdentifierInfo *Found = nullptr;
2022 
2023   public:
2024     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2025                             unsigned &NumIdentifierLookups,
2026                             unsigned &NumIdentifierLookupHits)
2027       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2028         PriorGeneration(PriorGeneration),
2029         NumIdentifierLookups(NumIdentifierLookups),
2030         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2031 
2032     bool operator()(ModuleFile &M) {
2033       // If we've already searched this module file, skip it now.
2034       if (M.Generation <= PriorGeneration)
2035         return true;
2036 
2037       ASTIdentifierLookupTable *IdTable
2038         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2039       if (!IdTable)
2040         return false;
2041 
2042       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2043                                      Found);
2044       ++NumIdentifierLookups;
2045       ASTIdentifierLookupTable::iterator Pos =
2046           IdTable->find_hashed(Name, NameHash, &Trait);
2047       if (Pos == IdTable->end())
2048         return false;
2049 
2050       // Dereferencing the iterator has the effect of building the
2051       // IdentifierInfo node and populating it with the various
2052       // declarations it needs.
2053       ++NumIdentifierLookupHits;
2054       Found = *Pos;
2055       return true;
2056     }
2057 
2058     // Retrieve the identifier info found within the module
2059     // files.
2060     IdentifierInfo *getIdentifierInfo() const { return Found; }
2061   };
2062 
2063 } // namespace
2064 
2065 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2066   // Note that we are loading an identifier.
2067   Deserializing AnIdentifier(this);
2068 
2069   unsigned PriorGeneration = 0;
2070   if (getContext().getLangOpts().Modules)
2071     PriorGeneration = IdentifierGeneration[&II];
2072 
2073   // If there is a global index, look there first to determine which modules
2074   // provably do not have any results for this identifier.
2075   GlobalModuleIndex::HitSet Hits;
2076   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2077   if (!loadGlobalIndex()) {
2078     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2079       HitsPtr = &Hits;
2080     }
2081   }
2082 
2083   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2084                                   NumIdentifierLookups,
2085                                   NumIdentifierLookupHits);
2086   ModuleMgr.visit(Visitor, HitsPtr);
2087   markIdentifierUpToDate(&II);
2088 }
2089 
2090 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2091   if (!II)
2092     return;
2093 
2094   II->setOutOfDate(false);
2095 
2096   // Update the generation for this identifier.
2097   if (getContext().getLangOpts().Modules)
2098     IdentifierGeneration[II] = getGeneration();
2099 }
2100 
2101 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2102                                     const PendingMacroInfo &PMInfo) {
2103   ModuleFile &M = *PMInfo.M;
2104 
2105   BitstreamCursor &Cursor = M.MacroCursor;
2106   SavedStreamPosition SavedPosition(Cursor);
2107   if (llvm::Error Err =
2108           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2109     Error(std::move(Err));
2110     return;
2111   }
2112 
2113   struct ModuleMacroRecord {
2114     SubmoduleID SubModID;
2115     MacroInfo *MI;
2116     SmallVector<SubmoduleID, 8> Overrides;
2117   };
2118   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2119 
2120   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2121   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2122   // macro histroy.
2123   RecordData Record;
2124   while (true) {
2125     Expected<llvm::BitstreamEntry> MaybeEntry =
2126         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2127     if (!MaybeEntry) {
2128       Error(MaybeEntry.takeError());
2129       return;
2130     }
2131     llvm::BitstreamEntry Entry = MaybeEntry.get();
2132 
2133     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2134       Error("malformed block record in AST file");
2135       return;
2136     }
2137 
2138     Record.clear();
2139     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2140     if (!MaybePP) {
2141       Error(MaybePP.takeError());
2142       return;
2143     }
2144     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2145     case PP_MACRO_DIRECTIVE_HISTORY:
2146       break;
2147 
2148     case PP_MODULE_MACRO: {
2149       ModuleMacros.push_back(ModuleMacroRecord());
2150       auto &Info = ModuleMacros.back();
2151       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2152       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2153       for (int I = 2, N = Record.size(); I != N; ++I)
2154         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2155       continue;
2156     }
2157 
2158     default:
2159       Error("malformed block record in AST file");
2160       return;
2161     }
2162 
2163     // We found the macro directive history; that's the last record
2164     // for this macro.
2165     break;
2166   }
2167 
2168   // Module macros are listed in reverse dependency order.
2169   {
2170     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2171     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2172     for (auto &MMR : ModuleMacros) {
2173       Overrides.clear();
2174       for (unsigned ModID : MMR.Overrides) {
2175         Module *Mod = getSubmodule(ModID);
2176         auto *Macro = PP.getModuleMacro(Mod, II);
2177         assert(Macro && "missing definition for overridden macro");
2178         Overrides.push_back(Macro);
2179       }
2180 
2181       bool Inserted = false;
2182       Module *Owner = getSubmodule(MMR.SubModID);
2183       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2184     }
2185   }
2186 
2187   // Don't read the directive history for a module; we don't have anywhere
2188   // to put it.
2189   if (M.isModule())
2190     return;
2191 
2192   // Deserialize the macro directives history in reverse source-order.
2193   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2194   unsigned Idx = 0, N = Record.size();
2195   while (Idx < N) {
2196     MacroDirective *MD = nullptr;
2197     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2198     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2199     switch (K) {
2200     case MacroDirective::MD_Define: {
2201       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2202       MD = PP.AllocateDefMacroDirective(MI, Loc);
2203       break;
2204     }
2205     case MacroDirective::MD_Undefine:
2206       MD = PP.AllocateUndefMacroDirective(Loc);
2207       break;
2208     case MacroDirective::MD_Visibility:
2209       bool isPublic = Record[Idx++];
2210       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2211       break;
2212     }
2213 
2214     if (!Latest)
2215       Latest = MD;
2216     if (Earliest)
2217       Earliest->setPrevious(MD);
2218     Earliest = MD;
2219   }
2220 
2221   if (Latest)
2222     PP.setLoadedMacroDirective(II, Earliest, Latest);
2223 }
2224 
2225 ASTReader::InputFileInfo
2226 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2227   // Go find this input file.
2228   BitstreamCursor &Cursor = F.InputFilesCursor;
2229   SavedStreamPosition SavedPosition(Cursor);
2230   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2231     // FIXME this drops errors on the floor.
2232     consumeError(std::move(Err));
2233   }
2234 
2235   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2236   if (!MaybeCode) {
2237     // FIXME this drops errors on the floor.
2238     consumeError(MaybeCode.takeError());
2239   }
2240   unsigned Code = MaybeCode.get();
2241   RecordData Record;
2242   StringRef Blob;
2243 
2244   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2245     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2246            "invalid record type for input file");
2247   else {
2248     // FIXME this drops errors on the floor.
2249     consumeError(Maybe.takeError());
2250   }
2251 
2252   assert(Record[0] == ID && "Bogus stored ID or offset");
2253   InputFileInfo R;
2254   R.StoredSize = static_cast<off_t>(Record[1]);
2255   R.StoredTime = static_cast<time_t>(Record[2]);
2256   R.Overridden = static_cast<bool>(Record[3]);
2257   R.Transient = static_cast<bool>(Record[4]);
2258   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2259   R.Filename = std::string(Blob);
2260   ResolveImportedPath(F, R.Filename);
2261 
2262   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2263   if (!MaybeEntry) // FIXME this drops errors on the floor.
2264     consumeError(MaybeEntry.takeError());
2265   llvm::BitstreamEntry Entry = MaybeEntry.get();
2266   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2267          "expected record type for input file hash");
2268 
2269   Record.clear();
2270   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2271     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2272            "invalid record type for input file hash");
2273   else {
2274     // FIXME this drops errors on the floor.
2275     consumeError(Maybe.takeError());
2276   }
2277   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2278                   static_cast<uint64_t>(Record[0]);
2279   return R;
2280 }
2281 
2282 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2283 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2284   // If this ID is bogus, just return an empty input file.
2285   if (ID == 0 || ID > F.InputFilesLoaded.size())
2286     return InputFile();
2287 
2288   // If we've already loaded this input file, return it.
2289   if (F.InputFilesLoaded[ID-1].getFile())
2290     return F.InputFilesLoaded[ID-1];
2291 
2292   if (F.InputFilesLoaded[ID-1].isNotFound())
2293     return InputFile();
2294 
2295   // Go find this input file.
2296   BitstreamCursor &Cursor = F.InputFilesCursor;
2297   SavedStreamPosition SavedPosition(Cursor);
2298   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2299     // FIXME this drops errors on the floor.
2300     consumeError(std::move(Err));
2301   }
2302 
2303   InputFileInfo FI = readInputFileInfo(F, ID);
2304   off_t StoredSize = FI.StoredSize;
2305   time_t StoredTime = FI.StoredTime;
2306   bool Overridden = FI.Overridden;
2307   bool Transient = FI.Transient;
2308   StringRef Filename = FI.Filename;
2309   uint64_t StoredContentHash = FI.ContentHash;
2310 
2311   const FileEntry *File = nullptr;
2312   if (auto FE = FileMgr.getFile(Filename, /*OpenFile=*/false))
2313     File = *FE;
2314 
2315   // If we didn't find the file, resolve it relative to the
2316   // original directory from which this AST file was created.
2317   if (File == nullptr && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2318       F.OriginalDir != F.BaseDirectory) {
2319     std::string Resolved = resolveFileRelativeToOriginalDir(
2320         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2321     if (!Resolved.empty())
2322       if (auto FE = FileMgr.getFile(Resolved))
2323         File = *FE;
2324   }
2325 
2326   // For an overridden file, create a virtual file with the stored
2327   // size/timestamp.
2328   if ((Overridden || Transient) && File == nullptr)
2329     File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
2330 
2331   if (File == nullptr) {
2332     if (Complain) {
2333       std::string ErrorStr = "could not find file '";
2334       ErrorStr += Filename;
2335       ErrorStr += "' referenced by AST file '";
2336       ErrorStr += F.FileName;
2337       ErrorStr += "'";
2338       Error(ErrorStr);
2339     }
2340     // Record that we didn't find the file.
2341     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2342     return InputFile();
2343   }
2344 
2345   // Check if there was a request to override the contents of the file
2346   // that was part of the precompiled header. Overriding such a file
2347   // can lead to problems when lexing using the source locations from the
2348   // PCH.
2349   SourceManager &SM = getSourceManager();
2350   // FIXME: Reject if the overrides are different.
2351   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2352     if (Complain)
2353       Error(diag::err_fe_pch_file_overridden, Filename);
2354 
2355     // After emitting the diagnostic, bypass the overriding file to recover
2356     // (this creates a separate FileEntry).
2357     File = SM.bypassFileContentsOverride(*File);
2358     if (!File) {
2359       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2360       return InputFile();
2361     }
2362   }
2363 
2364   enum ModificationType {
2365     Size,
2366     ModTime,
2367     Content,
2368     None,
2369   };
2370   auto HasInputFileChanged = [&]() {
2371     if (StoredSize != File->getSize())
2372       return ModificationType::Size;
2373     if (!DisableValidation && StoredTime &&
2374         StoredTime != File->getModificationTime()) {
2375       // In case the modification time changes but not the content,
2376       // accept the cached file as legit.
2377       if (ValidateASTInputFilesContent &&
2378           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2379         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2380         if (!MemBuffOrError) {
2381           if (!Complain)
2382             return ModificationType::ModTime;
2383           std::string ErrorStr = "could not get buffer for file '";
2384           ErrorStr += File->getName();
2385           ErrorStr += "'";
2386           Error(ErrorStr);
2387           return ModificationType::ModTime;
2388         }
2389 
2390         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2391         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2392           return ModificationType::None;
2393         return ModificationType::Content;
2394       }
2395       return ModificationType::ModTime;
2396     }
2397     return ModificationType::None;
2398   };
2399 
2400   bool IsOutOfDate = false;
2401   auto FileChange = HasInputFileChanged();
2402   // For an overridden file, there is nothing to validate.
2403   if (!Overridden && FileChange != ModificationType::None) {
2404     if (Complain) {
2405       // Build a list of the PCH imports that got us here (in reverse).
2406       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2407       while (!ImportStack.back()->ImportedBy.empty())
2408         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2409 
2410       // The top-level PCH is stale.
2411       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2412       unsigned DiagnosticKind =
2413           moduleKindForDiagnostic(ImportStack.back()->Kind);
2414       if (DiagnosticKind == 0)
2415         Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName,
2416               (unsigned)FileChange);
2417       else if (DiagnosticKind == 1)
2418         Error(diag::err_fe_module_file_modified, Filename, TopLevelPCHName,
2419               (unsigned)FileChange);
2420       else
2421         Error(diag::err_fe_ast_file_modified, Filename, TopLevelPCHName,
2422               (unsigned)FileChange);
2423 
2424       // Print the import stack.
2425       if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) {
2426         Diag(diag::note_pch_required_by)
2427           << Filename << ImportStack[0]->FileName;
2428         for (unsigned I = 1; I < ImportStack.size(); ++I)
2429           Diag(diag::note_pch_required_by)
2430             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2431       }
2432 
2433       if (!Diags.isDiagnosticInFlight())
2434         Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2435     }
2436 
2437     IsOutOfDate = true;
2438   }
2439   // FIXME: If the file is overridden and we've already opened it,
2440   // issue an error (or split it into a separate FileEntry).
2441 
2442   InputFile IF = InputFile(File, Overridden || Transient, IsOutOfDate);
2443 
2444   // Note that we've loaded this input file.
2445   F.InputFilesLoaded[ID-1] = IF;
2446   return IF;
2447 }
2448 
2449 /// If we are loading a relocatable PCH or module file, and the filename
2450 /// is not an absolute path, add the system or module root to the beginning of
2451 /// the file name.
2452 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2453   // Resolve relative to the base directory, if we have one.
2454   if (!M.BaseDirectory.empty())
2455     return ResolveImportedPath(Filename, M.BaseDirectory);
2456 }
2457 
2458 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2459   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2460     return;
2461 
2462   SmallString<128> Buffer;
2463   llvm::sys::path::append(Buffer, Prefix, Filename);
2464   Filename.assign(Buffer.begin(), Buffer.end());
2465 }
2466 
2467 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2468   switch (ARR) {
2469   case ASTReader::Failure: return true;
2470   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2471   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2472   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2473   case ASTReader::ConfigurationMismatch:
2474     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2475   case ASTReader::HadErrors: return true;
2476   case ASTReader::Success: return false;
2477   }
2478 
2479   llvm_unreachable("unknown ASTReadResult");
2480 }
2481 
2482 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2483     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2484     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2485     std::string &SuggestedPredefines) {
2486   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2487     // FIXME this drops errors on the floor.
2488     consumeError(std::move(Err));
2489     return Failure;
2490   }
2491 
2492   // Read all of the records in the options block.
2493   RecordData Record;
2494   ASTReadResult Result = Success;
2495   while (true) {
2496     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2497     if (!MaybeEntry) {
2498       // FIXME this drops errors on the floor.
2499       consumeError(MaybeEntry.takeError());
2500       return Failure;
2501     }
2502     llvm::BitstreamEntry Entry = MaybeEntry.get();
2503 
2504     switch (Entry.Kind) {
2505     case llvm::BitstreamEntry::Error:
2506     case llvm::BitstreamEntry::SubBlock:
2507       return Failure;
2508 
2509     case llvm::BitstreamEntry::EndBlock:
2510       return Result;
2511 
2512     case llvm::BitstreamEntry::Record:
2513       // The interesting case.
2514       break;
2515     }
2516 
2517     // Read and process a record.
2518     Record.clear();
2519     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2520     if (!MaybeRecordType) {
2521       // FIXME this drops errors on the floor.
2522       consumeError(MaybeRecordType.takeError());
2523       return Failure;
2524     }
2525     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2526     case LANGUAGE_OPTIONS: {
2527       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2528       if (ParseLanguageOptions(Record, Complain, Listener,
2529                                AllowCompatibleConfigurationMismatch))
2530         Result = ConfigurationMismatch;
2531       break;
2532     }
2533 
2534     case TARGET_OPTIONS: {
2535       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2536       if (ParseTargetOptions(Record, Complain, Listener,
2537                              AllowCompatibleConfigurationMismatch))
2538         Result = ConfigurationMismatch;
2539       break;
2540     }
2541 
2542     case FILE_SYSTEM_OPTIONS: {
2543       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2544       if (!AllowCompatibleConfigurationMismatch &&
2545           ParseFileSystemOptions(Record, Complain, Listener))
2546         Result = ConfigurationMismatch;
2547       break;
2548     }
2549 
2550     case HEADER_SEARCH_OPTIONS: {
2551       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2552       if (!AllowCompatibleConfigurationMismatch &&
2553           ParseHeaderSearchOptions(Record, Complain, Listener))
2554         Result = ConfigurationMismatch;
2555       break;
2556     }
2557 
2558     case PREPROCESSOR_OPTIONS:
2559       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2560       if (!AllowCompatibleConfigurationMismatch &&
2561           ParsePreprocessorOptions(Record, Complain, Listener,
2562                                    SuggestedPredefines))
2563         Result = ConfigurationMismatch;
2564       break;
2565     }
2566   }
2567 }
2568 
2569 ASTReader::ASTReadResult
2570 ASTReader::ReadControlBlock(ModuleFile &F,
2571                             SmallVectorImpl<ImportedModule> &Loaded,
2572                             const ModuleFile *ImportedBy,
2573                             unsigned ClientLoadCapabilities) {
2574   BitstreamCursor &Stream = F.Stream;
2575 
2576   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2577     Error(std::move(Err));
2578     return Failure;
2579   }
2580 
2581   // Lambda to read the unhashed control block the first time it's called.
2582   //
2583   // For PCM files, the unhashed control block cannot be read until after the
2584   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2585   // need to look ahead before reading the IMPORTS record.  For consistency,
2586   // this block is always read somehow (see BitstreamEntry::EndBlock).
2587   bool HasReadUnhashedControlBlock = false;
2588   auto readUnhashedControlBlockOnce = [&]() {
2589     if (!HasReadUnhashedControlBlock) {
2590       HasReadUnhashedControlBlock = true;
2591       if (ASTReadResult Result =
2592               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2593         return Result;
2594     }
2595     return Success;
2596   };
2597 
2598   // Read all of the records and blocks in the control block.
2599   RecordData Record;
2600   unsigned NumInputs = 0;
2601   unsigned NumUserInputs = 0;
2602   StringRef BaseDirectoryAsWritten;
2603   while (true) {
2604     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2605     if (!MaybeEntry) {
2606       Error(MaybeEntry.takeError());
2607       return Failure;
2608     }
2609     llvm::BitstreamEntry Entry = MaybeEntry.get();
2610 
2611     switch (Entry.Kind) {
2612     case llvm::BitstreamEntry::Error:
2613       Error("malformed block record in AST file");
2614       return Failure;
2615     case llvm::BitstreamEntry::EndBlock: {
2616       // Validate the module before returning.  This call catches an AST with
2617       // no module name and no imports.
2618       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2619         return Result;
2620 
2621       // Validate input files.
2622       const HeaderSearchOptions &HSOpts =
2623           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2624 
2625       // All user input files reside at the index range [0, NumUserInputs), and
2626       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2627       // loaded module files, ignore missing inputs.
2628       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2629           F.Kind != MK_PrebuiltModule) {
2630         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2631 
2632         // If we are reading a module, we will create a verification timestamp,
2633         // so we verify all input files.  Otherwise, verify only user input
2634         // files.
2635 
2636         unsigned N = NumUserInputs;
2637         if (ValidateSystemInputs ||
2638             (HSOpts.ModulesValidateOncePerBuildSession &&
2639              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2640              F.Kind == MK_ImplicitModule))
2641           N = NumInputs;
2642 
2643         for (unsigned I = 0; I < N; ++I) {
2644           InputFile IF = getInputFile(F, I+1, Complain);
2645           if (!IF.getFile() || IF.isOutOfDate())
2646             return OutOfDate;
2647         }
2648       }
2649 
2650       if (Listener)
2651         Listener->visitModuleFile(F.FileName, F.Kind);
2652 
2653       if (Listener && Listener->needsInputFileVisitation()) {
2654         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2655                                                                 : NumUserInputs;
2656         for (unsigned I = 0; I < N; ++I) {
2657           bool IsSystem = I >= NumUserInputs;
2658           InputFileInfo FI = readInputFileInfo(F, I+1);
2659           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2660                                    F.Kind == MK_ExplicitModule ||
2661                                    F.Kind == MK_PrebuiltModule);
2662         }
2663       }
2664 
2665       return Success;
2666     }
2667 
2668     case llvm::BitstreamEntry::SubBlock:
2669       switch (Entry.ID) {
2670       case INPUT_FILES_BLOCK_ID:
2671         F.InputFilesCursor = Stream;
2672         if (llvm::Error Err = Stream.SkipBlock()) {
2673           Error(std::move(Err));
2674           return Failure;
2675         }
2676         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2677           Error("malformed block record in AST file");
2678           return Failure;
2679         }
2680         continue;
2681 
2682       case OPTIONS_BLOCK_ID:
2683         // If we're reading the first module for this group, check its options
2684         // are compatible with ours. For modules it imports, no further checking
2685         // is required, because we checked them when we built it.
2686         if (Listener && !ImportedBy) {
2687           // Should we allow the configuration of the module file to differ from
2688           // the configuration of the current translation unit in a compatible
2689           // way?
2690           //
2691           // FIXME: Allow this for files explicitly specified with -include-pch.
2692           bool AllowCompatibleConfigurationMismatch =
2693               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2694 
2695           ASTReadResult Result =
2696               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2697                                AllowCompatibleConfigurationMismatch, *Listener,
2698                                SuggestedPredefines);
2699           if (Result == Failure) {
2700             Error("malformed block record in AST file");
2701             return Result;
2702           }
2703 
2704           if (DisableValidation ||
2705               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2706             Result = Success;
2707 
2708           // If we can't load the module, exit early since we likely
2709           // will rebuild the module anyway. The stream may be in the
2710           // middle of a block.
2711           if (Result != Success)
2712             return Result;
2713         } else if (llvm::Error Err = Stream.SkipBlock()) {
2714           Error(std::move(Err));
2715           return Failure;
2716         }
2717         continue;
2718 
2719       default:
2720         if (llvm::Error Err = Stream.SkipBlock()) {
2721           Error(std::move(Err));
2722           return Failure;
2723         }
2724         continue;
2725       }
2726 
2727     case llvm::BitstreamEntry::Record:
2728       // The interesting case.
2729       break;
2730     }
2731 
2732     // Read and process a record.
2733     Record.clear();
2734     StringRef Blob;
2735     Expected<unsigned> MaybeRecordType =
2736         Stream.readRecord(Entry.ID, Record, &Blob);
2737     if (!MaybeRecordType) {
2738       Error(MaybeRecordType.takeError());
2739       return Failure;
2740     }
2741     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2742     case METADATA: {
2743       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2744         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2745           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2746                                         : diag::err_pch_version_too_new);
2747         return VersionMismatch;
2748       }
2749 
2750       bool hasErrors = Record[7];
2751       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2752         Diag(diag::err_pch_with_compiler_errors);
2753         return HadErrors;
2754       }
2755       if (hasErrors) {
2756         Diags.ErrorOccurred = true;
2757         Diags.UncompilableErrorOccurred = true;
2758         Diags.UnrecoverableErrorOccurred = true;
2759       }
2760 
2761       F.RelocatablePCH = Record[4];
2762       // Relative paths in a relocatable PCH are relative to our sysroot.
2763       if (F.RelocatablePCH)
2764         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2765 
2766       F.HasTimestamps = Record[5];
2767 
2768       F.PCHHasObjectFile = Record[6];
2769 
2770       const std::string &CurBranch = getClangFullRepositoryVersion();
2771       StringRef ASTBranch = Blob;
2772       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2773         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2774           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2775         return VersionMismatch;
2776       }
2777       break;
2778     }
2779 
2780     case IMPORTS: {
2781       // Validate the AST before processing any imports (otherwise, untangling
2782       // them can be error-prone and expensive).  A module will have a name and
2783       // will already have been validated, but this catches the PCH case.
2784       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2785         return Result;
2786 
2787       // Load each of the imported PCH files.
2788       unsigned Idx = 0, N = Record.size();
2789       while (Idx < N) {
2790         // Read information about the AST file.
2791         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2792         // The import location will be the local one for now; we will adjust
2793         // all import locations of module imports after the global source
2794         // location info are setup, in ReadAST.
2795         SourceLocation ImportLoc =
2796             ReadUntranslatedSourceLocation(Record[Idx++]);
2797         off_t StoredSize = (off_t)Record[Idx++];
2798         time_t StoredModTime = (time_t)Record[Idx++];
2799         auto FirstSignatureByte = Record.begin() + Idx;
2800         ASTFileSignature StoredSignature = ASTFileSignature::create(
2801             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2802         Idx += ASTFileSignature::size;
2803 
2804         std::string ImportedName = ReadString(Record, Idx);
2805         std::string ImportedFile;
2806 
2807         // For prebuilt and explicit modules first consult the file map for
2808         // an override. Note that here we don't search prebuilt module
2809         // directories, only the explicit name to file mappings. Also, we will
2810         // still verify the size/signature making sure it is essentially the
2811         // same file but perhaps in a different location.
2812         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2813           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2814             ImportedName, /*FileMapOnly*/ true);
2815 
2816         if (ImportedFile.empty())
2817           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2818           // ModuleCache as when writing.
2819           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2820         else
2821           SkipPath(Record, Idx);
2822 
2823         // If our client can't cope with us being out of date, we can't cope with
2824         // our dependency being missing.
2825         unsigned Capabilities = ClientLoadCapabilities;
2826         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2827           Capabilities &= ~ARR_Missing;
2828 
2829         // Load the AST file.
2830         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2831                                   Loaded, StoredSize, StoredModTime,
2832                                   StoredSignature, Capabilities);
2833 
2834         // If we diagnosed a problem, produce a backtrace.
2835         if (isDiagnosedResult(Result, Capabilities))
2836           Diag(diag::note_module_file_imported_by)
2837               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2838 
2839         switch (Result) {
2840         case Failure: return Failure;
2841           // If we have to ignore the dependency, we'll have to ignore this too.
2842         case Missing:
2843         case OutOfDate: return OutOfDate;
2844         case VersionMismatch: return VersionMismatch;
2845         case ConfigurationMismatch: return ConfigurationMismatch;
2846         case HadErrors: return HadErrors;
2847         case Success: break;
2848         }
2849       }
2850       break;
2851     }
2852 
2853     case ORIGINAL_FILE:
2854       F.OriginalSourceFileID = FileID::get(Record[0]);
2855       F.ActualOriginalSourceFileName = std::string(Blob);
2856       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2857       ResolveImportedPath(F, F.OriginalSourceFileName);
2858       break;
2859 
2860     case ORIGINAL_FILE_ID:
2861       F.OriginalSourceFileID = FileID::get(Record[0]);
2862       break;
2863 
2864     case ORIGINAL_PCH_DIR:
2865       F.OriginalDir = std::string(Blob);
2866       break;
2867 
2868     case MODULE_NAME:
2869       F.ModuleName = std::string(Blob);
2870       Diag(diag::remark_module_import)
2871           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2872           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2873       if (Listener)
2874         Listener->ReadModuleName(F.ModuleName);
2875 
2876       // Validate the AST as soon as we have a name so we can exit early on
2877       // failure.
2878       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2879         return Result;
2880 
2881       break;
2882 
2883     case MODULE_DIRECTORY: {
2884       // Save the BaseDirectory as written in the PCM for computing the module
2885       // filename for the ModuleCache.
2886       BaseDirectoryAsWritten = Blob;
2887       assert(!F.ModuleName.empty() &&
2888              "MODULE_DIRECTORY found before MODULE_NAME");
2889       // If we've already loaded a module map file covering this module, we may
2890       // have a better path for it (relative to the current build).
2891       Module *M = PP.getHeaderSearchInfo().lookupModule(
2892           F.ModuleName, /*AllowSearch*/ true,
2893           /*AllowExtraModuleMapSearch*/ true);
2894       if (M && M->Directory) {
2895         // If we're implicitly loading a module, the base directory can't
2896         // change between the build and use.
2897         // Don't emit module relocation error if we have -fno-validate-pch
2898         if (!PP.getPreprocessorOpts().DisablePCHValidation &&
2899             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2900           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2901           if (!BuildDir || *BuildDir != M->Directory) {
2902             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2903               Diag(diag::err_imported_module_relocated)
2904                   << F.ModuleName << Blob << M->Directory->getName();
2905             return OutOfDate;
2906           }
2907         }
2908         F.BaseDirectory = std::string(M->Directory->getName());
2909       } else {
2910         F.BaseDirectory = std::string(Blob);
2911       }
2912       break;
2913     }
2914 
2915     case MODULE_MAP_FILE:
2916       if (ASTReadResult Result =
2917               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2918         return Result;
2919       break;
2920 
2921     case INPUT_FILE_OFFSETS:
2922       NumInputs = Record[0];
2923       NumUserInputs = Record[1];
2924       F.InputFileOffsets =
2925           (const llvm::support::unaligned_uint64_t *)Blob.data();
2926       F.InputFilesLoaded.resize(NumInputs);
2927       F.NumUserInputFiles = NumUserInputs;
2928       break;
2929     }
2930   }
2931 }
2932 
2933 ASTReader::ASTReadResult
2934 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2935   BitstreamCursor &Stream = F.Stream;
2936 
2937   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2938     Error(std::move(Err));
2939     return Failure;
2940   }
2941   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2942 
2943   // Read all of the records and blocks for the AST file.
2944   RecordData Record;
2945   while (true) {
2946     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2947     if (!MaybeEntry) {
2948       Error(MaybeEntry.takeError());
2949       return Failure;
2950     }
2951     llvm::BitstreamEntry Entry = MaybeEntry.get();
2952 
2953     switch (Entry.Kind) {
2954     case llvm::BitstreamEntry::Error:
2955       Error("error at end of module block in AST file");
2956       return Failure;
2957     case llvm::BitstreamEntry::EndBlock:
2958       // Outside of C++, we do not store a lookup map for the translation unit.
2959       // Instead, mark it as needing a lookup map to be built if this module
2960       // contains any declarations lexically within it (which it always does!).
2961       // This usually has no cost, since we very rarely need the lookup map for
2962       // the translation unit outside C++.
2963       if (ASTContext *Ctx = ContextObj) {
2964         DeclContext *DC = Ctx->getTranslationUnitDecl();
2965         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2966           DC->setMustBuildLookupTable();
2967       }
2968 
2969       return Success;
2970     case llvm::BitstreamEntry::SubBlock:
2971       switch (Entry.ID) {
2972       case DECLTYPES_BLOCK_ID:
2973         // We lazily load the decls block, but we want to set up the
2974         // DeclsCursor cursor to point into it.  Clone our current bitcode
2975         // cursor to it, enter the block and read the abbrevs in that block.
2976         // With the main cursor, we just skip over it.
2977         F.DeclsCursor = Stream;
2978         if (llvm::Error Err = Stream.SkipBlock()) {
2979           Error(std::move(Err));
2980           return Failure;
2981         }
2982         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
2983                              &F.DeclsBlockStartOffset)) {
2984           Error("malformed block record in AST file");
2985           return Failure;
2986         }
2987         break;
2988 
2989       case PREPROCESSOR_BLOCK_ID:
2990         F.MacroCursor = Stream;
2991         if (!PP.getExternalSource())
2992           PP.setExternalSource(this);
2993 
2994         if (llvm::Error Err = Stream.SkipBlock()) {
2995           Error(std::move(Err));
2996           return Failure;
2997         }
2998         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2999           Error("malformed block record in AST file");
3000           return Failure;
3001         }
3002         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3003         break;
3004 
3005       case PREPROCESSOR_DETAIL_BLOCK_ID:
3006         F.PreprocessorDetailCursor = Stream;
3007 
3008         if (llvm::Error Err = Stream.SkipBlock()) {
3009           Error(std::move(Err));
3010           return Failure;
3011         }
3012         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3013                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3014           Error("malformed preprocessor detail record in AST file");
3015           return Failure;
3016         }
3017         F.PreprocessorDetailStartOffset
3018         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3019 
3020         if (!PP.getPreprocessingRecord())
3021           PP.createPreprocessingRecord();
3022         if (!PP.getPreprocessingRecord()->getExternalSource())
3023           PP.getPreprocessingRecord()->SetExternalSource(*this);
3024         break;
3025 
3026       case SOURCE_MANAGER_BLOCK_ID:
3027         if (ReadSourceManagerBlock(F))
3028           return Failure;
3029         break;
3030 
3031       case SUBMODULE_BLOCK_ID:
3032         if (ASTReadResult Result =
3033                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3034           return Result;
3035         break;
3036 
3037       case COMMENTS_BLOCK_ID: {
3038         BitstreamCursor C = Stream;
3039 
3040         if (llvm::Error Err = Stream.SkipBlock()) {
3041           Error(std::move(Err));
3042           return Failure;
3043         }
3044         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3045           Error("malformed comments block in AST file");
3046           return Failure;
3047         }
3048         CommentsCursors.push_back(std::make_pair(C, &F));
3049         break;
3050       }
3051 
3052       default:
3053         if (llvm::Error Err = Stream.SkipBlock()) {
3054           Error(std::move(Err));
3055           return Failure;
3056         }
3057         break;
3058       }
3059       continue;
3060 
3061     case llvm::BitstreamEntry::Record:
3062       // The interesting case.
3063       break;
3064     }
3065 
3066     // Read and process a record.
3067     Record.clear();
3068     StringRef Blob;
3069     Expected<unsigned> MaybeRecordType =
3070         Stream.readRecord(Entry.ID, Record, &Blob);
3071     if (!MaybeRecordType) {
3072       Error(MaybeRecordType.takeError());
3073       return Failure;
3074     }
3075     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3076 
3077     // If we're not loading an AST context, we don't care about most records.
3078     if (!ContextObj) {
3079       switch (RecordType) {
3080       case IDENTIFIER_TABLE:
3081       case IDENTIFIER_OFFSET:
3082       case INTERESTING_IDENTIFIERS:
3083       case STATISTICS:
3084       case PP_CONDITIONAL_STACK:
3085       case PP_COUNTER_VALUE:
3086       case SOURCE_LOCATION_OFFSETS:
3087       case MODULE_OFFSET_MAP:
3088       case SOURCE_MANAGER_LINE_TABLE:
3089       case SOURCE_LOCATION_PRELOADS:
3090       case PPD_ENTITIES_OFFSETS:
3091       case HEADER_SEARCH_TABLE:
3092       case IMPORTED_MODULES:
3093       case MACRO_OFFSET:
3094         break;
3095       default:
3096         continue;
3097       }
3098     }
3099 
3100     switch (RecordType) {
3101     default:  // Default behavior: ignore.
3102       break;
3103 
3104     case TYPE_OFFSET: {
3105       if (F.LocalNumTypes != 0) {
3106         Error("duplicate TYPE_OFFSET record in AST file");
3107         return Failure;
3108       }
3109       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3110       F.LocalNumTypes = Record[0];
3111       unsigned LocalBaseTypeIndex = Record[1];
3112       F.BaseTypeIndex = getTotalNumTypes();
3113 
3114       if (F.LocalNumTypes > 0) {
3115         // Introduce the global -> local mapping for types within this module.
3116         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3117 
3118         // Introduce the local -> global mapping for types within this module.
3119         F.TypeRemap.insertOrReplace(
3120           std::make_pair(LocalBaseTypeIndex,
3121                          F.BaseTypeIndex - LocalBaseTypeIndex));
3122 
3123         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3124       }
3125       break;
3126     }
3127 
3128     case DECL_OFFSET: {
3129       if (F.LocalNumDecls != 0) {
3130         Error("duplicate DECL_OFFSET record in AST file");
3131         return Failure;
3132       }
3133       F.DeclOffsets = (const DeclOffset *)Blob.data();
3134       F.LocalNumDecls = Record[0];
3135       unsigned LocalBaseDeclID = Record[1];
3136       F.BaseDeclID = getTotalNumDecls();
3137 
3138       if (F.LocalNumDecls > 0) {
3139         // Introduce the global -> local mapping for declarations within this
3140         // module.
3141         GlobalDeclMap.insert(
3142           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3143 
3144         // Introduce the local -> global mapping for declarations within this
3145         // module.
3146         F.DeclRemap.insertOrReplace(
3147           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3148 
3149         // Introduce the global -> local mapping for declarations within this
3150         // module.
3151         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3152 
3153         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3154       }
3155       break;
3156     }
3157 
3158     case TU_UPDATE_LEXICAL: {
3159       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3160       LexicalContents Contents(
3161           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3162               Blob.data()),
3163           static_cast<unsigned int>(Blob.size() / 4));
3164       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3165       TU->setHasExternalLexicalStorage(true);
3166       break;
3167     }
3168 
3169     case UPDATE_VISIBLE: {
3170       unsigned Idx = 0;
3171       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3172       auto *Data = (const unsigned char*)Blob.data();
3173       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3174       // If we've already loaded the decl, perform the updates when we finish
3175       // loading this block.
3176       if (Decl *D = GetExistingDecl(ID))
3177         PendingUpdateRecords.push_back(
3178             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3179       break;
3180     }
3181 
3182     case IDENTIFIER_TABLE:
3183       F.IdentifierTableData = Blob.data();
3184       if (Record[0]) {
3185         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3186             (const unsigned char *)F.IdentifierTableData + Record[0],
3187             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
3188             (const unsigned char *)F.IdentifierTableData,
3189             ASTIdentifierLookupTrait(*this, F));
3190 
3191         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3192       }
3193       break;
3194 
3195     case IDENTIFIER_OFFSET: {
3196       if (F.LocalNumIdentifiers != 0) {
3197         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3198         return Failure;
3199       }
3200       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3201       F.LocalNumIdentifiers = Record[0];
3202       unsigned LocalBaseIdentifierID = Record[1];
3203       F.BaseIdentifierID = getTotalNumIdentifiers();
3204 
3205       if (F.LocalNumIdentifiers > 0) {
3206         // Introduce the global -> local mapping for identifiers within this
3207         // module.
3208         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3209                                                   &F));
3210 
3211         // Introduce the local -> global mapping for identifiers within this
3212         // module.
3213         F.IdentifierRemap.insertOrReplace(
3214           std::make_pair(LocalBaseIdentifierID,
3215                          F.BaseIdentifierID - LocalBaseIdentifierID));
3216 
3217         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3218                                  + F.LocalNumIdentifiers);
3219       }
3220       break;
3221     }
3222 
3223     case INTERESTING_IDENTIFIERS:
3224       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3225       break;
3226 
3227     case EAGERLY_DESERIALIZED_DECLS:
3228       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3229       // about "interesting" decls (for instance, if we're building a module).
3230       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3231         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3232       break;
3233 
3234     case MODULAR_CODEGEN_DECLS:
3235       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3236       // them (ie: if we're not codegenerating this module).
3237       if (F.Kind == MK_MainFile)
3238         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3239           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3240       break;
3241 
3242     case SPECIAL_TYPES:
3243       if (SpecialTypes.empty()) {
3244         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3245           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3246         break;
3247       }
3248 
3249       if (SpecialTypes.size() != Record.size()) {
3250         Error("invalid special-types record");
3251         return Failure;
3252       }
3253 
3254       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3255         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3256         if (!SpecialTypes[I])
3257           SpecialTypes[I] = ID;
3258         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3259         // merge step?
3260       }
3261       break;
3262 
3263     case STATISTICS:
3264       TotalNumStatements += Record[0];
3265       TotalNumMacros += Record[1];
3266       TotalLexicalDeclContexts += Record[2];
3267       TotalVisibleDeclContexts += Record[3];
3268       break;
3269 
3270     case UNUSED_FILESCOPED_DECLS:
3271       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3272         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3273       break;
3274 
3275     case DELEGATING_CTORS:
3276       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3277         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3278       break;
3279 
3280     case WEAK_UNDECLARED_IDENTIFIERS:
3281       if (Record.size() % 4 != 0) {
3282         Error("invalid weak identifiers record");
3283         return Failure;
3284       }
3285 
3286       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3287       // files. This isn't the way to do it :)
3288       WeakUndeclaredIdentifiers.clear();
3289 
3290       // Translate the weak, undeclared identifiers into global IDs.
3291       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3292         WeakUndeclaredIdentifiers.push_back(
3293           getGlobalIdentifierID(F, Record[I++]));
3294         WeakUndeclaredIdentifiers.push_back(
3295           getGlobalIdentifierID(F, Record[I++]));
3296         WeakUndeclaredIdentifiers.push_back(
3297           ReadSourceLocation(F, Record, I).getRawEncoding());
3298         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3299       }
3300       break;
3301 
3302     case SELECTOR_OFFSETS: {
3303       F.SelectorOffsets = (const uint32_t *)Blob.data();
3304       F.LocalNumSelectors = Record[0];
3305       unsigned LocalBaseSelectorID = Record[1];
3306       F.BaseSelectorID = getTotalNumSelectors();
3307 
3308       if (F.LocalNumSelectors > 0) {
3309         // Introduce the global -> local mapping for selectors within this
3310         // module.
3311         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3312 
3313         // Introduce the local -> global mapping for selectors within this
3314         // module.
3315         F.SelectorRemap.insertOrReplace(
3316           std::make_pair(LocalBaseSelectorID,
3317                          F.BaseSelectorID - LocalBaseSelectorID));
3318 
3319         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3320       }
3321       break;
3322     }
3323 
3324     case METHOD_POOL:
3325       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3326       if (Record[0])
3327         F.SelectorLookupTable
3328           = ASTSelectorLookupTable::Create(
3329                         F.SelectorLookupTableData + Record[0],
3330                         F.SelectorLookupTableData,
3331                         ASTSelectorLookupTrait(*this, F));
3332       TotalNumMethodPoolEntries += Record[1];
3333       break;
3334 
3335     case REFERENCED_SELECTOR_POOL:
3336       if (!Record.empty()) {
3337         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3338           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3339                                                                 Record[Idx++]));
3340           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3341                                               getRawEncoding());
3342         }
3343       }
3344       break;
3345 
3346     case PP_CONDITIONAL_STACK:
3347       if (!Record.empty()) {
3348         unsigned Idx = 0, End = Record.size() - 1;
3349         bool ReachedEOFWhileSkipping = Record[Idx++];
3350         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3351         if (ReachedEOFWhileSkipping) {
3352           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3353           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3354           bool FoundNonSkipPortion = Record[Idx++];
3355           bool FoundElse = Record[Idx++];
3356           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3357           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3358                            FoundElse, ElseLoc);
3359         }
3360         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3361         while (Idx < End) {
3362           auto Loc = ReadSourceLocation(F, Record, Idx);
3363           bool WasSkipping = Record[Idx++];
3364           bool FoundNonSkip = Record[Idx++];
3365           bool FoundElse = Record[Idx++];
3366           ConditionalStack.push_back(
3367               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3368         }
3369         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3370       }
3371       break;
3372 
3373     case PP_COUNTER_VALUE:
3374       if (!Record.empty() && Listener)
3375         Listener->ReadCounter(F, Record[0]);
3376       break;
3377 
3378     case FILE_SORTED_DECLS:
3379       F.FileSortedDecls = (const DeclID *)Blob.data();
3380       F.NumFileSortedDecls = Record[0];
3381       break;
3382 
3383     case SOURCE_LOCATION_OFFSETS: {
3384       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3385       F.LocalNumSLocEntries = Record[0];
3386       unsigned SLocSpaceSize = Record[1];
3387       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3388       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3389           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3390                                               SLocSpaceSize);
3391       if (!F.SLocEntryBaseID) {
3392         Error("ran out of source locations");
3393         break;
3394       }
3395       // Make our entry in the range map. BaseID is negative and growing, so
3396       // we invert it. Because we invert it, though, we need the other end of
3397       // the range.
3398       unsigned RangeStart =
3399           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3400       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3401       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3402 
3403       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3404       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3405       GlobalSLocOffsetMap.insert(
3406           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3407                            - SLocSpaceSize,&F));
3408 
3409       // Initialize the remapping table.
3410       // Invalid stays invalid.
3411       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3412       // This module. Base was 2 when being compiled.
3413       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3414                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3415 
3416       TotalNumSLocEntries += F.LocalNumSLocEntries;
3417       break;
3418     }
3419 
3420     case MODULE_OFFSET_MAP:
3421       F.ModuleOffsetMap = Blob;
3422       break;
3423 
3424     case SOURCE_MANAGER_LINE_TABLE:
3425       if (ParseLineTable(F, Record)) {
3426         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3427         return Failure;
3428       }
3429       break;
3430 
3431     case SOURCE_LOCATION_PRELOADS: {
3432       // Need to transform from the local view (1-based IDs) to the global view,
3433       // which is based off F.SLocEntryBaseID.
3434       if (!F.PreloadSLocEntries.empty()) {
3435         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3436         return Failure;
3437       }
3438 
3439       F.PreloadSLocEntries.swap(Record);
3440       break;
3441     }
3442 
3443     case EXT_VECTOR_DECLS:
3444       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3445         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3446       break;
3447 
3448     case VTABLE_USES:
3449       if (Record.size() % 3 != 0) {
3450         Error("Invalid VTABLE_USES record");
3451         return Failure;
3452       }
3453 
3454       // Later tables overwrite earlier ones.
3455       // FIXME: Modules will have some trouble with this. This is clearly not
3456       // the right way to do this.
3457       VTableUses.clear();
3458 
3459       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3460         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3461         VTableUses.push_back(
3462           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3463         VTableUses.push_back(Record[Idx++]);
3464       }
3465       break;
3466 
3467     case PENDING_IMPLICIT_INSTANTIATIONS:
3468       if (PendingInstantiations.size() % 2 != 0) {
3469         Error("Invalid existing PendingInstantiations");
3470         return Failure;
3471       }
3472 
3473       if (Record.size() % 2 != 0) {
3474         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3475         return Failure;
3476       }
3477 
3478       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3479         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3480         PendingInstantiations.push_back(
3481           ReadSourceLocation(F, Record, I).getRawEncoding());
3482       }
3483       break;
3484 
3485     case SEMA_DECL_REFS:
3486       if (Record.size() != 3) {
3487         Error("Invalid SEMA_DECL_REFS block");
3488         return Failure;
3489       }
3490       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3491         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3492       break;
3493 
3494     case PPD_ENTITIES_OFFSETS: {
3495       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3496       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3497       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3498 
3499       unsigned LocalBasePreprocessedEntityID = Record[0];
3500 
3501       unsigned StartingID;
3502       if (!PP.getPreprocessingRecord())
3503         PP.createPreprocessingRecord();
3504       if (!PP.getPreprocessingRecord()->getExternalSource())
3505         PP.getPreprocessingRecord()->SetExternalSource(*this);
3506       StartingID
3507         = PP.getPreprocessingRecord()
3508             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3509       F.BasePreprocessedEntityID = StartingID;
3510 
3511       if (F.NumPreprocessedEntities > 0) {
3512         // Introduce the global -> local mapping for preprocessed entities in
3513         // this module.
3514         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3515 
3516         // Introduce the local -> global mapping for preprocessed entities in
3517         // this module.
3518         F.PreprocessedEntityRemap.insertOrReplace(
3519           std::make_pair(LocalBasePreprocessedEntityID,
3520             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3521       }
3522 
3523       break;
3524     }
3525 
3526     case PPD_SKIPPED_RANGES: {
3527       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3528       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3529       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3530 
3531       if (!PP.getPreprocessingRecord())
3532         PP.createPreprocessingRecord();
3533       if (!PP.getPreprocessingRecord()->getExternalSource())
3534         PP.getPreprocessingRecord()->SetExternalSource(*this);
3535       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3536           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3537 
3538       if (F.NumPreprocessedSkippedRanges > 0)
3539         GlobalSkippedRangeMap.insert(
3540             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3541       break;
3542     }
3543 
3544     case DECL_UPDATE_OFFSETS:
3545       if (Record.size() % 2 != 0) {
3546         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3547         return Failure;
3548       }
3549       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3550         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3551         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3552 
3553         // If we've already loaded the decl, perform the updates when we finish
3554         // loading this block.
3555         if (Decl *D = GetExistingDecl(ID))
3556           PendingUpdateRecords.push_back(
3557               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3558       }
3559       break;
3560 
3561     case OBJC_CATEGORIES_MAP:
3562       if (F.LocalNumObjCCategoriesInMap != 0) {
3563         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3564         return Failure;
3565       }
3566 
3567       F.LocalNumObjCCategoriesInMap = Record[0];
3568       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3569       break;
3570 
3571     case OBJC_CATEGORIES:
3572       F.ObjCCategories.swap(Record);
3573       break;
3574 
3575     case CUDA_SPECIAL_DECL_REFS:
3576       // Later tables overwrite earlier ones.
3577       // FIXME: Modules will have trouble with this.
3578       CUDASpecialDeclRefs.clear();
3579       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3580         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3581       break;
3582 
3583     case HEADER_SEARCH_TABLE:
3584       F.HeaderFileInfoTableData = Blob.data();
3585       F.LocalNumHeaderFileInfos = Record[1];
3586       if (Record[0]) {
3587         F.HeaderFileInfoTable
3588           = HeaderFileInfoLookupTable::Create(
3589                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3590                    (const unsigned char *)F.HeaderFileInfoTableData,
3591                    HeaderFileInfoTrait(*this, F,
3592                                        &PP.getHeaderSearchInfo(),
3593                                        Blob.data() + Record[2]));
3594 
3595         PP.getHeaderSearchInfo().SetExternalSource(this);
3596         if (!PP.getHeaderSearchInfo().getExternalLookup())
3597           PP.getHeaderSearchInfo().SetExternalLookup(this);
3598       }
3599       break;
3600 
3601     case FP_PRAGMA_OPTIONS:
3602       // Later tables overwrite earlier ones.
3603       FPPragmaOptions.swap(Record);
3604       break;
3605 
3606     case OPENCL_EXTENSIONS:
3607       for (unsigned I = 0, E = Record.size(); I != E; ) {
3608         auto Name = ReadString(Record, I);
3609         auto &Opt = OpenCLExtensions.OptMap[Name];
3610         Opt.Supported = Record[I++] != 0;
3611         Opt.Enabled = Record[I++] != 0;
3612         Opt.Avail = Record[I++];
3613         Opt.Core = Record[I++];
3614       }
3615       break;
3616 
3617     case OPENCL_EXTENSION_TYPES:
3618       for (unsigned I = 0, E = Record.size(); I != E;) {
3619         auto TypeID = static_cast<::TypeID>(Record[I++]);
3620         auto *Type = GetType(TypeID).getTypePtr();
3621         auto NumExt = static_cast<unsigned>(Record[I++]);
3622         for (unsigned II = 0; II != NumExt; ++II) {
3623           auto Ext = ReadString(Record, I);
3624           OpenCLTypeExtMap[Type].insert(Ext);
3625         }
3626       }
3627       break;
3628 
3629     case OPENCL_EXTENSION_DECLS:
3630       for (unsigned I = 0, E = Record.size(); I != E;) {
3631         auto DeclID = static_cast<::DeclID>(Record[I++]);
3632         auto *Decl = GetDecl(DeclID);
3633         auto NumExt = static_cast<unsigned>(Record[I++]);
3634         for (unsigned II = 0; II != NumExt; ++II) {
3635           auto Ext = ReadString(Record, I);
3636           OpenCLDeclExtMap[Decl].insert(Ext);
3637         }
3638       }
3639       break;
3640 
3641     case TENTATIVE_DEFINITIONS:
3642       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3643         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3644       break;
3645 
3646     case KNOWN_NAMESPACES:
3647       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3648         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3649       break;
3650 
3651     case UNDEFINED_BUT_USED:
3652       if (UndefinedButUsed.size() % 2 != 0) {
3653         Error("Invalid existing UndefinedButUsed");
3654         return Failure;
3655       }
3656 
3657       if (Record.size() % 2 != 0) {
3658         Error("invalid undefined-but-used record");
3659         return Failure;
3660       }
3661       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3662         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3663         UndefinedButUsed.push_back(
3664             ReadSourceLocation(F, Record, I).getRawEncoding());
3665       }
3666       break;
3667 
3668     case DELETE_EXPRS_TO_ANALYZE:
3669       for (unsigned I = 0, N = Record.size(); I != N;) {
3670         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3671         const uint64_t Count = Record[I++];
3672         DelayedDeleteExprs.push_back(Count);
3673         for (uint64_t C = 0; C < Count; ++C) {
3674           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3675           bool IsArrayForm = Record[I++] == 1;
3676           DelayedDeleteExprs.push_back(IsArrayForm);
3677         }
3678       }
3679       break;
3680 
3681     case IMPORTED_MODULES:
3682       if (!F.isModule()) {
3683         // If we aren't loading a module (which has its own exports), make
3684         // all of the imported modules visible.
3685         // FIXME: Deal with macros-only imports.
3686         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3687           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3688           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3689           if (GlobalID) {
3690             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3691             if (DeserializationListener)
3692               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3693           }
3694         }
3695       }
3696       break;
3697 
3698     case MACRO_OFFSET: {
3699       if (F.LocalNumMacros != 0) {
3700         Error("duplicate MACRO_OFFSET record in AST file");
3701         return Failure;
3702       }
3703       F.MacroOffsets = (const uint32_t *)Blob.data();
3704       F.LocalNumMacros = Record[0];
3705       unsigned LocalBaseMacroID = Record[1];
3706       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3707       F.BaseMacroID = getTotalNumMacros();
3708 
3709       if (F.LocalNumMacros > 0) {
3710         // Introduce the global -> local mapping for macros within this module.
3711         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3712 
3713         // Introduce the local -> global mapping for macros within this module.
3714         F.MacroRemap.insertOrReplace(
3715           std::make_pair(LocalBaseMacroID,
3716                          F.BaseMacroID - LocalBaseMacroID));
3717 
3718         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3719       }
3720       break;
3721     }
3722 
3723     case LATE_PARSED_TEMPLATE:
3724       LateParsedTemplates.append(Record.begin(), Record.end());
3725       break;
3726 
3727     case OPTIMIZE_PRAGMA_OPTIONS:
3728       if (Record.size() != 1) {
3729         Error("invalid pragma optimize record");
3730         return Failure;
3731       }
3732       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3733       break;
3734 
3735     case MSSTRUCT_PRAGMA_OPTIONS:
3736       if (Record.size() != 1) {
3737         Error("invalid pragma ms_struct record");
3738         return Failure;
3739       }
3740       PragmaMSStructState = Record[0];
3741       break;
3742 
3743     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3744       if (Record.size() != 2) {
3745         Error("invalid pragma ms_struct record");
3746         return Failure;
3747       }
3748       PragmaMSPointersToMembersState = Record[0];
3749       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3750       break;
3751 
3752     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3753       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3754         UnusedLocalTypedefNameCandidates.push_back(
3755             getGlobalDeclID(F, Record[I]));
3756       break;
3757 
3758     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3759       if (Record.size() != 1) {
3760         Error("invalid cuda pragma options record");
3761         return Failure;
3762       }
3763       ForceCUDAHostDeviceDepth = Record[0];
3764       break;
3765 
3766     case PACK_PRAGMA_OPTIONS: {
3767       if (Record.size() < 3) {
3768         Error("invalid pragma pack record");
3769         return Failure;
3770       }
3771       PragmaPackCurrentValue = Record[0];
3772       PragmaPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3773       unsigned NumStackEntries = Record[2];
3774       unsigned Idx = 3;
3775       // Reset the stack when importing a new module.
3776       PragmaPackStack.clear();
3777       for (unsigned I = 0; I < NumStackEntries; ++I) {
3778         PragmaPackStackEntry Entry;
3779         Entry.Value = Record[Idx++];
3780         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3781         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3782         PragmaPackStrings.push_back(ReadString(Record, Idx));
3783         Entry.SlotLabel = PragmaPackStrings.back();
3784         PragmaPackStack.push_back(Entry);
3785       }
3786       break;
3787     }
3788 
3789     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3790       if (Record.size() < 3) {
3791         Error("invalid pragma pack record");
3792         return Failure;
3793       }
3794       FpPragmaCurrentValue = Record[0];
3795       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3796       unsigned NumStackEntries = Record[2];
3797       unsigned Idx = 3;
3798       // Reset the stack when importing a new module.
3799       FpPragmaStack.clear();
3800       for (unsigned I = 0; I < NumStackEntries; ++I) {
3801         FpPragmaStackEntry Entry;
3802         Entry.Value = Record[Idx++];
3803         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3804         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3805         FpPragmaStrings.push_back(ReadString(Record, Idx));
3806         Entry.SlotLabel = FpPragmaStrings.back();
3807         FpPragmaStack.push_back(Entry);
3808       }
3809       break;
3810     }
3811 
3812     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3813       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3814         DeclsToCheckForDeferredDiags.push_back(getGlobalDeclID(F, Record[I]));
3815       break;
3816     }
3817   }
3818 }
3819 
3820 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3821   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3822 
3823   // Additional remapping information.
3824   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3825   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3826   F.ModuleOffsetMap = StringRef();
3827 
3828   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3829   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3830     F.SLocRemap.insert(std::make_pair(0U, 0));
3831     F.SLocRemap.insert(std::make_pair(2U, 1));
3832   }
3833 
3834   // Continuous range maps we may be updating in our module.
3835   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3836   RemapBuilder SLocRemap(F.SLocRemap);
3837   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3838   RemapBuilder MacroRemap(F.MacroRemap);
3839   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3840   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3841   RemapBuilder SelectorRemap(F.SelectorRemap);
3842   RemapBuilder DeclRemap(F.DeclRemap);
3843   RemapBuilder TypeRemap(F.TypeRemap);
3844 
3845   while (Data < DataEnd) {
3846     // FIXME: Looking up dependency modules by filename is horrible. Let's
3847     // start fixing this with prebuilt, explicit and implicit modules and see
3848     // how it goes...
3849     using namespace llvm::support;
3850     ModuleKind Kind = static_cast<ModuleKind>(
3851       endian::readNext<uint8_t, little, unaligned>(Data));
3852     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3853     StringRef Name = StringRef((const char*)Data, Len);
3854     Data += Len;
3855     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3856                               Kind == MK_ImplicitModule
3857                           ? ModuleMgr.lookupByModuleName(Name)
3858                           : ModuleMgr.lookupByFileName(Name));
3859     if (!OM) {
3860       std::string Msg =
3861           "SourceLocation remap refers to unknown module, cannot find ";
3862       Msg.append(std::string(Name));
3863       Error(Msg);
3864       return;
3865     }
3866 
3867     uint32_t SLocOffset =
3868         endian::readNext<uint32_t, little, unaligned>(Data);
3869     uint32_t IdentifierIDOffset =
3870         endian::readNext<uint32_t, little, unaligned>(Data);
3871     uint32_t MacroIDOffset =
3872         endian::readNext<uint32_t, little, unaligned>(Data);
3873     uint32_t PreprocessedEntityIDOffset =
3874         endian::readNext<uint32_t, little, unaligned>(Data);
3875     uint32_t SubmoduleIDOffset =
3876         endian::readNext<uint32_t, little, unaligned>(Data);
3877     uint32_t SelectorIDOffset =
3878         endian::readNext<uint32_t, little, unaligned>(Data);
3879     uint32_t DeclIDOffset =
3880         endian::readNext<uint32_t, little, unaligned>(Data);
3881     uint32_t TypeIndexOffset =
3882         endian::readNext<uint32_t, little, unaligned>(Data);
3883 
3884     uint32_t None = std::numeric_limits<uint32_t>::max();
3885 
3886     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3887                          RemapBuilder &Remap) {
3888       if (Offset != None)
3889         Remap.insert(std::make_pair(Offset,
3890                                     static_cast<int>(BaseOffset - Offset)));
3891     };
3892     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3893     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3894     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3895     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3896               PreprocessedEntityRemap);
3897     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3898     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3899     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3900     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3901 
3902     // Global -> local mappings.
3903     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3904   }
3905 }
3906 
3907 ASTReader::ASTReadResult
3908 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3909                                   const ModuleFile *ImportedBy,
3910                                   unsigned ClientLoadCapabilities) {
3911   unsigned Idx = 0;
3912   F.ModuleMapPath = ReadPath(F, Record, Idx);
3913 
3914   // Try to resolve ModuleName in the current header search context and
3915   // verify that it is found in the same module map file as we saved. If the
3916   // top-level AST file is a main file, skip this check because there is no
3917   // usable header search context.
3918   assert(!F.ModuleName.empty() &&
3919          "MODULE_NAME should come before MODULE_MAP_FILE");
3920   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3921     // An implicitly-loaded module file should have its module listed in some
3922     // module map file that we've already loaded.
3923     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3924     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3925     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3926     // Don't emit module relocation error if we have -fno-validate-pch
3927     if (!PP.getPreprocessorOpts().DisablePCHValidation && !ModMap) {
3928       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3929         if (auto *ASTFE = M ? M->getASTFile() : nullptr) {
3930           // This module was defined by an imported (explicit) module.
3931           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3932                                                << ASTFE->getName();
3933         } else {
3934           // This module was built with a different module map.
3935           Diag(diag::err_imported_module_not_found)
3936               << F.ModuleName << F.FileName
3937               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3938               << !ImportedBy;
3939           // In case it was imported by a PCH, there's a chance the user is
3940           // just missing to include the search path to the directory containing
3941           // the modulemap.
3942           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3943             Diag(diag::note_imported_by_pch_module_not_found)
3944                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3945         }
3946       }
3947       return OutOfDate;
3948     }
3949 
3950     assert(M->Name == F.ModuleName && "found module with different name");
3951 
3952     // Check the primary module map file.
3953     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3954     if (!StoredModMap || *StoredModMap != ModMap) {
3955       assert(ModMap && "found module is missing module map file");
3956       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3957              "top-level import should be verified");
3958       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3959       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3960         Diag(diag::err_imported_module_modmap_changed)
3961             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3962             << ModMap->getName() << F.ModuleMapPath << NotImported;
3963       return OutOfDate;
3964     }
3965 
3966     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3967     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3968       // FIXME: we should use input files rather than storing names.
3969       std::string Filename = ReadPath(F, Record, Idx);
3970       auto F = FileMgr.getFile(Filename, false, false);
3971       if (!F) {
3972         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3973           Error("could not find file '" + Filename +"' referenced by AST file");
3974         return OutOfDate;
3975       }
3976       AdditionalStoredMaps.insert(*F);
3977     }
3978 
3979     // Check any additional module map files (e.g. module.private.modulemap)
3980     // that are not in the pcm.
3981     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3982       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3983         // Remove files that match
3984         // Note: SmallPtrSet::erase is really remove
3985         if (!AdditionalStoredMaps.erase(ModMap)) {
3986           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3987             Diag(diag::err_module_different_modmap)
3988               << F.ModuleName << /*new*/0 << ModMap->getName();
3989           return OutOfDate;
3990         }
3991       }
3992     }
3993 
3994     // Check any additional module map files that are in the pcm, but not
3995     // found in header search. Cases that match are already removed.
3996     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3997       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3998         Diag(diag::err_module_different_modmap)
3999           << F.ModuleName << /*not new*/1 << ModMap->getName();
4000       return OutOfDate;
4001     }
4002   }
4003 
4004   if (Listener)
4005     Listener->ReadModuleMapFile(F.ModuleMapPath);
4006   return Success;
4007 }
4008 
4009 /// Move the given method to the back of the global list of methods.
4010 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4011   // Find the entry for this selector in the method pool.
4012   Sema::GlobalMethodPool::iterator Known
4013     = S.MethodPool.find(Method->getSelector());
4014   if (Known == S.MethodPool.end())
4015     return;
4016 
4017   // Retrieve the appropriate method list.
4018   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4019                                                     : Known->second.second;
4020   bool Found = false;
4021   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4022     if (!Found) {
4023       if (List->getMethod() == Method) {
4024         Found = true;
4025       } else {
4026         // Keep searching.
4027         continue;
4028       }
4029     }
4030 
4031     if (List->getNext())
4032       List->setMethod(List->getNext()->getMethod());
4033     else
4034       List->setMethod(Method);
4035   }
4036 }
4037 
4038 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4039   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4040   for (Decl *D : Names) {
4041     bool wasHidden = !D->isUnconditionallyVisible();
4042     D->setVisibleDespiteOwningModule();
4043 
4044     if (wasHidden && SemaObj) {
4045       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4046         moveMethodToBackOfGlobalList(*SemaObj, Method);
4047       }
4048     }
4049   }
4050 }
4051 
4052 void ASTReader::makeModuleVisible(Module *Mod,
4053                                   Module::NameVisibilityKind NameVisibility,
4054                                   SourceLocation ImportLoc) {
4055   llvm::SmallPtrSet<Module *, 4> Visited;
4056   SmallVector<Module *, 4> Stack;
4057   Stack.push_back(Mod);
4058   while (!Stack.empty()) {
4059     Mod = Stack.pop_back_val();
4060 
4061     if (NameVisibility <= Mod->NameVisibility) {
4062       // This module already has this level of visibility (or greater), so
4063       // there is nothing more to do.
4064       continue;
4065     }
4066 
4067     if (Mod->isUnimportable()) {
4068       // Modules that aren't importable cannot be made visible.
4069       continue;
4070     }
4071 
4072     // Update the module's name visibility.
4073     Mod->NameVisibility = NameVisibility;
4074 
4075     // If we've already deserialized any names from this module,
4076     // mark them as visible.
4077     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4078     if (Hidden != HiddenNamesMap.end()) {
4079       auto HiddenNames = std::move(*Hidden);
4080       HiddenNamesMap.erase(Hidden);
4081       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4082       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4083              "making names visible added hidden names");
4084     }
4085 
4086     // Push any exported modules onto the stack to be marked as visible.
4087     SmallVector<Module *, 16> Exports;
4088     Mod->getExportedModules(Exports);
4089     for (SmallVectorImpl<Module *>::iterator
4090            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4091       Module *Exported = *I;
4092       if (Visited.insert(Exported).second)
4093         Stack.push_back(Exported);
4094     }
4095   }
4096 }
4097 
4098 /// We've merged the definition \p MergedDef into the existing definition
4099 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4100 /// visible.
4101 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4102                                           NamedDecl *MergedDef) {
4103   if (!Def->isUnconditionallyVisible()) {
4104     // If MergedDef is visible or becomes visible, make the definition visible.
4105     if (MergedDef->isUnconditionallyVisible())
4106       Def->setVisibleDespiteOwningModule();
4107     else {
4108       getContext().mergeDefinitionIntoModule(
4109           Def, MergedDef->getImportedOwningModule(),
4110           /*NotifyListeners*/ false);
4111       PendingMergedDefinitionsToDeduplicate.insert(Def);
4112     }
4113   }
4114 }
4115 
4116 bool ASTReader::loadGlobalIndex() {
4117   if (GlobalIndex)
4118     return false;
4119 
4120   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4121       !PP.getLangOpts().Modules)
4122     return true;
4123 
4124   // Try to load the global index.
4125   TriedLoadingGlobalIndex = true;
4126   StringRef ModuleCachePath
4127     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4128   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4129       GlobalModuleIndex::readIndex(ModuleCachePath);
4130   if (llvm::Error Err = std::move(Result.second)) {
4131     assert(!Result.first);
4132     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4133     return true;
4134   }
4135 
4136   GlobalIndex.reset(Result.first);
4137   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4138   return false;
4139 }
4140 
4141 bool ASTReader::isGlobalIndexUnavailable() const {
4142   return PP.getLangOpts().Modules && UseGlobalIndex &&
4143          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4144 }
4145 
4146 static void updateModuleTimestamp(ModuleFile &MF) {
4147   // Overwrite the timestamp file contents so that file's mtime changes.
4148   std::string TimestampFilename = MF.getTimestampFilename();
4149   std::error_code EC;
4150   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4151   if (EC)
4152     return;
4153   OS << "Timestamp file\n";
4154   OS.close();
4155   OS.clear_error(); // Avoid triggering a fatal error.
4156 }
4157 
4158 /// Given a cursor at the start of an AST file, scan ahead and drop the
4159 /// cursor into the start of the given block ID, returning false on success and
4160 /// true on failure.
4161 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4162   while (true) {
4163     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4164     if (!MaybeEntry) {
4165       // FIXME this drops errors on the floor.
4166       consumeError(MaybeEntry.takeError());
4167       return true;
4168     }
4169     llvm::BitstreamEntry Entry = MaybeEntry.get();
4170 
4171     switch (Entry.Kind) {
4172     case llvm::BitstreamEntry::Error:
4173     case llvm::BitstreamEntry::EndBlock:
4174       return true;
4175 
4176     case llvm::BitstreamEntry::Record:
4177       // Ignore top-level records.
4178       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4179         break;
4180       else {
4181         // FIXME this drops errors on the floor.
4182         consumeError(Skipped.takeError());
4183         return true;
4184       }
4185 
4186     case llvm::BitstreamEntry::SubBlock:
4187       if (Entry.ID == BlockID) {
4188         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4189           // FIXME this drops the error on the floor.
4190           consumeError(std::move(Err));
4191           return true;
4192         }
4193         // Found it!
4194         return false;
4195       }
4196 
4197       if (llvm::Error Err = Cursor.SkipBlock()) {
4198         // FIXME this drops the error on the floor.
4199         consumeError(std::move(Err));
4200         return true;
4201       }
4202     }
4203   }
4204 }
4205 
4206 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4207                                             ModuleKind Type,
4208                                             SourceLocation ImportLoc,
4209                                             unsigned ClientLoadCapabilities,
4210                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4211   llvm::SaveAndRestore<SourceLocation>
4212     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4213 
4214   // Defer any pending actions until we get to the end of reading the AST file.
4215   Deserializing AnASTFile(this);
4216 
4217   // Bump the generation number.
4218   unsigned PreviousGeneration = 0;
4219   if (ContextObj)
4220     PreviousGeneration = incrementGeneration(*ContextObj);
4221 
4222   unsigned NumModules = ModuleMgr.size();
4223   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4224     assert(ReadResult && "expected to return error");
4225     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4226                             PP.getLangOpts().Modules
4227                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4228                                 : nullptr);
4229 
4230     // If we find that any modules are unusable, the global index is going
4231     // to be out-of-date. Just remove it.
4232     GlobalIndex.reset();
4233     ModuleMgr.setGlobalIndex(nullptr);
4234     return ReadResult;
4235   };
4236 
4237   SmallVector<ImportedModule, 4> Loaded;
4238   switch (ASTReadResult ReadResult =
4239               ReadASTCore(FileName, Type, ImportLoc,
4240                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4241                           ASTFileSignature(), ClientLoadCapabilities)) {
4242   case Failure:
4243   case Missing:
4244   case OutOfDate:
4245   case VersionMismatch:
4246   case ConfigurationMismatch:
4247   case HadErrors:
4248     return removeModulesAndReturn(ReadResult);
4249   case Success:
4250     break;
4251   }
4252 
4253   // Here comes stuff that we only do once the entire chain is loaded.
4254 
4255   // Load the AST blocks of all of the modules that we loaded.  We can still
4256   // hit errors parsing the ASTs at this point.
4257   for (ImportedModule &M : Loaded) {
4258     ModuleFile &F = *M.Mod;
4259 
4260     // Read the AST block.
4261     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4262       return removeModulesAndReturn(Result);
4263 
4264     // The AST block should always have a definition for the main module.
4265     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4266       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4267       return removeModulesAndReturn(Failure);
4268     }
4269 
4270     // Read the extension blocks.
4271     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4272       if (ASTReadResult Result = ReadExtensionBlock(F))
4273         return removeModulesAndReturn(Result);
4274     }
4275 
4276     // Once read, set the ModuleFile bit base offset and update the size in
4277     // bits of all files we've seen.
4278     F.GlobalBitOffset = TotalModulesSizeInBits;
4279     TotalModulesSizeInBits += F.SizeInBits;
4280     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4281   }
4282 
4283   // Preload source locations and interesting indentifiers.
4284   for (ImportedModule &M : Loaded) {
4285     ModuleFile &F = *M.Mod;
4286 
4287     // Preload SLocEntries.
4288     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4289       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4290       // Load it through the SourceManager and don't call ReadSLocEntry()
4291       // directly because the entry may have already been loaded in which case
4292       // calling ReadSLocEntry() directly would trigger an assertion in
4293       // SourceManager.
4294       SourceMgr.getLoadedSLocEntryByID(Index);
4295     }
4296 
4297     // Map the original source file ID into the ID space of the current
4298     // compilation.
4299     if (F.OriginalSourceFileID.isValid()) {
4300       F.OriginalSourceFileID = FileID::get(
4301           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4302     }
4303 
4304     // Preload all the pending interesting identifiers by marking them out of
4305     // date.
4306     for (auto Offset : F.PreloadIdentifierOffsets) {
4307       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
4308           F.IdentifierTableData + Offset);
4309 
4310       ASTIdentifierLookupTrait Trait(*this, F);
4311       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4312       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4313       auto &II = PP.getIdentifierTable().getOwn(Key);
4314       II.setOutOfDate(true);
4315 
4316       // Mark this identifier as being from an AST file so that we can track
4317       // whether we need to serialize it.
4318       markIdentifierFromAST(*this, II);
4319 
4320       // Associate the ID with the identifier so that the writer can reuse it.
4321       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4322       SetIdentifierInfo(ID, &II);
4323     }
4324   }
4325 
4326   // Setup the import locations and notify the module manager that we've
4327   // committed to these module files.
4328   for (ImportedModule &M : Loaded) {
4329     ModuleFile &F = *M.Mod;
4330 
4331     ModuleMgr.moduleFileAccepted(&F);
4332 
4333     // Set the import location.
4334     F.DirectImportLoc = ImportLoc;
4335     // FIXME: We assume that locations from PCH / preamble do not need
4336     // any translation.
4337     if (!M.ImportedBy)
4338       F.ImportLoc = M.ImportLoc;
4339     else
4340       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4341   }
4342 
4343   if (!PP.getLangOpts().CPlusPlus ||
4344       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4345        Type != MK_PrebuiltModule)) {
4346     // Mark all of the identifiers in the identifier table as being out of date,
4347     // so that various accessors know to check the loaded modules when the
4348     // identifier is used.
4349     //
4350     // For C++ modules, we don't need information on many identifiers (just
4351     // those that provide macros or are poisoned), so we mark all of
4352     // the interesting ones via PreloadIdentifierOffsets.
4353     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4354                                 IdEnd = PP.getIdentifierTable().end();
4355          Id != IdEnd; ++Id)
4356       Id->second->setOutOfDate(true);
4357   }
4358   // Mark selectors as out of date.
4359   for (auto Sel : SelectorGeneration)
4360     SelectorOutOfDate[Sel.first] = true;
4361 
4362   // Resolve any unresolved module exports.
4363   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4364     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4365     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4366     Module *ResolvedMod = getSubmodule(GlobalID);
4367 
4368     switch (Unresolved.Kind) {
4369     case UnresolvedModuleRef::Conflict:
4370       if (ResolvedMod) {
4371         Module::Conflict Conflict;
4372         Conflict.Other = ResolvedMod;
4373         Conflict.Message = Unresolved.String.str();
4374         Unresolved.Mod->Conflicts.push_back(Conflict);
4375       }
4376       continue;
4377 
4378     case UnresolvedModuleRef::Import:
4379       if (ResolvedMod)
4380         Unresolved.Mod->Imports.insert(ResolvedMod);
4381       continue;
4382 
4383     case UnresolvedModuleRef::Export:
4384       if (ResolvedMod || Unresolved.IsWildcard)
4385         Unresolved.Mod->Exports.push_back(
4386           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4387       continue;
4388     }
4389   }
4390   UnresolvedModuleRefs.clear();
4391 
4392   if (Imported)
4393     Imported->append(ImportedModules.begin(),
4394                      ImportedModules.end());
4395 
4396   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4397   // Might be unnecessary as use declarations are only used to build the
4398   // module itself.
4399 
4400   if (ContextObj)
4401     InitializeContext();
4402 
4403   if (SemaObj)
4404     UpdateSema();
4405 
4406   if (DeserializationListener)
4407     DeserializationListener->ReaderInitialized(this);
4408 
4409   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4410   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4411     // If this AST file is a precompiled preamble, then set the
4412     // preamble file ID of the source manager to the file source file
4413     // from which the preamble was built.
4414     if (Type == MK_Preamble) {
4415       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4416     } else if (Type == MK_MainFile) {
4417       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4418     }
4419   }
4420 
4421   // For any Objective-C class definitions we have already loaded, make sure
4422   // that we load any additional categories.
4423   if (ContextObj) {
4424     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4425       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4426                          ObjCClassesLoaded[I],
4427                          PreviousGeneration);
4428     }
4429   }
4430 
4431   if (PP.getHeaderSearchInfo()
4432           .getHeaderSearchOpts()
4433           .ModulesValidateOncePerBuildSession) {
4434     // Now we are certain that the module and all modules it depends on are
4435     // up to date.  Create or update timestamp files for modules that are
4436     // located in the module cache (not for PCH files that could be anywhere
4437     // in the filesystem).
4438     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4439       ImportedModule &M = Loaded[I];
4440       if (M.Mod->Kind == MK_ImplicitModule) {
4441         updateModuleTimestamp(*M.Mod);
4442       }
4443     }
4444   }
4445 
4446   return Success;
4447 }
4448 
4449 static ASTFileSignature readASTFileSignature(StringRef PCH);
4450 
4451 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4452 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4453   // FIXME checking magic headers is done in other places such as
4454   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4455   // always done the same. Unify it all with a helper.
4456   if (!Stream.canSkipToPos(4))
4457     return llvm::createStringError(std::errc::illegal_byte_sequence,
4458                                    "file too small to contain AST file magic");
4459   for (unsigned C : {'C', 'P', 'C', 'H'})
4460     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4461       if (Res.get() != C)
4462         return llvm::createStringError(
4463             std::errc::illegal_byte_sequence,
4464             "file doesn't start with AST file magic");
4465     } else
4466       return Res.takeError();
4467   return llvm::Error::success();
4468 }
4469 
4470 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4471   switch (Kind) {
4472   case MK_PCH:
4473     return 0; // PCH
4474   case MK_ImplicitModule:
4475   case MK_ExplicitModule:
4476   case MK_PrebuiltModule:
4477     return 1; // module
4478   case MK_MainFile:
4479   case MK_Preamble:
4480     return 2; // main source file
4481   }
4482   llvm_unreachable("unknown module kind");
4483 }
4484 
4485 ASTReader::ASTReadResult
4486 ASTReader::ReadASTCore(StringRef FileName,
4487                        ModuleKind Type,
4488                        SourceLocation ImportLoc,
4489                        ModuleFile *ImportedBy,
4490                        SmallVectorImpl<ImportedModule> &Loaded,
4491                        off_t ExpectedSize, time_t ExpectedModTime,
4492                        ASTFileSignature ExpectedSignature,
4493                        unsigned ClientLoadCapabilities) {
4494   ModuleFile *M;
4495   std::string ErrorStr;
4496   ModuleManager::AddModuleResult AddResult
4497     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4498                           getGeneration(), ExpectedSize, ExpectedModTime,
4499                           ExpectedSignature, readASTFileSignature,
4500                           M, ErrorStr);
4501 
4502   switch (AddResult) {
4503   case ModuleManager::AlreadyLoaded:
4504     Diag(diag::remark_module_import)
4505         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4506         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4507     return Success;
4508 
4509   case ModuleManager::NewlyLoaded:
4510     // Load module file below.
4511     break;
4512 
4513   case ModuleManager::Missing:
4514     // The module file was missing; if the client can handle that, return
4515     // it.
4516     if (ClientLoadCapabilities & ARR_Missing)
4517       return Missing;
4518 
4519     // Otherwise, return an error.
4520     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
4521                                           << FileName << !ErrorStr.empty()
4522                                           << ErrorStr;
4523     return Failure;
4524 
4525   case ModuleManager::OutOfDate:
4526     // We couldn't load the module file because it is out-of-date. If the
4527     // client can handle out-of-date, return it.
4528     if (ClientLoadCapabilities & ARR_OutOfDate)
4529       return OutOfDate;
4530 
4531     // Otherwise, return an error.
4532     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
4533                                             << FileName << !ErrorStr.empty()
4534                                             << ErrorStr;
4535     return Failure;
4536   }
4537 
4538   assert(M && "Missing module file");
4539 
4540   bool ShouldFinalizePCM = false;
4541   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4542     auto &MC = getModuleManager().getModuleCache();
4543     if (ShouldFinalizePCM)
4544       MC.finalizePCM(FileName);
4545     else
4546       MC.tryToDropPCM(FileName);
4547   });
4548   ModuleFile &F = *M;
4549   BitstreamCursor &Stream = F.Stream;
4550   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4551   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4552 
4553   // Sniff for the signature.
4554   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4555     Diag(diag::err_module_file_invalid)
4556         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4557     return Failure;
4558   }
4559 
4560   // This is used for compatibility with older PCH formats.
4561   bool HaveReadControlBlock = false;
4562   while (true) {
4563     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4564     if (!MaybeEntry) {
4565       Error(MaybeEntry.takeError());
4566       return Failure;
4567     }
4568     llvm::BitstreamEntry Entry = MaybeEntry.get();
4569 
4570     switch (Entry.Kind) {
4571     case llvm::BitstreamEntry::Error:
4572     case llvm::BitstreamEntry::Record:
4573     case llvm::BitstreamEntry::EndBlock:
4574       Error("invalid record at top-level of AST file");
4575       return Failure;
4576 
4577     case llvm::BitstreamEntry::SubBlock:
4578       break;
4579     }
4580 
4581     switch (Entry.ID) {
4582     case CONTROL_BLOCK_ID:
4583       HaveReadControlBlock = true;
4584       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4585       case Success:
4586         // Check that we didn't try to load a non-module AST file as a module.
4587         //
4588         // FIXME: Should we also perform the converse check? Loading a module as
4589         // a PCH file sort of works, but it's a bit wonky.
4590         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4591              Type == MK_PrebuiltModule) &&
4592             F.ModuleName.empty()) {
4593           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4594           if (Result != OutOfDate ||
4595               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4596             Diag(diag::err_module_file_not_module) << FileName;
4597           return Result;
4598         }
4599         break;
4600 
4601       case Failure: return Failure;
4602       case Missing: return Missing;
4603       case OutOfDate: return OutOfDate;
4604       case VersionMismatch: return VersionMismatch;
4605       case ConfigurationMismatch: return ConfigurationMismatch;
4606       case HadErrors: return HadErrors;
4607       }
4608       break;
4609 
4610     case AST_BLOCK_ID:
4611       if (!HaveReadControlBlock) {
4612         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4613           Diag(diag::err_pch_version_too_old);
4614         return VersionMismatch;
4615       }
4616 
4617       // Record that we've loaded this module.
4618       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4619       ShouldFinalizePCM = true;
4620       return Success;
4621 
4622     case UNHASHED_CONTROL_BLOCK_ID:
4623       // This block is handled using look-ahead during ReadControlBlock.  We
4624       // shouldn't get here!
4625       Error("malformed block record in AST file");
4626       return Failure;
4627 
4628     default:
4629       if (llvm::Error Err = Stream.SkipBlock()) {
4630         Error(std::move(Err));
4631         return Failure;
4632       }
4633       break;
4634     }
4635   }
4636 
4637   llvm_unreachable("unexpected break; expected return");
4638 }
4639 
4640 ASTReader::ASTReadResult
4641 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4642                                     unsigned ClientLoadCapabilities) {
4643   const HeaderSearchOptions &HSOpts =
4644       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4645   bool AllowCompatibleConfigurationMismatch =
4646       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4647 
4648   ASTReadResult Result = readUnhashedControlBlockImpl(
4649       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4650       Listener.get(),
4651       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4652 
4653   // If F was directly imported by another module, it's implicitly validated by
4654   // the importing module.
4655   if (DisableValidation || WasImportedBy ||
4656       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4657     return Success;
4658 
4659   if (Result == Failure) {
4660     Error("malformed block record in AST file");
4661     return Failure;
4662   }
4663 
4664   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4665     // If this module has already been finalized in the ModuleCache, we're stuck
4666     // with it; we can only load a single version of each module.
4667     //
4668     // This can happen when a module is imported in two contexts: in one, as a
4669     // user module; in another, as a system module (due to an import from
4670     // another module marked with the [system] flag).  It usually indicates a
4671     // bug in the module map: this module should also be marked with [system].
4672     //
4673     // If -Wno-system-headers (the default), and the first import is as a
4674     // system module, then validation will fail during the as-user import,
4675     // since -Werror flags won't have been validated.  However, it's reasonable
4676     // to treat this consistently as a system module.
4677     //
4678     // If -Wsystem-headers, the PCM on disk was built with
4679     // -Wno-system-headers, and the first import is as a user module, then
4680     // validation will fail during the as-system import since the PCM on disk
4681     // doesn't guarantee that -Werror was respected.  However, the -Werror
4682     // flags were checked during the initial as-user import.
4683     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4684       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4685       return Success;
4686     }
4687   }
4688 
4689   return Result;
4690 }
4691 
4692 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4693     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4694     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4695     bool ValidateDiagnosticOptions) {
4696   // Initialize a stream.
4697   BitstreamCursor Stream(StreamData);
4698 
4699   // Sniff for the signature.
4700   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4701     // FIXME this drops the error on the floor.
4702     consumeError(std::move(Err));
4703     return Failure;
4704   }
4705 
4706   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4707   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4708     return Failure;
4709 
4710   // Read all of the records in the options block.
4711   RecordData Record;
4712   ASTReadResult Result = Success;
4713   while (true) {
4714     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4715     if (!MaybeEntry) {
4716       // FIXME this drops the error on the floor.
4717       consumeError(MaybeEntry.takeError());
4718       return Failure;
4719     }
4720     llvm::BitstreamEntry Entry = MaybeEntry.get();
4721 
4722     switch (Entry.Kind) {
4723     case llvm::BitstreamEntry::Error:
4724     case llvm::BitstreamEntry::SubBlock:
4725       return Failure;
4726 
4727     case llvm::BitstreamEntry::EndBlock:
4728       return Result;
4729 
4730     case llvm::BitstreamEntry::Record:
4731       // The interesting case.
4732       break;
4733     }
4734 
4735     // Read and process a record.
4736     Record.clear();
4737     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4738     if (!MaybeRecordType) {
4739       // FIXME this drops the error.
4740       return Failure;
4741     }
4742     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4743     case SIGNATURE:
4744       if (F)
4745         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4746       break;
4747     case AST_BLOCK_HASH:
4748       if (F)
4749         F->ASTBlockHash =
4750             ASTFileSignature::create(Record.begin(), Record.end());
4751       break;
4752     case DIAGNOSTIC_OPTIONS: {
4753       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4754       if (Listener && ValidateDiagnosticOptions &&
4755           !AllowCompatibleConfigurationMismatch &&
4756           ParseDiagnosticOptions(Record, Complain, *Listener))
4757         Result = OutOfDate; // Don't return early.  Read the signature.
4758       break;
4759     }
4760     case DIAG_PRAGMA_MAPPINGS:
4761       if (!F)
4762         break;
4763       if (F->PragmaDiagMappings.empty())
4764         F->PragmaDiagMappings.swap(Record);
4765       else
4766         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4767                                      Record.begin(), Record.end());
4768       break;
4769     }
4770   }
4771 }
4772 
4773 /// Parse a record and blob containing module file extension metadata.
4774 static bool parseModuleFileExtensionMetadata(
4775               const SmallVectorImpl<uint64_t> &Record,
4776               StringRef Blob,
4777               ModuleFileExtensionMetadata &Metadata) {
4778   if (Record.size() < 4) return true;
4779 
4780   Metadata.MajorVersion = Record[0];
4781   Metadata.MinorVersion = Record[1];
4782 
4783   unsigned BlockNameLen = Record[2];
4784   unsigned UserInfoLen = Record[3];
4785 
4786   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4787 
4788   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4789   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4790                                   Blob.data() + BlockNameLen + UserInfoLen);
4791   return false;
4792 }
4793 
4794 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4795   BitstreamCursor &Stream = F.Stream;
4796 
4797   RecordData Record;
4798   while (true) {
4799     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4800     if (!MaybeEntry) {
4801       Error(MaybeEntry.takeError());
4802       return Failure;
4803     }
4804     llvm::BitstreamEntry Entry = MaybeEntry.get();
4805 
4806     switch (Entry.Kind) {
4807     case llvm::BitstreamEntry::SubBlock:
4808       if (llvm::Error Err = Stream.SkipBlock()) {
4809         Error(std::move(Err));
4810         return Failure;
4811       }
4812       continue;
4813 
4814     case llvm::BitstreamEntry::EndBlock:
4815       return Success;
4816 
4817     case llvm::BitstreamEntry::Error:
4818       return HadErrors;
4819 
4820     case llvm::BitstreamEntry::Record:
4821       break;
4822     }
4823 
4824     Record.clear();
4825     StringRef Blob;
4826     Expected<unsigned> MaybeRecCode =
4827         Stream.readRecord(Entry.ID, Record, &Blob);
4828     if (!MaybeRecCode) {
4829       Error(MaybeRecCode.takeError());
4830       return Failure;
4831     }
4832     switch (MaybeRecCode.get()) {
4833     case EXTENSION_METADATA: {
4834       ModuleFileExtensionMetadata Metadata;
4835       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4836         Error("malformed EXTENSION_METADATA in AST file");
4837         return Failure;
4838       }
4839 
4840       // Find a module file extension with this block name.
4841       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4842       if (Known == ModuleFileExtensions.end()) break;
4843 
4844       // Form a reader.
4845       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4846                                                              F, Stream)) {
4847         F.ExtensionReaders.push_back(std::move(Reader));
4848       }
4849 
4850       break;
4851     }
4852     }
4853   }
4854 
4855   return Success;
4856 }
4857 
4858 void ASTReader::InitializeContext() {
4859   assert(ContextObj && "no context to initialize");
4860   ASTContext &Context = *ContextObj;
4861 
4862   // If there's a listener, notify them that we "read" the translation unit.
4863   if (DeserializationListener)
4864     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4865                                       Context.getTranslationUnitDecl());
4866 
4867   // FIXME: Find a better way to deal with collisions between these
4868   // built-in types. Right now, we just ignore the problem.
4869 
4870   // Load the special types.
4871   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4872     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4873       if (!Context.CFConstantStringTypeDecl)
4874         Context.setCFConstantStringType(GetType(String));
4875     }
4876 
4877     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4878       QualType FileType = GetType(File);
4879       if (FileType.isNull()) {
4880         Error("FILE type is NULL");
4881         return;
4882       }
4883 
4884       if (!Context.FILEDecl) {
4885         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4886           Context.setFILEDecl(Typedef->getDecl());
4887         else {
4888           const TagType *Tag = FileType->getAs<TagType>();
4889           if (!Tag) {
4890             Error("Invalid FILE type in AST file");
4891             return;
4892           }
4893           Context.setFILEDecl(Tag->getDecl());
4894         }
4895       }
4896     }
4897 
4898     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4899       QualType Jmp_bufType = GetType(Jmp_buf);
4900       if (Jmp_bufType.isNull()) {
4901         Error("jmp_buf type is NULL");
4902         return;
4903       }
4904 
4905       if (!Context.jmp_bufDecl) {
4906         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4907           Context.setjmp_bufDecl(Typedef->getDecl());
4908         else {
4909           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4910           if (!Tag) {
4911             Error("Invalid jmp_buf type in AST file");
4912             return;
4913           }
4914           Context.setjmp_bufDecl(Tag->getDecl());
4915         }
4916       }
4917     }
4918 
4919     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4920       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4921       if (Sigjmp_bufType.isNull()) {
4922         Error("sigjmp_buf type is NULL");
4923         return;
4924       }
4925 
4926       if (!Context.sigjmp_bufDecl) {
4927         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4928           Context.setsigjmp_bufDecl(Typedef->getDecl());
4929         else {
4930           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4931           assert(Tag && "Invalid sigjmp_buf type in AST file");
4932           Context.setsigjmp_bufDecl(Tag->getDecl());
4933         }
4934       }
4935     }
4936 
4937     if (unsigned ObjCIdRedef
4938           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4939       if (Context.ObjCIdRedefinitionType.isNull())
4940         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4941     }
4942 
4943     if (unsigned ObjCClassRedef
4944           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4945       if (Context.ObjCClassRedefinitionType.isNull())
4946         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4947     }
4948 
4949     if (unsigned ObjCSelRedef
4950           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4951       if (Context.ObjCSelRedefinitionType.isNull())
4952         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4953     }
4954 
4955     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4956       QualType Ucontext_tType = GetType(Ucontext_t);
4957       if (Ucontext_tType.isNull()) {
4958         Error("ucontext_t type is NULL");
4959         return;
4960       }
4961 
4962       if (!Context.ucontext_tDecl) {
4963         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4964           Context.setucontext_tDecl(Typedef->getDecl());
4965         else {
4966           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4967           assert(Tag && "Invalid ucontext_t type in AST file");
4968           Context.setucontext_tDecl(Tag->getDecl());
4969         }
4970       }
4971     }
4972   }
4973 
4974   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4975 
4976   // If there were any CUDA special declarations, deserialize them.
4977   if (!CUDASpecialDeclRefs.empty()) {
4978     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4979     Context.setcudaConfigureCallDecl(
4980                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4981   }
4982 
4983   // Re-export any modules that were imported by a non-module AST file.
4984   // FIXME: This does not make macro-only imports visible again.
4985   for (auto &Import : ImportedModules) {
4986     if (Module *Imported = getSubmodule(Import.ID)) {
4987       makeModuleVisible(Imported, Module::AllVisible,
4988                         /*ImportLoc=*/Import.ImportLoc);
4989       if (Import.ImportLoc.isValid())
4990         PP.makeModuleVisible(Imported, Import.ImportLoc);
4991       // FIXME: should we tell Sema to make the module visible too?
4992     }
4993   }
4994   ImportedModules.clear();
4995 }
4996 
4997 void ASTReader::finalizeForWriting() {
4998   // Nothing to do for now.
4999 }
5000 
5001 /// Reads and return the signature record from \p PCH's control block, or
5002 /// else returns 0.
5003 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5004   BitstreamCursor Stream(PCH);
5005   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5006     // FIXME this drops the error on the floor.
5007     consumeError(std::move(Err));
5008     return ASTFileSignature();
5009   }
5010 
5011   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5012   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5013     return ASTFileSignature();
5014 
5015   // Scan for SIGNATURE inside the diagnostic options block.
5016   ASTReader::RecordData Record;
5017   while (true) {
5018     Expected<llvm::BitstreamEntry> MaybeEntry =
5019         Stream.advanceSkippingSubblocks();
5020     if (!MaybeEntry) {
5021       // FIXME this drops the error on the floor.
5022       consumeError(MaybeEntry.takeError());
5023       return ASTFileSignature();
5024     }
5025     llvm::BitstreamEntry Entry = MaybeEntry.get();
5026 
5027     if (Entry.Kind != llvm::BitstreamEntry::Record)
5028       return ASTFileSignature();
5029 
5030     Record.clear();
5031     StringRef Blob;
5032     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5033     if (!MaybeRecord) {
5034       // FIXME this drops the error on the floor.
5035       consumeError(MaybeRecord.takeError());
5036       return ASTFileSignature();
5037     }
5038     if (SIGNATURE == MaybeRecord.get())
5039       return ASTFileSignature::create(Record.begin(),
5040                                       Record.begin() + ASTFileSignature::size);
5041   }
5042 }
5043 
5044 /// Retrieve the name of the original source file name
5045 /// directly from the AST file, without actually loading the AST
5046 /// file.
5047 std::string ASTReader::getOriginalSourceFile(
5048     const std::string &ASTFileName, FileManager &FileMgr,
5049     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5050   // Open the AST file.
5051   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5052   if (!Buffer) {
5053     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5054         << ASTFileName << Buffer.getError().message();
5055     return std::string();
5056   }
5057 
5058   // Initialize the stream
5059   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5060 
5061   // Sniff for the signature.
5062   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5063     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5064     return std::string();
5065   }
5066 
5067   // Scan for the CONTROL_BLOCK_ID block.
5068   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5069     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5070     return std::string();
5071   }
5072 
5073   // Scan for ORIGINAL_FILE inside the control block.
5074   RecordData Record;
5075   while (true) {
5076     Expected<llvm::BitstreamEntry> MaybeEntry =
5077         Stream.advanceSkippingSubblocks();
5078     if (!MaybeEntry) {
5079       // FIXME this drops errors on the floor.
5080       consumeError(MaybeEntry.takeError());
5081       return std::string();
5082     }
5083     llvm::BitstreamEntry Entry = MaybeEntry.get();
5084 
5085     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5086       return std::string();
5087 
5088     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5089       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5090       return std::string();
5091     }
5092 
5093     Record.clear();
5094     StringRef Blob;
5095     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5096     if (!MaybeRecord) {
5097       // FIXME this drops the errors on the floor.
5098       consumeError(MaybeRecord.takeError());
5099       return std::string();
5100     }
5101     if (ORIGINAL_FILE == MaybeRecord.get())
5102       return Blob.str();
5103   }
5104 }
5105 
5106 namespace {
5107 
5108   class SimplePCHValidator : public ASTReaderListener {
5109     const LangOptions &ExistingLangOpts;
5110     const TargetOptions &ExistingTargetOpts;
5111     const PreprocessorOptions &ExistingPPOpts;
5112     std::string ExistingModuleCachePath;
5113     FileManager &FileMgr;
5114 
5115   public:
5116     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5117                        const TargetOptions &ExistingTargetOpts,
5118                        const PreprocessorOptions &ExistingPPOpts,
5119                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5120         : ExistingLangOpts(ExistingLangOpts),
5121           ExistingTargetOpts(ExistingTargetOpts),
5122           ExistingPPOpts(ExistingPPOpts),
5123           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5124 
5125     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5126                              bool AllowCompatibleDifferences) override {
5127       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5128                                   AllowCompatibleDifferences);
5129     }
5130 
5131     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5132                            bool AllowCompatibleDifferences) override {
5133       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5134                                 AllowCompatibleDifferences);
5135     }
5136 
5137     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5138                                  StringRef SpecificModuleCachePath,
5139                                  bool Complain) override {
5140       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5141                                       ExistingModuleCachePath,
5142                                       nullptr, ExistingLangOpts);
5143     }
5144 
5145     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5146                                  bool Complain,
5147                                  std::string &SuggestedPredefines) override {
5148       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5149                                       SuggestedPredefines, ExistingLangOpts);
5150     }
5151   };
5152 
5153 } // namespace
5154 
5155 bool ASTReader::readASTFileControlBlock(
5156     StringRef Filename, FileManager &FileMgr,
5157     const PCHContainerReader &PCHContainerRdr,
5158     bool FindModuleFileExtensions,
5159     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5160   // Open the AST file.
5161   // FIXME: This allows use of the VFS; we do not allow use of the
5162   // VFS when actually loading a module.
5163   auto Buffer = FileMgr.getBufferForFile(Filename);
5164   if (!Buffer) {
5165     return true;
5166   }
5167 
5168   // Initialize the stream
5169   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5170   BitstreamCursor Stream(Bytes);
5171 
5172   // Sniff for the signature.
5173   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5174     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5175     return true;
5176   }
5177 
5178   // Scan for the CONTROL_BLOCK_ID block.
5179   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5180     return true;
5181 
5182   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5183   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5184   bool NeedsImports = Listener.needsImportVisitation();
5185   BitstreamCursor InputFilesCursor;
5186 
5187   RecordData Record;
5188   std::string ModuleDir;
5189   bool DoneWithControlBlock = false;
5190   while (!DoneWithControlBlock) {
5191     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5192     if (!MaybeEntry) {
5193       // FIXME this drops the error on the floor.
5194       consumeError(MaybeEntry.takeError());
5195       return true;
5196     }
5197     llvm::BitstreamEntry Entry = MaybeEntry.get();
5198 
5199     switch (Entry.Kind) {
5200     case llvm::BitstreamEntry::SubBlock: {
5201       switch (Entry.ID) {
5202       case OPTIONS_BLOCK_ID: {
5203         std::string IgnoredSuggestedPredefines;
5204         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5205                              /*AllowCompatibleConfigurationMismatch*/ false,
5206                              Listener, IgnoredSuggestedPredefines) != Success)
5207           return true;
5208         break;
5209       }
5210 
5211       case INPUT_FILES_BLOCK_ID:
5212         InputFilesCursor = Stream;
5213         if (llvm::Error Err = Stream.SkipBlock()) {
5214           // FIXME this drops the error on the floor.
5215           consumeError(std::move(Err));
5216           return true;
5217         }
5218         if (NeedsInputFiles &&
5219             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5220           return true;
5221         break;
5222 
5223       default:
5224         if (llvm::Error Err = Stream.SkipBlock()) {
5225           // FIXME this drops the error on the floor.
5226           consumeError(std::move(Err));
5227           return true;
5228         }
5229         break;
5230       }
5231 
5232       continue;
5233     }
5234 
5235     case llvm::BitstreamEntry::EndBlock:
5236       DoneWithControlBlock = true;
5237       break;
5238 
5239     case llvm::BitstreamEntry::Error:
5240       return true;
5241 
5242     case llvm::BitstreamEntry::Record:
5243       break;
5244     }
5245 
5246     if (DoneWithControlBlock) break;
5247 
5248     Record.clear();
5249     StringRef Blob;
5250     Expected<unsigned> MaybeRecCode =
5251         Stream.readRecord(Entry.ID, Record, &Blob);
5252     if (!MaybeRecCode) {
5253       // FIXME this drops the error.
5254       return Failure;
5255     }
5256     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5257     case METADATA:
5258       if (Record[0] != VERSION_MAJOR)
5259         return true;
5260       if (Listener.ReadFullVersionInformation(Blob))
5261         return true;
5262       break;
5263     case MODULE_NAME:
5264       Listener.ReadModuleName(Blob);
5265       break;
5266     case MODULE_DIRECTORY:
5267       ModuleDir = std::string(Blob);
5268       break;
5269     case MODULE_MAP_FILE: {
5270       unsigned Idx = 0;
5271       auto Path = ReadString(Record, Idx);
5272       ResolveImportedPath(Path, ModuleDir);
5273       Listener.ReadModuleMapFile(Path);
5274       break;
5275     }
5276     case INPUT_FILE_OFFSETS: {
5277       if (!NeedsInputFiles)
5278         break;
5279 
5280       unsigned NumInputFiles = Record[0];
5281       unsigned NumUserFiles = Record[1];
5282       const llvm::support::unaligned_uint64_t *InputFileOffs =
5283           (const llvm::support::unaligned_uint64_t *)Blob.data();
5284       for (unsigned I = 0; I != NumInputFiles; ++I) {
5285         // Go find this input file.
5286         bool isSystemFile = I >= NumUserFiles;
5287 
5288         if (isSystemFile && !NeedsSystemInputFiles)
5289           break; // the rest are system input files
5290 
5291         BitstreamCursor &Cursor = InputFilesCursor;
5292         SavedStreamPosition SavedPosition(Cursor);
5293         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5294           // FIXME this drops errors on the floor.
5295           consumeError(std::move(Err));
5296         }
5297 
5298         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5299         if (!MaybeCode) {
5300           // FIXME this drops errors on the floor.
5301           consumeError(MaybeCode.takeError());
5302         }
5303         unsigned Code = MaybeCode.get();
5304 
5305         RecordData Record;
5306         StringRef Blob;
5307         bool shouldContinue = false;
5308         Expected<unsigned> MaybeRecordType =
5309             Cursor.readRecord(Code, Record, &Blob);
5310         if (!MaybeRecordType) {
5311           // FIXME this drops errors on the floor.
5312           consumeError(MaybeRecordType.takeError());
5313         }
5314         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5315         case INPUT_FILE_HASH:
5316           break;
5317         case INPUT_FILE:
5318           bool Overridden = static_cast<bool>(Record[3]);
5319           std::string Filename = std::string(Blob);
5320           ResolveImportedPath(Filename, ModuleDir);
5321           shouldContinue = Listener.visitInputFile(
5322               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5323           break;
5324         }
5325         if (!shouldContinue)
5326           break;
5327       }
5328       break;
5329     }
5330 
5331     case IMPORTS: {
5332       if (!NeedsImports)
5333         break;
5334 
5335       unsigned Idx = 0, N = Record.size();
5336       while (Idx < N) {
5337         // Read information about the AST file.
5338         Idx +=
5339             1 + 1 + 1 + 1 +
5340             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5341         std::string ModuleName = ReadString(Record, Idx);
5342         std::string Filename = ReadString(Record, Idx);
5343         ResolveImportedPath(Filename, ModuleDir);
5344         Listener.visitImport(ModuleName, Filename);
5345       }
5346       break;
5347     }
5348 
5349     default:
5350       // No other validation to perform.
5351       break;
5352     }
5353   }
5354 
5355   // Look for module file extension blocks, if requested.
5356   if (FindModuleFileExtensions) {
5357     BitstreamCursor SavedStream = Stream;
5358     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5359       bool DoneWithExtensionBlock = false;
5360       while (!DoneWithExtensionBlock) {
5361         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5362         if (!MaybeEntry) {
5363           // FIXME this drops the error.
5364           return true;
5365         }
5366         llvm::BitstreamEntry Entry = MaybeEntry.get();
5367 
5368         switch (Entry.Kind) {
5369         case llvm::BitstreamEntry::SubBlock:
5370           if (llvm::Error Err = Stream.SkipBlock()) {
5371             // FIXME this drops the error on the floor.
5372             consumeError(std::move(Err));
5373             return true;
5374           }
5375           continue;
5376 
5377         case llvm::BitstreamEntry::EndBlock:
5378           DoneWithExtensionBlock = true;
5379           continue;
5380 
5381         case llvm::BitstreamEntry::Error:
5382           return true;
5383 
5384         case llvm::BitstreamEntry::Record:
5385           break;
5386         }
5387 
5388        Record.clear();
5389        StringRef Blob;
5390        Expected<unsigned> MaybeRecCode =
5391            Stream.readRecord(Entry.ID, Record, &Blob);
5392        if (!MaybeRecCode) {
5393          // FIXME this drops the error.
5394          return true;
5395        }
5396        switch (MaybeRecCode.get()) {
5397        case EXTENSION_METADATA: {
5398          ModuleFileExtensionMetadata Metadata;
5399          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5400            return true;
5401 
5402          Listener.readModuleFileExtension(Metadata);
5403          break;
5404        }
5405        }
5406       }
5407     }
5408     Stream = SavedStream;
5409   }
5410 
5411   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5412   if (readUnhashedControlBlockImpl(
5413           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5414           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5415           ValidateDiagnosticOptions) != Success)
5416     return true;
5417 
5418   return false;
5419 }
5420 
5421 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5422                                     const PCHContainerReader &PCHContainerRdr,
5423                                     const LangOptions &LangOpts,
5424                                     const TargetOptions &TargetOpts,
5425                                     const PreprocessorOptions &PPOpts,
5426                                     StringRef ExistingModuleCachePath) {
5427   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5428                                ExistingModuleCachePath, FileMgr);
5429   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5430                                   /*FindModuleFileExtensions=*/false,
5431                                   validator,
5432                                   /*ValidateDiagnosticOptions=*/true);
5433 }
5434 
5435 ASTReader::ASTReadResult
5436 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5437   // Enter the submodule block.
5438   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5439     Error(std::move(Err));
5440     return Failure;
5441   }
5442 
5443   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5444   bool First = true;
5445   Module *CurrentModule = nullptr;
5446   RecordData Record;
5447   while (true) {
5448     Expected<llvm::BitstreamEntry> MaybeEntry =
5449         F.Stream.advanceSkippingSubblocks();
5450     if (!MaybeEntry) {
5451       Error(MaybeEntry.takeError());
5452       return Failure;
5453     }
5454     llvm::BitstreamEntry Entry = MaybeEntry.get();
5455 
5456     switch (Entry.Kind) {
5457     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5458     case llvm::BitstreamEntry::Error:
5459       Error("malformed block record in AST file");
5460       return Failure;
5461     case llvm::BitstreamEntry::EndBlock:
5462       return Success;
5463     case llvm::BitstreamEntry::Record:
5464       // The interesting case.
5465       break;
5466     }
5467 
5468     // Read a record.
5469     StringRef Blob;
5470     Record.clear();
5471     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5472     if (!MaybeKind) {
5473       Error(MaybeKind.takeError());
5474       return Failure;
5475     }
5476     unsigned Kind = MaybeKind.get();
5477 
5478     if ((Kind == SUBMODULE_METADATA) != First) {
5479       Error("submodule metadata record should be at beginning of block");
5480       return Failure;
5481     }
5482     First = false;
5483 
5484     // Submodule information is only valid if we have a current module.
5485     // FIXME: Should we error on these cases?
5486     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5487         Kind != SUBMODULE_DEFINITION)
5488       continue;
5489 
5490     switch (Kind) {
5491     default:  // Default behavior: ignore.
5492       break;
5493 
5494     case SUBMODULE_DEFINITION: {
5495       if (Record.size() < 12) {
5496         Error("malformed module definition");
5497         return Failure;
5498       }
5499 
5500       StringRef Name = Blob;
5501       unsigned Idx = 0;
5502       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5503       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5504       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5505       bool IsFramework = Record[Idx++];
5506       bool IsExplicit = Record[Idx++];
5507       bool IsSystem = Record[Idx++];
5508       bool IsExternC = Record[Idx++];
5509       bool InferSubmodules = Record[Idx++];
5510       bool InferExplicitSubmodules = Record[Idx++];
5511       bool InferExportWildcard = Record[Idx++];
5512       bool ConfigMacrosExhaustive = Record[Idx++];
5513       bool ModuleMapIsPrivate = Record[Idx++];
5514 
5515       Module *ParentModule = nullptr;
5516       if (Parent)
5517         ParentModule = getSubmodule(Parent);
5518 
5519       // Retrieve this (sub)module from the module map, creating it if
5520       // necessary.
5521       CurrentModule =
5522           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5523               .first;
5524 
5525       // FIXME: set the definition loc for CurrentModule, or call
5526       // ModMap.setInferredModuleAllowedBy()
5527 
5528       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5529       if (GlobalIndex >= SubmodulesLoaded.size() ||
5530           SubmodulesLoaded[GlobalIndex]) {
5531         Error("too many submodules");
5532         return Failure;
5533       }
5534 
5535       if (!ParentModule) {
5536         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5537           // Don't emit module relocation error if we have -fno-validate-pch
5538           if (!PP.getPreprocessorOpts().DisablePCHValidation &&
5539               CurFile != F.File) {
5540             Error(diag::err_module_file_conflict,
5541                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5542                   F.File->getName());
5543             return Failure;
5544           }
5545         }
5546 
5547         F.DidReadTopLevelSubmodule = true;
5548         CurrentModule->setASTFile(F.File);
5549         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5550       }
5551 
5552       CurrentModule->Kind = Kind;
5553       CurrentModule->Signature = F.Signature;
5554       CurrentModule->IsFromModuleFile = true;
5555       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5556       CurrentModule->IsExternC = IsExternC;
5557       CurrentModule->InferSubmodules = InferSubmodules;
5558       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5559       CurrentModule->InferExportWildcard = InferExportWildcard;
5560       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5561       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5562       if (DeserializationListener)
5563         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5564 
5565       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5566 
5567       // Clear out data that will be replaced by what is in the module file.
5568       CurrentModule->LinkLibraries.clear();
5569       CurrentModule->ConfigMacros.clear();
5570       CurrentModule->UnresolvedConflicts.clear();
5571       CurrentModule->Conflicts.clear();
5572 
5573       // The module is available unless it's missing a requirement; relevant
5574       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5575       // Missing headers that were present when the module was built do not
5576       // make it unavailable -- if we got this far, this must be an explicitly
5577       // imported module file.
5578       CurrentModule->Requirements.clear();
5579       CurrentModule->MissingHeaders.clear();
5580       CurrentModule->IsUnimportable =
5581           ParentModule && ParentModule->IsUnimportable;
5582       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5583       break;
5584     }
5585 
5586     case SUBMODULE_UMBRELLA_HEADER: {
5587       std::string Filename = std::string(Blob);
5588       ResolveImportedPath(F, Filename);
5589       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5590         if (!CurrentModule->getUmbrellaHeader())
5591           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5592         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5593           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5594             Error("mismatched umbrella headers in submodule");
5595           return OutOfDate;
5596         }
5597       }
5598       break;
5599     }
5600 
5601     case SUBMODULE_HEADER:
5602     case SUBMODULE_EXCLUDED_HEADER:
5603     case SUBMODULE_PRIVATE_HEADER:
5604       // We lazily associate headers with their modules via the HeaderInfo table.
5605       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5606       // of complete filenames or remove it entirely.
5607       break;
5608 
5609     case SUBMODULE_TEXTUAL_HEADER:
5610     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5611       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5612       // them here.
5613       break;
5614 
5615     case SUBMODULE_TOPHEADER:
5616       CurrentModule->addTopHeaderFilename(Blob);
5617       break;
5618 
5619     case SUBMODULE_UMBRELLA_DIR: {
5620       std::string Dirname = std::string(Blob);
5621       ResolveImportedPath(F, Dirname);
5622       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5623         if (!CurrentModule->getUmbrellaDir())
5624           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5625         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5626           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5627             Error("mismatched umbrella directories in submodule");
5628           return OutOfDate;
5629         }
5630       }
5631       break;
5632     }
5633 
5634     case SUBMODULE_METADATA: {
5635       F.BaseSubmoduleID = getTotalNumSubmodules();
5636       F.LocalNumSubmodules = Record[0];
5637       unsigned LocalBaseSubmoduleID = Record[1];
5638       if (F.LocalNumSubmodules > 0) {
5639         // Introduce the global -> local mapping for submodules within this
5640         // module.
5641         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5642 
5643         // Introduce the local -> global mapping for submodules within this
5644         // module.
5645         F.SubmoduleRemap.insertOrReplace(
5646           std::make_pair(LocalBaseSubmoduleID,
5647                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5648 
5649         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5650       }
5651       break;
5652     }
5653 
5654     case SUBMODULE_IMPORTS:
5655       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5656         UnresolvedModuleRef Unresolved;
5657         Unresolved.File = &F;
5658         Unresolved.Mod = CurrentModule;
5659         Unresolved.ID = Record[Idx];
5660         Unresolved.Kind = UnresolvedModuleRef::Import;
5661         Unresolved.IsWildcard = false;
5662         UnresolvedModuleRefs.push_back(Unresolved);
5663       }
5664       break;
5665 
5666     case SUBMODULE_EXPORTS:
5667       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5668         UnresolvedModuleRef Unresolved;
5669         Unresolved.File = &F;
5670         Unresolved.Mod = CurrentModule;
5671         Unresolved.ID = Record[Idx];
5672         Unresolved.Kind = UnresolvedModuleRef::Export;
5673         Unresolved.IsWildcard = Record[Idx + 1];
5674         UnresolvedModuleRefs.push_back(Unresolved);
5675       }
5676 
5677       // Once we've loaded the set of exports, there's no reason to keep
5678       // the parsed, unresolved exports around.
5679       CurrentModule->UnresolvedExports.clear();
5680       break;
5681 
5682     case SUBMODULE_REQUIRES:
5683       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5684                                     PP.getTargetInfo());
5685       break;
5686 
5687     case SUBMODULE_LINK_LIBRARY:
5688       ModMap.resolveLinkAsDependencies(CurrentModule);
5689       CurrentModule->LinkLibraries.push_back(
5690           Module::LinkLibrary(std::string(Blob), Record[0]));
5691       break;
5692 
5693     case SUBMODULE_CONFIG_MACRO:
5694       CurrentModule->ConfigMacros.push_back(Blob.str());
5695       break;
5696 
5697     case SUBMODULE_CONFLICT: {
5698       UnresolvedModuleRef Unresolved;
5699       Unresolved.File = &F;
5700       Unresolved.Mod = CurrentModule;
5701       Unresolved.ID = Record[0];
5702       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5703       Unresolved.IsWildcard = false;
5704       Unresolved.String = Blob;
5705       UnresolvedModuleRefs.push_back(Unresolved);
5706       break;
5707     }
5708 
5709     case SUBMODULE_INITIALIZERS: {
5710       if (!ContextObj)
5711         break;
5712       SmallVector<uint32_t, 16> Inits;
5713       for (auto &ID : Record)
5714         Inits.push_back(getGlobalDeclID(F, ID));
5715       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5716       break;
5717     }
5718 
5719     case SUBMODULE_EXPORT_AS:
5720       CurrentModule->ExportAsModule = Blob.str();
5721       ModMap.addLinkAsDependency(CurrentModule);
5722       break;
5723     }
5724   }
5725 }
5726 
5727 /// Parse the record that corresponds to a LangOptions data
5728 /// structure.
5729 ///
5730 /// This routine parses the language options from the AST file and then gives
5731 /// them to the AST listener if one is set.
5732 ///
5733 /// \returns true if the listener deems the file unacceptable, false otherwise.
5734 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5735                                      bool Complain,
5736                                      ASTReaderListener &Listener,
5737                                      bool AllowCompatibleDifferences) {
5738   LangOptions LangOpts;
5739   unsigned Idx = 0;
5740 #define LANGOPT(Name, Bits, Default, Description) \
5741   LangOpts.Name = Record[Idx++];
5742 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5743   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5744 #include "clang/Basic/LangOptions.def"
5745 #define SANITIZER(NAME, ID)                                                    \
5746   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5747 #include "clang/Basic/Sanitizers.def"
5748 
5749   for (unsigned N = Record[Idx++]; N; --N)
5750     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5751 
5752   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5753   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5754   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5755 
5756   LangOpts.CurrentModule = ReadString(Record, Idx);
5757 
5758   // Comment options.
5759   for (unsigned N = Record[Idx++]; N; --N) {
5760     LangOpts.CommentOpts.BlockCommandNames.push_back(
5761       ReadString(Record, Idx));
5762   }
5763   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5764 
5765   // OpenMP offloading options.
5766   for (unsigned N = Record[Idx++]; N; --N) {
5767     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5768   }
5769 
5770   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5771 
5772   return Listener.ReadLanguageOptions(LangOpts, Complain,
5773                                       AllowCompatibleDifferences);
5774 }
5775 
5776 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5777                                    ASTReaderListener &Listener,
5778                                    bool AllowCompatibleDifferences) {
5779   unsigned Idx = 0;
5780   TargetOptions TargetOpts;
5781   TargetOpts.Triple = ReadString(Record, Idx);
5782   TargetOpts.CPU = ReadString(Record, Idx);
5783   TargetOpts.ABI = ReadString(Record, Idx);
5784   for (unsigned N = Record[Idx++]; N; --N) {
5785     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5786   }
5787   for (unsigned N = Record[Idx++]; N; --N) {
5788     TargetOpts.Features.push_back(ReadString(Record, Idx));
5789   }
5790 
5791   return Listener.ReadTargetOptions(TargetOpts, Complain,
5792                                     AllowCompatibleDifferences);
5793 }
5794 
5795 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5796                                        ASTReaderListener &Listener) {
5797   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5798   unsigned Idx = 0;
5799 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5800 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5801   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5802 #include "clang/Basic/DiagnosticOptions.def"
5803 
5804   for (unsigned N = Record[Idx++]; N; --N)
5805     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5806   for (unsigned N = Record[Idx++]; N; --N)
5807     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5808 
5809   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5810 }
5811 
5812 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5813                                        ASTReaderListener &Listener) {
5814   FileSystemOptions FSOpts;
5815   unsigned Idx = 0;
5816   FSOpts.WorkingDir = ReadString(Record, Idx);
5817   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5818 }
5819 
5820 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5821                                          bool Complain,
5822                                          ASTReaderListener &Listener) {
5823   HeaderSearchOptions HSOpts;
5824   unsigned Idx = 0;
5825   HSOpts.Sysroot = ReadString(Record, Idx);
5826 
5827   // Include entries.
5828   for (unsigned N = Record[Idx++]; N; --N) {
5829     std::string Path = ReadString(Record, Idx);
5830     frontend::IncludeDirGroup Group
5831       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5832     bool IsFramework = Record[Idx++];
5833     bool IgnoreSysRoot = Record[Idx++];
5834     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5835                                     IgnoreSysRoot);
5836   }
5837 
5838   // System header prefixes.
5839   for (unsigned N = Record[Idx++]; N; --N) {
5840     std::string Prefix = ReadString(Record, Idx);
5841     bool IsSystemHeader = Record[Idx++];
5842     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5843   }
5844 
5845   HSOpts.ResourceDir = ReadString(Record, Idx);
5846   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5847   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5848   HSOpts.DisableModuleHash = Record[Idx++];
5849   HSOpts.ImplicitModuleMaps = Record[Idx++];
5850   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5851   HSOpts.UseBuiltinIncludes = Record[Idx++];
5852   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5853   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5854   HSOpts.UseLibcxx = Record[Idx++];
5855   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5856 
5857   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5858                                           Complain);
5859 }
5860 
5861 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5862                                          bool Complain,
5863                                          ASTReaderListener &Listener,
5864                                          std::string &SuggestedPredefines) {
5865   PreprocessorOptions PPOpts;
5866   unsigned Idx = 0;
5867 
5868   // Macro definitions/undefs
5869   for (unsigned N = Record[Idx++]; N; --N) {
5870     std::string Macro = ReadString(Record, Idx);
5871     bool IsUndef = Record[Idx++];
5872     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5873   }
5874 
5875   // Includes
5876   for (unsigned N = Record[Idx++]; N; --N) {
5877     PPOpts.Includes.push_back(ReadString(Record, Idx));
5878   }
5879 
5880   // Macro Includes
5881   for (unsigned N = Record[Idx++]; N; --N) {
5882     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5883   }
5884 
5885   PPOpts.UsePredefines = Record[Idx++];
5886   PPOpts.DetailedRecord = Record[Idx++];
5887   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5888   PPOpts.ObjCXXARCStandardLibrary =
5889     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5890   SuggestedPredefines.clear();
5891   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5892                                           SuggestedPredefines);
5893 }
5894 
5895 std::pair<ModuleFile *, unsigned>
5896 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5897   GlobalPreprocessedEntityMapType::iterator
5898   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5899   assert(I != GlobalPreprocessedEntityMap.end() &&
5900          "Corrupted global preprocessed entity map");
5901   ModuleFile *M = I->second;
5902   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5903   return std::make_pair(M, LocalIndex);
5904 }
5905 
5906 llvm::iterator_range<PreprocessingRecord::iterator>
5907 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5908   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5909     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5910                                              Mod.NumPreprocessedEntities);
5911 
5912   return llvm::make_range(PreprocessingRecord::iterator(),
5913                           PreprocessingRecord::iterator());
5914 }
5915 
5916 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5917 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5918   return llvm::make_range(
5919       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5920       ModuleDeclIterator(this, &Mod,
5921                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5922 }
5923 
5924 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5925   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5926   assert(I != GlobalSkippedRangeMap.end() &&
5927     "Corrupted global skipped range map");
5928   ModuleFile *M = I->second;
5929   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5930   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5931   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5932   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5933                     TranslateSourceLocation(*M, RawRange.getEnd()));
5934   assert(Range.isValid());
5935   return Range;
5936 }
5937 
5938 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5939   PreprocessedEntityID PPID = Index+1;
5940   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5941   ModuleFile &M = *PPInfo.first;
5942   unsigned LocalIndex = PPInfo.second;
5943   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5944 
5945   if (!PP.getPreprocessingRecord()) {
5946     Error("no preprocessing record");
5947     return nullptr;
5948   }
5949 
5950   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5951   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5952           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5953     Error(std::move(Err));
5954     return nullptr;
5955   }
5956 
5957   Expected<llvm::BitstreamEntry> MaybeEntry =
5958       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5959   if (!MaybeEntry) {
5960     Error(MaybeEntry.takeError());
5961     return nullptr;
5962   }
5963   llvm::BitstreamEntry Entry = MaybeEntry.get();
5964 
5965   if (Entry.Kind != llvm::BitstreamEntry::Record)
5966     return nullptr;
5967 
5968   // Read the record.
5969   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5970                     TranslateSourceLocation(M, PPOffs.getEnd()));
5971   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5972   StringRef Blob;
5973   RecordData Record;
5974   Expected<unsigned> MaybeRecType =
5975       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5976   if (!MaybeRecType) {
5977     Error(MaybeRecType.takeError());
5978     return nullptr;
5979   }
5980   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5981   case PPD_MACRO_EXPANSION: {
5982     bool isBuiltin = Record[0];
5983     IdentifierInfo *Name = nullptr;
5984     MacroDefinitionRecord *Def = nullptr;
5985     if (isBuiltin)
5986       Name = getLocalIdentifier(M, Record[1]);
5987     else {
5988       PreprocessedEntityID GlobalID =
5989           getGlobalPreprocessedEntityID(M, Record[1]);
5990       Def = cast<MacroDefinitionRecord>(
5991           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5992     }
5993 
5994     MacroExpansion *ME;
5995     if (isBuiltin)
5996       ME = new (PPRec) MacroExpansion(Name, Range);
5997     else
5998       ME = new (PPRec) MacroExpansion(Def, Range);
5999 
6000     return ME;
6001   }
6002 
6003   case PPD_MACRO_DEFINITION: {
6004     // Decode the identifier info and then check again; if the macro is
6005     // still defined and associated with the identifier,
6006     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6007     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6008 
6009     if (DeserializationListener)
6010       DeserializationListener->MacroDefinitionRead(PPID, MD);
6011 
6012     return MD;
6013   }
6014 
6015   case PPD_INCLUSION_DIRECTIVE: {
6016     const char *FullFileNameStart = Blob.data() + Record[0];
6017     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6018     const FileEntry *File = nullptr;
6019     if (!FullFileName.empty())
6020       if (auto FE = PP.getFileManager().getFile(FullFileName))
6021         File = *FE;
6022 
6023     // FIXME: Stable encoding
6024     InclusionDirective::InclusionKind Kind
6025       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6026     InclusionDirective *ID
6027       = new (PPRec) InclusionDirective(PPRec, Kind,
6028                                        StringRef(Blob.data(), Record[0]),
6029                                        Record[1], Record[3],
6030                                        File,
6031                                        Range);
6032     return ID;
6033   }
6034   }
6035 
6036   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6037 }
6038 
6039 /// Find the next module that contains entities and return the ID
6040 /// of the first entry.
6041 ///
6042 /// \param SLocMapI points at a chunk of a module that contains no
6043 /// preprocessed entities or the entities it contains are not the ones we are
6044 /// looking for.
6045 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6046                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6047   ++SLocMapI;
6048   for (GlobalSLocOffsetMapType::const_iterator
6049          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6050     ModuleFile &M = *SLocMapI->second;
6051     if (M.NumPreprocessedEntities)
6052       return M.BasePreprocessedEntityID;
6053   }
6054 
6055   return getTotalNumPreprocessedEntities();
6056 }
6057 
6058 namespace {
6059 
6060 struct PPEntityComp {
6061   const ASTReader &Reader;
6062   ModuleFile &M;
6063 
6064   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6065 
6066   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6067     SourceLocation LHS = getLoc(L);
6068     SourceLocation RHS = getLoc(R);
6069     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6070   }
6071 
6072   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6073     SourceLocation LHS = getLoc(L);
6074     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6075   }
6076 
6077   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6078     SourceLocation RHS = getLoc(R);
6079     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6080   }
6081 
6082   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6083     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6084   }
6085 };
6086 
6087 } // namespace
6088 
6089 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6090                                                        bool EndsAfter) const {
6091   if (SourceMgr.isLocalSourceLocation(Loc))
6092     return getTotalNumPreprocessedEntities();
6093 
6094   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6095       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6096   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6097          "Corrupted global sloc offset map");
6098 
6099   if (SLocMapI->second->NumPreprocessedEntities == 0)
6100     return findNextPreprocessedEntity(SLocMapI);
6101 
6102   ModuleFile &M = *SLocMapI->second;
6103 
6104   using pp_iterator = const PPEntityOffset *;
6105 
6106   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6107   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6108 
6109   size_t Count = M.NumPreprocessedEntities;
6110   size_t Half;
6111   pp_iterator First = pp_begin;
6112   pp_iterator PPI;
6113 
6114   if (EndsAfter) {
6115     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6116                            PPEntityComp(*this, M));
6117   } else {
6118     // Do a binary search manually instead of using std::lower_bound because
6119     // The end locations of entities may be unordered (when a macro expansion
6120     // is inside another macro argument), but for this case it is not important
6121     // whether we get the first macro expansion or its containing macro.
6122     while (Count > 0) {
6123       Half = Count / 2;
6124       PPI = First;
6125       std::advance(PPI, Half);
6126       if (SourceMgr.isBeforeInTranslationUnit(
6127               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6128         First = PPI;
6129         ++First;
6130         Count = Count - Half - 1;
6131       } else
6132         Count = Half;
6133     }
6134   }
6135 
6136   if (PPI == pp_end)
6137     return findNextPreprocessedEntity(SLocMapI);
6138 
6139   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6140 }
6141 
6142 /// Returns a pair of [Begin, End) indices of preallocated
6143 /// preprocessed entities that \arg Range encompasses.
6144 std::pair<unsigned, unsigned>
6145     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6146   if (Range.isInvalid())
6147     return std::make_pair(0,0);
6148   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6149 
6150   PreprocessedEntityID BeginID =
6151       findPreprocessedEntity(Range.getBegin(), false);
6152   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6153   return std::make_pair(BeginID, EndID);
6154 }
6155 
6156 /// Optionally returns true or false if the preallocated preprocessed
6157 /// entity with index \arg Index came from file \arg FID.
6158 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6159                                                              FileID FID) {
6160   if (FID.isInvalid())
6161     return false;
6162 
6163   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6164   ModuleFile &M = *PPInfo.first;
6165   unsigned LocalIndex = PPInfo.second;
6166   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6167 
6168   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6169   if (Loc.isInvalid())
6170     return false;
6171 
6172   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6173     return true;
6174   else
6175     return false;
6176 }
6177 
6178 namespace {
6179 
6180   /// Visitor used to search for information about a header file.
6181   class HeaderFileInfoVisitor {
6182     const FileEntry *FE;
6183     Optional<HeaderFileInfo> HFI;
6184 
6185   public:
6186     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6187 
6188     bool operator()(ModuleFile &M) {
6189       HeaderFileInfoLookupTable *Table
6190         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6191       if (!Table)
6192         return false;
6193 
6194       // Look in the on-disk hash table for an entry for this file name.
6195       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6196       if (Pos == Table->end())
6197         return false;
6198 
6199       HFI = *Pos;
6200       return true;
6201     }
6202 
6203     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6204   };
6205 
6206 } // namespace
6207 
6208 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6209   HeaderFileInfoVisitor Visitor(FE);
6210   ModuleMgr.visit(Visitor);
6211   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6212     return *HFI;
6213 
6214   return HeaderFileInfo();
6215 }
6216 
6217 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6218   using DiagState = DiagnosticsEngine::DiagState;
6219   SmallVector<DiagState *, 32> DiagStates;
6220 
6221   for (ModuleFile &F : ModuleMgr) {
6222     unsigned Idx = 0;
6223     auto &Record = F.PragmaDiagMappings;
6224     if (Record.empty())
6225       continue;
6226 
6227     DiagStates.clear();
6228 
6229     auto ReadDiagState =
6230         [&](const DiagState &BasedOn, SourceLocation Loc,
6231             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6232       unsigned BackrefID = Record[Idx++];
6233       if (BackrefID != 0)
6234         return DiagStates[BackrefID - 1];
6235 
6236       // A new DiagState was created here.
6237       Diag.DiagStates.push_back(BasedOn);
6238       DiagState *NewState = &Diag.DiagStates.back();
6239       DiagStates.push_back(NewState);
6240       unsigned Size = Record[Idx++];
6241       assert(Idx + Size * 2 <= Record.size() &&
6242              "Invalid data, not enough diag/map pairs");
6243       while (Size--) {
6244         unsigned DiagID = Record[Idx++];
6245         DiagnosticMapping NewMapping =
6246             DiagnosticMapping::deserialize(Record[Idx++]);
6247         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6248           continue;
6249 
6250         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6251 
6252         // If this mapping was specified as a warning but the severity was
6253         // upgraded due to diagnostic settings, simulate the current diagnostic
6254         // settings (and use a warning).
6255         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6256           NewMapping.setSeverity(diag::Severity::Warning);
6257           NewMapping.setUpgradedFromWarning(false);
6258         }
6259 
6260         Mapping = NewMapping;
6261       }
6262       return NewState;
6263     };
6264 
6265     // Read the first state.
6266     DiagState *FirstState;
6267     if (F.Kind == MK_ImplicitModule) {
6268       // Implicitly-built modules are reused with different diagnostic
6269       // settings.  Use the initial diagnostic state from Diag to simulate this
6270       // compilation's diagnostic settings.
6271       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6272       DiagStates.push_back(FirstState);
6273 
6274       // Skip the initial diagnostic state from the serialized module.
6275       assert(Record[1] == 0 &&
6276              "Invalid data, unexpected backref in initial state");
6277       Idx = 3 + Record[2] * 2;
6278       assert(Idx < Record.size() &&
6279              "Invalid data, not enough state change pairs in initial state");
6280     } else if (F.isModule()) {
6281       // For an explicit module, preserve the flags from the module build
6282       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6283       // -Wblah flags.
6284       unsigned Flags = Record[Idx++];
6285       DiagState Initial;
6286       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6287       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6288       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6289       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6290       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6291       Initial.ExtBehavior = (diag::Severity)Flags;
6292       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6293 
6294       assert(F.OriginalSourceFileID.isValid());
6295 
6296       // Set up the root buffer of the module to start with the initial
6297       // diagnostic state of the module itself, to cover files that contain no
6298       // explicit transitions (for which we did not serialize anything).
6299       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6300           .StateTransitions.push_back({FirstState, 0});
6301     } else {
6302       // For prefix ASTs, start with whatever the user configured on the
6303       // command line.
6304       Idx++; // Skip flags.
6305       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6306                                  SourceLocation(), false);
6307     }
6308 
6309     // Read the state transitions.
6310     unsigned NumLocations = Record[Idx++];
6311     while (NumLocations--) {
6312       assert(Idx < Record.size() &&
6313              "Invalid data, missing pragma diagnostic states");
6314       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6315       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6316       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6317       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6318       unsigned Transitions = Record[Idx++];
6319 
6320       // Note that we don't need to set up Parent/ParentOffset here, because
6321       // we won't be changing the diagnostic state within imported FileIDs
6322       // (other than perhaps appending to the main source file, which has no
6323       // parent).
6324       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6325       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6326       for (unsigned I = 0; I != Transitions; ++I) {
6327         unsigned Offset = Record[Idx++];
6328         auto *State =
6329             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6330         F.StateTransitions.push_back({State, Offset});
6331       }
6332     }
6333 
6334     // Read the final state.
6335     assert(Idx < Record.size() &&
6336            "Invalid data, missing final pragma diagnostic state");
6337     SourceLocation CurStateLoc =
6338         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6339     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6340 
6341     if (!F.isModule()) {
6342       Diag.DiagStatesByLoc.CurDiagState = CurState;
6343       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6344 
6345       // Preserve the property that the imaginary root file describes the
6346       // current state.
6347       FileID NullFile;
6348       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6349       if (T.empty())
6350         T.push_back({CurState, 0});
6351       else
6352         T[0].State = CurState;
6353     }
6354 
6355     // Don't try to read these mappings again.
6356     Record.clear();
6357   }
6358 }
6359 
6360 /// Get the correct cursor and offset for loading a type.
6361 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6362   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6363   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6364   ModuleFile *M = I->second;
6365   return RecordLocation(
6366       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6367              M->DeclsBlockStartOffset);
6368 }
6369 
6370 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6371   switch (code) {
6372 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6373   case TYPE_##CODE_ID: return Type::CLASS_ID;
6374 #include "clang/Serialization/TypeBitCodes.def"
6375   default: return llvm::None;
6376   }
6377 }
6378 
6379 /// Read and return the type with the given index..
6380 ///
6381 /// The index is the type ID, shifted and minus the number of predefs. This
6382 /// routine actually reads the record corresponding to the type at the given
6383 /// location. It is a helper routine for GetType, which deals with reading type
6384 /// IDs.
6385 QualType ASTReader::readTypeRecord(unsigned Index) {
6386   assert(ContextObj && "reading type with no AST context");
6387   ASTContext &Context = *ContextObj;
6388   RecordLocation Loc = TypeCursorForIndex(Index);
6389   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6390 
6391   // Keep track of where we are in the stream, then jump back there
6392   // after reading this type.
6393   SavedStreamPosition SavedPosition(DeclsCursor);
6394 
6395   ReadingKindTracker ReadingKind(Read_Type, *this);
6396 
6397   // Note that we are loading a type record.
6398   Deserializing AType(this);
6399 
6400   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6401     Error(std::move(Err));
6402     return QualType();
6403   }
6404   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6405   if (!RawCode) {
6406     Error(RawCode.takeError());
6407     return QualType();
6408   }
6409 
6410   ASTRecordReader Record(*this, *Loc.F);
6411   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6412   if (!Code) {
6413     Error(Code.takeError());
6414     return QualType();
6415   }
6416   if (Code.get() == TYPE_EXT_QUAL) {
6417     QualType baseType = Record.readQualType();
6418     Qualifiers quals = Record.readQualifiers();
6419     return Context.getQualifiedType(baseType, quals);
6420   }
6421 
6422   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6423   if (!maybeClass) {
6424     Error("Unexpected code for type");
6425     return QualType();
6426   }
6427 
6428   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6429   return TypeReader.read(*maybeClass);
6430 }
6431 
6432 namespace clang {
6433 
6434 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6435   ASTRecordReader &Reader;
6436 
6437   SourceLocation readSourceLocation() {
6438     return Reader.readSourceLocation();
6439   }
6440 
6441   TypeSourceInfo *GetTypeSourceInfo() {
6442     return Reader.readTypeSourceInfo();
6443   }
6444 
6445   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6446     return Reader.readNestedNameSpecifierLoc();
6447   }
6448 
6449   Attr *ReadAttr() {
6450     return Reader.readAttr();
6451   }
6452 
6453 public:
6454   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6455 
6456   // We want compile-time assurance that we've enumerated all of
6457   // these, so unfortunately we have to declare them first, then
6458   // define them out-of-line.
6459 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6460 #define TYPELOC(CLASS, PARENT) \
6461   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6462 #include "clang/AST/TypeLocNodes.def"
6463 
6464   void VisitFunctionTypeLoc(FunctionTypeLoc);
6465   void VisitArrayTypeLoc(ArrayTypeLoc);
6466 };
6467 
6468 } // namespace clang
6469 
6470 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6471   // nothing to do
6472 }
6473 
6474 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6475   TL.setBuiltinLoc(readSourceLocation());
6476   if (TL.needsExtraLocalData()) {
6477     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6478     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Reader.readInt()));
6479     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Reader.readInt()));
6480     TL.setModeAttr(Reader.readInt());
6481   }
6482 }
6483 
6484 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6485   TL.setNameLoc(readSourceLocation());
6486 }
6487 
6488 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6489   TL.setStarLoc(readSourceLocation());
6490 }
6491 
6492 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6493   // nothing to do
6494 }
6495 
6496 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6497   // nothing to do
6498 }
6499 
6500 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6501   TL.setExpansionLoc(readSourceLocation());
6502 }
6503 
6504 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6505   TL.setCaretLoc(readSourceLocation());
6506 }
6507 
6508 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6509   TL.setAmpLoc(readSourceLocation());
6510 }
6511 
6512 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6513   TL.setAmpAmpLoc(readSourceLocation());
6514 }
6515 
6516 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6517   TL.setStarLoc(readSourceLocation());
6518   TL.setClassTInfo(GetTypeSourceInfo());
6519 }
6520 
6521 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6522   TL.setLBracketLoc(readSourceLocation());
6523   TL.setRBracketLoc(readSourceLocation());
6524   if (Reader.readBool())
6525     TL.setSizeExpr(Reader.readExpr());
6526   else
6527     TL.setSizeExpr(nullptr);
6528 }
6529 
6530 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6531   VisitArrayTypeLoc(TL);
6532 }
6533 
6534 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6535   VisitArrayTypeLoc(TL);
6536 }
6537 
6538 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6539   VisitArrayTypeLoc(TL);
6540 }
6541 
6542 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6543                                             DependentSizedArrayTypeLoc TL) {
6544   VisitArrayTypeLoc(TL);
6545 }
6546 
6547 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6548     DependentAddressSpaceTypeLoc TL) {
6549 
6550     TL.setAttrNameLoc(readSourceLocation());
6551     TL.setAttrOperandParensRange(Reader.readSourceRange());
6552     TL.setAttrExprOperand(Reader.readExpr());
6553 }
6554 
6555 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6556                                         DependentSizedExtVectorTypeLoc TL) {
6557   TL.setNameLoc(readSourceLocation());
6558 }
6559 
6560 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6561   TL.setNameLoc(readSourceLocation());
6562 }
6563 
6564 void TypeLocReader::VisitDependentVectorTypeLoc(
6565     DependentVectorTypeLoc TL) {
6566   TL.setNameLoc(readSourceLocation());
6567 }
6568 
6569 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6570   TL.setNameLoc(readSourceLocation());
6571 }
6572 
6573 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6574   TL.setAttrNameLoc(readSourceLocation());
6575   TL.setAttrOperandParensRange(Reader.readSourceRange());
6576   TL.setAttrRowOperand(Reader.readExpr());
6577   TL.setAttrColumnOperand(Reader.readExpr());
6578 }
6579 
6580 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6581     DependentSizedMatrixTypeLoc TL) {
6582   TL.setAttrNameLoc(readSourceLocation());
6583   TL.setAttrOperandParensRange(Reader.readSourceRange());
6584   TL.setAttrRowOperand(Reader.readExpr());
6585   TL.setAttrColumnOperand(Reader.readExpr());
6586 }
6587 
6588 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6589   TL.setLocalRangeBegin(readSourceLocation());
6590   TL.setLParenLoc(readSourceLocation());
6591   TL.setRParenLoc(readSourceLocation());
6592   TL.setExceptionSpecRange(Reader.readSourceRange());
6593   TL.setLocalRangeEnd(readSourceLocation());
6594   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6595     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6596   }
6597 }
6598 
6599 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6600   VisitFunctionTypeLoc(TL);
6601 }
6602 
6603 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6604   VisitFunctionTypeLoc(TL);
6605 }
6606 
6607 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6608   TL.setNameLoc(readSourceLocation());
6609 }
6610 
6611 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6612   TL.setNameLoc(readSourceLocation());
6613 }
6614 
6615 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6616   TL.setTypeofLoc(readSourceLocation());
6617   TL.setLParenLoc(readSourceLocation());
6618   TL.setRParenLoc(readSourceLocation());
6619 }
6620 
6621 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6622   TL.setTypeofLoc(readSourceLocation());
6623   TL.setLParenLoc(readSourceLocation());
6624   TL.setRParenLoc(readSourceLocation());
6625   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6626 }
6627 
6628 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6629   TL.setNameLoc(readSourceLocation());
6630 }
6631 
6632 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6633   TL.setKWLoc(readSourceLocation());
6634   TL.setLParenLoc(readSourceLocation());
6635   TL.setRParenLoc(readSourceLocation());
6636   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6637 }
6638 
6639 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6640   TL.setNameLoc(readSourceLocation());
6641   if (Reader.readBool()) {
6642     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6643     TL.setTemplateKWLoc(readSourceLocation());
6644     TL.setConceptNameLoc(readSourceLocation());
6645     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6646     TL.setLAngleLoc(readSourceLocation());
6647     TL.setRAngleLoc(readSourceLocation());
6648     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6649       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6650                               TL.getTypePtr()->getArg(i).getKind()));
6651   }
6652 }
6653 
6654 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6655     DeducedTemplateSpecializationTypeLoc TL) {
6656   TL.setTemplateNameLoc(readSourceLocation());
6657 }
6658 
6659 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6660   TL.setNameLoc(readSourceLocation());
6661 }
6662 
6663 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6664   TL.setNameLoc(readSourceLocation());
6665 }
6666 
6667 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6668   TL.setAttr(ReadAttr());
6669 }
6670 
6671 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6672   TL.setNameLoc(readSourceLocation());
6673 }
6674 
6675 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6676                                             SubstTemplateTypeParmTypeLoc TL) {
6677   TL.setNameLoc(readSourceLocation());
6678 }
6679 
6680 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6681                                           SubstTemplateTypeParmPackTypeLoc TL) {
6682   TL.setNameLoc(readSourceLocation());
6683 }
6684 
6685 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6686                                            TemplateSpecializationTypeLoc TL) {
6687   TL.setTemplateKeywordLoc(readSourceLocation());
6688   TL.setTemplateNameLoc(readSourceLocation());
6689   TL.setLAngleLoc(readSourceLocation());
6690   TL.setRAngleLoc(readSourceLocation());
6691   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6692     TL.setArgLocInfo(
6693         i,
6694         Reader.readTemplateArgumentLocInfo(
6695           TL.getTypePtr()->getArg(i).getKind()));
6696 }
6697 
6698 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6699   TL.setLParenLoc(readSourceLocation());
6700   TL.setRParenLoc(readSourceLocation());
6701 }
6702 
6703 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6704   TL.setElaboratedKeywordLoc(readSourceLocation());
6705   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6706 }
6707 
6708 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6709   TL.setNameLoc(readSourceLocation());
6710 }
6711 
6712 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6713   TL.setElaboratedKeywordLoc(readSourceLocation());
6714   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6715   TL.setNameLoc(readSourceLocation());
6716 }
6717 
6718 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6719        DependentTemplateSpecializationTypeLoc TL) {
6720   TL.setElaboratedKeywordLoc(readSourceLocation());
6721   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6722   TL.setTemplateKeywordLoc(readSourceLocation());
6723   TL.setTemplateNameLoc(readSourceLocation());
6724   TL.setLAngleLoc(readSourceLocation());
6725   TL.setRAngleLoc(readSourceLocation());
6726   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6727     TL.setArgLocInfo(
6728         I,
6729         Reader.readTemplateArgumentLocInfo(
6730             TL.getTypePtr()->getArg(I).getKind()));
6731 }
6732 
6733 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6734   TL.setEllipsisLoc(readSourceLocation());
6735 }
6736 
6737 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6738   TL.setNameLoc(readSourceLocation());
6739 }
6740 
6741 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6742   if (TL.getNumProtocols()) {
6743     TL.setProtocolLAngleLoc(readSourceLocation());
6744     TL.setProtocolRAngleLoc(readSourceLocation());
6745   }
6746   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6747     TL.setProtocolLoc(i, readSourceLocation());
6748 }
6749 
6750 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6751   TL.setHasBaseTypeAsWritten(Reader.readBool());
6752   TL.setTypeArgsLAngleLoc(readSourceLocation());
6753   TL.setTypeArgsRAngleLoc(readSourceLocation());
6754   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6755     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6756   TL.setProtocolLAngleLoc(readSourceLocation());
6757   TL.setProtocolRAngleLoc(readSourceLocation());
6758   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6759     TL.setProtocolLoc(i, readSourceLocation());
6760 }
6761 
6762 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6763   TL.setStarLoc(readSourceLocation());
6764 }
6765 
6766 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6767   TL.setKWLoc(readSourceLocation());
6768   TL.setLParenLoc(readSourceLocation());
6769   TL.setRParenLoc(readSourceLocation());
6770 }
6771 
6772 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6773   TL.setKWLoc(readSourceLocation());
6774 }
6775 
6776 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6777   TL.setNameLoc(readSourceLocation());
6778 }
6779 void TypeLocReader::VisitDependentExtIntTypeLoc(
6780     clang::DependentExtIntTypeLoc TL) {
6781   TL.setNameLoc(readSourceLocation());
6782 }
6783 
6784 
6785 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6786   TypeLocReader TLR(*this);
6787   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6788     TLR.Visit(TL);
6789 }
6790 
6791 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6792   QualType InfoTy = readType();
6793   if (InfoTy.isNull())
6794     return nullptr;
6795 
6796   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6797   readTypeLoc(TInfo->getTypeLoc());
6798   return TInfo;
6799 }
6800 
6801 QualType ASTReader::GetType(TypeID ID) {
6802   assert(ContextObj && "reading type with no AST context");
6803   ASTContext &Context = *ContextObj;
6804 
6805   unsigned FastQuals = ID & Qualifiers::FastMask;
6806   unsigned Index = ID >> Qualifiers::FastWidth;
6807 
6808   if (Index < NUM_PREDEF_TYPE_IDS) {
6809     QualType T;
6810     switch ((PredefinedTypeIDs)Index) {
6811     case PREDEF_TYPE_NULL_ID:
6812       return QualType();
6813     case PREDEF_TYPE_VOID_ID:
6814       T = Context.VoidTy;
6815       break;
6816     case PREDEF_TYPE_BOOL_ID:
6817       T = Context.BoolTy;
6818       break;
6819     case PREDEF_TYPE_CHAR_U_ID:
6820     case PREDEF_TYPE_CHAR_S_ID:
6821       // FIXME: Check that the signedness of CharTy is correct!
6822       T = Context.CharTy;
6823       break;
6824     case PREDEF_TYPE_UCHAR_ID:
6825       T = Context.UnsignedCharTy;
6826       break;
6827     case PREDEF_TYPE_USHORT_ID:
6828       T = Context.UnsignedShortTy;
6829       break;
6830     case PREDEF_TYPE_UINT_ID:
6831       T = Context.UnsignedIntTy;
6832       break;
6833     case PREDEF_TYPE_ULONG_ID:
6834       T = Context.UnsignedLongTy;
6835       break;
6836     case PREDEF_TYPE_ULONGLONG_ID:
6837       T = Context.UnsignedLongLongTy;
6838       break;
6839     case PREDEF_TYPE_UINT128_ID:
6840       T = Context.UnsignedInt128Ty;
6841       break;
6842     case PREDEF_TYPE_SCHAR_ID:
6843       T = Context.SignedCharTy;
6844       break;
6845     case PREDEF_TYPE_WCHAR_ID:
6846       T = Context.WCharTy;
6847       break;
6848     case PREDEF_TYPE_SHORT_ID:
6849       T = Context.ShortTy;
6850       break;
6851     case PREDEF_TYPE_INT_ID:
6852       T = Context.IntTy;
6853       break;
6854     case PREDEF_TYPE_LONG_ID:
6855       T = Context.LongTy;
6856       break;
6857     case PREDEF_TYPE_LONGLONG_ID:
6858       T = Context.LongLongTy;
6859       break;
6860     case PREDEF_TYPE_INT128_ID:
6861       T = Context.Int128Ty;
6862       break;
6863     case PREDEF_TYPE_BFLOAT16_ID:
6864       T = Context.BFloat16Ty;
6865       break;
6866     case PREDEF_TYPE_HALF_ID:
6867       T = Context.HalfTy;
6868       break;
6869     case PREDEF_TYPE_FLOAT_ID:
6870       T = Context.FloatTy;
6871       break;
6872     case PREDEF_TYPE_DOUBLE_ID:
6873       T = Context.DoubleTy;
6874       break;
6875     case PREDEF_TYPE_LONGDOUBLE_ID:
6876       T = Context.LongDoubleTy;
6877       break;
6878     case PREDEF_TYPE_SHORT_ACCUM_ID:
6879       T = Context.ShortAccumTy;
6880       break;
6881     case PREDEF_TYPE_ACCUM_ID:
6882       T = Context.AccumTy;
6883       break;
6884     case PREDEF_TYPE_LONG_ACCUM_ID:
6885       T = Context.LongAccumTy;
6886       break;
6887     case PREDEF_TYPE_USHORT_ACCUM_ID:
6888       T = Context.UnsignedShortAccumTy;
6889       break;
6890     case PREDEF_TYPE_UACCUM_ID:
6891       T = Context.UnsignedAccumTy;
6892       break;
6893     case PREDEF_TYPE_ULONG_ACCUM_ID:
6894       T = Context.UnsignedLongAccumTy;
6895       break;
6896     case PREDEF_TYPE_SHORT_FRACT_ID:
6897       T = Context.ShortFractTy;
6898       break;
6899     case PREDEF_TYPE_FRACT_ID:
6900       T = Context.FractTy;
6901       break;
6902     case PREDEF_TYPE_LONG_FRACT_ID:
6903       T = Context.LongFractTy;
6904       break;
6905     case PREDEF_TYPE_USHORT_FRACT_ID:
6906       T = Context.UnsignedShortFractTy;
6907       break;
6908     case PREDEF_TYPE_UFRACT_ID:
6909       T = Context.UnsignedFractTy;
6910       break;
6911     case PREDEF_TYPE_ULONG_FRACT_ID:
6912       T = Context.UnsignedLongFractTy;
6913       break;
6914     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6915       T = Context.SatShortAccumTy;
6916       break;
6917     case PREDEF_TYPE_SAT_ACCUM_ID:
6918       T = Context.SatAccumTy;
6919       break;
6920     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6921       T = Context.SatLongAccumTy;
6922       break;
6923     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6924       T = Context.SatUnsignedShortAccumTy;
6925       break;
6926     case PREDEF_TYPE_SAT_UACCUM_ID:
6927       T = Context.SatUnsignedAccumTy;
6928       break;
6929     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6930       T = Context.SatUnsignedLongAccumTy;
6931       break;
6932     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6933       T = Context.SatShortFractTy;
6934       break;
6935     case PREDEF_TYPE_SAT_FRACT_ID:
6936       T = Context.SatFractTy;
6937       break;
6938     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6939       T = Context.SatLongFractTy;
6940       break;
6941     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6942       T = Context.SatUnsignedShortFractTy;
6943       break;
6944     case PREDEF_TYPE_SAT_UFRACT_ID:
6945       T = Context.SatUnsignedFractTy;
6946       break;
6947     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6948       T = Context.SatUnsignedLongFractTy;
6949       break;
6950     case PREDEF_TYPE_FLOAT16_ID:
6951       T = Context.Float16Ty;
6952       break;
6953     case PREDEF_TYPE_FLOAT128_ID:
6954       T = Context.Float128Ty;
6955       break;
6956     case PREDEF_TYPE_OVERLOAD_ID:
6957       T = Context.OverloadTy;
6958       break;
6959     case PREDEF_TYPE_BOUND_MEMBER:
6960       T = Context.BoundMemberTy;
6961       break;
6962     case PREDEF_TYPE_PSEUDO_OBJECT:
6963       T = Context.PseudoObjectTy;
6964       break;
6965     case PREDEF_TYPE_DEPENDENT_ID:
6966       T = Context.DependentTy;
6967       break;
6968     case PREDEF_TYPE_UNKNOWN_ANY:
6969       T = Context.UnknownAnyTy;
6970       break;
6971     case PREDEF_TYPE_NULLPTR_ID:
6972       T = Context.NullPtrTy;
6973       break;
6974     case PREDEF_TYPE_CHAR8_ID:
6975       T = Context.Char8Ty;
6976       break;
6977     case PREDEF_TYPE_CHAR16_ID:
6978       T = Context.Char16Ty;
6979       break;
6980     case PREDEF_TYPE_CHAR32_ID:
6981       T = Context.Char32Ty;
6982       break;
6983     case PREDEF_TYPE_OBJC_ID:
6984       T = Context.ObjCBuiltinIdTy;
6985       break;
6986     case PREDEF_TYPE_OBJC_CLASS:
6987       T = Context.ObjCBuiltinClassTy;
6988       break;
6989     case PREDEF_TYPE_OBJC_SEL:
6990       T = Context.ObjCBuiltinSelTy;
6991       break;
6992 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6993     case PREDEF_TYPE_##Id##_ID: \
6994       T = Context.SingletonId; \
6995       break;
6996 #include "clang/Basic/OpenCLImageTypes.def"
6997 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
6998     case PREDEF_TYPE_##Id##_ID: \
6999       T = Context.Id##Ty; \
7000       break;
7001 #include "clang/Basic/OpenCLExtensionTypes.def"
7002     case PREDEF_TYPE_SAMPLER_ID:
7003       T = Context.OCLSamplerTy;
7004       break;
7005     case PREDEF_TYPE_EVENT_ID:
7006       T = Context.OCLEventTy;
7007       break;
7008     case PREDEF_TYPE_CLK_EVENT_ID:
7009       T = Context.OCLClkEventTy;
7010       break;
7011     case PREDEF_TYPE_QUEUE_ID:
7012       T = Context.OCLQueueTy;
7013       break;
7014     case PREDEF_TYPE_RESERVE_ID_ID:
7015       T = Context.OCLReserveIDTy;
7016       break;
7017     case PREDEF_TYPE_AUTO_DEDUCT:
7018       T = Context.getAutoDeductType();
7019       break;
7020     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7021       T = Context.getAutoRRefDeductType();
7022       break;
7023     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7024       T = Context.ARCUnbridgedCastTy;
7025       break;
7026     case PREDEF_TYPE_BUILTIN_FN:
7027       T = Context.BuiltinFnTy;
7028       break;
7029     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7030       T = Context.IncompleteMatrixIdxTy;
7031       break;
7032     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7033       T = Context.OMPArraySectionTy;
7034       break;
7035     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7036       T = Context.OMPArraySectionTy;
7037       break;
7038     case PREDEF_TYPE_OMP_ITERATOR:
7039       T = Context.OMPIteratorTy;
7040       break;
7041 #define SVE_TYPE(Name, Id, SingletonId) \
7042     case PREDEF_TYPE_##Id##_ID: \
7043       T = Context.SingletonId; \
7044       break;
7045 #include "clang/Basic/AArch64SVEACLETypes.def"
7046     }
7047 
7048     assert(!T.isNull() && "Unknown predefined type");
7049     return T.withFastQualifiers(FastQuals);
7050   }
7051 
7052   Index -= NUM_PREDEF_TYPE_IDS;
7053   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7054   if (TypesLoaded[Index].isNull()) {
7055     TypesLoaded[Index] = readTypeRecord(Index);
7056     if (TypesLoaded[Index].isNull())
7057       return QualType();
7058 
7059     TypesLoaded[Index]->setFromAST();
7060     if (DeserializationListener)
7061       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7062                                         TypesLoaded[Index]);
7063   }
7064 
7065   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7066 }
7067 
7068 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7069   return GetType(getGlobalTypeID(F, LocalID));
7070 }
7071 
7072 serialization::TypeID
7073 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7074   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7075   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7076 
7077   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7078     return LocalID;
7079 
7080   if (!F.ModuleOffsetMap.empty())
7081     ReadModuleOffsetMap(F);
7082 
7083   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7084     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7085   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7086 
7087   unsigned GlobalIndex = LocalIndex + I->second;
7088   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7089 }
7090 
7091 TemplateArgumentLocInfo
7092 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7093   switch (Kind) {
7094   case TemplateArgument::Expression:
7095     return readExpr();
7096   case TemplateArgument::Type:
7097     return readTypeSourceInfo();
7098   case TemplateArgument::Template: {
7099     NestedNameSpecifierLoc QualifierLoc =
7100       readNestedNameSpecifierLoc();
7101     SourceLocation TemplateNameLoc = readSourceLocation();
7102     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7103                                    SourceLocation());
7104   }
7105   case TemplateArgument::TemplateExpansion: {
7106     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7107     SourceLocation TemplateNameLoc = readSourceLocation();
7108     SourceLocation EllipsisLoc = readSourceLocation();
7109     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7110                                    EllipsisLoc);
7111   }
7112   case TemplateArgument::Null:
7113   case TemplateArgument::Integral:
7114   case TemplateArgument::Declaration:
7115   case TemplateArgument::NullPtr:
7116   case TemplateArgument::Pack:
7117     // FIXME: Is this right?
7118     return TemplateArgumentLocInfo();
7119   }
7120   llvm_unreachable("unexpected template argument loc");
7121 }
7122 
7123 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7124   TemplateArgument Arg = readTemplateArgument();
7125 
7126   if (Arg.getKind() == TemplateArgument::Expression) {
7127     if (readBool()) // bool InfoHasSameExpr.
7128       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7129   }
7130   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7131 }
7132 
7133 const ASTTemplateArgumentListInfo *
7134 ASTRecordReader::readASTTemplateArgumentListInfo() {
7135   SourceLocation LAngleLoc = readSourceLocation();
7136   SourceLocation RAngleLoc = readSourceLocation();
7137   unsigned NumArgsAsWritten = readInt();
7138   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7139   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7140     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7141   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7142 }
7143 
7144 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7145   return GetDecl(ID);
7146 }
7147 
7148 void ASTReader::CompleteRedeclChain(const Decl *D) {
7149   if (NumCurrentElementsDeserializing) {
7150     // We arrange to not care about the complete redeclaration chain while we're
7151     // deserializing. Just remember that the AST has marked this one as complete
7152     // but that it's not actually complete yet, so we know we still need to
7153     // complete it later.
7154     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7155     return;
7156   }
7157 
7158   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7159 
7160   // If this is a named declaration, complete it by looking it up
7161   // within its context.
7162   //
7163   // FIXME: Merging a function definition should merge
7164   // all mergeable entities within it.
7165   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7166       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7167     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7168       if (!getContext().getLangOpts().CPlusPlus &&
7169           isa<TranslationUnitDecl>(DC)) {
7170         // Outside of C++, we don't have a lookup table for the TU, so update
7171         // the identifier instead. (For C++ modules, we don't store decls
7172         // in the serialized identifier table, so we do the lookup in the TU.)
7173         auto *II = Name.getAsIdentifierInfo();
7174         assert(II && "non-identifier name in C?");
7175         if (II->isOutOfDate())
7176           updateOutOfDateIdentifier(*II);
7177       } else
7178         DC->lookup(Name);
7179     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7180       // Find all declarations of this kind from the relevant context.
7181       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7182         auto *DC = cast<DeclContext>(DCDecl);
7183         SmallVector<Decl*, 8> Decls;
7184         FindExternalLexicalDecls(
7185             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7186       }
7187     }
7188   }
7189 
7190   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7191     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7192   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7193     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7194   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7195     if (auto *Template = FD->getPrimaryTemplate())
7196       Template->LoadLazySpecializations();
7197   }
7198 }
7199 
7200 CXXCtorInitializer **
7201 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7202   RecordLocation Loc = getLocalBitOffset(Offset);
7203   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7204   SavedStreamPosition SavedPosition(Cursor);
7205   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7206     Error(std::move(Err));
7207     return nullptr;
7208   }
7209   ReadingKindTracker ReadingKind(Read_Decl, *this);
7210 
7211   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7212   if (!MaybeCode) {
7213     Error(MaybeCode.takeError());
7214     return nullptr;
7215   }
7216   unsigned Code = MaybeCode.get();
7217 
7218   ASTRecordReader Record(*this, *Loc.F);
7219   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7220   if (!MaybeRecCode) {
7221     Error(MaybeRecCode.takeError());
7222     return nullptr;
7223   }
7224   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7225     Error("malformed AST file: missing C++ ctor initializers");
7226     return nullptr;
7227   }
7228 
7229   return Record.readCXXCtorInitializers();
7230 }
7231 
7232 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7233   assert(ContextObj && "reading base specifiers with no AST context");
7234   ASTContext &Context = *ContextObj;
7235 
7236   RecordLocation Loc = getLocalBitOffset(Offset);
7237   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7238   SavedStreamPosition SavedPosition(Cursor);
7239   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7240     Error(std::move(Err));
7241     return nullptr;
7242   }
7243   ReadingKindTracker ReadingKind(Read_Decl, *this);
7244 
7245   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7246   if (!MaybeCode) {
7247     Error(MaybeCode.takeError());
7248     return nullptr;
7249   }
7250   unsigned Code = MaybeCode.get();
7251 
7252   ASTRecordReader Record(*this, *Loc.F);
7253   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7254   if (!MaybeRecCode) {
7255     Error(MaybeCode.takeError());
7256     return nullptr;
7257   }
7258   unsigned RecCode = MaybeRecCode.get();
7259 
7260   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7261     Error("malformed AST file: missing C++ base specifiers");
7262     return nullptr;
7263   }
7264 
7265   unsigned NumBases = Record.readInt();
7266   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7267   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7268   for (unsigned I = 0; I != NumBases; ++I)
7269     Bases[I] = Record.readCXXBaseSpecifier();
7270   return Bases;
7271 }
7272 
7273 serialization::DeclID
7274 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7275   if (LocalID < NUM_PREDEF_DECL_IDS)
7276     return LocalID;
7277 
7278   if (!F.ModuleOffsetMap.empty())
7279     ReadModuleOffsetMap(F);
7280 
7281   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7282     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7283   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7284 
7285   return LocalID + I->second;
7286 }
7287 
7288 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7289                                    ModuleFile &M) const {
7290   // Predefined decls aren't from any module.
7291   if (ID < NUM_PREDEF_DECL_IDS)
7292     return false;
7293 
7294   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7295          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7296 }
7297 
7298 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7299   if (!D->isFromASTFile())
7300     return nullptr;
7301   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7302   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7303   return I->second;
7304 }
7305 
7306 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7307   if (ID < NUM_PREDEF_DECL_IDS)
7308     return SourceLocation();
7309 
7310   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7311 
7312   if (Index > DeclsLoaded.size()) {
7313     Error("declaration ID out-of-range for AST file");
7314     return SourceLocation();
7315   }
7316 
7317   if (Decl *D = DeclsLoaded[Index])
7318     return D->getLocation();
7319 
7320   SourceLocation Loc;
7321   DeclCursorForID(ID, Loc);
7322   return Loc;
7323 }
7324 
7325 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7326   switch (ID) {
7327   case PREDEF_DECL_NULL_ID:
7328     return nullptr;
7329 
7330   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7331     return Context.getTranslationUnitDecl();
7332 
7333   case PREDEF_DECL_OBJC_ID_ID:
7334     return Context.getObjCIdDecl();
7335 
7336   case PREDEF_DECL_OBJC_SEL_ID:
7337     return Context.getObjCSelDecl();
7338 
7339   case PREDEF_DECL_OBJC_CLASS_ID:
7340     return Context.getObjCClassDecl();
7341 
7342   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7343     return Context.getObjCProtocolDecl();
7344 
7345   case PREDEF_DECL_INT_128_ID:
7346     return Context.getInt128Decl();
7347 
7348   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7349     return Context.getUInt128Decl();
7350 
7351   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7352     return Context.getObjCInstanceTypeDecl();
7353 
7354   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7355     return Context.getBuiltinVaListDecl();
7356 
7357   case PREDEF_DECL_VA_LIST_TAG:
7358     return Context.getVaListTagDecl();
7359 
7360   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7361     return Context.getBuiltinMSVaListDecl();
7362 
7363   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7364     return Context.getMSGuidTagDecl();
7365 
7366   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7367     return Context.getExternCContextDecl();
7368 
7369   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7370     return Context.getMakeIntegerSeqDecl();
7371 
7372   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7373     return Context.getCFConstantStringDecl();
7374 
7375   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7376     return Context.getCFConstantStringTagDecl();
7377 
7378   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7379     return Context.getTypePackElementDecl();
7380   }
7381   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7382 }
7383 
7384 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7385   assert(ContextObj && "reading decl with no AST context");
7386   if (ID < NUM_PREDEF_DECL_IDS) {
7387     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7388     if (D) {
7389       // Track that we have merged the declaration with ID \p ID into the
7390       // pre-existing predefined declaration \p D.
7391       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7392       if (Merged.empty())
7393         Merged.push_back(ID);
7394     }
7395     return D;
7396   }
7397 
7398   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7399 
7400   if (Index >= DeclsLoaded.size()) {
7401     assert(0 && "declaration ID out-of-range for AST file");
7402     Error("declaration ID out-of-range for AST file");
7403     return nullptr;
7404   }
7405 
7406   return DeclsLoaded[Index];
7407 }
7408 
7409 Decl *ASTReader::GetDecl(DeclID ID) {
7410   if (ID < NUM_PREDEF_DECL_IDS)
7411     return GetExistingDecl(ID);
7412 
7413   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7414 
7415   if (Index >= DeclsLoaded.size()) {
7416     assert(0 && "declaration ID out-of-range for AST file");
7417     Error("declaration ID out-of-range for AST file");
7418     return nullptr;
7419   }
7420 
7421   if (!DeclsLoaded[Index]) {
7422     ReadDeclRecord(ID);
7423     if (DeserializationListener)
7424       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7425   }
7426 
7427   return DeclsLoaded[Index];
7428 }
7429 
7430 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7431                                                   DeclID GlobalID) {
7432   if (GlobalID < NUM_PREDEF_DECL_IDS)
7433     return GlobalID;
7434 
7435   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7436   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7437   ModuleFile *Owner = I->second;
7438 
7439   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7440     = M.GlobalToLocalDeclIDs.find(Owner);
7441   if (Pos == M.GlobalToLocalDeclIDs.end())
7442     return 0;
7443 
7444   return GlobalID - Owner->BaseDeclID + Pos->second;
7445 }
7446 
7447 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7448                                             const RecordData &Record,
7449                                             unsigned &Idx) {
7450   if (Idx >= Record.size()) {
7451     Error("Corrupted AST file");
7452     return 0;
7453   }
7454 
7455   return getGlobalDeclID(F, Record[Idx++]);
7456 }
7457 
7458 /// Resolve the offset of a statement into a statement.
7459 ///
7460 /// This operation will read a new statement from the external
7461 /// source each time it is called, and is meant to be used via a
7462 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7463 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7464   // Switch case IDs are per Decl.
7465   ClearSwitchCaseIDs();
7466 
7467   // Offset here is a global offset across the entire chain.
7468   RecordLocation Loc = getLocalBitOffset(Offset);
7469   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7470     Error(std::move(Err));
7471     return nullptr;
7472   }
7473   assert(NumCurrentElementsDeserializing == 0 &&
7474          "should not be called while already deserializing");
7475   Deserializing D(this);
7476   return ReadStmtFromStream(*Loc.F);
7477 }
7478 
7479 void ASTReader::FindExternalLexicalDecls(
7480     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7481     SmallVectorImpl<Decl *> &Decls) {
7482   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7483 
7484   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7485     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7486     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7487       auto K = (Decl::Kind)+LexicalDecls[I];
7488       if (!IsKindWeWant(K))
7489         continue;
7490 
7491       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7492 
7493       // Don't add predefined declarations to the lexical context more
7494       // than once.
7495       if (ID < NUM_PREDEF_DECL_IDS) {
7496         if (PredefsVisited[ID])
7497           continue;
7498 
7499         PredefsVisited[ID] = true;
7500       }
7501 
7502       if (Decl *D = GetLocalDecl(*M, ID)) {
7503         assert(D->getKind() == K && "wrong kind for lexical decl");
7504         if (!DC->isDeclInLexicalTraversal(D))
7505           Decls.push_back(D);
7506       }
7507     }
7508   };
7509 
7510   if (isa<TranslationUnitDecl>(DC)) {
7511     for (auto Lexical : TULexicalDecls)
7512       Visit(Lexical.first, Lexical.second);
7513   } else {
7514     auto I = LexicalDecls.find(DC);
7515     if (I != LexicalDecls.end())
7516       Visit(I->second.first, I->second.second);
7517   }
7518 
7519   ++NumLexicalDeclContextsRead;
7520 }
7521 
7522 namespace {
7523 
7524 class DeclIDComp {
7525   ASTReader &Reader;
7526   ModuleFile &Mod;
7527 
7528 public:
7529   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7530 
7531   bool operator()(LocalDeclID L, LocalDeclID R) const {
7532     SourceLocation LHS = getLocation(L);
7533     SourceLocation RHS = getLocation(R);
7534     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7535   }
7536 
7537   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7538     SourceLocation RHS = getLocation(R);
7539     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7540   }
7541 
7542   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7543     SourceLocation LHS = getLocation(L);
7544     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7545   }
7546 
7547   SourceLocation getLocation(LocalDeclID ID) const {
7548     return Reader.getSourceManager().getFileLoc(
7549             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7550   }
7551 };
7552 
7553 } // namespace
7554 
7555 void ASTReader::FindFileRegionDecls(FileID File,
7556                                     unsigned Offset, unsigned Length,
7557                                     SmallVectorImpl<Decl *> &Decls) {
7558   SourceManager &SM = getSourceManager();
7559 
7560   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7561   if (I == FileDeclIDs.end())
7562     return;
7563 
7564   FileDeclsInfo &DInfo = I->second;
7565   if (DInfo.Decls.empty())
7566     return;
7567 
7568   SourceLocation
7569     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7570   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7571 
7572   DeclIDComp DIDComp(*this, *DInfo.Mod);
7573   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7574       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7575   if (BeginIt != DInfo.Decls.begin())
7576     --BeginIt;
7577 
7578   // If we are pointing at a top-level decl inside an objc container, we need
7579   // to backtrack until we find it otherwise we will fail to report that the
7580   // region overlaps with an objc container.
7581   while (BeginIt != DInfo.Decls.begin() &&
7582          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7583              ->isTopLevelDeclInObjCContainer())
7584     --BeginIt;
7585 
7586   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7587       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7588   if (EndIt != DInfo.Decls.end())
7589     ++EndIt;
7590 
7591   for (ArrayRef<serialization::LocalDeclID>::iterator
7592          DIt = BeginIt; DIt != EndIt; ++DIt)
7593     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7594 }
7595 
7596 bool
7597 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7598                                           DeclarationName Name) {
7599   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7600          "DeclContext has no visible decls in storage");
7601   if (!Name)
7602     return false;
7603 
7604   auto It = Lookups.find(DC);
7605   if (It == Lookups.end())
7606     return false;
7607 
7608   Deserializing LookupResults(this);
7609 
7610   // Load the list of declarations.
7611   SmallVector<NamedDecl *, 64> Decls;
7612   for (DeclID ID : It->second.Table.find(Name)) {
7613     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7614     if (ND->getDeclName() == Name)
7615       Decls.push_back(ND);
7616   }
7617 
7618   ++NumVisibleDeclContextsRead;
7619   SetExternalVisibleDeclsForName(DC, Name, Decls);
7620   return !Decls.empty();
7621 }
7622 
7623 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7624   if (!DC->hasExternalVisibleStorage())
7625     return;
7626 
7627   auto It = Lookups.find(DC);
7628   assert(It != Lookups.end() &&
7629          "have external visible storage but no lookup tables");
7630 
7631   DeclsMap Decls;
7632 
7633   for (DeclID ID : It->second.Table.findAll()) {
7634     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7635     Decls[ND->getDeclName()].push_back(ND);
7636   }
7637 
7638   ++NumVisibleDeclContextsRead;
7639 
7640   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7641     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7642   }
7643   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7644 }
7645 
7646 const serialization::reader::DeclContextLookupTable *
7647 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7648   auto I = Lookups.find(Primary);
7649   return I == Lookups.end() ? nullptr : &I->second;
7650 }
7651 
7652 /// Under non-PCH compilation the consumer receives the objc methods
7653 /// before receiving the implementation, and codegen depends on this.
7654 /// We simulate this by deserializing and passing to consumer the methods of the
7655 /// implementation before passing the deserialized implementation decl.
7656 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7657                                        ASTConsumer *Consumer) {
7658   assert(ImplD && Consumer);
7659 
7660   for (auto *I : ImplD->methods())
7661     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7662 
7663   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7664 }
7665 
7666 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7667   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7668     PassObjCImplDeclToConsumer(ImplD, Consumer);
7669   else
7670     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7671 }
7672 
7673 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7674   this->Consumer = Consumer;
7675 
7676   if (Consumer)
7677     PassInterestingDeclsToConsumer();
7678 
7679   if (DeserializationListener)
7680     DeserializationListener->ReaderInitialized(this);
7681 }
7682 
7683 void ASTReader::PrintStats() {
7684   std::fprintf(stderr, "*** AST File Statistics:\n");
7685 
7686   unsigned NumTypesLoaded
7687     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7688                                       QualType());
7689   unsigned NumDeclsLoaded
7690     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7691                                       (Decl *)nullptr);
7692   unsigned NumIdentifiersLoaded
7693     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7694                                             IdentifiersLoaded.end(),
7695                                             (IdentifierInfo *)nullptr);
7696   unsigned NumMacrosLoaded
7697     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7698                                        MacrosLoaded.end(),
7699                                        (MacroInfo *)nullptr);
7700   unsigned NumSelectorsLoaded
7701     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7702                                           SelectorsLoaded.end(),
7703                                           Selector());
7704 
7705   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7706     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7707                  NumSLocEntriesRead, TotalNumSLocEntries,
7708                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7709   if (!TypesLoaded.empty())
7710     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7711                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7712                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7713   if (!DeclsLoaded.empty())
7714     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7715                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7716                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7717   if (!IdentifiersLoaded.empty())
7718     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7719                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7720                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7721   if (!MacrosLoaded.empty())
7722     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7723                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7724                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7725   if (!SelectorsLoaded.empty())
7726     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7727                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7728                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7729   if (TotalNumStatements)
7730     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7731                  NumStatementsRead, TotalNumStatements,
7732                  ((float)NumStatementsRead/TotalNumStatements * 100));
7733   if (TotalNumMacros)
7734     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7735                  NumMacrosRead, TotalNumMacros,
7736                  ((float)NumMacrosRead/TotalNumMacros * 100));
7737   if (TotalLexicalDeclContexts)
7738     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7739                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7740                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7741                   * 100));
7742   if (TotalVisibleDeclContexts)
7743     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7744                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7745                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7746                   * 100));
7747   if (TotalNumMethodPoolEntries)
7748     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7749                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7750                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7751                   * 100));
7752   if (NumMethodPoolLookups)
7753     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7754                  NumMethodPoolHits, NumMethodPoolLookups,
7755                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7756   if (NumMethodPoolTableLookups)
7757     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7758                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7759                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7760                   * 100.0));
7761   if (NumIdentifierLookupHits)
7762     std::fprintf(stderr,
7763                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7764                  NumIdentifierLookupHits, NumIdentifierLookups,
7765                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7766 
7767   if (GlobalIndex) {
7768     std::fprintf(stderr, "\n");
7769     GlobalIndex->printStats();
7770   }
7771 
7772   std::fprintf(stderr, "\n");
7773   dump();
7774   std::fprintf(stderr, "\n");
7775 }
7776 
7777 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7778 LLVM_DUMP_METHOD static void
7779 dumpModuleIDMap(StringRef Name,
7780                 const ContinuousRangeMap<Key, ModuleFile *,
7781                                          InitialCapacity> &Map) {
7782   if (Map.begin() == Map.end())
7783     return;
7784 
7785   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7786 
7787   llvm::errs() << Name << ":\n";
7788   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7789        I != IEnd; ++I) {
7790     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7791       << "\n";
7792   }
7793 }
7794 
7795 LLVM_DUMP_METHOD void ASTReader::dump() {
7796   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7797   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7798   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7799   dumpModuleIDMap("Global type map", GlobalTypeMap);
7800   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7801   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7802   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7803   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7804   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7805   dumpModuleIDMap("Global preprocessed entity map",
7806                   GlobalPreprocessedEntityMap);
7807 
7808   llvm::errs() << "\n*** PCH/Modules Loaded:";
7809   for (ModuleFile &M : ModuleMgr)
7810     M.dump();
7811 }
7812 
7813 /// Return the amount of memory used by memory buffers, breaking down
7814 /// by heap-backed versus mmap'ed memory.
7815 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7816   for (ModuleFile &I : ModuleMgr) {
7817     if (llvm::MemoryBuffer *buf = I.Buffer) {
7818       size_t bytes = buf->getBufferSize();
7819       switch (buf->getBufferKind()) {
7820         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7821           sizes.malloc_bytes += bytes;
7822           break;
7823         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7824           sizes.mmap_bytes += bytes;
7825           break;
7826       }
7827     }
7828   }
7829 }
7830 
7831 void ASTReader::InitializeSema(Sema &S) {
7832   SemaObj = &S;
7833   S.addExternalSource(this);
7834 
7835   // Makes sure any declarations that were deserialized "too early"
7836   // still get added to the identifier's declaration chains.
7837   for (uint64_t ID : PreloadedDeclIDs) {
7838     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7839     pushExternalDeclIntoScope(D, D->getDeclName());
7840   }
7841   PreloadedDeclIDs.clear();
7842 
7843   // FIXME: What happens if these are changed by a module import?
7844   if (!FPPragmaOptions.empty()) {
7845     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7846     SemaObj->CurFPFeatures = FPOptions(FPPragmaOptions[0]);
7847   }
7848 
7849   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7850   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7851   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7852 
7853   UpdateSema();
7854 }
7855 
7856 void ASTReader::UpdateSema() {
7857   assert(SemaObj && "no Sema to update");
7858 
7859   // Load the offsets of the declarations that Sema references.
7860   // They will be lazily deserialized when needed.
7861   if (!SemaDeclRefs.empty()) {
7862     assert(SemaDeclRefs.size() % 3 == 0);
7863     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7864       if (!SemaObj->StdNamespace)
7865         SemaObj->StdNamespace = SemaDeclRefs[I];
7866       if (!SemaObj->StdBadAlloc)
7867         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7868       if (!SemaObj->StdAlignValT)
7869         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7870     }
7871     SemaDeclRefs.clear();
7872   }
7873 
7874   // Update the state of pragmas. Use the same API as if we had encountered the
7875   // pragma in the source.
7876   if(OptimizeOffPragmaLocation.isValid())
7877     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7878   if (PragmaMSStructState != -1)
7879     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7880   if (PointersToMembersPragmaLocation.isValid()) {
7881     SemaObj->ActOnPragmaMSPointersToMembers(
7882         (LangOptions::PragmaMSPointersToMembersKind)
7883             PragmaMSPointersToMembersState,
7884         PointersToMembersPragmaLocation);
7885   }
7886   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7887 
7888   if (PragmaPackCurrentValue) {
7889     // The bottom of the stack might have a default value. It must be adjusted
7890     // to the current value to ensure that the packing state is preserved after
7891     // popping entries that were included/imported from a PCH/module.
7892     bool DropFirst = false;
7893     if (!PragmaPackStack.empty() &&
7894         PragmaPackStack.front().Location.isInvalid()) {
7895       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
7896              "Expected a default alignment value");
7897       SemaObj->PackStack.Stack.emplace_back(
7898           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
7899           SemaObj->PackStack.CurrentPragmaLocation,
7900           PragmaPackStack.front().PushLocation);
7901       DropFirst = true;
7902     }
7903     for (const auto &Entry :
7904          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
7905       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
7906                                             Entry.Location, Entry.PushLocation);
7907     if (PragmaPackCurrentLocation.isInvalid()) {
7908       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
7909              "Expected a default alignment value");
7910       // Keep the current values.
7911     } else {
7912       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
7913       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
7914     }
7915   }
7916   if (FpPragmaCurrentValue) {
7917     // The bottom of the stack might have a default value. It must be adjusted
7918     // to the current value to ensure that fp-pragma state is preserved after
7919     // popping entries that were included/imported from a PCH/module.
7920     bool DropFirst = false;
7921     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7922       assert(FpPragmaStack.front().Value ==
7923                  SemaObj->FpPragmaStack.DefaultValue &&
7924              "Expected a default pragma float_control value");
7925       SemaObj->FpPragmaStack.Stack.emplace_back(
7926           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7927           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7928           FpPragmaStack.front().PushLocation);
7929       DropFirst = true;
7930     }
7931     for (const auto &Entry :
7932          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7933       SemaObj->FpPragmaStack.Stack.emplace_back(
7934           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7935     if (FpPragmaCurrentLocation.isInvalid()) {
7936       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7937              "Expected a default pragma float_control value");
7938       // Keep the current values.
7939     } else {
7940       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7941       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7942     }
7943   }
7944 }
7945 
7946 IdentifierInfo *ASTReader::get(StringRef Name) {
7947   // Note that we are loading an identifier.
7948   Deserializing AnIdentifier(this);
7949 
7950   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7951                                   NumIdentifierLookups,
7952                                   NumIdentifierLookupHits);
7953 
7954   // We don't need to do identifier table lookups in C++ modules (we preload
7955   // all interesting declarations, and don't need to use the scope for name
7956   // lookups). Perform the lookup in PCH files, though, since we don't build
7957   // a complete initial identifier table if we're carrying on from a PCH.
7958   if (PP.getLangOpts().CPlusPlus) {
7959     for (auto F : ModuleMgr.pch_modules())
7960       if (Visitor(*F))
7961         break;
7962   } else {
7963     // If there is a global index, look there first to determine which modules
7964     // provably do not have any results for this identifier.
7965     GlobalModuleIndex::HitSet Hits;
7966     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7967     if (!loadGlobalIndex()) {
7968       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7969         HitsPtr = &Hits;
7970       }
7971     }
7972 
7973     ModuleMgr.visit(Visitor, HitsPtr);
7974   }
7975 
7976   IdentifierInfo *II = Visitor.getIdentifierInfo();
7977   markIdentifierUpToDate(II);
7978   return II;
7979 }
7980 
7981 namespace clang {
7982 
7983   /// An identifier-lookup iterator that enumerates all of the
7984   /// identifiers stored within a set of AST files.
7985   class ASTIdentifierIterator : public IdentifierIterator {
7986     /// The AST reader whose identifiers are being enumerated.
7987     const ASTReader &Reader;
7988 
7989     /// The current index into the chain of AST files stored in
7990     /// the AST reader.
7991     unsigned Index;
7992 
7993     /// The current position within the identifier lookup table
7994     /// of the current AST file.
7995     ASTIdentifierLookupTable::key_iterator Current;
7996 
7997     /// The end position within the identifier lookup table of
7998     /// the current AST file.
7999     ASTIdentifierLookupTable::key_iterator End;
8000 
8001     /// Whether to skip any modules in the ASTReader.
8002     bool SkipModules;
8003 
8004   public:
8005     explicit ASTIdentifierIterator(const ASTReader &Reader,
8006                                    bool SkipModules = false);
8007 
8008     StringRef Next() override;
8009   };
8010 
8011 } // namespace clang
8012 
8013 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8014                                              bool SkipModules)
8015     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8016 }
8017 
8018 StringRef ASTIdentifierIterator::Next() {
8019   while (Current == End) {
8020     // If we have exhausted all of our AST files, we're done.
8021     if (Index == 0)
8022       return StringRef();
8023 
8024     --Index;
8025     ModuleFile &F = Reader.ModuleMgr[Index];
8026     if (SkipModules && F.isModule())
8027       continue;
8028 
8029     ASTIdentifierLookupTable *IdTable =
8030         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8031     Current = IdTable->key_begin();
8032     End = IdTable->key_end();
8033   }
8034 
8035   // We have any identifiers remaining in the current AST file; return
8036   // the next one.
8037   StringRef Result = *Current;
8038   ++Current;
8039   return Result;
8040 }
8041 
8042 namespace {
8043 
8044 /// A utility for appending two IdentifierIterators.
8045 class ChainedIdentifierIterator : public IdentifierIterator {
8046   std::unique_ptr<IdentifierIterator> Current;
8047   std::unique_ptr<IdentifierIterator> Queued;
8048 
8049 public:
8050   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8051                             std::unique_ptr<IdentifierIterator> Second)
8052       : Current(std::move(First)), Queued(std::move(Second)) {}
8053 
8054   StringRef Next() override {
8055     if (!Current)
8056       return StringRef();
8057 
8058     StringRef result = Current->Next();
8059     if (!result.empty())
8060       return result;
8061 
8062     // Try the queued iterator, which may itself be empty.
8063     Current.reset();
8064     std::swap(Current, Queued);
8065     return Next();
8066   }
8067 };
8068 
8069 } // namespace
8070 
8071 IdentifierIterator *ASTReader::getIdentifiers() {
8072   if (!loadGlobalIndex()) {
8073     std::unique_ptr<IdentifierIterator> ReaderIter(
8074         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8075     std::unique_ptr<IdentifierIterator> ModulesIter(
8076         GlobalIndex->createIdentifierIterator());
8077     return new ChainedIdentifierIterator(std::move(ReaderIter),
8078                                          std::move(ModulesIter));
8079   }
8080 
8081   return new ASTIdentifierIterator(*this);
8082 }
8083 
8084 namespace clang {
8085 namespace serialization {
8086 
8087   class ReadMethodPoolVisitor {
8088     ASTReader &Reader;
8089     Selector Sel;
8090     unsigned PriorGeneration;
8091     unsigned InstanceBits = 0;
8092     unsigned FactoryBits = 0;
8093     bool InstanceHasMoreThanOneDecl = false;
8094     bool FactoryHasMoreThanOneDecl = false;
8095     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8096     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8097 
8098   public:
8099     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8100                           unsigned PriorGeneration)
8101         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8102 
8103     bool operator()(ModuleFile &M) {
8104       if (!M.SelectorLookupTable)
8105         return false;
8106 
8107       // If we've already searched this module file, skip it now.
8108       if (M.Generation <= PriorGeneration)
8109         return true;
8110 
8111       ++Reader.NumMethodPoolTableLookups;
8112       ASTSelectorLookupTable *PoolTable
8113         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8114       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8115       if (Pos == PoolTable->end())
8116         return false;
8117 
8118       ++Reader.NumMethodPoolTableHits;
8119       ++Reader.NumSelectorsRead;
8120       // FIXME: Not quite happy with the statistics here. We probably should
8121       // disable this tracking when called via LoadSelector.
8122       // Also, should entries without methods count as misses?
8123       ++Reader.NumMethodPoolEntriesRead;
8124       ASTSelectorLookupTrait::data_type Data = *Pos;
8125       if (Reader.DeserializationListener)
8126         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8127 
8128       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8129       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8130       InstanceBits = Data.InstanceBits;
8131       FactoryBits = Data.FactoryBits;
8132       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8133       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8134       return true;
8135     }
8136 
8137     /// Retrieve the instance methods found by this visitor.
8138     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8139       return InstanceMethods;
8140     }
8141 
8142     /// Retrieve the instance methods found by this visitor.
8143     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8144       return FactoryMethods;
8145     }
8146 
8147     unsigned getInstanceBits() const { return InstanceBits; }
8148     unsigned getFactoryBits() const { return FactoryBits; }
8149 
8150     bool instanceHasMoreThanOneDecl() const {
8151       return InstanceHasMoreThanOneDecl;
8152     }
8153 
8154     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8155   };
8156 
8157 } // namespace serialization
8158 } // namespace clang
8159 
8160 /// Add the given set of methods to the method list.
8161 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8162                              ObjCMethodList &List) {
8163   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8164     S.addMethodToGlobalList(&List, Methods[I]);
8165   }
8166 }
8167 
8168 void ASTReader::ReadMethodPool(Selector Sel) {
8169   // Get the selector generation and update it to the current generation.
8170   unsigned &Generation = SelectorGeneration[Sel];
8171   unsigned PriorGeneration = Generation;
8172   Generation = getGeneration();
8173   SelectorOutOfDate[Sel] = false;
8174 
8175   // Search for methods defined with this selector.
8176   ++NumMethodPoolLookups;
8177   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8178   ModuleMgr.visit(Visitor);
8179 
8180   if (Visitor.getInstanceMethods().empty() &&
8181       Visitor.getFactoryMethods().empty())
8182     return;
8183 
8184   ++NumMethodPoolHits;
8185 
8186   if (!getSema())
8187     return;
8188 
8189   Sema &S = *getSema();
8190   Sema::GlobalMethodPool::iterator Pos
8191     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8192 
8193   Pos->second.first.setBits(Visitor.getInstanceBits());
8194   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8195   Pos->second.second.setBits(Visitor.getFactoryBits());
8196   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8197 
8198   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8199   // when building a module we keep every method individually and may need to
8200   // update hasMoreThanOneDecl as we add the methods.
8201   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8202   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8203 }
8204 
8205 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8206   if (SelectorOutOfDate[Sel])
8207     ReadMethodPool(Sel);
8208 }
8209 
8210 void ASTReader::ReadKnownNamespaces(
8211                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8212   Namespaces.clear();
8213 
8214   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8215     if (NamespaceDecl *Namespace
8216                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8217       Namespaces.push_back(Namespace);
8218   }
8219 }
8220 
8221 void ASTReader::ReadUndefinedButUsed(
8222     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8223   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8224     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8225     SourceLocation Loc =
8226         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8227     Undefined.insert(std::make_pair(D, Loc));
8228   }
8229 }
8230 
8231 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8232     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8233                                                      Exprs) {
8234   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8235     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8236     uint64_t Count = DelayedDeleteExprs[Idx++];
8237     for (uint64_t C = 0; C < Count; ++C) {
8238       SourceLocation DeleteLoc =
8239           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8240       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8241       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8242     }
8243   }
8244 }
8245 
8246 void ASTReader::ReadTentativeDefinitions(
8247                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8248   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8249     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8250     if (Var)
8251       TentativeDefs.push_back(Var);
8252   }
8253   TentativeDefinitions.clear();
8254 }
8255 
8256 void ASTReader::ReadUnusedFileScopedDecls(
8257                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8258   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8259     DeclaratorDecl *D
8260       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8261     if (D)
8262       Decls.push_back(D);
8263   }
8264   UnusedFileScopedDecls.clear();
8265 }
8266 
8267 void ASTReader::ReadDelegatingConstructors(
8268                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8269   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8270     CXXConstructorDecl *D
8271       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8272     if (D)
8273       Decls.push_back(D);
8274   }
8275   DelegatingCtorDecls.clear();
8276 }
8277 
8278 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8279   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8280     TypedefNameDecl *D
8281       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8282     if (D)
8283       Decls.push_back(D);
8284   }
8285   ExtVectorDecls.clear();
8286 }
8287 
8288 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8289     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8290   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8291        ++I) {
8292     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8293         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8294     if (D)
8295       Decls.insert(D);
8296   }
8297   UnusedLocalTypedefNameCandidates.clear();
8298 }
8299 
8300 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8301     llvm::SmallVector<Decl *, 4> &Decls) {
8302   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8303        ++I) {
8304     auto *D = dyn_cast_or_null<Decl>(
8305         GetDecl(DeclsToCheckForDeferredDiags[I]));
8306     if (D)
8307       Decls.push_back(D);
8308   }
8309   DeclsToCheckForDeferredDiags.clear();
8310 }
8311 
8312 
8313 void ASTReader::ReadReferencedSelectors(
8314        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8315   if (ReferencedSelectorsData.empty())
8316     return;
8317 
8318   // If there are @selector references added them to its pool. This is for
8319   // implementation of -Wselector.
8320   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8321   unsigned I = 0;
8322   while (I < DataSize) {
8323     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8324     SourceLocation SelLoc
8325       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8326     Sels.push_back(std::make_pair(Sel, SelLoc));
8327   }
8328   ReferencedSelectorsData.clear();
8329 }
8330 
8331 void ASTReader::ReadWeakUndeclaredIdentifiers(
8332        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8333   if (WeakUndeclaredIdentifiers.empty())
8334     return;
8335 
8336   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8337     IdentifierInfo *WeakId
8338       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8339     IdentifierInfo *AliasId
8340       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8341     SourceLocation Loc
8342       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8343     bool Used = WeakUndeclaredIdentifiers[I++];
8344     WeakInfo WI(AliasId, Loc);
8345     WI.setUsed(Used);
8346     WeakIDs.push_back(std::make_pair(WeakId, WI));
8347   }
8348   WeakUndeclaredIdentifiers.clear();
8349 }
8350 
8351 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8352   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8353     ExternalVTableUse VT;
8354     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8355     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8356     VT.DefinitionRequired = VTableUses[Idx++];
8357     VTables.push_back(VT);
8358   }
8359 
8360   VTableUses.clear();
8361 }
8362 
8363 void ASTReader::ReadPendingInstantiations(
8364        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8365   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8366     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8367     SourceLocation Loc
8368       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8369 
8370     Pending.push_back(std::make_pair(D, Loc));
8371   }
8372   PendingInstantiations.clear();
8373 }
8374 
8375 void ASTReader::ReadLateParsedTemplates(
8376     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8377         &LPTMap) {
8378   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8379        /* In loop */) {
8380     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8381 
8382     auto LT = std::make_unique<LateParsedTemplate>();
8383     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8384 
8385     ModuleFile *F = getOwningModuleFile(LT->D);
8386     assert(F && "No module");
8387 
8388     unsigned TokN = LateParsedTemplates[Idx++];
8389     LT->Toks.reserve(TokN);
8390     for (unsigned T = 0; T < TokN; ++T)
8391       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8392 
8393     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8394   }
8395 
8396   LateParsedTemplates.clear();
8397 }
8398 
8399 void ASTReader::LoadSelector(Selector Sel) {
8400   // It would be complicated to avoid reading the methods anyway. So don't.
8401   ReadMethodPool(Sel);
8402 }
8403 
8404 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8405   assert(ID && "Non-zero identifier ID required");
8406   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8407   IdentifiersLoaded[ID - 1] = II;
8408   if (DeserializationListener)
8409     DeserializationListener->IdentifierRead(ID, II);
8410 }
8411 
8412 /// Set the globally-visible declarations associated with the given
8413 /// identifier.
8414 ///
8415 /// If the AST reader is currently in a state where the given declaration IDs
8416 /// cannot safely be resolved, they are queued until it is safe to resolve
8417 /// them.
8418 ///
8419 /// \param II an IdentifierInfo that refers to one or more globally-visible
8420 /// declarations.
8421 ///
8422 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8423 /// visible at global scope.
8424 ///
8425 /// \param Decls if non-null, this vector will be populated with the set of
8426 /// deserialized declarations. These declarations will not be pushed into
8427 /// scope.
8428 void
8429 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8430                               const SmallVectorImpl<uint32_t> &DeclIDs,
8431                                    SmallVectorImpl<Decl *> *Decls) {
8432   if (NumCurrentElementsDeserializing && !Decls) {
8433     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8434     return;
8435   }
8436 
8437   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8438     if (!SemaObj) {
8439       // Queue this declaration so that it will be added to the
8440       // translation unit scope and identifier's declaration chain
8441       // once a Sema object is known.
8442       PreloadedDeclIDs.push_back(DeclIDs[I]);
8443       continue;
8444     }
8445 
8446     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8447 
8448     // If we're simply supposed to record the declarations, do so now.
8449     if (Decls) {
8450       Decls->push_back(D);
8451       continue;
8452     }
8453 
8454     // Introduce this declaration into the translation-unit scope
8455     // and add it to the declaration chain for this identifier, so
8456     // that (unqualified) name lookup will find it.
8457     pushExternalDeclIntoScope(D, II);
8458   }
8459 }
8460 
8461 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8462   if (ID == 0)
8463     return nullptr;
8464 
8465   if (IdentifiersLoaded.empty()) {
8466     Error("no identifier table in AST file");
8467     return nullptr;
8468   }
8469 
8470   ID -= 1;
8471   if (!IdentifiersLoaded[ID]) {
8472     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8473     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8474     ModuleFile *M = I->second;
8475     unsigned Index = ID - M->BaseIdentifierID;
8476     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8477 
8478     // All of the strings in the AST file are preceded by a 16-bit length.
8479     // Extract that 16-bit length to avoid having to execute strlen().
8480     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8481     //  unsigned integers.  This is important to avoid integer overflow when
8482     //  we cast them to 'unsigned'.
8483     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8484     unsigned StrLen = (((unsigned) StrLenPtr[0])
8485                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8486     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8487     IdentifiersLoaded[ID] = &II;
8488     markIdentifierFromAST(*this,  II);
8489     if (DeserializationListener)
8490       DeserializationListener->IdentifierRead(ID + 1, &II);
8491   }
8492 
8493   return IdentifiersLoaded[ID];
8494 }
8495 
8496 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8497   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8498 }
8499 
8500 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8501   if (LocalID < NUM_PREDEF_IDENT_IDS)
8502     return LocalID;
8503 
8504   if (!M.ModuleOffsetMap.empty())
8505     ReadModuleOffsetMap(M);
8506 
8507   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8508     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8509   assert(I != M.IdentifierRemap.end()
8510          && "Invalid index into identifier index remap");
8511 
8512   return LocalID + I->second;
8513 }
8514 
8515 MacroInfo *ASTReader::getMacro(MacroID ID) {
8516   if (ID == 0)
8517     return nullptr;
8518 
8519   if (MacrosLoaded.empty()) {
8520     Error("no macro table in AST file");
8521     return nullptr;
8522   }
8523 
8524   ID -= NUM_PREDEF_MACRO_IDS;
8525   if (!MacrosLoaded[ID]) {
8526     GlobalMacroMapType::iterator I
8527       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8528     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8529     ModuleFile *M = I->second;
8530     unsigned Index = ID - M->BaseMacroID;
8531     MacrosLoaded[ID] =
8532         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8533 
8534     if (DeserializationListener)
8535       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8536                                          MacrosLoaded[ID]);
8537   }
8538 
8539   return MacrosLoaded[ID];
8540 }
8541 
8542 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8543   if (LocalID < NUM_PREDEF_MACRO_IDS)
8544     return LocalID;
8545 
8546   if (!M.ModuleOffsetMap.empty())
8547     ReadModuleOffsetMap(M);
8548 
8549   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8550     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8551   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8552 
8553   return LocalID + I->second;
8554 }
8555 
8556 serialization::SubmoduleID
8557 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8558   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8559     return LocalID;
8560 
8561   if (!M.ModuleOffsetMap.empty())
8562     ReadModuleOffsetMap(M);
8563 
8564   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8565     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8566   assert(I != M.SubmoduleRemap.end()
8567          && "Invalid index into submodule index remap");
8568 
8569   return LocalID + I->second;
8570 }
8571 
8572 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8573   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8574     assert(GlobalID == 0 && "Unhandled global submodule ID");
8575     return nullptr;
8576   }
8577 
8578   if (GlobalID > SubmodulesLoaded.size()) {
8579     Error("submodule ID out of range in AST file");
8580     return nullptr;
8581   }
8582 
8583   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8584 }
8585 
8586 Module *ASTReader::getModule(unsigned ID) {
8587   return getSubmodule(ID);
8588 }
8589 
8590 bool ASTReader::DeclIsFromPCHWithObjectFile(const Decl *D) {
8591   ModuleFile *MF = getOwningModuleFile(D);
8592   return MF && MF->PCHHasObjectFile;
8593 }
8594 
8595 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8596   if (ID & 1) {
8597     // It's a module, look it up by submodule ID.
8598     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8599     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8600   } else {
8601     // It's a prefix (preamble, PCH, ...). Look it up by index.
8602     unsigned IndexFromEnd = ID >> 1;
8603     assert(IndexFromEnd && "got reference to unknown module file");
8604     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8605   }
8606 }
8607 
8608 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8609   if (!F)
8610     return 1;
8611 
8612   // For a file representing a module, use the submodule ID of the top-level
8613   // module as the file ID. For any other kind of file, the number of such
8614   // files loaded beforehand will be the same on reload.
8615   // FIXME: Is this true even if we have an explicit module file and a PCH?
8616   if (F->isModule())
8617     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8618 
8619   auto PCHModules = getModuleManager().pch_modules();
8620   auto I = llvm::find(PCHModules, F);
8621   assert(I != PCHModules.end() && "emitting reference to unknown file");
8622   return (I - PCHModules.end()) << 1;
8623 }
8624 
8625 llvm::Optional<ASTSourceDescriptor>
8626 ASTReader::getSourceDescriptor(unsigned ID) {
8627   if (Module *M = getSubmodule(ID))
8628     return ASTSourceDescriptor(*M);
8629 
8630   // If there is only a single PCH, return it instead.
8631   // Chained PCH are not supported.
8632   const auto &PCHChain = ModuleMgr.pch_modules();
8633   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8634     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8635     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8636     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8637     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8638                                MF.Signature);
8639   }
8640   return None;
8641 }
8642 
8643 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8644   auto I = DefinitionSource.find(FD);
8645   if (I == DefinitionSource.end())
8646     return EK_ReplyHazy;
8647   return I->second ? EK_Never : EK_Always;
8648 }
8649 
8650 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8651   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8652 }
8653 
8654 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8655   if (ID == 0)
8656     return Selector();
8657 
8658   if (ID > SelectorsLoaded.size()) {
8659     Error("selector ID out of range in AST file");
8660     return Selector();
8661   }
8662 
8663   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8664     // Load this selector from the selector table.
8665     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8666     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8667     ModuleFile &M = *I->second;
8668     ASTSelectorLookupTrait Trait(*this, M);
8669     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8670     SelectorsLoaded[ID - 1] =
8671       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8672     if (DeserializationListener)
8673       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8674   }
8675 
8676   return SelectorsLoaded[ID - 1];
8677 }
8678 
8679 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8680   return DecodeSelector(ID);
8681 }
8682 
8683 uint32_t ASTReader::GetNumExternalSelectors() {
8684   // ID 0 (the null selector) is considered an external selector.
8685   return getTotalNumSelectors() + 1;
8686 }
8687 
8688 serialization::SelectorID
8689 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8690   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8691     return LocalID;
8692 
8693   if (!M.ModuleOffsetMap.empty())
8694     ReadModuleOffsetMap(M);
8695 
8696   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8697     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8698   assert(I != M.SelectorRemap.end()
8699          && "Invalid index into selector index remap");
8700 
8701   return LocalID + I->second;
8702 }
8703 
8704 DeclarationNameLoc
8705 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8706   DeclarationNameLoc DNLoc;
8707   switch (Name.getNameKind()) {
8708   case DeclarationName::CXXConstructorName:
8709   case DeclarationName::CXXDestructorName:
8710   case DeclarationName::CXXConversionFunctionName:
8711     DNLoc.NamedType.TInfo = readTypeSourceInfo();
8712     break;
8713 
8714   case DeclarationName::CXXOperatorName:
8715     DNLoc.CXXOperatorName.BeginOpNameLoc
8716       = readSourceLocation().getRawEncoding();
8717     DNLoc.CXXOperatorName.EndOpNameLoc
8718       = readSourceLocation().getRawEncoding();
8719     break;
8720 
8721   case DeclarationName::CXXLiteralOperatorName:
8722     DNLoc.CXXLiteralOperatorName.OpNameLoc
8723       = readSourceLocation().getRawEncoding();
8724     break;
8725 
8726   case DeclarationName::Identifier:
8727   case DeclarationName::ObjCZeroArgSelector:
8728   case DeclarationName::ObjCOneArgSelector:
8729   case DeclarationName::ObjCMultiArgSelector:
8730   case DeclarationName::CXXUsingDirective:
8731   case DeclarationName::CXXDeductionGuideName:
8732     break;
8733   }
8734   return DNLoc;
8735 }
8736 
8737 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8738   DeclarationNameInfo NameInfo;
8739   NameInfo.setName(readDeclarationName());
8740   NameInfo.setLoc(readSourceLocation());
8741   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8742   return NameInfo;
8743 }
8744 
8745 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8746   Info.QualifierLoc = readNestedNameSpecifierLoc();
8747   unsigned NumTPLists = readInt();
8748   Info.NumTemplParamLists = NumTPLists;
8749   if (NumTPLists) {
8750     Info.TemplParamLists =
8751         new (getContext()) TemplateParameterList *[NumTPLists];
8752     for (unsigned i = 0; i != NumTPLists; ++i)
8753       Info.TemplParamLists[i] = readTemplateParameterList();
8754   }
8755 }
8756 
8757 TemplateParameterList *
8758 ASTRecordReader::readTemplateParameterList() {
8759   SourceLocation TemplateLoc = readSourceLocation();
8760   SourceLocation LAngleLoc = readSourceLocation();
8761   SourceLocation RAngleLoc = readSourceLocation();
8762 
8763   unsigned NumParams = readInt();
8764   SmallVector<NamedDecl *, 16> Params;
8765   Params.reserve(NumParams);
8766   while (NumParams--)
8767     Params.push_back(readDeclAs<NamedDecl>());
8768 
8769   bool HasRequiresClause = readBool();
8770   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8771 
8772   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8773       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8774   return TemplateParams;
8775 }
8776 
8777 void ASTRecordReader::readTemplateArgumentList(
8778                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8779                         bool Canonicalize) {
8780   unsigned NumTemplateArgs = readInt();
8781   TemplArgs.reserve(NumTemplateArgs);
8782   while (NumTemplateArgs--)
8783     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8784 }
8785 
8786 /// Read a UnresolvedSet structure.
8787 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8788   unsigned NumDecls = readInt();
8789   Set.reserve(getContext(), NumDecls);
8790   while (NumDecls--) {
8791     DeclID ID = readDeclID();
8792     AccessSpecifier AS = (AccessSpecifier) readInt();
8793     Set.addLazyDecl(getContext(), ID, AS);
8794   }
8795 }
8796 
8797 CXXBaseSpecifier
8798 ASTRecordReader::readCXXBaseSpecifier() {
8799   bool isVirtual = readBool();
8800   bool isBaseOfClass = readBool();
8801   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8802   bool inheritConstructors = readBool();
8803   TypeSourceInfo *TInfo = readTypeSourceInfo();
8804   SourceRange Range = readSourceRange();
8805   SourceLocation EllipsisLoc = readSourceLocation();
8806   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8807                           EllipsisLoc);
8808   Result.setInheritConstructors(inheritConstructors);
8809   return Result;
8810 }
8811 
8812 CXXCtorInitializer **
8813 ASTRecordReader::readCXXCtorInitializers() {
8814   ASTContext &Context = getContext();
8815   unsigned NumInitializers = readInt();
8816   assert(NumInitializers && "wrote ctor initializers but have no inits");
8817   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8818   for (unsigned i = 0; i != NumInitializers; ++i) {
8819     TypeSourceInfo *TInfo = nullptr;
8820     bool IsBaseVirtual = false;
8821     FieldDecl *Member = nullptr;
8822     IndirectFieldDecl *IndirectMember = nullptr;
8823 
8824     CtorInitializerType Type = (CtorInitializerType) readInt();
8825     switch (Type) {
8826     case CTOR_INITIALIZER_BASE:
8827       TInfo = readTypeSourceInfo();
8828       IsBaseVirtual = readBool();
8829       break;
8830 
8831     case CTOR_INITIALIZER_DELEGATING:
8832       TInfo = readTypeSourceInfo();
8833       break;
8834 
8835      case CTOR_INITIALIZER_MEMBER:
8836       Member = readDeclAs<FieldDecl>();
8837       break;
8838 
8839      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8840       IndirectMember = readDeclAs<IndirectFieldDecl>();
8841       break;
8842     }
8843 
8844     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8845     Expr *Init = readExpr();
8846     SourceLocation LParenLoc = readSourceLocation();
8847     SourceLocation RParenLoc = readSourceLocation();
8848 
8849     CXXCtorInitializer *BOMInit;
8850     if (Type == CTOR_INITIALIZER_BASE)
8851       BOMInit = new (Context)
8852           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8853                              RParenLoc, MemberOrEllipsisLoc);
8854     else if (Type == CTOR_INITIALIZER_DELEGATING)
8855       BOMInit = new (Context)
8856           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8857     else if (Member)
8858       BOMInit = new (Context)
8859           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8860                              Init, RParenLoc);
8861     else
8862       BOMInit = new (Context)
8863           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8864                              LParenLoc, Init, RParenLoc);
8865 
8866     if (/*IsWritten*/readBool()) {
8867       unsigned SourceOrder = readInt();
8868       BOMInit->setSourceOrder(SourceOrder);
8869     }
8870 
8871     CtorInitializers[i] = BOMInit;
8872   }
8873 
8874   return CtorInitializers;
8875 }
8876 
8877 NestedNameSpecifierLoc
8878 ASTRecordReader::readNestedNameSpecifierLoc() {
8879   ASTContext &Context = getContext();
8880   unsigned N = readInt();
8881   NestedNameSpecifierLocBuilder Builder;
8882   for (unsigned I = 0; I != N; ++I) {
8883     auto Kind = readNestedNameSpecifierKind();
8884     switch (Kind) {
8885     case NestedNameSpecifier::Identifier: {
8886       IdentifierInfo *II = readIdentifier();
8887       SourceRange Range = readSourceRange();
8888       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8889       break;
8890     }
8891 
8892     case NestedNameSpecifier::Namespace: {
8893       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8894       SourceRange Range = readSourceRange();
8895       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8896       break;
8897     }
8898 
8899     case NestedNameSpecifier::NamespaceAlias: {
8900       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8901       SourceRange Range = readSourceRange();
8902       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8903       break;
8904     }
8905 
8906     case NestedNameSpecifier::TypeSpec:
8907     case NestedNameSpecifier::TypeSpecWithTemplate: {
8908       bool Template = readBool();
8909       TypeSourceInfo *T = readTypeSourceInfo();
8910       if (!T)
8911         return NestedNameSpecifierLoc();
8912       SourceLocation ColonColonLoc = readSourceLocation();
8913 
8914       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8915       Builder.Extend(Context,
8916                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8917                      T->getTypeLoc(), ColonColonLoc);
8918       break;
8919     }
8920 
8921     case NestedNameSpecifier::Global: {
8922       SourceLocation ColonColonLoc = readSourceLocation();
8923       Builder.MakeGlobal(Context, ColonColonLoc);
8924       break;
8925     }
8926 
8927     case NestedNameSpecifier::Super: {
8928       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8929       SourceRange Range = readSourceRange();
8930       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8931       break;
8932     }
8933     }
8934   }
8935 
8936   return Builder.getWithLocInContext(Context);
8937 }
8938 
8939 SourceRange
8940 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8941                            unsigned &Idx) {
8942   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8943   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8944   return SourceRange(beg, end);
8945 }
8946 
8947 static FixedPointSemantics
8948 ReadFixedPointSemantics(const SmallVectorImpl<uint64_t> &Record,
8949                         unsigned &Idx) {
8950   unsigned Width = Record[Idx++];
8951   unsigned Scale = Record[Idx++];
8952   uint64_t Tmp = Record[Idx++];
8953   bool IsSigned = Tmp & 0x1;
8954   bool IsSaturated = Tmp & 0x2;
8955   bool HasUnsignedPadding = Tmp & 0x4;
8956   return FixedPointSemantics(Width, Scale, IsSigned, IsSaturated,
8957                              HasUnsignedPadding);
8958 }
8959 
8960 static const llvm::fltSemantics &
8961 readAPFloatSemantics(ASTRecordReader &reader) {
8962   return llvm::APFloatBase::EnumToSemantics(
8963     static_cast<llvm::APFloatBase::Semantics>(reader.readInt()));
8964 }
8965 
8966 APValue ASTRecordReader::readAPValue() {
8967   unsigned Kind = readInt();
8968   switch ((APValue::ValueKind) Kind) {
8969   case APValue::None:
8970     return APValue();
8971   case APValue::Indeterminate:
8972     return APValue::IndeterminateValue();
8973   case APValue::Int:
8974     return APValue(readAPSInt());
8975   case APValue::Float: {
8976     const llvm::fltSemantics &FloatSema = readAPFloatSemantics(*this);
8977     return APValue(readAPFloat(FloatSema));
8978   }
8979   case APValue::FixedPoint: {
8980     FixedPointSemantics FPSema = ReadFixedPointSemantics(Record, Idx);
8981     return APValue(APFixedPoint(readAPInt(), FPSema));
8982   }
8983   case APValue::ComplexInt: {
8984     llvm::APSInt First = readAPSInt();
8985     return APValue(std::move(First), readAPSInt());
8986   }
8987   case APValue::ComplexFloat: {
8988     const llvm::fltSemantics &FloatSema1 = readAPFloatSemantics(*this);
8989     llvm::APFloat First = readAPFloat(FloatSema1);
8990     const llvm::fltSemantics &FloatSema2 = readAPFloatSemantics(*this);
8991     return APValue(std::move(First), readAPFloat(FloatSema2));
8992   }
8993   case APValue::LValue:
8994   case APValue::Vector:
8995   case APValue::Array:
8996   case APValue::Struct:
8997   case APValue::Union:
8998   case APValue::MemberPointer:
8999   case APValue::AddrLabelDiff:
9000     // TODO : Handle all these APValue::ValueKind.
9001     return APValue();
9002   }
9003   llvm_unreachable("Invalid APValue::ValueKind");
9004 }
9005 
9006 /// Read a floating-point value
9007 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
9008   return llvm::APFloat(Sem, readAPInt());
9009 }
9010 
9011 // Read a string
9012 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
9013   unsigned Len = Record[Idx++];
9014   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9015   Idx += Len;
9016   return Result;
9017 }
9018 
9019 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9020                                 unsigned &Idx) {
9021   std::string Filename = ReadString(Record, Idx);
9022   ResolveImportedPath(F, Filename);
9023   return Filename;
9024 }
9025 
9026 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9027                                 const RecordData &Record, unsigned &Idx) {
9028   std::string Filename = ReadString(Record, Idx);
9029   if (!BaseDirectory.empty())
9030     ResolveImportedPath(Filename, BaseDirectory);
9031   return Filename;
9032 }
9033 
9034 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9035                                          unsigned &Idx) {
9036   unsigned Major = Record[Idx++];
9037   unsigned Minor = Record[Idx++];
9038   unsigned Subminor = Record[Idx++];
9039   if (Minor == 0)
9040     return VersionTuple(Major);
9041   if (Subminor == 0)
9042     return VersionTuple(Major, Minor - 1);
9043   return VersionTuple(Major, Minor - 1, Subminor - 1);
9044 }
9045 
9046 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9047                                           const RecordData &Record,
9048                                           unsigned &Idx) {
9049   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9050   return CXXTemporary::Create(getContext(), Decl);
9051 }
9052 
9053 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9054   return Diag(CurrentImportLoc, DiagID);
9055 }
9056 
9057 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9058   return Diags.Report(Loc, DiagID);
9059 }
9060 
9061 /// Retrieve the identifier table associated with the
9062 /// preprocessor.
9063 IdentifierTable &ASTReader::getIdentifierTable() {
9064   return PP.getIdentifierTable();
9065 }
9066 
9067 /// Record that the given ID maps to the given switch-case
9068 /// statement.
9069 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9070   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9071          "Already have a SwitchCase with this ID");
9072   (*CurrSwitchCaseStmts)[ID] = SC;
9073 }
9074 
9075 /// Retrieve the switch-case statement with the given ID.
9076 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9077   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9078   return (*CurrSwitchCaseStmts)[ID];
9079 }
9080 
9081 void ASTReader::ClearSwitchCaseIDs() {
9082   CurrSwitchCaseStmts->clear();
9083 }
9084 
9085 void ASTReader::ReadComments() {
9086   ASTContext &Context = getContext();
9087   std::vector<RawComment *> Comments;
9088   for (SmallVectorImpl<std::pair<BitstreamCursor,
9089                                  serialization::ModuleFile *>>::iterator
9090        I = CommentsCursors.begin(),
9091        E = CommentsCursors.end();
9092        I != E; ++I) {
9093     Comments.clear();
9094     BitstreamCursor &Cursor = I->first;
9095     serialization::ModuleFile &F = *I->second;
9096     SavedStreamPosition SavedPosition(Cursor);
9097 
9098     RecordData Record;
9099     while (true) {
9100       Expected<llvm::BitstreamEntry> MaybeEntry =
9101           Cursor.advanceSkippingSubblocks(
9102               BitstreamCursor::AF_DontPopBlockAtEnd);
9103       if (!MaybeEntry) {
9104         Error(MaybeEntry.takeError());
9105         return;
9106       }
9107       llvm::BitstreamEntry Entry = MaybeEntry.get();
9108 
9109       switch (Entry.Kind) {
9110       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9111       case llvm::BitstreamEntry::Error:
9112         Error("malformed block record in AST file");
9113         return;
9114       case llvm::BitstreamEntry::EndBlock:
9115         goto NextCursor;
9116       case llvm::BitstreamEntry::Record:
9117         // The interesting case.
9118         break;
9119       }
9120 
9121       // Read a record.
9122       Record.clear();
9123       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9124       if (!MaybeComment) {
9125         Error(MaybeComment.takeError());
9126         return;
9127       }
9128       switch ((CommentRecordTypes)MaybeComment.get()) {
9129       case COMMENTS_RAW_COMMENT: {
9130         unsigned Idx = 0;
9131         SourceRange SR = ReadSourceRange(F, Record, Idx);
9132         RawComment::CommentKind Kind =
9133             (RawComment::CommentKind) Record[Idx++];
9134         bool IsTrailingComment = Record[Idx++];
9135         bool IsAlmostTrailingComment = Record[Idx++];
9136         Comments.push_back(new (Context) RawComment(
9137             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9138         break;
9139       }
9140       }
9141     }
9142   NextCursor:
9143     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9144         FileToOffsetToComment;
9145     for (RawComment *C : Comments) {
9146       SourceLocation CommentLoc = C->getBeginLoc();
9147       if (CommentLoc.isValid()) {
9148         std::pair<FileID, unsigned> Loc =
9149             SourceMgr.getDecomposedLoc(CommentLoc);
9150         if (Loc.first.isValid())
9151           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9152       }
9153     }
9154   }
9155 }
9156 
9157 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9158                                 bool IncludeSystem, bool Complain,
9159                     llvm::function_ref<void(const serialization::InputFile &IF,
9160                                             bool isSystem)> Visitor) {
9161   unsigned NumUserInputs = MF.NumUserInputFiles;
9162   unsigned NumInputs = MF.InputFilesLoaded.size();
9163   assert(NumUserInputs <= NumInputs);
9164   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9165   for (unsigned I = 0; I < N; ++I) {
9166     bool IsSystem = I >= NumUserInputs;
9167     InputFile IF = getInputFile(MF, I+1, Complain);
9168     Visitor(IF, IsSystem);
9169   }
9170 }
9171 
9172 void ASTReader::visitTopLevelModuleMaps(
9173     serialization::ModuleFile &MF,
9174     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9175   unsigned NumInputs = MF.InputFilesLoaded.size();
9176   for (unsigned I = 0; I < NumInputs; ++I) {
9177     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9178     if (IFI.TopLevelModuleMap)
9179       // FIXME: This unnecessarily re-reads the InputFileInfo.
9180       if (auto *FE = getInputFile(MF, I + 1).getFile())
9181         Visitor(FE);
9182   }
9183 }
9184 
9185 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9186   // If we know the owning module, use it.
9187   if (Module *M = D->getImportedOwningModule())
9188     return M->getFullModuleName();
9189 
9190   // Otherwise, use the name of the top-level module the decl is within.
9191   if (ModuleFile *M = getOwningModuleFile(D))
9192     return M->ModuleName;
9193 
9194   // Not from a module.
9195   return {};
9196 }
9197 
9198 void ASTReader::finishPendingActions() {
9199   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9200          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9201          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9202          !PendingUpdateRecords.empty()) {
9203     // If any identifiers with corresponding top-level declarations have
9204     // been loaded, load those declarations now.
9205     using TopLevelDeclsMap =
9206         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9207     TopLevelDeclsMap TopLevelDecls;
9208 
9209     while (!PendingIdentifierInfos.empty()) {
9210       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9211       SmallVector<uint32_t, 4> DeclIDs =
9212           std::move(PendingIdentifierInfos.back().second);
9213       PendingIdentifierInfos.pop_back();
9214 
9215       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9216     }
9217 
9218     // Load each function type that we deferred loading because it was a
9219     // deduced type that might refer to a local type declared within itself.
9220     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9221       auto *FD = PendingFunctionTypes[I].first;
9222       FD->setType(GetType(PendingFunctionTypes[I].second));
9223 
9224       // If we gave a function a deduced return type, remember that we need to
9225       // propagate that along the redeclaration chain.
9226       auto *DT = FD->getReturnType()->getContainedDeducedType();
9227       if (DT && DT->isDeduced())
9228         PendingDeducedTypeUpdates.insert(
9229             {FD->getCanonicalDecl(), FD->getReturnType()});
9230     }
9231     PendingFunctionTypes.clear();
9232 
9233     // For each decl chain that we wanted to complete while deserializing, mark
9234     // it as "still needs to be completed".
9235     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9236       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9237     }
9238     PendingIncompleteDeclChains.clear();
9239 
9240     // Load pending declaration chains.
9241     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9242       loadPendingDeclChain(PendingDeclChains[I].first,
9243                            PendingDeclChains[I].second);
9244     PendingDeclChains.clear();
9245 
9246     // Make the most recent of the top-level declarations visible.
9247     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9248            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9249       IdentifierInfo *II = TLD->first;
9250       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9251         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9252       }
9253     }
9254 
9255     // Load any pending macro definitions.
9256     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9257       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9258       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9259       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9260       // Initialize the macro history from chained-PCHs ahead of module imports.
9261       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9262            ++IDIdx) {
9263         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9264         if (!Info.M->isModule())
9265           resolvePendingMacro(II, Info);
9266       }
9267       // Handle module imports.
9268       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9269            ++IDIdx) {
9270         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9271         if (Info.M->isModule())
9272           resolvePendingMacro(II, Info);
9273       }
9274     }
9275     PendingMacroIDs.clear();
9276 
9277     // Wire up the DeclContexts for Decls that we delayed setting until
9278     // recursive loading is completed.
9279     while (!PendingDeclContextInfos.empty()) {
9280       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9281       PendingDeclContextInfos.pop_front();
9282       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9283       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9284       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9285     }
9286 
9287     // Perform any pending declaration updates.
9288     while (!PendingUpdateRecords.empty()) {
9289       auto Update = PendingUpdateRecords.pop_back_val();
9290       ReadingKindTracker ReadingKind(Read_Decl, *this);
9291       loadDeclUpdateRecords(Update);
9292     }
9293   }
9294 
9295   // At this point, all update records for loaded decls are in place, so any
9296   // fake class definitions should have become real.
9297   assert(PendingFakeDefinitionData.empty() &&
9298          "faked up a class definition but never saw the real one");
9299 
9300   // If we deserialized any C++ or Objective-C class definitions, any
9301   // Objective-C protocol definitions, or any redeclarable templates, make sure
9302   // that all redeclarations point to the definitions. Note that this can only
9303   // happen now, after the redeclaration chains have been fully wired.
9304   for (Decl *D : PendingDefinitions) {
9305     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9306       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9307         // Make sure that the TagType points at the definition.
9308         const_cast<TagType*>(TagT)->decl = TD;
9309       }
9310 
9311       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9312         for (auto *R = getMostRecentExistingDecl(RD); R;
9313              R = R->getPreviousDecl()) {
9314           assert((R == D) ==
9315                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9316                  "declaration thinks it's the definition but it isn't");
9317           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9318         }
9319       }
9320 
9321       continue;
9322     }
9323 
9324     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9325       // Make sure that the ObjCInterfaceType points at the definition.
9326       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9327         ->Decl = ID;
9328 
9329       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9330         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9331 
9332       continue;
9333     }
9334 
9335     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9336       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9337         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9338 
9339       continue;
9340     }
9341 
9342     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9343     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9344       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9345   }
9346   PendingDefinitions.clear();
9347 
9348   // Load the bodies of any functions or methods we've encountered. We do
9349   // this now (delayed) so that we can be sure that the declaration chains
9350   // have been fully wired up (hasBody relies on this).
9351   // FIXME: We shouldn't require complete redeclaration chains here.
9352   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9353                                PBEnd = PendingBodies.end();
9354        PB != PBEnd; ++PB) {
9355     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9356       // For a function defined inline within a class template, force the
9357       // canonical definition to be the one inside the canonical definition of
9358       // the template. This ensures that we instantiate from a correct view
9359       // of the template.
9360       //
9361       // Sadly we can't do this more generally: we can't be sure that all
9362       // copies of an arbitrary class definition will have the same members
9363       // defined (eg, some member functions may not be instantiated, and some
9364       // special members may or may not have been implicitly defined).
9365       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9366         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9367           continue;
9368 
9369       // FIXME: Check for =delete/=default?
9370       // FIXME: Complain about ODR violations here?
9371       const FunctionDecl *Defn = nullptr;
9372       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9373         FD->setLazyBody(PB->second);
9374       } else {
9375         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9376         mergeDefinitionVisibility(NonConstDefn, FD);
9377 
9378         if (!FD->isLateTemplateParsed() &&
9379             !NonConstDefn->isLateTemplateParsed() &&
9380             FD->getODRHash() != NonConstDefn->getODRHash()) {
9381           if (!isa<CXXMethodDecl>(FD)) {
9382             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9383           } else if (FD->getLexicalParent()->isFileContext() &&
9384                      NonConstDefn->getLexicalParent()->isFileContext()) {
9385             // Only diagnose out-of-line method definitions.  If they are
9386             // in class definitions, then an error will be generated when
9387             // processing the class bodies.
9388             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9389           }
9390         }
9391       }
9392       continue;
9393     }
9394 
9395     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9396     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9397       MD->setLazyBody(PB->second);
9398   }
9399   PendingBodies.clear();
9400 
9401   // Do some cleanup.
9402   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9403     getContext().deduplicateMergedDefinitonsFor(ND);
9404   PendingMergedDefinitionsToDeduplicate.clear();
9405 }
9406 
9407 void ASTReader::diagnoseOdrViolations() {
9408   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9409       PendingFunctionOdrMergeFailures.empty() &&
9410       PendingEnumOdrMergeFailures.empty())
9411     return;
9412 
9413   // Trigger the import of the full definition of each class that had any
9414   // odr-merging problems, so we can produce better diagnostics for them.
9415   // These updates may in turn find and diagnose some ODR failures, so take
9416   // ownership of the set first.
9417   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9418   PendingOdrMergeFailures.clear();
9419   for (auto &Merge : OdrMergeFailures) {
9420     Merge.first->buildLookup();
9421     Merge.first->decls_begin();
9422     Merge.first->bases_begin();
9423     Merge.first->vbases_begin();
9424     for (auto &RecordPair : Merge.second) {
9425       auto *RD = RecordPair.first;
9426       RD->decls_begin();
9427       RD->bases_begin();
9428       RD->vbases_begin();
9429     }
9430   }
9431 
9432   // Trigger the import of functions.
9433   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9434   PendingFunctionOdrMergeFailures.clear();
9435   for (auto &Merge : FunctionOdrMergeFailures) {
9436     Merge.first->buildLookup();
9437     Merge.first->decls_begin();
9438     Merge.first->getBody();
9439     for (auto &FD : Merge.second) {
9440       FD->buildLookup();
9441       FD->decls_begin();
9442       FD->getBody();
9443     }
9444   }
9445 
9446   // Trigger the import of enums.
9447   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9448   PendingEnumOdrMergeFailures.clear();
9449   for (auto &Merge : EnumOdrMergeFailures) {
9450     Merge.first->decls_begin();
9451     for (auto &Enum : Merge.second) {
9452       Enum->decls_begin();
9453     }
9454   }
9455 
9456   // For each declaration from a merged context, check that the canonical
9457   // definition of that context also contains a declaration of the same
9458   // entity.
9459   //
9460   // Caution: this loop does things that might invalidate iterators into
9461   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9462   while (!PendingOdrMergeChecks.empty()) {
9463     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9464 
9465     // FIXME: Skip over implicit declarations for now. This matters for things
9466     // like implicitly-declared special member functions. This isn't entirely
9467     // correct; we can end up with multiple unmerged declarations of the same
9468     // implicit entity.
9469     if (D->isImplicit())
9470       continue;
9471 
9472     DeclContext *CanonDef = D->getDeclContext();
9473 
9474     bool Found = false;
9475     const Decl *DCanon = D->getCanonicalDecl();
9476 
9477     for (auto RI : D->redecls()) {
9478       if (RI->getLexicalDeclContext() == CanonDef) {
9479         Found = true;
9480         break;
9481       }
9482     }
9483     if (Found)
9484       continue;
9485 
9486     // Quick check failed, time to do the slow thing. Note, we can't just
9487     // look up the name of D in CanonDef here, because the member that is
9488     // in CanonDef might not be found by name lookup (it might have been
9489     // replaced by a more recent declaration in the lookup table), and we
9490     // can't necessarily find it in the redeclaration chain because it might
9491     // be merely mergeable, not redeclarable.
9492     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9493     for (auto *CanonMember : CanonDef->decls()) {
9494       if (CanonMember->getCanonicalDecl() == DCanon) {
9495         // This can happen if the declaration is merely mergeable and not
9496         // actually redeclarable (we looked for redeclarations earlier).
9497         //
9498         // FIXME: We should be able to detect this more efficiently, without
9499         // pulling in all of the members of CanonDef.
9500         Found = true;
9501         break;
9502       }
9503       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9504         if (ND->getDeclName() == D->getDeclName())
9505           Candidates.push_back(ND);
9506     }
9507 
9508     if (!Found) {
9509       // The AST doesn't like TagDecls becoming invalid after they've been
9510       // completed. We only really need to mark FieldDecls as invalid here.
9511       if (!isa<TagDecl>(D))
9512         D->setInvalidDecl();
9513 
9514       // Ensure we don't accidentally recursively enter deserialization while
9515       // we're producing our diagnostic.
9516       Deserializing RecursionGuard(this);
9517 
9518       std::string CanonDefModule =
9519           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9520       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9521         << D << getOwningModuleNameForDiagnostic(D)
9522         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9523 
9524       if (Candidates.empty())
9525         Diag(cast<Decl>(CanonDef)->getLocation(),
9526              diag::note_module_odr_violation_no_possible_decls) << D;
9527       else {
9528         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9529           Diag(Candidates[I]->getLocation(),
9530                diag::note_module_odr_violation_possible_decl)
9531             << Candidates[I];
9532       }
9533 
9534       DiagnosedOdrMergeFailures.insert(CanonDef);
9535     }
9536   }
9537 
9538   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9539       EnumOdrMergeFailures.empty())
9540     return;
9541 
9542   // Ensure we don't accidentally recursively enter deserialization while
9543   // we're producing our diagnostics.
9544   Deserializing RecursionGuard(this);
9545 
9546   // Common code for hashing helpers.
9547   ODRHash Hash;
9548   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9549     Hash.clear();
9550     Hash.AddQualType(Ty);
9551     return Hash.CalculateHash();
9552   };
9553 
9554   auto ComputeODRHash = [&Hash](const Stmt *S) {
9555     assert(S);
9556     Hash.clear();
9557     Hash.AddStmt(S);
9558     return Hash.CalculateHash();
9559   };
9560 
9561   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9562     assert(D);
9563     Hash.clear();
9564     Hash.AddSubDecl(D);
9565     return Hash.CalculateHash();
9566   };
9567 
9568   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9569     Hash.clear();
9570     Hash.AddTemplateArgument(TA);
9571     return Hash.CalculateHash();
9572   };
9573 
9574   auto ComputeTemplateParameterListODRHash =
9575       [&Hash](const TemplateParameterList *TPL) {
9576         assert(TPL);
9577         Hash.clear();
9578         Hash.AddTemplateParameterList(TPL);
9579         return Hash.CalculateHash();
9580       };
9581 
9582   // Used with err_module_odr_violation_mismatch_decl and
9583   // note_module_odr_violation_mismatch_decl
9584   // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9585   enum ODRMismatchDecl {
9586     EndOfClass,
9587     PublicSpecifer,
9588     PrivateSpecifer,
9589     ProtectedSpecifer,
9590     StaticAssert,
9591     Field,
9592     CXXMethod,
9593     TypeAlias,
9594     TypeDef,
9595     Var,
9596     Friend,
9597     FunctionTemplate,
9598     Other
9599   };
9600 
9601   // Used with err_module_odr_violation_mismatch_decl_diff and
9602   // note_module_odr_violation_mismatch_decl_diff
9603   enum ODRMismatchDeclDifference {
9604     StaticAssertCondition,
9605     StaticAssertMessage,
9606     StaticAssertOnlyMessage,
9607     FieldName,
9608     FieldTypeName,
9609     FieldSingleBitField,
9610     FieldDifferentWidthBitField,
9611     FieldSingleMutable,
9612     FieldSingleInitializer,
9613     FieldDifferentInitializers,
9614     MethodName,
9615     MethodDeleted,
9616     MethodDefaulted,
9617     MethodVirtual,
9618     MethodStatic,
9619     MethodVolatile,
9620     MethodConst,
9621     MethodInline,
9622     MethodNumberParameters,
9623     MethodParameterType,
9624     MethodParameterName,
9625     MethodParameterSingleDefaultArgument,
9626     MethodParameterDifferentDefaultArgument,
9627     MethodNoTemplateArguments,
9628     MethodDifferentNumberTemplateArguments,
9629     MethodDifferentTemplateArgument,
9630     MethodSingleBody,
9631     MethodDifferentBody,
9632     TypedefName,
9633     TypedefType,
9634     VarName,
9635     VarType,
9636     VarSingleInitializer,
9637     VarDifferentInitializer,
9638     VarConstexpr,
9639     FriendTypeFunction,
9640     FriendType,
9641     FriendFunction,
9642     FunctionTemplateDifferentNumberParameters,
9643     FunctionTemplateParameterDifferentKind,
9644     FunctionTemplateParameterName,
9645     FunctionTemplateParameterSingleDefaultArgument,
9646     FunctionTemplateParameterDifferentDefaultArgument,
9647     FunctionTemplateParameterDifferentType,
9648     FunctionTemplatePackParameter,
9649   };
9650 
9651   // These lambdas have the common portions of the ODR diagnostics.  This
9652   // has the same return as Diag(), so addition parameters can be passed
9653   // in with operator<<
9654   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9655                                  SourceLocation Loc, SourceRange Range,
9656                                  ODRMismatchDeclDifference DiffType) {
9657     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9658            << FirstRecord << FirstModule.empty() << FirstModule << Range
9659            << DiffType;
9660   };
9661   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9662                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9663     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9664            << SecondModule << Range << DiffType;
9665   };
9666 
9667   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9668                        &ComputeQualTypeODRHash, &ComputeODRHash](
9669                           NamedDecl *FirstRecord, StringRef FirstModule,
9670                           StringRef SecondModule, FieldDecl *FirstField,
9671                           FieldDecl *SecondField) {
9672     IdentifierInfo *FirstII = FirstField->getIdentifier();
9673     IdentifierInfo *SecondII = SecondField->getIdentifier();
9674     if (FirstII->getName() != SecondII->getName()) {
9675       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9676                        FirstField->getSourceRange(), FieldName)
9677           << FirstII;
9678       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9679                       SecondField->getSourceRange(), FieldName)
9680           << SecondII;
9681 
9682       return true;
9683     }
9684 
9685     assert(getContext().hasSameType(FirstField->getType(),
9686                                     SecondField->getType()));
9687 
9688     QualType FirstType = FirstField->getType();
9689     QualType SecondType = SecondField->getType();
9690     if (ComputeQualTypeODRHash(FirstType) !=
9691         ComputeQualTypeODRHash(SecondType)) {
9692       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9693                        FirstField->getSourceRange(), FieldTypeName)
9694           << FirstII << FirstType;
9695       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9696                       SecondField->getSourceRange(), FieldTypeName)
9697           << SecondII << SecondType;
9698 
9699       return true;
9700     }
9701 
9702     const bool IsFirstBitField = FirstField->isBitField();
9703     const bool IsSecondBitField = SecondField->isBitField();
9704     if (IsFirstBitField != IsSecondBitField) {
9705       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9706                        FirstField->getSourceRange(), FieldSingleBitField)
9707           << FirstII << IsFirstBitField;
9708       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9709                       SecondField->getSourceRange(), FieldSingleBitField)
9710           << SecondII << IsSecondBitField;
9711       return true;
9712     }
9713 
9714     if (IsFirstBitField && IsSecondBitField) {
9715       unsigned FirstBitWidthHash =
9716           ComputeODRHash(FirstField->getBitWidth());
9717       unsigned SecondBitWidthHash =
9718           ComputeODRHash(SecondField->getBitWidth());
9719       if (FirstBitWidthHash != SecondBitWidthHash) {
9720         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9721                          FirstField->getSourceRange(),
9722                          FieldDifferentWidthBitField)
9723             << FirstII << FirstField->getBitWidth()->getSourceRange();
9724         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9725                         SecondField->getSourceRange(),
9726                         FieldDifferentWidthBitField)
9727             << SecondII << SecondField->getBitWidth()->getSourceRange();
9728         return true;
9729       }
9730     }
9731 
9732     if (!PP.getLangOpts().CPlusPlus)
9733       return false;
9734 
9735     const bool IsFirstMutable = FirstField->isMutable();
9736     const bool IsSecondMutable = SecondField->isMutable();
9737     if (IsFirstMutable != IsSecondMutable) {
9738       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9739                        FirstField->getSourceRange(), FieldSingleMutable)
9740           << FirstII << IsFirstMutable;
9741       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9742                       SecondField->getSourceRange(), FieldSingleMutable)
9743           << SecondII << IsSecondMutable;
9744       return true;
9745     }
9746 
9747     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9748     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9749     if ((!FirstInitializer && SecondInitializer) ||
9750         (FirstInitializer && !SecondInitializer)) {
9751       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9752                        FirstField->getSourceRange(), FieldSingleInitializer)
9753           << FirstII << (FirstInitializer != nullptr);
9754       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9755                       SecondField->getSourceRange(), FieldSingleInitializer)
9756           << SecondII << (SecondInitializer != nullptr);
9757       return true;
9758     }
9759 
9760     if (FirstInitializer && SecondInitializer) {
9761       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9762       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9763       if (FirstInitHash != SecondInitHash) {
9764         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9765                          FirstField->getSourceRange(),
9766                          FieldDifferentInitializers)
9767             << FirstII << FirstInitializer->getSourceRange();
9768         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9769                         SecondField->getSourceRange(),
9770                         FieldDifferentInitializers)
9771             << SecondII << SecondInitializer->getSourceRange();
9772         return true;
9773       }
9774     }
9775 
9776     return false;
9777   };
9778 
9779   auto ODRDiagTypeDefOrAlias =
9780       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9781           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9782           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9783           bool IsTypeAlias) {
9784         auto FirstName = FirstTD->getDeclName();
9785         auto SecondName = SecondTD->getDeclName();
9786         if (FirstName != SecondName) {
9787           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9788                            FirstTD->getSourceRange(), TypedefName)
9789               << IsTypeAlias << FirstName;
9790           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9791                           SecondTD->getSourceRange(), TypedefName)
9792               << IsTypeAlias << SecondName;
9793           return true;
9794         }
9795 
9796         QualType FirstType = FirstTD->getUnderlyingType();
9797         QualType SecondType = SecondTD->getUnderlyingType();
9798         if (ComputeQualTypeODRHash(FirstType) !=
9799             ComputeQualTypeODRHash(SecondType)) {
9800           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9801                            FirstTD->getSourceRange(), TypedefType)
9802               << IsTypeAlias << FirstName << FirstType;
9803           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9804                           SecondTD->getSourceRange(), TypedefType)
9805               << IsTypeAlias << SecondName << SecondType;
9806           return true;
9807         }
9808 
9809         return false;
9810   };
9811 
9812   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9813                      &ComputeQualTypeODRHash, &ComputeODRHash,
9814                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9815                            StringRef SecondModule, VarDecl *FirstVD,
9816                            VarDecl *SecondVD) {
9817     auto FirstName = FirstVD->getDeclName();
9818     auto SecondName = SecondVD->getDeclName();
9819     if (FirstName != SecondName) {
9820       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9821                        FirstVD->getSourceRange(), VarName)
9822           << FirstName;
9823       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9824                       SecondVD->getSourceRange(), VarName)
9825           << SecondName;
9826       return true;
9827     }
9828 
9829     QualType FirstType = FirstVD->getType();
9830     QualType SecondType = SecondVD->getType();
9831     if (ComputeQualTypeODRHash(FirstType) !=
9832         ComputeQualTypeODRHash(SecondType)) {
9833       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9834                        FirstVD->getSourceRange(), VarType)
9835           << FirstName << FirstType;
9836       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9837                       SecondVD->getSourceRange(), VarType)
9838           << SecondName << SecondType;
9839       return true;
9840     }
9841 
9842     if (!PP.getLangOpts().CPlusPlus)
9843       return false;
9844 
9845     const Expr *FirstInit = FirstVD->getInit();
9846     const Expr *SecondInit = SecondVD->getInit();
9847     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9848       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9849                        FirstVD->getSourceRange(), VarSingleInitializer)
9850           << FirstName << (FirstInit == nullptr)
9851           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9852       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9853                       SecondVD->getSourceRange(), VarSingleInitializer)
9854           << SecondName << (SecondInit == nullptr)
9855           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9856       return true;
9857     }
9858 
9859     if (FirstInit && SecondInit &&
9860         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9861       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9862                        FirstVD->getSourceRange(), VarDifferentInitializer)
9863           << FirstName << FirstInit->getSourceRange();
9864       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9865                       SecondVD->getSourceRange(), VarDifferentInitializer)
9866           << SecondName << SecondInit->getSourceRange();
9867       return true;
9868     }
9869 
9870     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9871     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9872     if (FirstIsConstexpr != SecondIsConstexpr) {
9873       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9874                        FirstVD->getSourceRange(), VarConstexpr)
9875           << FirstName << FirstIsConstexpr;
9876       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9877                       SecondVD->getSourceRange(), VarConstexpr)
9878           << SecondName << SecondIsConstexpr;
9879       return true;
9880     }
9881     return false;
9882   };
9883 
9884   auto DifferenceSelector = [](Decl *D) {
9885     assert(D && "valid Decl required");
9886     switch (D->getKind()) {
9887     default:
9888       return Other;
9889     case Decl::AccessSpec:
9890       switch (D->getAccess()) {
9891       case AS_public:
9892         return PublicSpecifer;
9893       case AS_private:
9894         return PrivateSpecifer;
9895       case AS_protected:
9896         return ProtectedSpecifer;
9897       case AS_none:
9898         break;
9899       }
9900       llvm_unreachable("Invalid access specifier");
9901     case Decl::StaticAssert:
9902       return StaticAssert;
9903     case Decl::Field:
9904       return Field;
9905     case Decl::CXXMethod:
9906     case Decl::CXXConstructor:
9907     case Decl::CXXDestructor:
9908       return CXXMethod;
9909     case Decl::TypeAlias:
9910       return TypeAlias;
9911     case Decl::Typedef:
9912       return TypeDef;
9913     case Decl::Var:
9914       return Var;
9915     case Decl::Friend:
9916       return Friend;
9917     case Decl::FunctionTemplate:
9918       return FunctionTemplate;
9919     }
9920   };
9921 
9922   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9923   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9924                                                  RecordDecl *Record,
9925                                                  const DeclContext *DC) {
9926     for (auto *D : Record->decls()) {
9927       if (!ODRHash::isWhitelistedDecl(D, DC))
9928         continue;
9929       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9930     }
9931   };
9932 
9933   struct DiffResult {
9934     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9935     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9936   };
9937 
9938   // If there is a diagnoseable difference, FirstDiffType and
9939   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9940   // filled in if not EndOfClass.
9941   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9942                                              DeclHashes &SecondHashes) {
9943     DiffResult DR;
9944     auto FirstIt = FirstHashes.begin();
9945     auto SecondIt = SecondHashes.begin();
9946     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9947       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9948           FirstIt->second == SecondIt->second) {
9949         ++FirstIt;
9950         ++SecondIt;
9951         continue;
9952       }
9953 
9954       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9955       DR.SecondDecl =
9956           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9957 
9958       DR.FirstDiffType =
9959           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9960       DR.SecondDiffType =
9961           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9962       return DR;
9963     }
9964     return DR;
9965   };
9966 
9967   // Use this to diagnose that an unexpected Decl was encountered
9968   // or no difference was detected. This causes a generic error
9969   // message to be emitted.
9970   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9971                                       StringRef FirstModule,
9972                                       NamedDecl *SecondRecord,
9973                                       StringRef SecondModule) {
9974     Diag(FirstRecord->getLocation(),
9975          diag::err_module_odr_violation_different_definitions)
9976         << FirstRecord << FirstModule.empty() << FirstModule;
9977 
9978     if (DR.FirstDecl) {
9979       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9980           << FirstRecord << DR.FirstDecl->getSourceRange();
9981     }
9982 
9983     Diag(SecondRecord->getLocation(),
9984          diag::note_module_odr_violation_different_definitions)
9985         << SecondModule;
9986 
9987     if (DR.SecondDecl) {
9988       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9989           << DR.SecondDecl->getSourceRange();
9990     }
9991   };
9992 
9993   auto DiagnoseODRMismatch =
9994       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9995              NamedDecl *SecondRecord, StringRef SecondModule) {
9996         SourceLocation FirstLoc;
9997         SourceRange FirstRange;
9998         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9999         if (DR.FirstDiffType == EndOfClass && FirstTag) {
10000           FirstLoc = FirstTag->getBraceRange().getEnd();
10001         } else {
10002           FirstLoc = DR.FirstDecl->getLocation();
10003           FirstRange = DR.FirstDecl->getSourceRange();
10004         }
10005         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
10006             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
10007             << DR.FirstDiffType;
10008 
10009         SourceLocation SecondLoc;
10010         SourceRange SecondRange;
10011         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
10012         if (DR.SecondDiffType == EndOfClass && SecondTag) {
10013           SecondLoc = SecondTag->getBraceRange().getEnd();
10014         } else {
10015           SecondLoc = DR.SecondDecl->getLocation();
10016           SecondRange = DR.SecondDecl->getSourceRange();
10017         }
10018         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10019             << SecondModule << SecondRange << DR.SecondDiffType;
10020       };
10021 
10022   // Issue any pending ODR-failure diagnostics.
10023   for (auto &Merge : OdrMergeFailures) {
10024     // If we've already pointed out a specific problem with this class, don't
10025     // bother issuing a general "something's different" diagnostic.
10026     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10027       continue;
10028 
10029     bool Diagnosed = false;
10030     CXXRecordDecl *FirstRecord = Merge.first;
10031     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10032     for (auto &RecordPair : Merge.second) {
10033       CXXRecordDecl *SecondRecord = RecordPair.first;
10034       // Multiple different declarations got merged together; tell the user
10035       // where they came from.
10036       if (FirstRecord == SecondRecord)
10037         continue;
10038 
10039       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10040 
10041       auto *FirstDD = FirstRecord->DefinitionData;
10042       auto *SecondDD = RecordPair.second;
10043 
10044       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10045 
10046       // Diagnostics from DefinitionData are emitted here.
10047       if (FirstDD != SecondDD) {
10048         enum ODRDefinitionDataDifference {
10049           NumBases,
10050           NumVBases,
10051           BaseType,
10052           BaseVirtual,
10053           BaseAccess,
10054         };
10055         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10056                                  this](SourceLocation Loc, SourceRange Range,
10057                                        ODRDefinitionDataDifference DiffType) {
10058           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10059                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10060                  << DiffType;
10061         };
10062         auto ODRDiagBaseNote = [&SecondModule,
10063                                 this](SourceLocation Loc, SourceRange Range,
10064                                       ODRDefinitionDataDifference DiffType) {
10065           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10066                  << SecondModule << Range << DiffType;
10067         };
10068 
10069         unsigned FirstNumBases = FirstDD->NumBases;
10070         unsigned FirstNumVBases = FirstDD->NumVBases;
10071         unsigned SecondNumBases = SecondDD->NumBases;
10072         unsigned SecondNumVBases = SecondDD->NumVBases;
10073 
10074         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10075           unsigned NumBases = DD->NumBases;
10076           if (NumBases == 0) return SourceRange();
10077           auto bases = DD->bases();
10078           return SourceRange(bases[0].getBeginLoc(),
10079                              bases[NumBases - 1].getEndLoc());
10080         };
10081 
10082         if (FirstNumBases != SecondNumBases) {
10083           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10084                            NumBases)
10085               << FirstNumBases;
10086           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10087                           NumBases)
10088               << SecondNumBases;
10089           Diagnosed = true;
10090           break;
10091         }
10092 
10093         if (FirstNumVBases != SecondNumVBases) {
10094           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10095                            NumVBases)
10096               << FirstNumVBases;
10097           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10098                           NumVBases)
10099               << SecondNumVBases;
10100           Diagnosed = true;
10101           break;
10102         }
10103 
10104         auto FirstBases = FirstDD->bases();
10105         auto SecondBases = SecondDD->bases();
10106         unsigned i = 0;
10107         for (i = 0; i < FirstNumBases; ++i) {
10108           auto FirstBase = FirstBases[i];
10109           auto SecondBase = SecondBases[i];
10110           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10111               ComputeQualTypeODRHash(SecondBase.getType())) {
10112             ODRDiagBaseError(FirstRecord->getLocation(),
10113                              FirstBase.getSourceRange(), BaseType)
10114                 << (i + 1) << FirstBase.getType();
10115             ODRDiagBaseNote(SecondRecord->getLocation(),
10116                             SecondBase.getSourceRange(), BaseType)
10117                 << (i + 1) << SecondBase.getType();
10118             break;
10119           }
10120 
10121           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10122             ODRDiagBaseError(FirstRecord->getLocation(),
10123                              FirstBase.getSourceRange(), BaseVirtual)
10124                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10125             ODRDiagBaseNote(SecondRecord->getLocation(),
10126                             SecondBase.getSourceRange(), BaseVirtual)
10127                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10128             break;
10129           }
10130 
10131           if (FirstBase.getAccessSpecifierAsWritten() !=
10132               SecondBase.getAccessSpecifierAsWritten()) {
10133             ODRDiagBaseError(FirstRecord->getLocation(),
10134                              FirstBase.getSourceRange(), BaseAccess)
10135                 << (i + 1) << FirstBase.getType()
10136                 << (int)FirstBase.getAccessSpecifierAsWritten();
10137             ODRDiagBaseNote(SecondRecord->getLocation(),
10138                             SecondBase.getSourceRange(), BaseAccess)
10139                 << (i + 1) << SecondBase.getType()
10140                 << (int)SecondBase.getAccessSpecifierAsWritten();
10141             break;
10142           }
10143         }
10144 
10145         if (i != FirstNumBases) {
10146           Diagnosed = true;
10147           break;
10148         }
10149       }
10150 
10151       const ClassTemplateDecl *FirstTemplate =
10152           FirstRecord->getDescribedClassTemplate();
10153       const ClassTemplateDecl *SecondTemplate =
10154           SecondRecord->getDescribedClassTemplate();
10155 
10156       assert(!FirstTemplate == !SecondTemplate &&
10157              "Both pointers should be null or non-null");
10158 
10159       enum ODRTemplateDifference {
10160         ParamEmptyName,
10161         ParamName,
10162         ParamSingleDefaultArgument,
10163         ParamDifferentDefaultArgument,
10164       };
10165 
10166       if (FirstTemplate && SecondTemplate) {
10167         DeclHashes FirstTemplateHashes;
10168         DeclHashes SecondTemplateHashes;
10169 
10170         auto PopulateTemplateParameterHashs =
10171             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10172                                      const ClassTemplateDecl *TD) {
10173               for (auto *D : TD->getTemplateParameters()->asArray()) {
10174                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10175               }
10176             };
10177 
10178         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10179         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10180 
10181         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10182                "Number of template parameters should be equal.");
10183 
10184         auto FirstIt = FirstTemplateHashes.begin();
10185         auto FirstEnd = FirstTemplateHashes.end();
10186         auto SecondIt = SecondTemplateHashes.begin();
10187         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10188           if (FirstIt->second == SecondIt->second)
10189             continue;
10190 
10191           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10192                                           SourceLocation Loc, SourceRange Range,
10193                                           ODRTemplateDifference DiffType) {
10194             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10195                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10196                    << DiffType;
10197           };
10198           auto ODRDiagTemplateNote = [&SecondModule, this](
10199                                          SourceLocation Loc, SourceRange Range,
10200                                          ODRTemplateDifference DiffType) {
10201             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10202                    << SecondModule << Range << DiffType;
10203           };
10204 
10205           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10206           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10207 
10208           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10209                  "Parameter Decl's should be the same kind.");
10210 
10211           DeclarationName FirstName = FirstDecl->getDeclName();
10212           DeclarationName SecondName = SecondDecl->getDeclName();
10213 
10214           if (FirstName != SecondName) {
10215             const bool FirstNameEmpty =
10216                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10217             const bool SecondNameEmpty =
10218                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10219             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10220                    "Both template parameters cannot be unnamed.");
10221             ODRDiagTemplateError(FirstDecl->getLocation(),
10222                                  FirstDecl->getSourceRange(),
10223                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10224                 << FirstName;
10225             ODRDiagTemplateNote(SecondDecl->getLocation(),
10226                                 SecondDecl->getSourceRange(),
10227                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10228                 << SecondName;
10229             break;
10230           }
10231 
10232           switch (FirstDecl->getKind()) {
10233           default:
10234             llvm_unreachable("Invalid template parameter type.");
10235           case Decl::TemplateTypeParm: {
10236             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10237             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10238             const bool HasFirstDefaultArgument =
10239                 FirstParam->hasDefaultArgument() &&
10240                 !FirstParam->defaultArgumentWasInherited();
10241             const bool HasSecondDefaultArgument =
10242                 SecondParam->hasDefaultArgument() &&
10243                 !SecondParam->defaultArgumentWasInherited();
10244 
10245             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10246               ODRDiagTemplateError(FirstDecl->getLocation(),
10247                                    FirstDecl->getSourceRange(),
10248                                    ParamSingleDefaultArgument)
10249                   << HasFirstDefaultArgument;
10250               ODRDiagTemplateNote(SecondDecl->getLocation(),
10251                                   SecondDecl->getSourceRange(),
10252                                   ParamSingleDefaultArgument)
10253                   << HasSecondDefaultArgument;
10254               break;
10255             }
10256 
10257             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10258                    "Expecting default arguments.");
10259 
10260             ODRDiagTemplateError(FirstDecl->getLocation(),
10261                                  FirstDecl->getSourceRange(),
10262                                  ParamDifferentDefaultArgument);
10263             ODRDiagTemplateNote(SecondDecl->getLocation(),
10264                                 SecondDecl->getSourceRange(),
10265                                 ParamDifferentDefaultArgument);
10266 
10267             break;
10268           }
10269           case Decl::NonTypeTemplateParm: {
10270             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10271             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10272             const bool HasFirstDefaultArgument =
10273                 FirstParam->hasDefaultArgument() &&
10274                 !FirstParam->defaultArgumentWasInherited();
10275             const bool HasSecondDefaultArgument =
10276                 SecondParam->hasDefaultArgument() &&
10277                 !SecondParam->defaultArgumentWasInherited();
10278 
10279             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10280               ODRDiagTemplateError(FirstDecl->getLocation(),
10281                                    FirstDecl->getSourceRange(),
10282                                    ParamSingleDefaultArgument)
10283                   << HasFirstDefaultArgument;
10284               ODRDiagTemplateNote(SecondDecl->getLocation(),
10285                                   SecondDecl->getSourceRange(),
10286                                   ParamSingleDefaultArgument)
10287                   << HasSecondDefaultArgument;
10288               break;
10289             }
10290 
10291             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10292                    "Expecting default arguments.");
10293 
10294             ODRDiagTemplateError(FirstDecl->getLocation(),
10295                                  FirstDecl->getSourceRange(),
10296                                  ParamDifferentDefaultArgument);
10297             ODRDiagTemplateNote(SecondDecl->getLocation(),
10298                                 SecondDecl->getSourceRange(),
10299                                 ParamDifferentDefaultArgument);
10300 
10301             break;
10302           }
10303           case Decl::TemplateTemplateParm: {
10304             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10305             const auto *SecondParam =
10306                 cast<TemplateTemplateParmDecl>(SecondDecl);
10307             const bool HasFirstDefaultArgument =
10308                 FirstParam->hasDefaultArgument() &&
10309                 !FirstParam->defaultArgumentWasInherited();
10310             const bool HasSecondDefaultArgument =
10311                 SecondParam->hasDefaultArgument() &&
10312                 !SecondParam->defaultArgumentWasInherited();
10313 
10314             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10315               ODRDiagTemplateError(FirstDecl->getLocation(),
10316                                    FirstDecl->getSourceRange(),
10317                                    ParamSingleDefaultArgument)
10318                   << HasFirstDefaultArgument;
10319               ODRDiagTemplateNote(SecondDecl->getLocation(),
10320                                   SecondDecl->getSourceRange(),
10321                                   ParamSingleDefaultArgument)
10322                   << HasSecondDefaultArgument;
10323               break;
10324             }
10325 
10326             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10327                    "Expecting default arguments.");
10328 
10329             ODRDiagTemplateError(FirstDecl->getLocation(),
10330                                  FirstDecl->getSourceRange(),
10331                                  ParamDifferentDefaultArgument);
10332             ODRDiagTemplateNote(SecondDecl->getLocation(),
10333                                 SecondDecl->getSourceRange(),
10334                                 ParamDifferentDefaultArgument);
10335 
10336             break;
10337           }
10338           }
10339 
10340           break;
10341         }
10342 
10343         if (FirstIt != FirstEnd) {
10344           Diagnosed = true;
10345           break;
10346         }
10347       }
10348 
10349       DeclHashes FirstHashes;
10350       DeclHashes SecondHashes;
10351       const DeclContext *DC = FirstRecord;
10352       PopulateHashes(FirstHashes, FirstRecord, DC);
10353       PopulateHashes(SecondHashes, SecondRecord, DC);
10354 
10355       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10356       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10357       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10358       Decl *FirstDecl = DR.FirstDecl;
10359       Decl *SecondDecl = DR.SecondDecl;
10360 
10361       if (FirstDiffType == Other || SecondDiffType == Other) {
10362         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10363                               SecondModule);
10364         Diagnosed = true;
10365         break;
10366       }
10367 
10368       if (FirstDiffType != SecondDiffType) {
10369         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10370                             SecondModule);
10371         Diagnosed = true;
10372         break;
10373       }
10374 
10375       assert(FirstDiffType == SecondDiffType);
10376 
10377       switch (FirstDiffType) {
10378       case Other:
10379       case EndOfClass:
10380       case PublicSpecifer:
10381       case PrivateSpecifer:
10382       case ProtectedSpecifer:
10383         llvm_unreachable("Invalid diff type");
10384 
10385       case StaticAssert: {
10386         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10387         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10388 
10389         Expr *FirstExpr = FirstSA->getAssertExpr();
10390         Expr *SecondExpr = SecondSA->getAssertExpr();
10391         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10392         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10393         if (FirstODRHash != SecondODRHash) {
10394           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10395                            FirstExpr->getSourceRange(), StaticAssertCondition);
10396           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10397                           SecondExpr->getSourceRange(), StaticAssertCondition);
10398           Diagnosed = true;
10399           break;
10400         }
10401 
10402         StringLiteral *FirstStr = FirstSA->getMessage();
10403         StringLiteral *SecondStr = SecondSA->getMessage();
10404         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10405         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10406           SourceLocation FirstLoc, SecondLoc;
10407           SourceRange FirstRange, SecondRange;
10408           if (FirstStr) {
10409             FirstLoc = FirstStr->getBeginLoc();
10410             FirstRange = FirstStr->getSourceRange();
10411           } else {
10412             FirstLoc = FirstSA->getBeginLoc();
10413             FirstRange = FirstSA->getSourceRange();
10414           }
10415           if (SecondStr) {
10416             SecondLoc = SecondStr->getBeginLoc();
10417             SecondRange = SecondStr->getSourceRange();
10418           } else {
10419             SecondLoc = SecondSA->getBeginLoc();
10420             SecondRange = SecondSA->getSourceRange();
10421           }
10422           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10423                            StaticAssertOnlyMessage)
10424               << (FirstStr == nullptr);
10425           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10426                           StaticAssertOnlyMessage)
10427               << (SecondStr == nullptr);
10428           Diagnosed = true;
10429           break;
10430         }
10431 
10432         if (FirstStr && SecondStr &&
10433             FirstStr->getString() != SecondStr->getString()) {
10434           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10435                            FirstStr->getSourceRange(), StaticAssertMessage);
10436           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10437                           SecondStr->getSourceRange(), StaticAssertMessage);
10438           Diagnosed = true;
10439           break;
10440         }
10441         break;
10442       }
10443       case Field: {
10444         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10445                                  cast<FieldDecl>(FirstDecl),
10446                                  cast<FieldDecl>(SecondDecl));
10447         break;
10448       }
10449       case CXXMethod: {
10450         enum {
10451           DiagMethod,
10452           DiagConstructor,
10453           DiagDestructor,
10454         } FirstMethodType,
10455             SecondMethodType;
10456         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10457           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10458           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10459           return DiagMethod;
10460         };
10461         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10462         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10463         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10464         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10465         auto FirstName = FirstMethod->getDeclName();
10466         auto SecondName = SecondMethod->getDeclName();
10467         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10468           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10469                            FirstMethod->getSourceRange(), MethodName)
10470               << FirstMethodType << FirstName;
10471           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10472                           SecondMethod->getSourceRange(), MethodName)
10473               << SecondMethodType << SecondName;
10474 
10475           Diagnosed = true;
10476           break;
10477         }
10478 
10479         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10480         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10481         if (FirstDeleted != SecondDeleted) {
10482           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10483                            FirstMethod->getSourceRange(), MethodDeleted)
10484               << FirstMethodType << FirstName << FirstDeleted;
10485 
10486           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10487                           SecondMethod->getSourceRange(), MethodDeleted)
10488               << SecondMethodType << SecondName << SecondDeleted;
10489           Diagnosed = true;
10490           break;
10491         }
10492 
10493         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10494         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10495         if (FirstDefaulted != SecondDefaulted) {
10496           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10497                            FirstMethod->getSourceRange(), MethodDefaulted)
10498               << FirstMethodType << FirstName << FirstDefaulted;
10499 
10500           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10501                           SecondMethod->getSourceRange(), MethodDefaulted)
10502               << SecondMethodType << SecondName << SecondDefaulted;
10503           Diagnosed = true;
10504           break;
10505         }
10506 
10507         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10508         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10509         const bool FirstPure = FirstMethod->isPure();
10510         const bool SecondPure = SecondMethod->isPure();
10511         if ((FirstVirtual || SecondVirtual) &&
10512             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10513           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10514                            FirstMethod->getSourceRange(), MethodVirtual)
10515               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10516           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10517                           SecondMethod->getSourceRange(), MethodVirtual)
10518               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10519           Diagnosed = true;
10520           break;
10521         }
10522 
10523         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10524         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10525         // class needs to be checked instead.
10526         const auto FirstStorage = FirstMethod->getStorageClass();
10527         const auto SecondStorage = SecondMethod->getStorageClass();
10528         const bool FirstStatic = FirstStorage == SC_Static;
10529         const bool SecondStatic = SecondStorage == SC_Static;
10530         if (FirstStatic != SecondStatic) {
10531           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10532                            FirstMethod->getSourceRange(), MethodStatic)
10533               << FirstMethodType << FirstName << FirstStatic;
10534           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10535                           SecondMethod->getSourceRange(), MethodStatic)
10536               << SecondMethodType << SecondName << SecondStatic;
10537           Diagnosed = true;
10538           break;
10539         }
10540 
10541         const bool FirstVolatile = FirstMethod->isVolatile();
10542         const bool SecondVolatile = SecondMethod->isVolatile();
10543         if (FirstVolatile != SecondVolatile) {
10544           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10545                            FirstMethod->getSourceRange(), MethodVolatile)
10546               << FirstMethodType << FirstName << FirstVolatile;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(), MethodVolatile)
10549               << SecondMethodType << SecondName << SecondVolatile;
10550           Diagnosed = true;
10551           break;
10552         }
10553 
10554         const bool FirstConst = FirstMethod->isConst();
10555         const bool SecondConst = SecondMethod->isConst();
10556         if (FirstConst != SecondConst) {
10557           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10558                            FirstMethod->getSourceRange(), MethodConst)
10559               << FirstMethodType << FirstName << FirstConst;
10560           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10561                           SecondMethod->getSourceRange(), MethodConst)
10562               << SecondMethodType << SecondName << SecondConst;
10563           Diagnosed = true;
10564           break;
10565         }
10566 
10567         const bool FirstInline = FirstMethod->isInlineSpecified();
10568         const bool SecondInline = SecondMethod->isInlineSpecified();
10569         if (FirstInline != SecondInline) {
10570           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10571                            FirstMethod->getSourceRange(), MethodInline)
10572               << FirstMethodType << FirstName << FirstInline;
10573           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10574                           SecondMethod->getSourceRange(), MethodInline)
10575               << SecondMethodType << SecondName << SecondInline;
10576           Diagnosed = true;
10577           break;
10578         }
10579 
10580         const unsigned FirstNumParameters = FirstMethod->param_size();
10581         const unsigned SecondNumParameters = SecondMethod->param_size();
10582         if (FirstNumParameters != SecondNumParameters) {
10583           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10584                            FirstMethod->getSourceRange(),
10585                            MethodNumberParameters)
10586               << FirstMethodType << FirstName << FirstNumParameters;
10587           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10588                           SecondMethod->getSourceRange(),
10589                           MethodNumberParameters)
10590               << SecondMethodType << SecondName << SecondNumParameters;
10591           Diagnosed = true;
10592           break;
10593         }
10594 
10595         // Need this status boolean to know when break out of the switch.
10596         bool ParameterMismatch = false;
10597         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10598           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10599           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10600 
10601           QualType FirstParamType = FirstParam->getType();
10602           QualType SecondParamType = SecondParam->getType();
10603           if (FirstParamType != SecondParamType &&
10604               ComputeQualTypeODRHash(FirstParamType) !=
10605                   ComputeQualTypeODRHash(SecondParamType)) {
10606             if (const DecayedType *ParamDecayedType =
10607                     FirstParamType->getAs<DecayedType>()) {
10608               ODRDiagDeclError(
10609                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10610                   FirstMethod->getSourceRange(), MethodParameterType)
10611                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10612                   << true << ParamDecayedType->getOriginalType();
10613             } else {
10614               ODRDiagDeclError(
10615                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10616                   FirstMethod->getSourceRange(), MethodParameterType)
10617                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10618                   << false;
10619             }
10620 
10621             if (const DecayedType *ParamDecayedType =
10622                     SecondParamType->getAs<DecayedType>()) {
10623               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10624                               SecondMethod->getSourceRange(),
10625                               MethodParameterType)
10626                   << SecondMethodType << SecondName << (I + 1)
10627                   << SecondParamType << true
10628                   << ParamDecayedType->getOriginalType();
10629             } else {
10630               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10631                               SecondMethod->getSourceRange(),
10632                               MethodParameterType)
10633                   << SecondMethodType << SecondName << (I + 1)
10634                   << SecondParamType << false;
10635             }
10636             ParameterMismatch = true;
10637             break;
10638           }
10639 
10640           DeclarationName FirstParamName = FirstParam->getDeclName();
10641           DeclarationName SecondParamName = SecondParam->getDeclName();
10642           if (FirstParamName != SecondParamName) {
10643             ODRDiagDeclError(FirstRecord, FirstModule,
10644                              FirstMethod->getLocation(),
10645                              FirstMethod->getSourceRange(), MethodParameterName)
10646                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10647             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10648                             SecondMethod->getSourceRange(), MethodParameterName)
10649                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10650             ParameterMismatch = true;
10651             break;
10652           }
10653 
10654           const Expr *FirstInit = FirstParam->getInit();
10655           const Expr *SecondInit = SecondParam->getInit();
10656           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10657             ODRDiagDeclError(FirstRecord, FirstModule,
10658                              FirstMethod->getLocation(),
10659                              FirstMethod->getSourceRange(),
10660                              MethodParameterSingleDefaultArgument)
10661                 << FirstMethodType << FirstName << (I + 1)
10662                 << (FirstInit == nullptr)
10663                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10664             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10665                             SecondMethod->getSourceRange(),
10666                             MethodParameterSingleDefaultArgument)
10667                 << SecondMethodType << SecondName << (I + 1)
10668                 << (SecondInit == nullptr)
10669                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10670             ParameterMismatch = true;
10671             break;
10672           }
10673 
10674           if (FirstInit && SecondInit &&
10675               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10676             ODRDiagDeclError(FirstRecord, FirstModule,
10677                              FirstMethod->getLocation(),
10678                              FirstMethod->getSourceRange(),
10679                              MethodParameterDifferentDefaultArgument)
10680                 << FirstMethodType << FirstName << (I + 1)
10681                 << FirstInit->getSourceRange();
10682             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10683                             SecondMethod->getSourceRange(),
10684                             MethodParameterDifferentDefaultArgument)
10685                 << SecondMethodType << SecondName << (I + 1)
10686                 << SecondInit->getSourceRange();
10687             ParameterMismatch = true;
10688             break;
10689 
10690           }
10691         }
10692 
10693         if (ParameterMismatch) {
10694           Diagnosed = true;
10695           break;
10696         }
10697 
10698         const auto *FirstTemplateArgs =
10699             FirstMethod->getTemplateSpecializationArgs();
10700         const auto *SecondTemplateArgs =
10701             SecondMethod->getTemplateSpecializationArgs();
10702 
10703         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10704             (!FirstTemplateArgs && SecondTemplateArgs)) {
10705           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10706                            FirstMethod->getSourceRange(),
10707                            MethodNoTemplateArguments)
10708               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10709           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10710                           SecondMethod->getSourceRange(),
10711                           MethodNoTemplateArguments)
10712               << SecondMethodType << SecondName
10713               << (SecondTemplateArgs != nullptr);
10714 
10715           Diagnosed = true;
10716           break;
10717         }
10718 
10719         if (FirstTemplateArgs && SecondTemplateArgs) {
10720           // Remove pack expansions from argument list.
10721           auto ExpandTemplateArgumentList =
10722               [](const TemplateArgumentList *TAL) {
10723                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10724                 for (const TemplateArgument &TA : TAL->asArray()) {
10725                   if (TA.getKind() != TemplateArgument::Pack) {
10726                     ExpandedList.push_back(&TA);
10727                     continue;
10728                   }
10729                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10730                     ExpandedList.push_back(&PackTA);
10731                   }
10732                 }
10733                 return ExpandedList;
10734               };
10735           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10736               ExpandTemplateArgumentList(FirstTemplateArgs);
10737           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10738               ExpandTemplateArgumentList(SecondTemplateArgs);
10739 
10740           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10741             ODRDiagDeclError(FirstRecord, FirstModule,
10742                              FirstMethod->getLocation(),
10743                              FirstMethod->getSourceRange(),
10744                              MethodDifferentNumberTemplateArguments)
10745                 << FirstMethodType << FirstName
10746                 << (unsigned)FirstExpandedList.size();
10747             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10748                             SecondMethod->getSourceRange(),
10749                             MethodDifferentNumberTemplateArguments)
10750                 << SecondMethodType << SecondName
10751                 << (unsigned)SecondExpandedList.size();
10752 
10753             Diagnosed = true;
10754             break;
10755           }
10756 
10757           bool TemplateArgumentMismatch = false;
10758           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10759             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10760                                    &SecondTA = *SecondExpandedList[i];
10761             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10762                 ComputeTemplateArgumentODRHash(SecondTA)) {
10763               continue;
10764             }
10765 
10766             ODRDiagDeclError(
10767                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10768                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10769                 << FirstMethodType << FirstName << FirstTA << i + 1;
10770             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10771                             SecondMethod->getSourceRange(),
10772                             MethodDifferentTemplateArgument)
10773                 << SecondMethodType << SecondName << SecondTA << i + 1;
10774 
10775             TemplateArgumentMismatch = true;
10776             break;
10777           }
10778 
10779           if (TemplateArgumentMismatch) {
10780             Diagnosed = true;
10781             break;
10782           }
10783         }
10784 
10785         // Compute the hash of the method as if it has no body.
10786         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10787           Hash.clear();
10788           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10789           return Hash.CalculateHash();
10790         };
10791 
10792         // Compare the hash generated to the hash stored.  A difference means
10793         // that a body was present in the original source.  Due to merging,
10794         // the stardard way of detecting a body will not work.
10795         const bool HasFirstBody =
10796             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10797         const bool HasSecondBody =
10798             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10799 
10800         if (HasFirstBody != HasSecondBody) {
10801           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10802                            FirstMethod->getSourceRange(), MethodSingleBody)
10803               << FirstMethodType << FirstName << HasFirstBody;
10804           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10805                           SecondMethod->getSourceRange(), MethodSingleBody)
10806               << SecondMethodType << SecondName << HasSecondBody;
10807           Diagnosed = true;
10808           break;
10809         }
10810 
10811         if (HasFirstBody && HasSecondBody) {
10812           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10813                            FirstMethod->getSourceRange(), MethodDifferentBody)
10814               << FirstMethodType << FirstName;
10815           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10816                           SecondMethod->getSourceRange(), MethodDifferentBody)
10817               << SecondMethodType << SecondName;
10818           Diagnosed = true;
10819           break;
10820         }
10821 
10822         break;
10823       }
10824       case TypeAlias:
10825       case TypeDef: {
10826         Diagnosed = ODRDiagTypeDefOrAlias(
10827             FirstRecord, FirstModule, SecondModule,
10828             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10829             FirstDiffType == TypeAlias);
10830         break;
10831       }
10832       case Var: {
10833         Diagnosed =
10834             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10835                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10836         break;
10837       }
10838       case Friend: {
10839         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10840         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10841 
10842         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10843         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10844 
10845         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10846         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10847 
10848         if (FirstND && SecondND) {
10849           ODRDiagDeclError(FirstRecord, FirstModule,
10850                            FirstFriend->getFriendLoc(),
10851                            FirstFriend->getSourceRange(), FriendFunction)
10852               << FirstND;
10853           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10854                           SecondFriend->getSourceRange(), FriendFunction)
10855               << SecondND;
10856 
10857           Diagnosed = true;
10858           break;
10859         }
10860 
10861         if (FirstTSI && SecondTSI) {
10862           QualType FirstFriendType = FirstTSI->getType();
10863           QualType SecondFriendType = SecondTSI->getType();
10864           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10865                  ComputeQualTypeODRHash(SecondFriendType));
10866           ODRDiagDeclError(FirstRecord, FirstModule,
10867                            FirstFriend->getFriendLoc(),
10868                            FirstFriend->getSourceRange(), FriendType)
10869               << FirstFriendType;
10870           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10871                           SecondFriend->getSourceRange(), FriendType)
10872               << SecondFriendType;
10873           Diagnosed = true;
10874           break;
10875         }
10876 
10877         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10878                          FirstFriend->getSourceRange(), FriendTypeFunction)
10879             << (FirstTSI == nullptr);
10880         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10881                         SecondFriend->getSourceRange(), FriendTypeFunction)
10882             << (SecondTSI == nullptr);
10883 
10884         Diagnosed = true;
10885         break;
10886       }
10887       case FunctionTemplate: {
10888         FunctionTemplateDecl *FirstTemplate =
10889             cast<FunctionTemplateDecl>(FirstDecl);
10890         FunctionTemplateDecl *SecondTemplate =
10891             cast<FunctionTemplateDecl>(SecondDecl);
10892 
10893         TemplateParameterList *FirstTPL =
10894             FirstTemplate->getTemplateParameters();
10895         TemplateParameterList *SecondTPL =
10896             SecondTemplate->getTemplateParameters();
10897 
10898         if (FirstTPL->size() != SecondTPL->size()) {
10899           ODRDiagDeclError(FirstRecord, FirstModule,
10900                            FirstTemplate->getLocation(),
10901                            FirstTemplate->getSourceRange(),
10902                            FunctionTemplateDifferentNumberParameters)
10903               << FirstTemplate << FirstTPL->size();
10904           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10905                           SecondTemplate->getSourceRange(),
10906                           FunctionTemplateDifferentNumberParameters)
10907               << SecondTemplate << SecondTPL->size();
10908 
10909           Diagnosed = true;
10910           break;
10911         }
10912 
10913         bool ParameterMismatch = false;
10914         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10915           NamedDecl *FirstParam = FirstTPL->getParam(i);
10916           NamedDecl *SecondParam = SecondTPL->getParam(i);
10917 
10918           if (FirstParam->getKind() != SecondParam->getKind()) {
10919             enum {
10920               TemplateTypeParameter,
10921               NonTypeTemplateParameter,
10922               TemplateTemplateParameter,
10923             };
10924             auto GetParamType = [](NamedDecl *D) {
10925               switch (D->getKind()) {
10926                 default:
10927                   llvm_unreachable("Unexpected template parameter type");
10928                 case Decl::TemplateTypeParm:
10929                   return TemplateTypeParameter;
10930                 case Decl::NonTypeTemplateParm:
10931                   return NonTypeTemplateParameter;
10932                 case Decl::TemplateTemplateParm:
10933                   return TemplateTemplateParameter;
10934               }
10935             };
10936 
10937             ODRDiagDeclError(FirstRecord, FirstModule,
10938                              FirstTemplate->getLocation(),
10939                              FirstTemplate->getSourceRange(),
10940                              FunctionTemplateParameterDifferentKind)
10941                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10942             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10943                             SecondTemplate->getSourceRange(),
10944                             FunctionTemplateParameterDifferentKind)
10945                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10946 
10947             ParameterMismatch = true;
10948             break;
10949           }
10950 
10951           if (FirstParam->getName() != SecondParam->getName()) {
10952             ODRDiagDeclError(
10953                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10954                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10955                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10956                 << FirstParam;
10957             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10958                             SecondTemplate->getSourceRange(),
10959                             FunctionTemplateParameterName)
10960                 << SecondTemplate << (i + 1)
10961                 << (bool)SecondParam->getIdentifier() << SecondParam;
10962             ParameterMismatch = true;
10963             break;
10964           }
10965 
10966           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10967               isa<TemplateTypeParmDecl>(SecondParam)) {
10968             TemplateTypeParmDecl *FirstTTPD =
10969                 cast<TemplateTypeParmDecl>(FirstParam);
10970             TemplateTypeParmDecl *SecondTTPD =
10971                 cast<TemplateTypeParmDecl>(SecondParam);
10972             bool HasFirstDefaultArgument =
10973                 FirstTTPD->hasDefaultArgument() &&
10974                 !FirstTTPD->defaultArgumentWasInherited();
10975             bool HasSecondDefaultArgument =
10976                 SecondTTPD->hasDefaultArgument() &&
10977                 !SecondTTPD->defaultArgumentWasInherited();
10978             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10979               ODRDiagDeclError(FirstRecord, FirstModule,
10980                                FirstTemplate->getLocation(),
10981                                FirstTemplate->getSourceRange(),
10982                                FunctionTemplateParameterSingleDefaultArgument)
10983                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10984               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10985                               SecondTemplate->getSourceRange(),
10986                               FunctionTemplateParameterSingleDefaultArgument)
10987                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10988               ParameterMismatch = true;
10989               break;
10990             }
10991 
10992             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10993               QualType FirstType = FirstTTPD->getDefaultArgument();
10994               QualType SecondType = SecondTTPD->getDefaultArgument();
10995               if (ComputeQualTypeODRHash(FirstType) !=
10996                   ComputeQualTypeODRHash(SecondType)) {
10997                 ODRDiagDeclError(
10998                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10999                     FirstTemplate->getSourceRange(),
11000                     FunctionTemplateParameterDifferentDefaultArgument)
11001                     << FirstTemplate << (i + 1) << FirstType;
11002                 ODRDiagDeclNote(
11003                     SecondModule, SecondTemplate->getLocation(),
11004                     SecondTemplate->getSourceRange(),
11005                     FunctionTemplateParameterDifferentDefaultArgument)
11006                     << SecondTemplate << (i + 1) << SecondType;
11007                 ParameterMismatch = true;
11008                 break;
11009               }
11010             }
11011 
11012             if (FirstTTPD->isParameterPack() !=
11013                 SecondTTPD->isParameterPack()) {
11014               ODRDiagDeclError(FirstRecord, FirstModule,
11015                                FirstTemplate->getLocation(),
11016                                FirstTemplate->getSourceRange(),
11017                                FunctionTemplatePackParameter)
11018                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11019               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11020                               SecondTemplate->getSourceRange(),
11021                               FunctionTemplatePackParameter)
11022                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11023               ParameterMismatch = true;
11024               break;
11025             }
11026           }
11027 
11028           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11029               isa<TemplateTemplateParmDecl>(SecondParam)) {
11030             TemplateTemplateParmDecl *FirstTTPD =
11031                 cast<TemplateTemplateParmDecl>(FirstParam);
11032             TemplateTemplateParmDecl *SecondTTPD =
11033                 cast<TemplateTemplateParmDecl>(SecondParam);
11034 
11035             TemplateParameterList *FirstTPL =
11036                 FirstTTPD->getTemplateParameters();
11037             TemplateParameterList *SecondTPL =
11038                 SecondTTPD->getTemplateParameters();
11039 
11040             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11041                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11042               ODRDiagDeclError(FirstRecord, FirstModule,
11043                                FirstTemplate->getLocation(),
11044                                FirstTemplate->getSourceRange(),
11045                                FunctionTemplateParameterDifferentType)
11046                   << FirstTemplate << (i + 1);
11047               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11048                               SecondTemplate->getSourceRange(),
11049                               FunctionTemplateParameterDifferentType)
11050                   << SecondTemplate << (i + 1);
11051               ParameterMismatch = true;
11052               break;
11053             }
11054 
11055             bool HasFirstDefaultArgument =
11056                 FirstTTPD->hasDefaultArgument() &&
11057                 !FirstTTPD->defaultArgumentWasInherited();
11058             bool HasSecondDefaultArgument =
11059                 SecondTTPD->hasDefaultArgument() &&
11060                 !SecondTTPD->defaultArgumentWasInherited();
11061             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11062               ODRDiagDeclError(FirstRecord, FirstModule,
11063                                FirstTemplate->getLocation(),
11064                                FirstTemplate->getSourceRange(),
11065                                FunctionTemplateParameterSingleDefaultArgument)
11066                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11067               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11068                               SecondTemplate->getSourceRange(),
11069                               FunctionTemplateParameterSingleDefaultArgument)
11070                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11071               ParameterMismatch = true;
11072               break;
11073             }
11074 
11075             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11076               TemplateArgument FirstTA =
11077                   FirstTTPD->getDefaultArgument().getArgument();
11078               TemplateArgument SecondTA =
11079                   SecondTTPD->getDefaultArgument().getArgument();
11080               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11081                   ComputeTemplateArgumentODRHash(SecondTA)) {
11082                 ODRDiagDeclError(
11083                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11084                     FirstTemplate->getSourceRange(),
11085                     FunctionTemplateParameterDifferentDefaultArgument)
11086                     << FirstTemplate << (i + 1) << FirstTA;
11087                 ODRDiagDeclNote(
11088                     SecondModule, SecondTemplate->getLocation(),
11089                     SecondTemplate->getSourceRange(),
11090                     FunctionTemplateParameterDifferentDefaultArgument)
11091                     << SecondTemplate << (i + 1) << SecondTA;
11092                 ParameterMismatch = true;
11093                 break;
11094               }
11095             }
11096 
11097             if (FirstTTPD->isParameterPack() !=
11098                 SecondTTPD->isParameterPack()) {
11099               ODRDiagDeclError(FirstRecord, FirstModule,
11100                                FirstTemplate->getLocation(),
11101                                FirstTemplate->getSourceRange(),
11102                                FunctionTemplatePackParameter)
11103                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11104               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11105                               SecondTemplate->getSourceRange(),
11106                               FunctionTemplatePackParameter)
11107                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11108               ParameterMismatch = true;
11109               break;
11110             }
11111           }
11112 
11113           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11114               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11115             NonTypeTemplateParmDecl *FirstNTTPD =
11116                 cast<NonTypeTemplateParmDecl>(FirstParam);
11117             NonTypeTemplateParmDecl *SecondNTTPD =
11118                 cast<NonTypeTemplateParmDecl>(SecondParam);
11119 
11120             QualType FirstType = FirstNTTPD->getType();
11121             QualType SecondType = SecondNTTPD->getType();
11122             if (ComputeQualTypeODRHash(FirstType) !=
11123                 ComputeQualTypeODRHash(SecondType)) {
11124               ODRDiagDeclError(FirstRecord, FirstModule,
11125                                FirstTemplate->getLocation(),
11126                                FirstTemplate->getSourceRange(),
11127                                FunctionTemplateParameterDifferentType)
11128                   << FirstTemplate << (i + 1);
11129               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11130                               SecondTemplate->getSourceRange(),
11131                               FunctionTemplateParameterDifferentType)
11132                   << SecondTemplate << (i + 1);
11133               ParameterMismatch = true;
11134               break;
11135             }
11136 
11137             bool HasFirstDefaultArgument =
11138                 FirstNTTPD->hasDefaultArgument() &&
11139                 !FirstNTTPD->defaultArgumentWasInherited();
11140             bool HasSecondDefaultArgument =
11141                 SecondNTTPD->hasDefaultArgument() &&
11142                 !SecondNTTPD->defaultArgumentWasInherited();
11143             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11144               ODRDiagDeclError(FirstRecord, FirstModule,
11145                                FirstTemplate->getLocation(),
11146                                FirstTemplate->getSourceRange(),
11147                                FunctionTemplateParameterSingleDefaultArgument)
11148                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11149               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11150                               SecondTemplate->getSourceRange(),
11151                               FunctionTemplateParameterSingleDefaultArgument)
11152                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11153               ParameterMismatch = true;
11154               break;
11155             }
11156 
11157             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11158               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11159               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11160               if (ComputeODRHash(FirstDefaultArgument) !=
11161                   ComputeODRHash(SecondDefaultArgument)) {
11162                 ODRDiagDeclError(
11163                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11164                     FirstTemplate->getSourceRange(),
11165                     FunctionTemplateParameterDifferentDefaultArgument)
11166                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11167                 ODRDiagDeclNote(
11168                     SecondModule, SecondTemplate->getLocation(),
11169                     SecondTemplate->getSourceRange(),
11170                     FunctionTemplateParameterDifferentDefaultArgument)
11171                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11172                 ParameterMismatch = true;
11173                 break;
11174               }
11175             }
11176 
11177             if (FirstNTTPD->isParameterPack() !=
11178                 SecondNTTPD->isParameterPack()) {
11179               ODRDiagDeclError(FirstRecord, FirstModule,
11180                                FirstTemplate->getLocation(),
11181                                FirstTemplate->getSourceRange(),
11182                                FunctionTemplatePackParameter)
11183                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11184               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11185                               SecondTemplate->getSourceRange(),
11186                               FunctionTemplatePackParameter)
11187                   << SecondTemplate << (i + 1)
11188                   << SecondNTTPD->isParameterPack();
11189               ParameterMismatch = true;
11190               break;
11191             }
11192           }
11193         }
11194 
11195         if (ParameterMismatch) {
11196           Diagnosed = true;
11197           break;
11198         }
11199 
11200         break;
11201       }
11202       }
11203 
11204       if (Diagnosed)
11205         continue;
11206 
11207       Diag(FirstDecl->getLocation(),
11208            diag::err_module_odr_violation_mismatch_decl_unknown)
11209           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11210           << FirstDecl->getSourceRange();
11211       Diag(SecondDecl->getLocation(),
11212            diag::note_module_odr_violation_mismatch_decl_unknown)
11213           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11214       Diagnosed = true;
11215     }
11216 
11217     if (!Diagnosed) {
11218       // All definitions are updates to the same declaration. This happens if a
11219       // module instantiates the declaration of a class template specialization
11220       // and two or more other modules instantiate its definition.
11221       //
11222       // FIXME: Indicate which modules had instantiations of this definition.
11223       // FIXME: How can this even happen?
11224       Diag(Merge.first->getLocation(),
11225            diag::err_module_odr_violation_different_instantiations)
11226         << Merge.first;
11227     }
11228   }
11229 
11230   // Issue ODR failures diagnostics for functions.
11231   for (auto &Merge : FunctionOdrMergeFailures) {
11232     enum ODRFunctionDifference {
11233       ReturnType,
11234       ParameterName,
11235       ParameterType,
11236       ParameterSingleDefaultArgument,
11237       ParameterDifferentDefaultArgument,
11238       FunctionBody,
11239     };
11240 
11241     FunctionDecl *FirstFunction = Merge.first;
11242     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11243 
11244     bool Diagnosed = false;
11245     for (auto &SecondFunction : Merge.second) {
11246 
11247       if (FirstFunction == SecondFunction)
11248         continue;
11249 
11250       std::string SecondModule =
11251           getOwningModuleNameForDiagnostic(SecondFunction);
11252 
11253       auto ODRDiagError = [FirstFunction, &FirstModule,
11254                            this](SourceLocation Loc, SourceRange Range,
11255                                  ODRFunctionDifference DiffType) {
11256         return Diag(Loc, diag::err_module_odr_violation_function)
11257                << FirstFunction << FirstModule.empty() << FirstModule << Range
11258                << DiffType;
11259       };
11260       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11261                                                SourceRange Range,
11262                                                ODRFunctionDifference DiffType) {
11263         return Diag(Loc, diag::note_module_odr_violation_function)
11264                << SecondModule << Range << DiffType;
11265       };
11266 
11267       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11268           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11269         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11270                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11271             << FirstFunction->getReturnType();
11272         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11273                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11274             << SecondFunction->getReturnType();
11275         Diagnosed = true;
11276         break;
11277       }
11278 
11279       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11280              "Merged functions with different number of parameters");
11281 
11282       auto ParamSize = FirstFunction->param_size();
11283       bool ParameterMismatch = false;
11284       for (unsigned I = 0; I < ParamSize; ++I) {
11285         auto *FirstParam = FirstFunction->getParamDecl(I);
11286         auto *SecondParam = SecondFunction->getParamDecl(I);
11287 
11288         assert(getContext().hasSameType(FirstParam->getType(),
11289                                       SecondParam->getType()) &&
11290                "Merged function has different parameter types.");
11291 
11292         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11293           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11294                        ParameterName)
11295               << I + 1 << FirstParam->getDeclName();
11296           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11297                       ParameterName)
11298               << I + 1 << SecondParam->getDeclName();
11299           ParameterMismatch = true;
11300           break;
11301         };
11302 
11303         QualType FirstParamType = FirstParam->getType();
11304         QualType SecondParamType = SecondParam->getType();
11305         if (FirstParamType != SecondParamType &&
11306             ComputeQualTypeODRHash(FirstParamType) !=
11307                 ComputeQualTypeODRHash(SecondParamType)) {
11308           if (const DecayedType *ParamDecayedType =
11309                   FirstParamType->getAs<DecayedType>()) {
11310             ODRDiagError(FirstParam->getLocation(),
11311                          FirstParam->getSourceRange(), ParameterType)
11312                 << (I + 1) << FirstParamType << true
11313                 << ParamDecayedType->getOriginalType();
11314           } else {
11315             ODRDiagError(FirstParam->getLocation(),
11316                          FirstParam->getSourceRange(), ParameterType)
11317                 << (I + 1) << FirstParamType << false;
11318           }
11319 
11320           if (const DecayedType *ParamDecayedType =
11321                   SecondParamType->getAs<DecayedType>()) {
11322             ODRDiagNote(SecondParam->getLocation(),
11323                         SecondParam->getSourceRange(), ParameterType)
11324                 << (I + 1) << SecondParamType << true
11325                 << ParamDecayedType->getOriginalType();
11326           } else {
11327             ODRDiagNote(SecondParam->getLocation(),
11328                         SecondParam->getSourceRange(), ParameterType)
11329                 << (I + 1) << SecondParamType << false;
11330           }
11331           ParameterMismatch = true;
11332           break;
11333         }
11334 
11335         const Expr *FirstInit = FirstParam->getInit();
11336         const Expr *SecondInit = SecondParam->getInit();
11337         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11338           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11339                        ParameterSingleDefaultArgument)
11340               << (I + 1) << (FirstInit == nullptr)
11341               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11342           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11343                       ParameterSingleDefaultArgument)
11344               << (I + 1) << (SecondInit == nullptr)
11345               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11346           ParameterMismatch = true;
11347           break;
11348         }
11349 
11350         if (FirstInit && SecondInit &&
11351             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11352           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11353                        ParameterDifferentDefaultArgument)
11354               << (I + 1) << FirstInit->getSourceRange();
11355           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11356                       ParameterDifferentDefaultArgument)
11357               << (I + 1) << SecondInit->getSourceRange();
11358           ParameterMismatch = true;
11359           break;
11360         }
11361 
11362         assert(ComputeSubDeclODRHash(FirstParam) ==
11363                    ComputeSubDeclODRHash(SecondParam) &&
11364                "Undiagnosed parameter difference.");
11365       }
11366 
11367       if (ParameterMismatch) {
11368         Diagnosed = true;
11369         break;
11370       }
11371 
11372       // If no error has been generated before now, assume the problem is in
11373       // the body and generate a message.
11374       ODRDiagError(FirstFunction->getLocation(),
11375                    FirstFunction->getSourceRange(), FunctionBody);
11376       ODRDiagNote(SecondFunction->getLocation(),
11377                   SecondFunction->getSourceRange(), FunctionBody);
11378       Diagnosed = true;
11379       break;
11380     }
11381     (void)Diagnosed;
11382     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11383   }
11384 
11385   // Issue ODR failures diagnostics for enums.
11386   for (auto &Merge : EnumOdrMergeFailures) {
11387     enum ODREnumDifference {
11388       SingleScopedEnum,
11389       EnumTagKeywordMismatch,
11390       SingleSpecifiedType,
11391       DifferentSpecifiedTypes,
11392       DifferentNumberEnumConstants,
11393       EnumConstantName,
11394       EnumConstantSingleInitilizer,
11395       EnumConstantDifferentInitilizer,
11396     };
11397 
11398     // If we've already pointed out a specific problem with this enum, don't
11399     // bother issuing a general "something's different" diagnostic.
11400     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11401       continue;
11402 
11403     EnumDecl *FirstEnum = Merge.first;
11404     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11405 
11406     using DeclHashes =
11407         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11408     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11409                               DeclHashes &Hashes, EnumDecl *Enum) {
11410       for (auto *D : Enum->decls()) {
11411         // Due to decl merging, the first EnumDecl is the parent of
11412         // Decls in both records.
11413         if (!ODRHash::isWhitelistedDecl(D, FirstEnum))
11414           continue;
11415         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11416         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11417                             ComputeSubDeclODRHash(D));
11418       }
11419     };
11420     DeclHashes FirstHashes;
11421     PopulateHashes(FirstHashes, FirstEnum);
11422     bool Diagnosed = false;
11423     for (auto &SecondEnum : Merge.second) {
11424 
11425       if (FirstEnum == SecondEnum)
11426         continue;
11427 
11428       std::string SecondModule =
11429           getOwningModuleNameForDiagnostic(SecondEnum);
11430 
11431       auto ODRDiagError = [FirstEnum, &FirstModule,
11432                            this](SourceLocation Loc, SourceRange Range,
11433                                  ODREnumDifference DiffType) {
11434         return Diag(Loc, diag::err_module_odr_violation_enum)
11435                << FirstEnum << FirstModule.empty() << FirstModule << Range
11436                << DiffType;
11437       };
11438       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11439                                                SourceRange Range,
11440                                                ODREnumDifference DiffType) {
11441         return Diag(Loc, diag::note_module_odr_violation_enum)
11442                << SecondModule << Range << DiffType;
11443       };
11444 
11445       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11446         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11447                      SingleScopedEnum)
11448             << FirstEnum->isScoped();
11449         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11450                     SingleScopedEnum)
11451             << SecondEnum->isScoped();
11452         Diagnosed = true;
11453         continue;
11454       }
11455 
11456       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11457         if (FirstEnum->isScopedUsingClassTag() !=
11458             SecondEnum->isScopedUsingClassTag()) {
11459           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11460                        EnumTagKeywordMismatch)
11461               << FirstEnum->isScopedUsingClassTag();
11462           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11463                       EnumTagKeywordMismatch)
11464               << SecondEnum->isScopedUsingClassTag();
11465           Diagnosed = true;
11466           continue;
11467         }
11468       }
11469 
11470       QualType FirstUnderlyingType =
11471           FirstEnum->getIntegerTypeSourceInfo()
11472               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11473               : QualType();
11474       QualType SecondUnderlyingType =
11475           SecondEnum->getIntegerTypeSourceInfo()
11476               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11477               : QualType();
11478       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11479           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11480                        SingleSpecifiedType)
11481               << !FirstUnderlyingType.isNull();
11482           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11483                       SingleSpecifiedType)
11484               << !SecondUnderlyingType.isNull();
11485           Diagnosed = true;
11486           continue;
11487       }
11488 
11489       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11490         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11491             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11492           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11493                        DifferentSpecifiedTypes)
11494               << FirstUnderlyingType;
11495           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11496                       DifferentSpecifiedTypes)
11497               << SecondUnderlyingType;
11498           Diagnosed = true;
11499           continue;
11500         }
11501       }
11502 
11503       DeclHashes SecondHashes;
11504       PopulateHashes(SecondHashes, SecondEnum);
11505 
11506       if (FirstHashes.size() != SecondHashes.size()) {
11507         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11508                      DifferentNumberEnumConstants)
11509             << (int)FirstHashes.size();
11510         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11511                     DifferentNumberEnumConstants)
11512             << (int)SecondHashes.size();
11513         Diagnosed = true;
11514         continue;
11515       }
11516 
11517       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11518         if (FirstHashes[I].second == SecondHashes[I].second)
11519           continue;
11520         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11521         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11522 
11523         if (FirstEnumConstant->getDeclName() !=
11524             SecondEnumConstant->getDeclName()) {
11525 
11526           ODRDiagError(FirstEnumConstant->getLocation(),
11527                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11528               << I + 1 << FirstEnumConstant;
11529           ODRDiagNote(SecondEnumConstant->getLocation(),
11530                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11531               << I + 1 << SecondEnumConstant;
11532           Diagnosed = true;
11533           break;
11534         }
11535 
11536         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11537         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11538         if (!FirstInit && !SecondInit)
11539           continue;
11540 
11541         if (!FirstInit || !SecondInit) {
11542           ODRDiagError(FirstEnumConstant->getLocation(),
11543                        FirstEnumConstant->getSourceRange(),
11544                        EnumConstantSingleInitilizer)
11545               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11546           ODRDiagNote(SecondEnumConstant->getLocation(),
11547                       SecondEnumConstant->getSourceRange(),
11548                       EnumConstantSingleInitilizer)
11549               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11550           Diagnosed = true;
11551           break;
11552         }
11553 
11554         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11555           ODRDiagError(FirstEnumConstant->getLocation(),
11556                        FirstEnumConstant->getSourceRange(),
11557                        EnumConstantDifferentInitilizer)
11558               << I + 1 << FirstEnumConstant;
11559           ODRDiagNote(SecondEnumConstant->getLocation(),
11560                       SecondEnumConstant->getSourceRange(),
11561                       EnumConstantDifferentInitilizer)
11562               << I + 1 << SecondEnumConstant;
11563           Diagnosed = true;
11564           break;
11565         }
11566       }
11567     }
11568 
11569     (void)Diagnosed;
11570     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11571   }
11572 }
11573 
11574 void ASTReader::StartedDeserializing() {
11575   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11576     ReadTimer->startTimer();
11577 }
11578 
11579 void ASTReader::FinishedDeserializing() {
11580   assert(NumCurrentElementsDeserializing &&
11581          "FinishedDeserializing not paired with StartedDeserializing");
11582   if (NumCurrentElementsDeserializing == 1) {
11583     // We decrease NumCurrentElementsDeserializing only after pending actions
11584     // are finished, to avoid recursively re-calling finishPendingActions().
11585     finishPendingActions();
11586   }
11587   --NumCurrentElementsDeserializing;
11588 
11589   if (NumCurrentElementsDeserializing == 0) {
11590     // Propagate exception specification and deduced type updates along
11591     // redeclaration chains.
11592     //
11593     // We do this now rather than in finishPendingActions because we want to
11594     // be able to walk the complete redeclaration chains of the updated decls.
11595     while (!PendingExceptionSpecUpdates.empty() ||
11596            !PendingDeducedTypeUpdates.empty()) {
11597       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11598       PendingExceptionSpecUpdates.clear();
11599       for (auto Update : ESUpdates) {
11600         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11601         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11602         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11603         if (auto *Listener = getContext().getASTMutationListener())
11604           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11605         for (auto *Redecl : Update.second->redecls())
11606           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11607       }
11608 
11609       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11610       PendingDeducedTypeUpdates.clear();
11611       for (auto Update : DTUpdates) {
11612         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11613         // FIXME: If the return type is already deduced, check that it matches.
11614         getContext().adjustDeducedFunctionResultType(Update.first,
11615                                                      Update.second);
11616       }
11617     }
11618 
11619     if (ReadTimer)
11620       ReadTimer->stopTimer();
11621 
11622     diagnoseOdrViolations();
11623 
11624     // We are not in recursive loading, so it's safe to pass the "interesting"
11625     // decls to the consumer.
11626     if (Consumer)
11627       PassInterestingDeclsToConsumer();
11628   }
11629 }
11630 
11631 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11632   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11633     // Remove any fake results before adding any real ones.
11634     auto It = PendingFakeLookupResults.find(II);
11635     if (It != PendingFakeLookupResults.end()) {
11636       for (auto *ND : It->second)
11637         SemaObj->IdResolver.RemoveDecl(ND);
11638       // FIXME: this works around module+PCH performance issue.
11639       // Rather than erase the result from the map, which is O(n), just clear
11640       // the vector of NamedDecls.
11641       It->second.clear();
11642     }
11643   }
11644 
11645   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11646     SemaObj->TUScope->AddDecl(D);
11647   } else if (SemaObj->TUScope) {
11648     // Adding the decl to IdResolver may have failed because it was already in
11649     // (even though it was not added in scope). If it is already in, make sure
11650     // it gets in the scope as well.
11651     if (std::find(SemaObj->IdResolver.begin(Name),
11652                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11653       SemaObj->TUScope->AddDecl(D);
11654   }
11655 }
11656 
11657 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11658                      ASTContext *Context,
11659                      const PCHContainerReader &PCHContainerRdr,
11660                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11661                      StringRef isysroot, bool DisableValidation,
11662                      bool AllowASTWithCompilerErrors,
11663                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11664                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11665                      std::unique_ptr<llvm::Timer> ReadTimer)
11666     : Listener(DisableValidation
11667                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11668                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11669       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11670       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11671       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11672                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11673       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11674       DisableValidation(DisableValidation),
11675       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11676       AllowConfigurationMismatch(AllowConfigurationMismatch),
11677       ValidateSystemInputs(ValidateSystemInputs),
11678       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11679       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11680   SourceMgr.setExternalSLocEntrySource(this);
11681 
11682   for (const auto &Ext : Extensions) {
11683     auto BlockName = Ext->getExtensionMetadata().BlockName;
11684     auto Known = ModuleFileExtensions.find(BlockName);
11685     if (Known != ModuleFileExtensions.end()) {
11686       Diags.Report(diag::warn_duplicate_module_file_extension)
11687         << BlockName;
11688       continue;
11689     }
11690 
11691     ModuleFileExtensions.insert({BlockName, Ext});
11692   }
11693 }
11694 
11695 ASTReader::~ASTReader() {
11696   if (OwnsDeserializationListener)
11697     delete DeserializationListener;
11698 }
11699 
11700 IdentifierResolver &ASTReader::getIdResolver() {
11701   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11702 }
11703 
11704 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11705                                                unsigned AbbrevID) {
11706   Idx = 0;
11707   Record.clear();
11708   return Cursor.readRecord(AbbrevID, Record);
11709 }
11710 //===----------------------------------------------------------------------===//
11711 //// OMPClauseReader implementation
11712 ////===----------------------------------------------------------------------===//
11713 
11714 // This has to be in namespace clang because it's friended by all
11715 // of the OMP clauses.
11716 namespace clang {
11717 
11718 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11719   ASTRecordReader &Record;
11720   ASTContext &Context;
11721 
11722 public:
11723   OMPClauseReader(ASTRecordReader &Record)
11724       : Record(Record), Context(Record.getContext()) {}
11725 
11726 #define OMP_CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11727 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11728   OMPClause *readClause();
11729   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11730   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11731 };
11732 
11733 } // end namespace clang
11734 
11735 OMPClause *ASTRecordReader::readOMPClause() {
11736   return OMPClauseReader(*this).readClause();
11737 }
11738 
11739 OMPClause *OMPClauseReader::readClause() {
11740   OMPClause *C = nullptr;
11741   switch (llvm::omp::Clause(Record.readInt())) {
11742   case llvm::omp::OMPC_if:
11743     C = new (Context) OMPIfClause();
11744     break;
11745   case llvm::omp::OMPC_final:
11746     C = new (Context) OMPFinalClause();
11747     break;
11748   case llvm::omp::OMPC_num_threads:
11749     C = new (Context) OMPNumThreadsClause();
11750     break;
11751   case llvm::omp::OMPC_safelen:
11752     C = new (Context) OMPSafelenClause();
11753     break;
11754   case llvm::omp::OMPC_simdlen:
11755     C = new (Context) OMPSimdlenClause();
11756     break;
11757   case llvm::omp::OMPC_allocator:
11758     C = new (Context) OMPAllocatorClause();
11759     break;
11760   case llvm::omp::OMPC_collapse:
11761     C = new (Context) OMPCollapseClause();
11762     break;
11763   case llvm::omp::OMPC_default:
11764     C = new (Context) OMPDefaultClause();
11765     break;
11766   case llvm::omp::OMPC_proc_bind:
11767     C = new (Context) OMPProcBindClause();
11768     break;
11769   case llvm::omp::OMPC_schedule:
11770     C = new (Context) OMPScheduleClause();
11771     break;
11772   case llvm::omp::OMPC_ordered:
11773     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11774     break;
11775   case llvm::omp::OMPC_nowait:
11776     C = new (Context) OMPNowaitClause();
11777     break;
11778   case llvm::omp::OMPC_untied:
11779     C = new (Context) OMPUntiedClause();
11780     break;
11781   case llvm::omp::OMPC_mergeable:
11782     C = new (Context) OMPMergeableClause();
11783     break;
11784   case llvm::omp::OMPC_read:
11785     C = new (Context) OMPReadClause();
11786     break;
11787   case llvm::omp::OMPC_write:
11788     C = new (Context) OMPWriteClause();
11789     break;
11790   case llvm::omp::OMPC_update:
11791     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11792     break;
11793   case llvm::omp::OMPC_capture:
11794     C = new (Context) OMPCaptureClause();
11795     break;
11796   case llvm::omp::OMPC_seq_cst:
11797     C = new (Context) OMPSeqCstClause();
11798     break;
11799   case llvm::omp::OMPC_acq_rel:
11800     C = new (Context) OMPAcqRelClause();
11801     break;
11802   case llvm::omp::OMPC_acquire:
11803     C = new (Context) OMPAcquireClause();
11804     break;
11805   case llvm::omp::OMPC_release:
11806     C = new (Context) OMPReleaseClause();
11807     break;
11808   case llvm::omp::OMPC_relaxed:
11809     C = new (Context) OMPRelaxedClause();
11810     break;
11811   case llvm::omp::OMPC_threads:
11812     C = new (Context) OMPThreadsClause();
11813     break;
11814   case llvm::omp::OMPC_simd:
11815     C = new (Context) OMPSIMDClause();
11816     break;
11817   case llvm::omp::OMPC_nogroup:
11818     C = new (Context) OMPNogroupClause();
11819     break;
11820   case llvm::omp::OMPC_unified_address:
11821     C = new (Context) OMPUnifiedAddressClause();
11822     break;
11823   case llvm::omp::OMPC_unified_shared_memory:
11824     C = new (Context) OMPUnifiedSharedMemoryClause();
11825     break;
11826   case llvm::omp::OMPC_reverse_offload:
11827     C = new (Context) OMPReverseOffloadClause();
11828     break;
11829   case llvm::omp::OMPC_dynamic_allocators:
11830     C = new (Context) OMPDynamicAllocatorsClause();
11831     break;
11832   case llvm::omp::OMPC_atomic_default_mem_order:
11833     C = new (Context) OMPAtomicDefaultMemOrderClause();
11834     break;
11835  case llvm::omp::OMPC_private:
11836     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11837     break;
11838   case llvm::omp::OMPC_firstprivate:
11839     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11840     break;
11841   case llvm::omp::OMPC_lastprivate:
11842     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11843     break;
11844   case llvm::omp::OMPC_shared:
11845     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11846     break;
11847   case llvm::omp::OMPC_reduction: {
11848     unsigned N = Record.readInt();
11849     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11850     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11851     break;
11852   }
11853   case llvm::omp::OMPC_task_reduction:
11854     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11855     break;
11856   case llvm::omp::OMPC_in_reduction:
11857     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11858     break;
11859   case llvm::omp::OMPC_linear:
11860     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11861     break;
11862   case llvm::omp::OMPC_aligned:
11863     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11864     break;
11865   case llvm::omp::OMPC_copyin:
11866     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11867     break;
11868   case llvm::omp::OMPC_copyprivate:
11869     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11870     break;
11871   case llvm::omp::OMPC_flush:
11872     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11873     break;
11874   case llvm::omp::OMPC_depobj:
11875     C = OMPDepobjClause::CreateEmpty(Context);
11876     break;
11877   case llvm::omp::OMPC_depend: {
11878     unsigned NumVars = Record.readInt();
11879     unsigned NumLoops = Record.readInt();
11880     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11881     break;
11882   }
11883   case llvm::omp::OMPC_device:
11884     C = new (Context) OMPDeviceClause();
11885     break;
11886   case llvm::omp::OMPC_map: {
11887     OMPMappableExprListSizeTy Sizes;
11888     Sizes.NumVars = Record.readInt();
11889     Sizes.NumUniqueDeclarations = Record.readInt();
11890     Sizes.NumComponentLists = Record.readInt();
11891     Sizes.NumComponents = Record.readInt();
11892     C = OMPMapClause::CreateEmpty(Context, Sizes);
11893     break;
11894   }
11895   case llvm::omp::OMPC_num_teams:
11896     C = new (Context) OMPNumTeamsClause();
11897     break;
11898   case llvm::omp::OMPC_thread_limit:
11899     C = new (Context) OMPThreadLimitClause();
11900     break;
11901   case llvm::omp::OMPC_priority:
11902     C = new (Context) OMPPriorityClause();
11903     break;
11904   case llvm::omp::OMPC_grainsize:
11905     C = new (Context) OMPGrainsizeClause();
11906     break;
11907   case llvm::omp::OMPC_num_tasks:
11908     C = new (Context) OMPNumTasksClause();
11909     break;
11910   case llvm::omp::OMPC_hint:
11911     C = new (Context) OMPHintClause();
11912     break;
11913   case llvm::omp::OMPC_dist_schedule:
11914     C = new (Context) OMPDistScheduleClause();
11915     break;
11916   case llvm::omp::OMPC_defaultmap:
11917     C = new (Context) OMPDefaultmapClause();
11918     break;
11919   case llvm::omp::OMPC_to: {
11920     OMPMappableExprListSizeTy Sizes;
11921     Sizes.NumVars = Record.readInt();
11922     Sizes.NumUniqueDeclarations = Record.readInt();
11923     Sizes.NumComponentLists = Record.readInt();
11924     Sizes.NumComponents = Record.readInt();
11925     C = OMPToClause::CreateEmpty(Context, Sizes);
11926     break;
11927   }
11928   case llvm::omp::OMPC_from: {
11929     OMPMappableExprListSizeTy Sizes;
11930     Sizes.NumVars = Record.readInt();
11931     Sizes.NumUniqueDeclarations = Record.readInt();
11932     Sizes.NumComponentLists = Record.readInt();
11933     Sizes.NumComponents = Record.readInt();
11934     C = OMPFromClause::CreateEmpty(Context, Sizes);
11935     break;
11936   }
11937   case llvm::omp::OMPC_use_device_ptr: {
11938     OMPMappableExprListSizeTy Sizes;
11939     Sizes.NumVars = Record.readInt();
11940     Sizes.NumUniqueDeclarations = Record.readInt();
11941     Sizes.NumComponentLists = Record.readInt();
11942     Sizes.NumComponents = Record.readInt();
11943     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11944     break;
11945   }
11946   case llvm::omp::OMPC_use_device_addr: {
11947     OMPMappableExprListSizeTy Sizes;
11948     Sizes.NumVars = Record.readInt();
11949     Sizes.NumUniqueDeclarations = Record.readInt();
11950     Sizes.NumComponentLists = Record.readInt();
11951     Sizes.NumComponents = Record.readInt();
11952     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11953     break;
11954   }
11955   case llvm::omp::OMPC_is_device_ptr: {
11956     OMPMappableExprListSizeTy Sizes;
11957     Sizes.NumVars = Record.readInt();
11958     Sizes.NumUniqueDeclarations = Record.readInt();
11959     Sizes.NumComponentLists = Record.readInt();
11960     Sizes.NumComponents = Record.readInt();
11961     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11962     break;
11963   }
11964   case llvm::omp::OMPC_allocate:
11965     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11966     break;
11967   case llvm::omp::OMPC_nontemporal:
11968     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11969     break;
11970   case llvm::omp::OMPC_inclusive:
11971     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11972     break;
11973   case llvm::omp::OMPC_exclusive:
11974     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11975     break;
11976   case llvm::omp::OMPC_order:
11977     C = new (Context) OMPOrderClause();
11978     break;
11979   case llvm::omp::OMPC_destroy:
11980     C = new (Context) OMPDestroyClause();
11981     break;
11982   case llvm::omp::OMPC_detach:
11983     C = new (Context) OMPDetachClause();
11984     break;
11985   case llvm::omp::OMPC_uses_allocators:
11986     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11987     break;
11988   case llvm::omp::OMPC_affinity:
11989     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11990     break;
11991 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11992   case llvm::omp::Enum:                                                        \
11993     break;
11994 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11995   }
11996   assert(C && "Unknown OMPClause type");
11997 
11998   Visit(C);
11999   C->setLocStart(Record.readSourceLocation());
12000   C->setLocEnd(Record.readSourceLocation());
12001 
12002   return C;
12003 }
12004 
12005 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12006   C->setPreInitStmt(Record.readSubStmt(),
12007                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12008 }
12009 
12010 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12011   VisitOMPClauseWithPreInit(C);
12012   C->setPostUpdateExpr(Record.readSubExpr());
12013 }
12014 
12015 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12016   VisitOMPClauseWithPreInit(C);
12017   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12018   C->setNameModifierLoc(Record.readSourceLocation());
12019   C->setColonLoc(Record.readSourceLocation());
12020   C->setCondition(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12025   VisitOMPClauseWithPreInit(C);
12026   C->setCondition(Record.readSubExpr());
12027   C->setLParenLoc(Record.readSourceLocation());
12028 }
12029 
12030 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12031   VisitOMPClauseWithPreInit(C);
12032   C->setNumThreads(Record.readSubExpr());
12033   C->setLParenLoc(Record.readSourceLocation());
12034 }
12035 
12036 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12037   C->setSafelen(Record.readSubExpr());
12038   C->setLParenLoc(Record.readSourceLocation());
12039 }
12040 
12041 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12042   C->setSimdlen(Record.readSubExpr());
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12047   C->setAllocator(Record.readExpr());
12048   C->setLParenLoc(Record.readSourceLocation());
12049 }
12050 
12051 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12052   C->setNumForLoops(Record.readSubExpr());
12053   C->setLParenLoc(Record.readSourceLocation());
12054 }
12055 
12056 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12057   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12058   C->setLParenLoc(Record.readSourceLocation());
12059   C->setDefaultKindKwLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12063   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12064   C->setLParenLoc(Record.readSourceLocation());
12065   C->setProcBindKindKwLoc(Record.readSourceLocation());
12066 }
12067 
12068 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12069   VisitOMPClauseWithPreInit(C);
12070   C->setScheduleKind(
12071        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12072   C->setFirstScheduleModifier(
12073       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12074   C->setSecondScheduleModifier(
12075       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12076   C->setChunkSize(Record.readSubExpr());
12077   C->setLParenLoc(Record.readSourceLocation());
12078   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12079   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12080   C->setScheduleKindLoc(Record.readSourceLocation());
12081   C->setCommaLoc(Record.readSourceLocation());
12082 }
12083 
12084 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12085   C->setNumForLoops(Record.readSubExpr());
12086   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12087     C->setLoopNumIterations(I, Record.readSubExpr());
12088   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12089     C->setLoopCounter(I, Record.readSubExpr());
12090   C->setLParenLoc(Record.readSourceLocation());
12091 }
12092 
12093 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12094   C->setEventHandler(Record.readSubExpr());
12095   C->setLParenLoc(Record.readSourceLocation());
12096 }
12097 
12098 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12099 
12100 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12101 
12102 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12103 
12104 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12105 
12106 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12107 
12108 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12109   if (C->isExtended()) {
12110     C->setLParenLoc(Record.readSourceLocation());
12111     C->setArgumentLoc(Record.readSourceLocation());
12112     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12113   }
12114 }
12115 
12116 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12119 
12120 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12121 
12122 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12125 
12126 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12127 
12128 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12129 
12130 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12131 
12132 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12139     OMPUnifiedSharedMemoryClause *) {}
12140 
12141 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12142 
12143 void
12144 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12145 }
12146 
12147 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12148     OMPAtomicDefaultMemOrderClause *C) {
12149   C->setAtomicDefaultMemOrderKind(
12150       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12151   C->setLParenLoc(Record.readSourceLocation());
12152   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12153 }
12154 
12155 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12156   C->setLParenLoc(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 }
12168 
12169 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12170   VisitOMPClauseWithPreInit(C);
12171   C->setLParenLoc(Record.readSourceLocation());
12172   unsigned NumVars = C->varlist_size();
12173   SmallVector<Expr *, 16> Vars;
12174   Vars.reserve(NumVars);
12175   for (unsigned i = 0; i != NumVars; ++i)
12176     Vars.push_back(Record.readSubExpr());
12177   C->setVarRefs(Vars);
12178   Vars.clear();
12179   for (unsigned i = 0; i != NumVars; ++i)
12180     Vars.push_back(Record.readSubExpr());
12181   C->setPrivateCopies(Vars);
12182   Vars.clear();
12183   for (unsigned i = 0; i != NumVars; ++i)
12184     Vars.push_back(Record.readSubExpr());
12185   C->setInits(Vars);
12186 }
12187 
12188 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12189   VisitOMPClauseWithPostUpdate(C);
12190   C->setLParenLoc(Record.readSourceLocation());
12191   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12192   C->setKindLoc(Record.readSourceLocation());
12193   C->setColonLoc(Record.readSourceLocation());
12194   unsigned NumVars = C->varlist_size();
12195   SmallVector<Expr *, 16> Vars;
12196   Vars.reserve(NumVars);
12197   for (unsigned i = 0; i != NumVars; ++i)
12198     Vars.push_back(Record.readSubExpr());
12199   C->setVarRefs(Vars);
12200   Vars.clear();
12201   for (unsigned i = 0; i != NumVars; ++i)
12202     Vars.push_back(Record.readSubExpr());
12203   C->setPrivateCopies(Vars);
12204   Vars.clear();
12205   for (unsigned i = 0; i != NumVars; ++i)
12206     Vars.push_back(Record.readSubExpr());
12207   C->setSourceExprs(Vars);
12208   Vars.clear();
12209   for (unsigned i = 0; i != NumVars; ++i)
12210     Vars.push_back(Record.readSubExpr());
12211   C->setDestinationExprs(Vars);
12212   Vars.clear();
12213   for (unsigned i = 0; i != NumVars; ++i)
12214     Vars.push_back(Record.readSubExpr());
12215   C->setAssignmentOps(Vars);
12216 }
12217 
12218 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12219   C->setLParenLoc(Record.readSourceLocation());
12220   unsigned NumVars = C->varlist_size();
12221   SmallVector<Expr *, 16> Vars;
12222   Vars.reserve(NumVars);
12223   for (unsigned i = 0; i != NumVars; ++i)
12224     Vars.push_back(Record.readSubExpr());
12225   C->setVarRefs(Vars);
12226 }
12227 
12228 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12229   VisitOMPClauseWithPostUpdate(C);
12230   C->setLParenLoc(Record.readSourceLocation());
12231   C->setModifierLoc(Record.readSourceLocation());
12232   C->setColonLoc(Record.readSourceLocation());
12233   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12234   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12235   C->setQualifierLoc(NNSL);
12236   C->setNameInfo(DNI);
12237 
12238   unsigned NumVars = C->varlist_size();
12239   SmallVector<Expr *, 16> Vars;
12240   Vars.reserve(NumVars);
12241   for (unsigned i = 0; i != NumVars; ++i)
12242     Vars.push_back(Record.readSubExpr());
12243   C->setVarRefs(Vars);
12244   Vars.clear();
12245   for (unsigned i = 0; i != NumVars; ++i)
12246     Vars.push_back(Record.readSubExpr());
12247   C->setPrivates(Vars);
12248   Vars.clear();
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setLHSExprs(Vars);
12252   Vars.clear();
12253   for (unsigned i = 0; i != NumVars; ++i)
12254     Vars.push_back(Record.readSubExpr());
12255   C->setRHSExprs(Vars);
12256   Vars.clear();
12257   for (unsigned i = 0; i != NumVars; ++i)
12258     Vars.push_back(Record.readSubExpr());
12259   C->setReductionOps(Vars);
12260   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12261     Vars.clear();
12262     for (unsigned i = 0; i != NumVars; ++i)
12263       Vars.push_back(Record.readSubExpr());
12264     C->setInscanCopyOps(Vars);
12265     Vars.clear();
12266     for (unsigned i = 0; i != NumVars; ++i)
12267       Vars.push_back(Record.readSubExpr());
12268     C->setInscanCopyArrayTemps(Vars);
12269     Vars.clear();
12270     for (unsigned i = 0; i != NumVars; ++i)
12271       Vars.push_back(Record.readSubExpr());
12272     C->setInscanCopyArrayElems(Vars);
12273   }
12274 }
12275 
12276 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12277   VisitOMPClauseWithPostUpdate(C);
12278   C->setLParenLoc(Record.readSourceLocation());
12279   C->setColonLoc(Record.readSourceLocation());
12280   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12281   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12282   C->setQualifierLoc(NNSL);
12283   C->setNameInfo(DNI);
12284 
12285   unsigned NumVars = C->varlist_size();
12286   SmallVector<Expr *, 16> Vars;
12287   Vars.reserve(NumVars);
12288   for (unsigned I = 0; I != NumVars; ++I)
12289     Vars.push_back(Record.readSubExpr());
12290   C->setVarRefs(Vars);
12291   Vars.clear();
12292   for (unsigned I = 0; I != NumVars; ++I)
12293     Vars.push_back(Record.readSubExpr());
12294   C->setPrivates(Vars);
12295   Vars.clear();
12296   for (unsigned I = 0; I != NumVars; ++I)
12297     Vars.push_back(Record.readSubExpr());
12298   C->setLHSExprs(Vars);
12299   Vars.clear();
12300   for (unsigned I = 0; I != NumVars; ++I)
12301     Vars.push_back(Record.readSubExpr());
12302   C->setRHSExprs(Vars);
12303   Vars.clear();
12304   for (unsigned I = 0; I != NumVars; ++I)
12305     Vars.push_back(Record.readSubExpr());
12306   C->setReductionOps(Vars);
12307 }
12308 
12309 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12310   VisitOMPClauseWithPostUpdate(C);
12311   C->setLParenLoc(Record.readSourceLocation());
12312   C->setColonLoc(Record.readSourceLocation());
12313   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12314   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12315   C->setQualifierLoc(NNSL);
12316   C->setNameInfo(DNI);
12317 
12318   unsigned NumVars = C->varlist_size();
12319   SmallVector<Expr *, 16> Vars;
12320   Vars.reserve(NumVars);
12321   for (unsigned I = 0; I != NumVars; ++I)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setVarRefs(Vars);
12324   Vars.clear();
12325   for (unsigned I = 0; I != NumVars; ++I)
12326     Vars.push_back(Record.readSubExpr());
12327   C->setPrivates(Vars);
12328   Vars.clear();
12329   for (unsigned I = 0; I != NumVars; ++I)
12330     Vars.push_back(Record.readSubExpr());
12331   C->setLHSExprs(Vars);
12332   Vars.clear();
12333   for (unsigned I = 0; I != NumVars; ++I)
12334     Vars.push_back(Record.readSubExpr());
12335   C->setRHSExprs(Vars);
12336   Vars.clear();
12337   for (unsigned I = 0; I != NumVars; ++I)
12338     Vars.push_back(Record.readSubExpr());
12339   C->setReductionOps(Vars);
12340   Vars.clear();
12341   for (unsigned I = 0; I != NumVars; ++I)
12342     Vars.push_back(Record.readSubExpr());
12343   C->setTaskgroupDescriptors(Vars);
12344 }
12345 
12346 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12347   VisitOMPClauseWithPostUpdate(C);
12348   C->setLParenLoc(Record.readSourceLocation());
12349   C->setColonLoc(Record.readSourceLocation());
12350   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12351   C->setModifierLoc(Record.readSourceLocation());
12352   unsigned NumVars = C->varlist_size();
12353   SmallVector<Expr *, 16> Vars;
12354   Vars.reserve(NumVars);
12355   for (unsigned i = 0; i != NumVars; ++i)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setVarRefs(Vars);
12358   Vars.clear();
12359   for (unsigned i = 0; i != NumVars; ++i)
12360     Vars.push_back(Record.readSubExpr());
12361   C->setPrivates(Vars);
12362   Vars.clear();
12363   for (unsigned i = 0; i != NumVars; ++i)
12364     Vars.push_back(Record.readSubExpr());
12365   C->setInits(Vars);
12366   Vars.clear();
12367   for (unsigned i = 0; i != NumVars; ++i)
12368     Vars.push_back(Record.readSubExpr());
12369   C->setUpdates(Vars);
12370   Vars.clear();
12371   for (unsigned i = 0; i != NumVars; ++i)
12372     Vars.push_back(Record.readSubExpr());
12373   C->setFinals(Vars);
12374   C->setStep(Record.readSubExpr());
12375   C->setCalcStep(Record.readSubExpr());
12376   Vars.clear();
12377   for (unsigned I = 0; I != NumVars + 1; ++I)
12378     Vars.push_back(Record.readSubExpr());
12379   C->setUsedExprs(Vars);
12380 }
12381 
12382 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12383   C->setLParenLoc(Record.readSourceLocation());
12384   C->setColonLoc(Record.readSourceLocation());
12385   unsigned NumVars = C->varlist_size();
12386   SmallVector<Expr *, 16> Vars;
12387   Vars.reserve(NumVars);
12388   for (unsigned i = 0; i != NumVars; ++i)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setVarRefs(Vars);
12391   C->setAlignment(Record.readSubExpr());
12392 }
12393 
12394 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12395   C->setLParenLoc(Record.readSourceLocation());
12396   unsigned NumVars = C->varlist_size();
12397   SmallVector<Expr *, 16> Exprs;
12398   Exprs.reserve(NumVars);
12399   for (unsigned i = 0; i != NumVars; ++i)
12400     Exprs.push_back(Record.readSubExpr());
12401   C->setVarRefs(Exprs);
12402   Exprs.clear();
12403   for (unsigned i = 0; i != NumVars; ++i)
12404     Exprs.push_back(Record.readSubExpr());
12405   C->setSourceExprs(Exprs);
12406   Exprs.clear();
12407   for (unsigned i = 0; i != NumVars; ++i)
12408     Exprs.push_back(Record.readSubExpr());
12409   C->setDestinationExprs(Exprs);
12410   Exprs.clear();
12411   for (unsigned i = 0; i != NumVars; ++i)
12412     Exprs.push_back(Record.readSubExpr());
12413   C->setAssignmentOps(Exprs);
12414 }
12415 
12416 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12417   C->setLParenLoc(Record.readSourceLocation());
12418   unsigned NumVars = C->varlist_size();
12419   SmallVector<Expr *, 16> Exprs;
12420   Exprs.reserve(NumVars);
12421   for (unsigned i = 0; i != NumVars; ++i)
12422     Exprs.push_back(Record.readSubExpr());
12423   C->setVarRefs(Exprs);
12424   Exprs.clear();
12425   for (unsigned i = 0; i != NumVars; ++i)
12426     Exprs.push_back(Record.readSubExpr());
12427   C->setSourceExprs(Exprs);
12428   Exprs.clear();
12429   for (unsigned i = 0; i != NumVars; ++i)
12430     Exprs.push_back(Record.readSubExpr());
12431   C->setDestinationExprs(Exprs);
12432   Exprs.clear();
12433   for (unsigned i = 0; i != NumVars; ++i)
12434     Exprs.push_back(Record.readSubExpr());
12435   C->setAssignmentOps(Exprs);
12436 }
12437 
12438 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12439   C->setLParenLoc(Record.readSourceLocation());
12440   unsigned NumVars = C->varlist_size();
12441   SmallVector<Expr *, 16> Vars;
12442   Vars.reserve(NumVars);
12443   for (unsigned i = 0; i != NumVars; ++i)
12444     Vars.push_back(Record.readSubExpr());
12445   C->setVarRefs(Vars);
12446 }
12447 
12448 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12449   C->setDepobj(Record.readSubExpr());
12450   C->setLParenLoc(Record.readSourceLocation());
12451 }
12452 
12453 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12454   C->setLParenLoc(Record.readSourceLocation());
12455   C->setModifier(Record.readSubExpr());
12456   C->setDependencyKind(
12457       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12458   C->setDependencyLoc(Record.readSourceLocation());
12459   C->setColonLoc(Record.readSourceLocation());
12460   unsigned NumVars = C->varlist_size();
12461   SmallVector<Expr *, 16> Vars;
12462   Vars.reserve(NumVars);
12463   for (unsigned I = 0; I != NumVars; ++I)
12464     Vars.push_back(Record.readSubExpr());
12465   C->setVarRefs(Vars);
12466   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12467     C->setLoopData(I, Record.readSubExpr());
12468 }
12469 
12470 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12471   VisitOMPClauseWithPreInit(C);
12472   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12473   C->setDevice(Record.readSubExpr());
12474   C->setModifierLoc(Record.readSourceLocation());
12475   C->setLParenLoc(Record.readSourceLocation());
12476 }
12477 
12478 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12479   C->setLParenLoc(Record.readSourceLocation());
12480   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12481     C->setMapTypeModifier(
12482         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12483     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12484   }
12485   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12486   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12487   C->setMapType(
12488      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12489   C->setMapLoc(Record.readSourceLocation());
12490   C->setColonLoc(Record.readSourceLocation());
12491   auto NumVars = C->varlist_size();
12492   auto UniqueDecls = C->getUniqueDeclarationsNum();
12493   auto TotalLists = C->getTotalComponentListNum();
12494   auto TotalComponents = C->getTotalComponentsNum();
12495 
12496   SmallVector<Expr *, 16> Vars;
12497   Vars.reserve(NumVars);
12498   for (unsigned i = 0; i != NumVars; ++i)
12499     Vars.push_back(Record.readExpr());
12500   C->setVarRefs(Vars);
12501 
12502   SmallVector<Expr *, 16> UDMappers;
12503   UDMappers.reserve(NumVars);
12504   for (unsigned I = 0; I < NumVars; ++I)
12505     UDMappers.push_back(Record.readExpr());
12506   C->setUDMapperRefs(UDMappers);
12507 
12508   SmallVector<ValueDecl *, 16> Decls;
12509   Decls.reserve(UniqueDecls);
12510   for (unsigned i = 0; i < UniqueDecls; ++i)
12511     Decls.push_back(Record.readDeclAs<ValueDecl>());
12512   C->setUniqueDecls(Decls);
12513 
12514   SmallVector<unsigned, 16> ListsPerDecl;
12515   ListsPerDecl.reserve(UniqueDecls);
12516   for (unsigned i = 0; i < UniqueDecls; ++i)
12517     ListsPerDecl.push_back(Record.readInt());
12518   C->setDeclNumLists(ListsPerDecl);
12519 
12520   SmallVector<unsigned, 32> ListSizes;
12521   ListSizes.reserve(TotalLists);
12522   for (unsigned i = 0; i < TotalLists; ++i)
12523     ListSizes.push_back(Record.readInt());
12524   C->setComponentListSizes(ListSizes);
12525 
12526   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12527   Components.reserve(TotalComponents);
12528   for (unsigned i = 0; i < TotalComponents; ++i) {
12529     Expr *AssociatedExpr = Record.readExpr();
12530     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12531     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12532         AssociatedExpr, AssociatedDecl));
12533   }
12534   C->setComponents(Components, ListSizes);
12535 }
12536 
12537 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12538   C->setLParenLoc(Record.readSourceLocation());
12539   C->setColonLoc(Record.readSourceLocation());
12540   C->setAllocator(Record.readSubExpr());
12541   unsigned NumVars = C->varlist_size();
12542   SmallVector<Expr *, 16> Vars;
12543   Vars.reserve(NumVars);
12544   for (unsigned i = 0; i != NumVars; ++i)
12545     Vars.push_back(Record.readSubExpr());
12546   C->setVarRefs(Vars);
12547 }
12548 
12549 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12550   VisitOMPClauseWithPreInit(C);
12551   C->setNumTeams(Record.readSubExpr());
12552   C->setLParenLoc(Record.readSourceLocation());
12553 }
12554 
12555 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12556   VisitOMPClauseWithPreInit(C);
12557   C->setThreadLimit(Record.readSubExpr());
12558   C->setLParenLoc(Record.readSourceLocation());
12559 }
12560 
12561 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12562   VisitOMPClauseWithPreInit(C);
12563   C->setPriority(Record.readSubExpr());
12564   C->setLParenLoc(Record.readSourceLocation());
12565 }
12566 
12567 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12568   VisitOMPClauseWithPreInit(C);
12569   C->setGrainsize(Record.readSubExpr());
12570   C->setLParenLoc(Record.readSourceLocation());
12571 }
12572 
12573 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12574   VisitOMPClauseWithPreInit(C);
12575   C->setNumTasks(Record.readSubExpr());
12576   C->setLParenLoc(Record.readSourceLocation());
12577 }
12578 
12579 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12580   C->setHint(Record.readSubExpr());
12581   C->setLParenLoc(Record.readSourceLocation());
12582 }
12583 
12584 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12585   VisitOMPClauseWithPreInit(C);
12586   C->setDistScheduleKind(
12587       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12588   C->setChunkSize(Record.readSubExpr());
12589   C->setLParenLoc(Record.readSourceLocation());
12590   C->setDistScheduleKindLoc(Record.readSourceLocation());
12591   C->setCommaLoc(Record.readSourceLocation());
12592 }
12593 
12594 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12595   C->setDefaultmapKind(
12596        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12597   C->setDefaultmapModifier(
12598       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12599   C->setLParenLoc(Record.readSourceLocation());
12600   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12601   C->setDefaultmapKindLoc(Record.readSourceLocation());
12602 }
12603 
12604 void OMPClauseReader::VisitOMPToClause(OMPToClause *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::VisitOMPFromClause(OMPFromClause *C) {
12655   C->setLParenLoc(Record.readSourceLocation());
12656   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12657   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12658   auto NumVars = C->varlist_size();
12659   auto UniqueDecls = C->getUniqueDeclarationsNum();
12660   auto TotalLists = C->getTotalComponentListNum();
12661   auto TotalComponents = C->getTotalComponentsNum();
12662 
12663   SmallVector<Expr *, 16> Vars;
12664   Vars.reserve(NumVars);
12665   for (unsigned i = 0; i != NumVars; ++i)
12666     Vars.push_back(Record.readSubExpr());
12667   C->setVarRefs(Vars);
12668 
12669   SmallVector<Expr *, 16> UDMappers;
12670   UDMappers.reserve(NumVars);
12671   for (unsigned I = 0; I < NumVars; ++I)
12672     UDMappers.push_back(Record.readSubExpr());
12673   C->setUDMapperRefs(UDMappers);
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::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *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   for (unsigned i = 0; i != NumVars; ++i)
12718     Vars.push_back(Record.readSubExpr());
12719   C->setPrivateCopies(Vars);
12720   Vars.clear();
12721   for (unsigned i = 0; i != NumVars; ++i)
12722     Vars.push_back(Record.readSubExpr());
12723   C->setInits(Vars);
12724 
12725   SmallVector<ValueDecl *, 16> Decls;
12726   Decls.reserve(UniqueDecls);
12727   for (unsigned i = 0; i < UniqueDecls; ++i)
12728     Decls.push_back(Record.readDeclAs<ValueDecl>());
12729   C->setUniqueDecls(Decls);
12730 
12731   SmallVector<unsigned, 16> ListsPerDecl;
12732   ListsPerDecl.reserve(UniqueDecls);
12733   for (unsigned i = 0; i < UniqueDecls; ++i)
12734     ListsPerDecl.push_back(Record.readInt());
12735   C->setDeclNumLists(ListsPerDecl);
12736 
12737   SmallVector<unsigned, 32> ListSizes;
12738   ListSizes.reserve(TotalLists);
12739   for (unsigned i = 0; i < TotalLists; ++i)
12740     ListSizes.push_back(Record.readInt());
12741   C->setComponentListSizes(ListSizes);
12742 
12743   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12744   Components.reserve(TotalComponents);
12745   for (unsigned i = 0; i < TotalComponents; ++i) {
12746     Expr *AssociatedExpr = Record.readSubExpr();
12747     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12748     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12749         AssociatedExpr, AssociatedDecl));
12750   }
12751   C->setComponents(Components, ListSizes);
12752 }
12753 
12754 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12755   C->setLParenLoc(Record.readSourceLocation());
12756   auto NumVars = C->varlist_size();
12757   auto UniqueDecls = C->getUniqueDeclarationsNum();
12758   auto TotalLists = C->getTotalComponentListNum();
12759   auto TotalComponents = C->getTotalComponentsNum();
12760 
12761   SmallVector<Expr *, 16> Vars;
12762   Vars.reserve(NumVars);
12763   for (unsigned i = 0; i != NumVars; ++i)
12764     Vars.push_back(Record.readSubExpr());
12765   C->setVarRefs(Vars);
12766 
12767   SmallVector<ValueDecl *, 16> Decls;
12768   Decls.reserve(UniqueDecls);
12769   for (unsigned i = 0; i < UniqueDecls; ++i)
12770     Decls.push_back(Record.readDeclAs<ValueDecl>());
12771   C->setUniqueDecls(Decls);
12772 
12773   SmallVector<unsigned, 16> ListsPerDecl;
12774   ListsPerDecl.reserve(UniqueDecls);
12775   for (unsigned i = 0; i < UniqueDecls; ++i)
12776     ListsPerDecl.push_back(Record.readInt());
12777   C->setDeclNumLists(ListsPerDecl);
12778 
12779   SmallVector<unsigned, 32> ListSizes;
12780   ListSizes.reserve(TotalLists);
12781   for (unsigned i = 0; i < TotalLists; ++i)
12782     ListSizes.push_back(Record.readInt());
12783   C->setComponentListSizes(ListSizes);
12784 
12785   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12786   Components.reserve(TotalComponents);
12787   for (unsigned i = 0; i < TotalComponents; ++i) {
12788     Expr *AssociatedExpr = Record.readSubExpr();
12789     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12790     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12791         AssociatedExpr, AssociatedDecl));
12792   }
12793   C->setComponents(Components, ListSizes);
12794 }
12795 
12796 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12797   C->setLParenLoc(Record.readSourceLocation());
12798   auto NumVars = C->varlist_size();
12799   auto UniqueDecls = C->getUniqueDeclarationsNum();
12800   auto TotalLists = C->getTotalComponentListNum();
12801   auto TotalComponents = C->getTotalComponentsNum();
12802 
12803   SmallVector<Expr *, 16> Vars;
12804   Vars.reserve(NumVars);
12805   for (unsigned i = 0; i != NumVars; ++i)
12806     Vars.push_back(Record.readSubExpr());
12807   C->setVarRefs(Vars);
12808   Vars.clear();
12809 
12810   SmallVector<ValueDecl *, 16> Decls;
12811   Decls.reserve(UniqueDecls);
12812   for (unsigned i = 0; i < UniqueDecls; ++i)
12813     Decls.push_back(Record.readDeclAs<ValueDecl>());
12814   C->setUniqueDecls(Decls);
12815 
12816   SmallVector<unsigned, 16> ListsPerDecl;
12817   ListsPerDecl.reserve(UniqueDecls);
12818   for (unsigned i = 0; i < UniqueDecls; ++i)
12819     ListsPerDecl.push_back(Record.readInt());
12820   C->setDeclNumLists(ListsPerDecl);
12821 
12822   SmallVector<unsigned, 32> ListSizes;
12823   ListSizes.reserve(TotalLists);
12824   for (unsigned i = 0; i < TotalLists; ++i)
12825     ListSizes.push_back(Record.readInt());
12826   C->setComponentListSizes(ListSizes);
12827 
12828   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12829   Components.reserve(TotalComponents);
12830   for (unsigned i = 0; i < TotalComponents; ++i) {
12831     Expr *AssociatedExpr = Record.readSubExpr();
12832     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12833     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12834         AssociatedExpr, AssociatedDecl));
12835   }
12836   C->setComponents(Components, ListSizes);
12837 }
12838 
12839 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12840   C->setLParenLoc(Record.readSourceLocation());
12841   unsigned NumVars = C->varlist_size();
12842   SmallVector<Expr *, 16> Vars;
12843   Vars.reserve(NumVars);
12844   for (unsigned i = 0; i != NumVars; ++i)
12845     Vars.push_back(Record.readSubExpr());
12846   C->setVarRefs(Vars);
12847   Vars.clear();
12848   Vars.reserve(NumVars);
12849   for (unsigned i = 0; i != NumVars; ++i)
12850     Vars.push_back(Record.readSubExpr());
12851   C->setPrivateRefs(Vars);
12852 }
12853 
12854 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12855   C->setLParenLoc(Record.readSourceLocation());
12856   unsigned NumVars = C->varlist_size();
12857   SmallVector<Expr *, 16> Vars;
12858   Vars.reserve(NumVars);
12859   for (unsigned i = 0; i != NumVars; ++i)
12860     Vars.push_back(Record.readSubExpr());
12861   C->setVarRefs(Vars);
12862 }
12863 
12864 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12865   C->setLParenLoc(Record.readSourceLocation());
12866   unsigned NumVars = C->varlist_size();
12867   SmallVector<Expr *, 16> Vars;
12868   Vars.reserve(NumVars);
12869   for (unsigned i = 0; i != NumVars; ++i)
12870     Vars.push_back(Record.readSubExpr());
12871   C->setVarRefs(Vars);
12872 }
12873 
12874 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12875   C->setLParenLoc(Record.readSourceLocation());
12876   unsigned NumOfAllocators = C->getNumberOfAllocators();
12877   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12878   Data.reserve(NumOfAllocators);
12879   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12880     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12881     D.Allocator = Record.readSubExpr();
12882     D.AllocatorTraits = Record.readSubExpr();
12883     D.LParenLoc = Record.readSourceLocation();
12884     D.RParenLoc = Record.readSourceLocation();
12885   }
12886   C->setAllocatorsData(Data);
12887 }
12888 
12889 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12890   C->setLParenLoc(Record.readSourceLocation());
12891   C->setModifier(Record.readSubExpr());
12892   C->setColonLoc(Record.readSourceLocation());
12893   unsigned NumOfLocators = C->varlist_size();
12894   SmallVector<Expr *, 4> Locators;
12895   Locators.reserve(NumOfLocators);
12896   for (unsigned I = 0; I != NumOfLocators; ++I)
12897     Locators.push_back(Record.readSubExpr());
12898   C->setVarRefs(Locators);
12899 }
12900 
12901 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12902   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12903   C->setLParenLoc(Record.readSourceLocation());
12904   C->setKindKwLoc(Record.readSourceLocation());
12905 }
12906 
12907 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12908   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12909   TI.Sets.resize(readUInt32());
12910   for (auto &Set : TI.Sets) {
12911     Set.Kind = readEnum<llvm::omp::TraitSet>();
12912     Set.Selectors.resize(readUInt32());
12913     for (auto &Selector : Set.Selectors) {
12914       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12915       Selector.ScoreOrCondition = nullptr;
12916       if (readBool())
12917         Selector.ScoreOrCondition = readExprRef();
12918       Selector.Properties.resize(readUInt32());
12919       for (auto &Property : Selector.Properties)
12920         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12921     }
12922   }
12923   return &TI;
12924 }
12925