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