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     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
396   }
397 
398 #undef CHECK_TARGET_OPT
399 
400   // Compare feature sets.
401   SmallVector<StringRef, 4> ExistingFeatures(
402                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
403                                              ExistingTargetOpts.FeaturesAsWritten.end());
404   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
405                                          TargetOpts.FeaturesAsWritten.end());
406   llvm::sort(ExistingFeatures);
407   llvm::sort(ReadFeatures);
408 
409   // We compute the set difference in both directions explicitly so that we can
410   // diagnose the differences differently.
411   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
412   std::set_difference(
413       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
414       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
415   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
416                       ExistingFeatures.begin(), ExistingFeatures.end(),
417                       std::back_inserter(UnmatchedReadFeatures));
418 
419   // If we are allowing compatible differences and the read feature set is
420   // a strict subset of the existing feature set, there is nothing to diagnose.
421   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
422     return false;
423 
424   if (Diags) {
425     for (StringRef Feature : UnmatchedReadFeatures)
426       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
427           << /* is-existing-feature */ false << Feature;
428     for (StringRef Feature : UnmatchedExistingFeatures)
429       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
430           << /* is-existing-feature */ true << Feature;
431   }
432 
433   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
434 }
435 
436 bool
437 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
438                                   bool Complain,
439                                   bool AllowCompatibleDifferences) {
440   const LangOptions &ExistingLangOpts = PP.getLangOpts();
441   return checkLanguageOptions(LangOpts, ExistingLangOpts,
442                               Complain ? &Reader.Diags : nullptr,
443                               AllowCompatibleDifferences);
444 }
445 
446 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
447                                      bool Complain,
448                                      bool AllowCompatibleDifferences) {
449   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
450   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
451                             Complain ? &Reader.Diags : nullptr,
452                             AllowCompatibleDifferences);
453 }
454 
455 namespace {
456 
457 using MacroDefinitionsMap =
458     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
459 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
460 
461 } // namespace
462 
463 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
464                                          DiagnosticsEngine &Diags,
465                                          bool Complain) {
466   using Level = DiagnosticsEngine::Level;
467 
468   // Check current mappings for new -Werror mappings, and the stored mappings
469   // for cases that were explicitly mapped to *not* be errors that are now
470   // errors because of options like -Werror.
471   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
472 
473   for (DiagnosticsEngine *MappingSource : MappingSources) {
474     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
475       diag::kind DiagID = DiagIDMappingPair.first;
476       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
477       if (CurLevel < DiagnosticsEngine::Error)
478         continue; // not significant
479       Level StoredLevel =
480           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
481       if (StoredLevel < DiagnosticsEngine::Error) {
482         if (Complain)
483           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
484               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
485         return true;
486       }
487     }
488   }
489 
490   return false;
491 }
492 
493 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
494   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
495   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
496     return true;
497   return Ext >= diag::Severity::Error;
498 }
499 
500 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
501                                     DiagnosticsEngine &Diags,
502                                     bool IsSystem, bool Complain) {
503   // Top-level options
504   if (IsSystem) {
505     if (Diags.getSuppressSystemWarnings())
506       return false;
507     // If -Wsystem-headers was not enabled before, be conservative
508     if (StoredDiags.getSuppressSystemWarnings()) {
509       if (Complain)
510         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
511       return true;
512     }
513   }
514 
515   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
516     if (Complain)
517       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
518     return true;
519   }
520 
521   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
522       !StoredDiags.getEnableAllWarnings()) {
523     if (Complain)
524       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
525     return true;
526   }
527 
528   if (isExtHandlingFromDiagsError(Diags) &&
529       !isExtHandlingFromDiagsError(StoredDiags)) {
530     if (Complain)
531       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
532     return true;
533   }
534 
535   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
536 }
537 
538 /// Return the top import module if it is implicit, nullptr otherwise.
539 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
540                                           Preprocessor &PP) {
541   // If the original import came from a file explicitly generated by the user,
542   // don't check the diagnostic mappings.
543   // FIXME: currently this is approximated by checking whether this is not a
544   // module import of an implicitly-loaded module file.
545   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
546   // the transitive closure of its imports, since unrelated modules cannot be
547   // imported until after this module finishes validation.
548   ModuleFile *TopImport = &*ModuleMgr.rbegin();
549   while (!TopImport->ImportedBy.empty())
550     TopImport = TopImport->ImportedBy[0];
551   if (TopImport->Kind != MK_ImplicitModule)
552     return nullptr;
553 
554   StringRef ModuleName = TopImport->ModuleName;
555   assert(!ModuleName.empty() && "diagnostic options read before module name");
556 
557   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
558   assert(M && "missing module");
559   return M;
560 }
561 
562 bool PCHValidator::ReadDiagnosticOptions(
563     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
564   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
565   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
566   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
567       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
568   // This should never fail, because we would have processed these options
569   // before writing them to an ASTFile.
570   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
571 
572   ModuleManager &ModuleMgr = Reader.getModuleManager();
573   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
574 
575   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
576   if (!TopM)
577     return false;
578 
579   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
580   // contains the union of their flags.
581   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
582                                  Complain);
583 }
584 
585 /// Collect the macro definitions provided by the given preprocessor
586 /// options.
587 static void
588 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
589                         MacroDefinitionsMap &Macros,
590                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
591   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
592     StringRef Macro = PPOpts.Macros[I].first;
593     bool IsUndef = PPOpts.Macros[I].second;
594 
595     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
596     StringRef MacroName = MacroPair.first;
597     StringRef MacroBody = MacroPair.second;
598 
599     // For an #undef'd macro, we only care about the name.
600     if (IsUndef) {
601       if (MacroNames && !Macros.count(MacroName))
602         MacroNames->push_back(MacroName);
603 
604       Macros[MacroName] = std::make_pair("", true);
605       continue;
606     }
607 
608     // For a #define'd macro, figure out the actual definition.
609     if (MacroName.size() == Macro.size())
610       MacroBody = "1";
611     else {
612       // Note: GCC drops anything following an end-of-line character.
613       StringRef::size_type End = MacroBody.find_first_of("\n\r");
614       MacroBody = MacroBody.substr(0, End);
615     }
616 
617     if (MacroNames && !Macros.count(MacroName))
618       MacroNames->push_back(MacroName);
619     Macros[MacroName] = std::make_pair(MacroBody, false);
620   }
621 }
622 
623 /// Check the preprocessor options deserialized from the control block
624 /// against the preprocessor options in an existing preprocessor.
625 ///
626 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
627 /// \param Validate If true, validate preprocessor options. If false, allow
628 ///        macros defined by \p ExistingPPOpts to override those defined by
629 ///        \p PPOpts in SuggestedPredefines.
630 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
631                                      const PreprocessorOptions &ExistingPPOpts,
632                                      DiagnosticsEngine *Diags,
633                                      FileManager &FileMgr,
634                                      std::string &SuggestedPredefines,
635                                      const LangOptions &LangOpts,
636                                      bool Validate = true) {
637   // Check macro definitions.
638   MacroDefinitionsMap ASTFileMacros;
639   collectMacroDefinitions(PPOpts, ASTFileMacros);
640   MacroDefinitionsMap ExistingMacros;
641   SmallVector<StringRef, 4> ExistingMacroNames;
642   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
643 
644   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
645     // Dig out the macro definition in the existing preprocessor options.
646     StringRef MacroName = ExistingMacroNames[I];
647     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
648 
649     // Check whether we know anything about this macro name or not.
650     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
651         ASTFileMacros.find(MacroName);
652     if (!Validate || Known == ASTFileMacros.end()) {
653       // FIXME: Check whether this identifier was referenced anywhere in the
654       // AST file. If so, we should reject the AST file. Unfortunately, this
655       // information isn't in the control block. What shall we do about it?
656 
657       if (Existing.second) {
658         SuggestedPredefines += "#undef ";
659         SuggestedPredefines += MacroName.str();
660         SuggestedPredefines += '\n';
661       } else {
662         SuggestedPredefines += "#define ";
663         SuggestedPredefines += MacroName.str();
664         SuggestedPredefines += ' ';
665         SuggestedPredefines += Existing.first.str();
666         SuggestedPredefines += '\n';
667       }
668       continue;
669     }
670 
671     // If the macro was defined in one but undef'd in the other, we have a
672     // conflict.
673     if (Existing.second != Known->second.second) {
674       if (Diags) {
675         Diags->Report(diag::err_pch_macro_def_undef)
676           << MacroName << Known->second.second;
677       }
678       return true;
679     }
680 
681     // If the macro was #undef'd in both, or if the macro bodies are identical,
682     // it's fine.
683     if (Existing.second || Existing.first == Known->second.first)
684       continue;
685 
686     // The macro bodies differ; complain.
687     if (Diags) {
688       Diags->Report(diag::err_pch_macro_def_conflict)
689         << MacroName << Known->second.first << Existing.first;
690     }
691     return true;
692   }
693 
694   // Check whether we're using predefines.
695   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
696     if (Diags) {
697       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
698     }
699     return true;
700   }
701 
702   // Detailed record is important since it is used for the module cache hash.
703   if (LangOpts.Modules &&
704       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
705     if (Diags) {
706       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
707     }
708     return true;
709   }
710 
711   // Compute the #include and #include_macros lines we need.
712   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
713     StringRef File = ExistingPPOpts.Includes[I];
714 
715     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
716         !ExistingPPOpts.PCHThroughHeader.empty()) {
717       // In case the through header is an include, we must add all the includes
718       // to the predefines so the start point can be determined.
719       SuggestedPredefines += "#include \"";
720       SuggestedPredefines += File;
721       SuggestedPredefines += "\"\n";
722       continue;
723     }
724 
725     if (File == ExistingPPOpts.ImplicitPCHInclude)
726       continue;
727 
728     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
729           != PPOpts.Includes.end())
730       continue;
731 
732     SuggestedPredefines += "#include \"";
733     SuggestedPredefines += File;
734     SuggestedPredefines += "\"\n";
735   }
736 
737   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
738     StringRef File = ExistingPPOpts.MacroIncludes[I];
739     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
740                   File)
741         != PPOpts.MacroIncludes.end())
742       continue;
743 
744     SuggestedPredefines += "#__include_macros \"";
745     SuggestedPredefines += File;
746     SuggestedPredefines += "\"\n##\n";
747   }
748 
749   return false;
750 }
751 
752 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
753                                            bool Complain,
754                                            std::string &SuggestedPredefines) {
755   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
756 
757   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
758                                   Complain? &Reader.Diags : nullptr,
759                                   PP.getFileManager(),
760                                   SuggestedPredefines,
761                                   PP.getLangOpts());
762 }
763 
764 bool SimpleASTReaderListener::ReadPreprocessorOptions(
765                                   const PreprocessorOptions &PPOpts,
766                                   bool Complain,
767                                   std::string &SuggestedPredefines) {
768   return checkPreprocessorOptions(PPOpts,
769                                   PP.getPreprocessorOpts(),
770                                   nullptr,
771                                   PP.getFileManager(),
772                                   SuggestedPredefines,
773                                   PP.getLangOpts(),
774                                   false);
775 }
776 
777 /// Check the header search options deserialized from the control block
778 /// against the header search options in an existing preprocessor.
779 ///
780 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
781 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
782                                      StringRef SpecificModuleCachePath,
783                                      StringRef ExistingModuleCachePath,
784                                      DiagnosticsEngine *Diags,
785                                      const LangOptions &LangOpts) {
786   if (LangOpts.Modules) {
787     if (SpecificModuleCachePath != ExistingModuleCachePath) {
788       if (Diags)
789         Diags->Report(diag::err_pch_modulecache_mismatch)
790           << SpecificModuleCachePath << ExistingModuleCachePath;
791       return true;
792     }
793   }
794 
795   return false;
796 }
797 
798 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
799                                            StringRef SpecificModuleCachePath,
800                                            bool Complain) {
801   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
802                                   PP.getHeaderSearchInfo().getModuleCachePath(),
803                                   Complain ? &Reader.Diags : nullptr,
804                                   PP.getLangOpts());
805 }
806 
807 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
808   PP.setCounterValue(Value);
809 }
810 
811 //===----------------------------------------------------------------------===//
812 // AST reader implementation
813 //===----------------------------------------------------------------------===//
814 
815 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
816                                            bool TakeOwnership) {
817   DeserializationListener = Listener;
818   OwnsDeserializationListener = TakeOwnership;
819 }
820 
821 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
822   return serialization::ComputeHash(Sel);
823 }
824 
825 std::pair<unsigned, unsigned>
826 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
827   using namespace llvm::support;
828 
829   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
830   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
831   return std::make_pair(KeyLen, DataLen);
832 }
833 
834 ASTSelectorLookupTrait::internal_key_type
835 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
836   using namespace llvm::support;
837 
838   SelectorTable &SelTable = Reader.getContext().Selectors;
839   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
840   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
841       F, endian::readNext<uint32_t, little, unaligned>(d));
842   if (N == 0)
843     return SelTable.getNullarySelector(FirstII);
844   else if (N == 1)
845     return SelTable.getUnarySelector(FirstII);
846 
847   SmallVector<IdentifierInfo *, 16> Args;
848   Args.push_back(FirstII);
849   for (unsigned I = 1; I != N; ++I)
850     Args.push_back(Reader.getLocalIdentifier(
851         F, endian::readNext<uint32_t, little, unaligned>(d)));
852 
853   return SelTable.getSelector(N, Args.data());
854 }
855 
856 ASTSelectorLookupTrait::data_type
857 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
858                                  unsigned DataLen) {
859   using namespace llvm::support;
860 
861   data_type Result;
862 
863   Result.ID = Reader.getGlobalSelectorID(
864       F, endian::readNext<uint32_t, little, unaligned>(d));
865   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
866   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
867   Result.InstanceBits = FullInstanceBits & 0x3;
868   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
869   Result.FactoryBits = FullFactoryBits & 0x3;
870   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
871   unsigned NumInstanceMethods = FullInstanceBits >> 3;
872   unsigned NumFactoryMethods = FullFactoryBits >> 3;
873 
874   // Load instance methods
875   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
876     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
877             F, endian::readNext<uint32_t, little, unaligned>(d)))
878       Result.Instance.push_back(Method);
879   }
880 
881   // Load factory methods
882   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
883     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
884             F, endian::readNext<uint32_t, little, unaligned>(d)))
885       Result.Factory.push_back(Method);
886   }
887 
888   return Result;
889 }
890 
891 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
892   return llvm::djbHash(a);
893 }
894 
895 std::pair<unsigned, unsigned>
896 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
897   using namespace llvm::support;
898 
899   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
900   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
901   return std::make_pair(KeyLen, DataLen);
902 }
903 
904 ASTIdentifierLookupTraitBase::internal_key_type
905 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
906   assert(n >= 2 && d[n-1] == '\0');
907   return StringRef((const char*) d, n-1);
908 }
909 
910 /// Whether the given identifier is "interesting".
911 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
912                                     bool IsModule) {
913   return II.hadMacroDefinition() || II.isPoisoned() ||
914          (!IsModule && II.getObjCOrBuiltinID()) ||
915          II.hasRevertedTokenIDToIdentifier() ||
916          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
917           II.getFETokenInfo());
918 }
919 
920 static bool readBit(unsigned &Bits) {
921   bool Value = Bits & 0x1;
922   Bits >>= 1;
923   return Value;
924 }
925 
926 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
927   using namespace llvm::support;
928 
929   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
930   return Reader.getGlobalIdentifierID(F, RawID >> 1);
931 }
932 
933 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
934   if (!II.isFromAST()) {
935     II.setIsFromAST();
936     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
937     if (isInterestingIdentifier(Reader, II, IsModule))
938       II.setChangedSinceDeserialization();
939   }
940 }
941 
942 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
943                                                    const unsigned char* d,
944                                                    unsigned DataLen) {
945   using namespace llvm::support;
946 
947   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
948   bool IsInteresting = RawID & 0x01;
949 
950   // Wipe out the "is interesting" bit.
951   RawID = RawID >> 1;
952 
953   // Build the IdentifierInfo and link the identifier ID with it.
954   IdentifierInfo *II = KnownII;
955   if (!II) {
956     II = &Reader.getIdentifierTable().getOwn(k);
957     KnownII = II;
958   }
959   markIdentifierFromAST(Reader, *II);
960   Reader.markIdentifierUpToDate(II);
961 
962   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
963   if (!IsInteresting) {
964     // For uninteresting identifiers, there's nothing else to do. Just notify
965     // the reader that we've finished loading this identifier.
966     Reader.SetIdentifierInfo(ID, II);
967     return II;
968   }
969 
970   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
971   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
972   bool CPlusPlusOperatorKeyword = readBit(Bits);
973   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
974   bool Poisoned = readBit(Bits);
975   bool ExtensionToken = readBit(Bits);
976   bool HadMacroDefinition = readBit(Bits);
977 
978   assert(Bits == 0 && "Extra bits in the identifier?");
979   DataLen -= 8;
980 
981   // Set or check the various bits in the IdentifierInfo structure.
982   // Token IDs are read-only.
983   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
984     II->revertTokenIDToIdentifier();
985   if (!F.isModule())
986     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
987   assert(II->isExtensionToken() == ExtensionToken &&
988          "Incorrect extension token flag");
989   (void)ExtensionToken;
990   if (Poisoned)
991     II->setIsPoisoned(true);
992   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
993          "Incorrect C++ operator keyword flag");
994   (void)CPlusPlusOperatorKeyword;
995 
996   // If this identifier is a macro, deserialize the macro
997   // definition.
998   if (HadMacroDefinition) {
999     uint32_t MacroDirectivesOffset =
1000         endian::readNext<uint32_t, little, unaligned>(d);
1001     DataLen -= 4;
1002 
1003     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1004   }
1005 
1006   Reader.SetIdentifierInfo(ID, II);
1007 
1008   // Read all of the declarations visible at global scope with this
1009   // name.
1010   if (DataLen > 0) {
1011     SmallVector<uint32_t, 4> DeclIDs;
1012     for (; DataLen > 0; DataLen -= 4)
1013       DeclIDs.push_back(Reader.getGlobalDeclID(
1014           F, endian::readNext<uint32_t, little, unaligned>(d)));
1015     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1016   }
1017 
1018   return II;
1019 }
1020 
1021 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1022     : Kind(Name.getNameKind()) {
1023   switch (Kind) {
1024   case DeclarationName::Identifier:
1025     Data = (uint64_t)Name.getAsIdentifierInfo();
1026     break;
1027   case DeclarationName::ObjCZeroArgSelector:
1028   case DeclarationName::ObjCOneArgSelector:
1029   case DeclarationName::ObjCMultiArgSelector:
1030     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1031     break;
1032   case DeclarationName::CXXOperatorName:
1033     Data = Name.getCXXOverloadedOperator();
1034     break;
1035   case DeclarationName::CXXLiteralOperatorName:
1036     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1037     break;
1038   case DeclarationName::CXXDeductionGuideName:
1039     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1040                ->getDeclName().getAsIdentifierInfo();
1041     break;
1042   case DeclarationName::CXXConstructorName:
1043   case DeclarationName::CXXDestructorName:
1044   case DeclarationName::CXXConversionFunctionName:
1045   case DeclarationName::CXXUsingDirective:
1046     Data = 0;
1047     break;
1048   }
1049 }
1050 
1051 unsigned DeclarationNameKey::getHash() const {
1052   llvm::FoldingSetNodeID ID;
1053   ID.AddInteger(Kind);
1054 
1055   switch (Kind) {
1056   case DeclarationName::Identifier:
1057   case DeclarationName::CXXLiteralOperatorName:
1058   case DeclarationName::CXXDeductionGuideName:
1059     ID.AddString(((IdentifierInfo*)Data)->getName());
1060     break;
1061   case DeclarationName::ObjCZeroArgSelector:
1062   case DeclarationName::ObjCOneArgSelector:
1063   case DeclarationName::ObjCMultiArgSelector:
1064     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1065     break;
1066   case DeclarationName::CXXOperatorName:
1067     ID.AddInteger((OverloadedOperatorKind)Data);
1068     break;
1069   case DeclarationName::CXXConstructorName:
1070   case DeclarationName::CXXDestructorName:
1071   case DeclarationName::CXXConversionFunctionName:
1072   case DeclarationName::CXXUsingDirective:
1073     break;
1074   }
1075 
1076   return ID.ComputeHash();
1077 }
1078 
1079 ModuleFile *
1080 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1081   using namespace llvm::support;
1082 
1083   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1084   return Reader.getLocalModuleFile(F, ModuleFileID);
1085 }
1086 
1087 std::pair<unsigned, unsigned>
1088 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1089   using namespace llvm::support;
1090 
1091   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
1092   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
1093   return std::make_pair(KeyLen, DataLen);
1094 }
1095 
1096 ASTDeclContextNameLookupTrait::internal_key_type
1097 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1098   using namespace llvm::support;
1099 
1100   auto Kind = (DeclarationName::NameKind)*d++;
1101   uint64_t Data;
1102   switch (Kind) {
1103   case DeclarationName::Identifier:
1104   case DeclarationName::CXXLiteralOperatorName:
1105   case DeclarationName::CXXDeductionGuideName:
1106     Data = (uint64_t)Reader.getLocalIdentifier(
1107         F, endian::readNext<uint32_t, little, unaligned>(d));
1108     break;
1109   case DeclarationName::ObjCZeroArgSelector:
1110   case DeclarationName::ObjCOneArgSelector:
1111   case DeclarationName::ObjCMultiArgSelector:
1112     Data =
1113         (uint64_t)Reader.getLocalSelector(
1114                              F, endian::readNext<uint32_t, little, unaligned>(
1115                                     d)).getAsOpaquePtr();
1116     break;
1117   case DeclarationName::CXXOperatorName:
1118     Data = *d++; // OverloadedOperatorKind
1119     break;
1120   case DeclarationName::CXXConstructorName:
1121   case DeclarationName::CXXDestructorName:
1122   case DeclarationName::CXXConversionFunctionName:
1123   case DeclarationName::CXXUsingDirective:
1124     Data = 0;
1125     break;
1126   }
1127 
1128   return DeclarationNameKey(Kind, Data);
1129 }
1130 
1131 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1132                                                  const unsigned char *d,
1133                                                  unsigned DataLen,
1134                                                  data_type_builder &Val) {
1135   using namespace llvm::support;
1136 
1137   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1138     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1139     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1140   }
1141 }
1142 
1143 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1144                                               BitstreamCursor &Cursor,
1145                                               uint64_t Offset,
1146                                               DeclContext *DC) {
1147   assert(Offset != 0);
1148 
1149   SavedStreamPosition SavedPosition(Cursor);
1150   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1151     Error(std::move(Err));
1152     return true;
1153   }
1154 
1155   RecordData Record;
1156   StringRef Blob;
1157   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1158   if (!MaybeCode) {
1159     Error(MaybeCode.takeError());
1160     return true;
1161   }
1162   unsigned Code = MaybeCode.get();
1163 
1164   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1165   if (!MaybeRecCode) {
1166     Error(MaybeRecCode.takeError());
1167     return true;
1168   }
1169   unsigned RecCode = MaybeRecCode.get();
1170   if (RecCode != DECL_CONTEXT_LEXICAL) {
1171     Error("Expected lexical block");
1172     return true;
1173   }
1174 
1175   assert(!isa<TranslationUnitDecl>(DC) &&
1176          "expected a TU_UPDATE_LEXICAL record for TU");
1177   // If we are handling a C++ class template instantiation, we can see multiple
1178   // lexical updates for the same record. It's important that we select only one
1179   // of them, so that field numbering works properly. Just pick the first one we
1180   // see.
1181   auto &Lex = LexicalDecls[DC];
1182   if (!Lex.first) {
1183     Lex = std::make_pair(
1184         &M, llvm::makeArrayRef(
1185                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1186                     Blob.data()),
1187                 Blob.size() / 4));
1188   }
1189   DC->setHasExternalLexicalStorage(true);
1190   return false;
1191 }
1192 
1193 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1194                                               BitstreamCursor &Cursor,
1195                                               uint64_t Offset,
1196                                               DeclID ID) {
1197   assert(Offset != 0);
1198 
1199   SavedStreamPosition SavedPosition(Cursor);
1200   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1201     Error(std::move(Err));
1202     return true;
1203   }
1204 
1205   RecordData Record;
1206   StringRef Blob;
1207   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1208   if (!MaybeCode) {
1209     Error(MaybeCode.takeError());
1210     return true;
1211   }
1212   unsigned Code = MaybeCode.get();
1213 
1214   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1215   if (!MaybeRecCode) {
1216     Error(MaybeRecCode.takeError());
1217     return true;
1218   }
1219   unsigned RecCode = MaybeRecCode.get();
1220   if (RecCode != DECL_CONTEXT_VISIBLE) {
1221     Error("Expected visible lookup table block");
1222     return true;
1223   }
1224 
1225   // We can't safely determine the primary context yet, so delay attaching the
1226   // lookup table until we're done with recursive deserialization.
1227   auto *Data = (const unsigned char*)Blob.data();
1228   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1229   return false;
1230 }
1231 
1232 void ASTReader::Error(StringRef Msg) const {
1233   Error(diag::err_fe_pch_malformed, Msg);
1234   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1235       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1236     Diag(diag::note_module_cache_path)
1237       << PP.getHeaderSearchInfo().getModuleCachePath();
1238   }
1239 }
1240 
1241 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1242                       StringRef Arg3) const {
1243   if (Diags.isDiagnosticInFlight())
1244     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1245   else
1246     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1247 }
1248 
1249 void ASTReader::Error(llvm::Error &&Err) const {
1250   Error(toString(std::move(Err)));
1251 }
1252 
1253 //===----------------------------------------------------------------------===//
1254 // Source Manager Deserialization
1255 //===----------------------------------------------------------------------===//
1256 
1257 /// Read the line table in the source manager block.
1258 /// \returns true if there was an error.
1259 bool ASTReader::ParseLineTable(ModuleFile &F,
1260                                const RecordData &Record) {
1261   unsigned Idx = 0;
1262   LineTableInfo &LineTable = SourceMgr.getLineTable();
1263 
1264   // Parse the file names
1265   std::map<int, int> FileIDs;
1266   FileIDs[-1] = -1; // For unspecified filenames.
1267   for (unsigned I = 0; Record[Idx]; ++I) {
1268     // Extract the file name
1269     auto Filename = ReadPath(F, Record, Idx);
1270     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1271   }
1272   ++Idx;
1273 
1274   // Parse the line entries
1275   std::vector<LineEntry> Entries;
1276   while (Idx < Record.size()) {
1277     int FID = Record[Idx++];
1278     assert(FID >= 0 && "Serialized line entries for non-local file.");
1279     // Remap FileID from 1-based old view.
1280     FID += F.SLocEntryBaseID - 1;
1281 
1282     // Extract the line entries
1283     unsigned NumEntries = Record[Idx++];
1284     assert(NumEntries && "no line entries for file ID");
1285     Entries.clear();
1286     Entries.reserve(NumEntries);
1287     for (unsigned I = 0; I != NumEntries; ++I) {
1288       unsigned FileOffset = Record[Idx++];
1289       unsigned LineNo = Record[Idx++];
1290       int FilenameID = FileIDs[Record[Idx++]];
1291       SrcMgr::CharacteristicKind FileKind
1292         = (SrcMgr::CharacteristicKind)Record[Idx++];
1293       unsigned IncludeOffset = Record[Idx++];
1294       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1295                                        FileKind, IncludeOffset));
1296     }
1297     LineTable.AddEntry(FileID::get(FID), Entries);
1298   }
1299 
1300   return false;
1301 }
1302 
1303 /// Read a source manager block
1304 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1305   using namespace SrcMgr;
1306 
1307   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1308 
1309   // Set the source-location entry cursor to the current position in
1310   // the stream. This cursor will be used to read the contents of the
1311   // source manager block initially, and then lazily read
1312   // source-location entries as needed.
1313   SLocEntryCursor = F.Stream;
1314 
1315   // The stream itself is going to skip over the source manager block.
1316   if (llvm::Error Err = F.Stream.SkipBlock()) {
1317     Error(std::move(Err));
1318     return true;
1319   }
1320 
1321   // Enter the source manager block.
1322   if (llvm::Error Err =
1323           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1324     Error(std::move(Err));
1325     return true;
1326   }
1327   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1328 
1329   RecordData Record;
1330   while (true) {
1331     Expected<llvm::BitstreamEntry> MaybeE =
1332         SLocEntryCursor.advanceSkippingSubblocks();
1333     if (!MaybeE) {
1334       Error(MaybeE.takeError());
1335       return true;
1336     }
1337     llvm::BitstreamEntry E = MaybeE.get();
1338 
1339     switch (E.Kind) {
1340     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1341     case llvm::BitstreamEntry::Error:
1342       Error("malformed block record in AST file");
1343       return true;
1344     case llvm::BitstreamEntry::EndBlock:
1345       return false;
1346     case llvm::BitstreamEntry::Record:
1347       // The interesting case.
1348       break;
1349     }
1350 
1351     // Read a record.
1352     Record.clear();
1353     StringRef Blob;
1354     Expected<unsigned> MaybeRecord =
1355         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1356     if (!MaybeRecord) {
1357       Error(MaybeRecord.takeError());
1358       return true;
1359     }
1360     switch (MaybeRecord.get()) {
1361     default:  // Default behavior: ignore.
1362       break;
1363 
1364     case SM_SLOC_FILE_ENTRY:
1365     case SM_SLOC_BUFFER_ENTRY:
1366     case SM_SLOC_EXPANSION_ENTRY:
1367       // Once we hit one of the source location entries, we're done.
1368       return false;
1369     }
1370   }
1371 }
1372 
1373 /// If a header file is not found at the path that we expect it to be
1374 /// and the PCH file was moved from its original location, try to resolve the
1375 /// file by assuming that header+PCH were moved together and the header is in
1376 /// the same place relative to the PCH.
1377 static std::string
1378 resolveFileRelativeToOriginalDir(const std::string &Filename,
1379                                  const std::string &OriginalDir,
1380                                  const std::string &CurrDir) {
1381   assert(OriginalDir != CurrDir &&
1382          "No point trying to resolve the file if the PCH dir didn't change");
1383 
1384   using namespace llvm::sys;
1385 
1386   SmallString<128> filePath(Filename);
1387   fs::make_absolute(filePath);
1388   assert(path::is_absolute(OriginalDir));
1389   SmallString<128> currPCHPath(CurrDir);
1390 
1391   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1392                        fileDirE = path::end(path::parent_path(filePath));
1393   path::const_iterator origDirI = path::begin(OriginalDir),
1394                        origDirE = path::end(OriginalDir);
1395   // Skip the common path components from filePath and OriginalDir.
1396   while (fileDirI != fileDirE && origDirI != origDirE &&
1397          *fileDirI == *origDirI) {
1398     ++fileDirI;
1399     ++origDirI;
1400   }
1401   for (; origDirI != origDirE; ++origDirI)
1402     path::append(currPCHPath, "..");
1403   path::append(currPCHPath, fileDirI, fileDirE);
1404   path::append(currPCHPath, path::filename(Filename));
1405   return std::string(currPCHPath.str());
1406 }
1407 
1408 bool ASTReader::ReadSLocEntry(int ID) {
1409   if (ID == 0)
1410     return false;
1411 
1412   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1413     Error("source location entry ID out-of-range for AST file");
1414     return true;
1415   }
1416 
1417   // Local helper to read the (possibly-compressed) buffer data following the
1418   // entry record.
1419   auto ReadBuffer = [this](
1420       BitstreamCursor &SLocEntryCursor,
1421       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1422     RecordData Record;
1423     StringRef Blob;
1424     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1425     if (!MaybeCode) {
1426       Error(MaybeCode.takeError());
1427       return nullptr;
1428     }
1429     unsigned Code = MaybeCode.get();
1430 
1431     Expected<unsigned> MaybeRecCode =
1432         SLocEntryCursor.readRecord(Code, Record, &Blob);
1433     if (!MaybeRecCode) {
1434       Error(MaybeRecCode.takeError());
1435       return nullptr;
1436     }
1437     unsigned RecCode = MaybeRecCode.get();
1438 
1439     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1440       if (!llvm::zlib::isAvailable()) {
1441         Error("zlib is not available");
1442         return nullptr;
1443       }
1444       SmallString<0> Uncompressed;
1445       if (llvm::Error E =
1446               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1447         Error("could not decompress embedded file contents: " +
1448               llvm::toString(std::move(E)));
1449         return nullptr;
1450       }
1451       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1452     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1453       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1454     } else {
1455       Error("AST record has invalid code");
1456       return nullptr;
1457     }
1458   };
1459 
1460   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1461   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1462           F->SLocEntryOffsetsBase +
1463           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1464     Error(std::move(Err));
1465     return true;
1466   }
1467 
1468   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1469   unsigned BaseOffset = F->SLocEntryBaseOffset;
1470 
1471   ++NumSLocEntriesRead;
1472   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1473   if (!MaybeEntry) {
1474     Error(MaybeEntry.takeError());
1475     return true;
1476   }
1477   llvm::BitstreamEntry Entry = MaybeEntry.get();
1478 
1479   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1480     Error("incorrectly-formatted source location entry in AST file");
1481     return true;
1482   }
1483 
1484   RecordData Record;
1485   StringRef Blob;
1486   Expected<unsigned> MaybeSLOC =
1487       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1488   if (!MaybeSLOC) {
1489     Error(MaybeSLOC.takeError());
1490     return true;
1491   }
1492   switch (MaybeSLOC.get()) {
1493   default:
1494     Error("incorrectly-formatted source location entry in AST file");
1495     return true;
1496 
1497   case SM_SLOC_FILE_ENTRY: {
1498     // We will detect whether a file changed and return 'Failure' for it, but
1499     // we will also try to fail gracefully by setting up the SLocEntry.
1500     unsigned InputID = Record[4];
1501     InputFile IF = getInputFile(*F, InputID);
1502     Optional<FileEntryRef> File = IF.getFile();
1503     bool OverriddenBuffer = IF.isOverridden();
1504 
1505     // Note that we only check if a File was returned. If it was out-of-date
1506     // we have complained but we will continue creating a FileID to recover
1507     // gracefully.
1508     if (!File)
1509       return true;
1510 
1511     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1512     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1513       // This is the module's main file.
1514       IncludeLoc = getImportLocation(F);
1515     }
1516     SrcMgr::CharacteristicKind
1517       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1518     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1519                                         BaseOffset + Record[0]);
1520     SrcMgr::FileInfo &FileInfo =
1521           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1522     FileInfo.NumCreatedFIDs = Record[5];
1523     if (Record[3])
1524       FileInfo.setHasLineDirectives();
1525 
1526     unsigned NumFileDecls = Record[7];
1527     if (NumFileDecls && ContextObj) {
1528       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1529       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1530       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1531                                                              NumFileDecls));
1532     }
1533 
1534     const SrcMgr::ContentCache &ContentCache =
1535         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1536     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1537         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1538         !ContentCache.getBufferIfLoaded()) {
1539       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1540       if (!Buffer)
1541         return true;
1542       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1543     }
1544 
1545     break;
1546   }
1547 
1548   case SM_SLOC_BUFFER_ENTRY: {
1549     const char *Name = Blob.data();
1550     unsigned Offset = Record[0];
1551     SrcMgr::CharacteristicKind
1552       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1553     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1554     if (IncludeLoc.isInvalid() && F->isModule()) {
1555       IncludeLoc = getImportLocation(F);
1556     }
1557 
1558     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1559     if (!Buffer)
1560       return true;
1561     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1562                            BaseOffset + Offset, IncludeLoc);
1563     break;
1564   }
1565 
1566   case SM_SLOC_EXPANSION_ENTRY: {
1567     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1568     SourceMgr.createExpansionLoc(SpellingLoc,
1569                                      ReadSourceLocation(*F, Record[2]),
1570                                      ReadSourceLocation(*F, Record[3]),
1571                                      Record[5],
1572                                      Record[4],
1573                                      ID,
1574                                      BaseOffset + Record[0]);
1575     break;
1576   }
1577   }
1578 
1579   return false;
1580 }
1581 
1582 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1583   if (ID == 0)
1584     return std::make_pair(SourceLocation(), "");
1585 
1586   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1587     Error("source location entry ID out-of-range for AST file");
1588     return std::make_pair(SourceLocation(), "");
1589   }
1590 
1591   // Find which module file this entry lands in.
1592   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1593   if (!M->isModule())
1594     return std::make_pair(SourceLocation(), "");
1595 
1596   // FIXME: Can we map this down to a particular submodule? That would be
1597   // ideal.
1598   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1599 }
1600 
1601 /// Find the location where the module F is imported.
1602 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1603   if (F->ImportLoc.isValid())
1604     return F->ImportLoc;
1605 
1606   // Otherwise we have a PCH. It's considered to be "imported" at the first
1607   // location of its includer.
1608   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1609     // Main file is the importer.
1610     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1611     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1612   }
1613   return F->ImportedBy[0]->FirstLoc;
1614 }
1615 
1616 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1617 /// the abbreviations that are at the top of the block and then leave the cursor
1618 /// pointing into the block.
1619 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID,
1620                                  uint64_t *StartOfBlockOffset) {
1621   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1622     // FIXME this drops errors on the floor.
1623     consumeError(std::move(Err));
1624     return true;
1625   }
1626 
1627   if (StartOfBlockOffset)
1628     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1629 
1630   while (true) {
1631     uint64_t Offset = Cursor.GetCurrentBitNo();
1632     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1633     if (!MaybeCode) {
1634       // FIXME this drops errors on the floor.
1635       consumeError(MaybeCode.takeError());
1636       return true;
1637     }
1638     unsigned Code = MaybeCode.get();
1639 
1640     // We expect all abbrevs to be at the start of the block.
1641     if (Code != llvm::bitc::DEFINE_ABBREV) {
1642       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1643         // FIXME this drops errors on the floor.
1644         consumeError(std::move(Err));
1645         return true;
1646       }
1647       return false;
1648     }
1649     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1650       // FIXME this drops errors on the floor.
1651       consumeError(std::move(Err));
1652       return true;
1653     }
1654   }
1655 }
1656 
1657 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1658                            unsigned &Idx) {
1659   Token Tok;
1660   Tok.startToken();
1661   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1662   Tok.setLength(Record[Idx++]);
1663   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1664     Tok.setIdentifierInfo(II);
1665   Tok.setKind((tok::TokenKind)Record[Idx++]);
1666   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1667   return Tok;
1668 }
1669 
1670 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1671   BitstreamCursor &Stream = F.MacroCursor;
1672 
1673   // Keep track of where we are in the stream, then jump back there
1674   // after reading this macro.
1675   SavedStreamPosition SavedPosition(Stream);
1676 
1677   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1678     // FIXME this drops errors on the floor.
1679     consumeError(std::move(Err));
1680     return nullptr;
1681   }
1682   RecordData Record;
1683   SmallVector<IdentifierInfo*, 16> MacroParams;
1684   MacroInfo *Macro = nullptr;
1685 
1686   while (true) {
1687     // Advance to the next record, but if we get to the end of the block, don't
1688     // pop it (removing all the abbreviations from the cursor) since we want to
1689     // be able to reseek within the block and read entries.
1690     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1691     Expected<llvm::BitstreamEntry> MaybeEntry =
1692         Stream.advanceSkippingSubblocks(Flags);
1693     if (!MaybeEntry) {
1694       Error(MaybeEntry.takeError());
1695       return Macro;
1696     }
1697     llvm::BitstreamEntry Entry = MaybeEntry.get();
1698 
1699     switch (Entry.Kind) {
1700     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1701     case llvm::BitstreamEntry::Error:
1702       Error("malformed block record in AST file");
1703       return Macro;
1704     case llvm::BitstreamEntry::EndBlock:
1705       return Macro;
1706     case llvm::BitstreamEntry::Record:
1707       // The interesting case.
1708       break;
1709     }
1710 
1711     // Read a record.
1712     Record.clear();
1713     PreprocessorRecordTypes RecType;
1714     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1715       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1716     else {
1717       Error(MaybeRecType.takeError());
1718       return Macro;
1719     }
1720     switch (RecType) {
1721     case PP_MODULE_MACRO:
1722     case PP_MACRO_DIRECTIVE_HISTORY:
1723       return Macro;
1724 
1725     case PP_MACRO_OBJECT_LIKE:
1726     case PP_MACRO_FUNCTION_LIKE: {
1727       // If we already have a macro, that means that we've hit the end
1728       // of the definition of the macro we were looking for. We're
1729       // done.
1730       if (Macro)
1731         return Macro;
1732 
1733       unsigned NextIndex = 1; // Skip identifier ID.
1734       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1735       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1736       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1737       MI->setIsUsed(Record[NextIndex++]);
1738       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1739 
1740       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1741         // Decode function-like macro info.
1742         bool isC99VarArgs = Record[NextIndex++];
1743         bool isGNUVarArgs = Record[NextIndex++];
1744         bool hasCommaPasting = Record[NextIndex++];
1745         MacroParams.clear();
1746         unsigned NumArgs = Record[NextIndex++];
1747         for (unsigned i = 0; i != NumArgs; ++i)
1748           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1749 
1750         // Install function-like macro info.
1751         MI->setIsFunctionLike();
1752         if (isC99VarArgs) MI->setIsC99Varargs();
1753         if (isGNUVarArgs) MI->setIsGNUVarargs();
1754         if (hasCommaPasting) MI->setHasCommaPasting();
1755         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1756       }
1757 
1758       // Remember that we saw this macro last so that we add the tokens that
1759       // form its body to it.
1760       Macro = MI;
1761 
1762       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1763           Record[NextIndex]) {
1764         // We have a macro definition. Register the association
1765         PreprocessedEntityID
1766             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1767         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1768         PreprocessingRecord::PPEntityID PPID =
1769             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1770         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1771             PPRec.getPreprocessedEntity(PPID));
1772         if (PPDef)
1773           PPRec.RegisterMacroDefinition(Macro, PPDef);
1774       }
1775 
1776       ++NumMacrosRead;
1777       break;
1778     }
1779 
1780     case PP_TOKEN: {
1781       // If we see a TOKEN before a PP_MACRO_*, then the file is
1782       // erroneous, just pretend we didn't see this.
1783       if (!Macro) break;
1784 
1785       unsigned Idx = 0;
1786       Token Tok = ReadToken(F, Record, Idx);
1787       Macro->AddTokenToBody(Tok);
1788       break;
1789     }
1790     }
1791   }
1792 }
1793 
1794 PreprocessedEntityID
1795 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1796                                          unsigned LocalID) const {
1797   if (!M.ModuleOffsetMap.empty())
1798     ReadModuleOffsetMap(M);
1799 
1800   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1801     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1802   assert(I != M.PreprocessedEntityRemap.end()
1803          && "Invalid index into preprocessed entity index remap");
1804 
1805   return LocalID + I->second;
1806 }
1807 
1808 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1809   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1810 }
1811 
1812 HeaderFileInfoTrait::internal_key_type
1813 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1814   internal_key_type ikey = {FE->getSize(),
1815                             M.HasTimestamps ? FE->getModificationTime() : 0,
1816                             FE->getName(), /*Imported*/ false};
1817   return ikey;
1818 }
1819 
1820 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1821   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1822     return false;
1823 
1824   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1825     return true;
1826 
1827   // Determine whether the actual files are equivalent.
1828   FileManager &FileMgr = Reader.getFileManager();
1829   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1830     if (!Key.Imported) {
1831       if (auto File = FileMgr.getFile(Key.Filename))
1832         return *File;
1833       return nullptr;
1834     }
1835 
1836     std::string Resolved = std::string(Key.Filename);
1837     Reader.ResolveImportedPath(M, Resolved);
1838     if (auto File = FileMgr.getFile(Resolved))
1839       return *File;
1840     return nullptr;
1841   };
1842 
1843   const FileEntry *FEA = GetFile(a);
1844   const FileEntry *FEB = GetFile(b);
1845   return FEA && FEA == FEB;
1846 }
1847 
1848 std::pair<unsigned, unsigned>
1849 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1850   using namespace llvm::support;
1851 
1852   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1853   unsigned DataLen = (unsigned) *d++;
1854   return std::make_pair(KeyLen, DataLen);
1855 }
1856 
1857 HeaderFileInfoTrait::internal_key_type
1858 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1859   using namespace llvm::support;
1860 
1861   internal_key_type ikey;
1862   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1863   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1864   ikey.Filename = (const char *)d;
1865   ikey.Imported = true;
1866   return ikey;
1867 }
1868 
1869 HeaderFileInfoTrait::data_type
1870 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1871                               unsigned DataLen) {
1872   using namespace llvm::support;
1873 
1874   const unsigned char *End = d + DataLen;
1875   HeaderFileInfo HFI;
1876   unsigned Flags = *d++;
1877   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1878   HFI.isImport |= (Flags >> 5) & 0x01;
1879   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1880   HFI.DirInfo = (Flags >> 1) & 0x07;
1881   HFI.IndexHeaderMapHeader = Flags & 0x01;
1882   // FIXME: Find a better way to handle this. Maybe just store a
1883   // "has been included" flag?
1884   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1885                              HFI.NumIncludes);
1886   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1887       M, endian::readNext<uint32_t, little, unaligned>(d));
1888   if (unsigned FrameworkOffset =
1889           endian::readNext<uint32_t, little, unaligned>(d)) {
1890     // The framework offset is 1 greater than the actual offset,
1891     // since 0 is used as an indicator for "no framework name".
1892     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1893     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1894   }
1895 
1896   assert((End - d) % 4 == 0 &&
1897          "Wrong data length in HeaderFileInfo deserialization");
1898   while (d != End) {
1899     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1900     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1901     LocalSMID >>= 2;
1902 
1903     // This header is part of a module. Associate it with the module to enable
1904     // implicit module import.
1905     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1906     Module *Mod = Reader.getSubmodule(GlobalSMID);
1907     FileManager &FileMgr = Reader.getFileManager();
1908     ModuleMap &ModMap =
1909         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1910 
1911     std::string Filename = std::string(key.Filename);
1912     if (key.Imported)
1913       Reader.ResolveImportedPath(M, Filename);
1914     // FIXME: This is not always the right filename-as-written, but we're not
1915     // going to use this information to rebuild the module, so it doesn't make
1916     // a lot of difference.
1917     Module::Header H = {std::string(key.Filename),
1918                         *FileMgr.getOptionalFileRef(Filename)};
1919     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1920     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1921   }
1922 
1923   // This HeaderFileInfo was externally loaded.
1924   HFI.External = true;
1925   HFI.IsValid = true;
1926   return HFI;
1927 }
1928 
1929 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1930                                 uint32_t MacroDirectivesOffset) {
1931   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1932   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1933 }
1934 
1935 void ASTReader::ReadDefinedMacros() {
1936   // Note that we are loading defined macros.
1937   Deserializing Macros(this);
1938 
1939   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1940     BitstreamCursor &MacroCursor = I.MacroCursor;
1941 
1942     // If there was no preprocessor block, skip this file.
1943     if (MacroCursor.getBitcodeBytes().empty())
1944       continue;
1945 
1946     BitstreamCursor Cursor = MacroCursor;
1947     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1948       Error(std::move(Err));
1949       return;
1950     }
1951 
1952     RecordData Record;
1953     while (true) {
1954       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1955       if (!MaybeE) {
1956         Error(MaybeE.takeError());
1957         return;
1958       }
1959       llvm::BitstreamEntry E = MaybeE.get();
1960 
1961       switch (E.Kind) {
1962       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1963       case llvm::BitstreamEntry::Error:
1964         Error("malformed block record in AST file");
1965         return;
1966       case llvm::BitstreamEntry::EndBlock:
1967         goto NextCursor;
1968 
1969       case llvm::BitstreamEntry::Record: {
1970         Record.clear();
1971         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1972         if (!MaybeRecord) {
1973           Error(MaybeRecord.takeError());
1974           return;
1975         }
1976         switch (MaybeRecord.get()) {
1977         default:  // Default behavior: ignore.
1978           break;
1979 
1980         case PP_MACRO_OBJECT_LIKE:
1981         case PP_MACRO_FUNCTION_LIKE: {
1982           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1983           if (II->isOutOfDate())
1984             updateOutOfDateIdentifier(*II);
1985           break;
1986         }
1987 
1988         case PP_TOKEN:
1989           // Ignore tokens.
1990           break;
1991         }
1992         break;
1993       }
1994       }
1995     }
1996     NextCursor:  ;
1997   }
1998 }
1999 
2000 namespace {
2001 
2002   /// Visitor class used to look up identifirs in an AST file.
2003   class IdentifierLookupVisitor {
2004     StringRef Name;
2005     unsigned NameHash;
2006     unsigned PriorGeneration;
2007     unsigned &NumIdentifierLookups;
2008     unsigned &NumIdentifierLookupHits;
2009     IdentifierInfo *Found = nullptr;
2010 
2011   public:
2012     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2013                             unsigned &NumIdentifierLookups,
2014                             unsigned &NumIdentifierLookupHits)
2015       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2016         PriorGeneration(PriorGeneration),
2017         NumIdentifierLookups(NumIdentifierLookups),
2018         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2019 
2020     bool operator()(ModuleFile &M) {
2021       // If we've already searched this module file, skip it now.
2022       if (M.Generation <= PriorGeneration)
2023         return true;
2024 
2025       ASTIdentifierLookupTable *IdTable
2026         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2027       if (!IdTable)
2028         return false;
2029 
2030       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2031                                      Found);
2032       ++NumIdentifierLookups;
2033       ASTIdentifierLookupTable::iterator Pos =
2034           IdTable->find_hashed(Name, NameHash, &Trait);
2035       if (Pos == IdTable->end())
2036         return false;
2037 
2038       // Dereferencing the iterator has the effect of building the
2039       // IdentifierInfo node and populating it with the various
2040       // declarations it needs.
2041       ++NumIdentifierLookupHits;
2042       Found = *Pos;
2043       return true;
2044     }
2045 
2046     // Retrieve the identifier info found within the module
2047     // files.
2048     IdentifierInfo *getIdentifierInfo() const { return Found; }
2049   };
2050 
2051 } // namespace
2052 
2053 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2054   // Note that we are loading an identifier.
2055   Deserializing AnIdentifier(this);
2056 
2057   unsigned PriorGeneration = 0;
2058   if (getContext().getLangOpts().Modules)
2059     PriorGeneration = IdentifierGeneration[&II];
2060 
2061   // If there is a global index, look there first to determine which modules
2062   // provably do not have any results for this identifier.
2063   GlobalModuleIndex::HitSet Hits;
2064   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2065   if (!loadGlobalIndex()) {
2066     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2067       HitsPtr = &Hits;
2068     }
2069   }
2070 
2071   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2072                                   NumIdentifierLookups,
2073                                   NumIdentifierLookupHits);
2074   ModuleMgr.visit(Visitor, HitsPtr);
2075   markIdentifierUpToDate(&II);
2076 }
2077 
2078 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2079   if (!II)
2080     return;
2081 
2082   II->setOutOfDate(false);
2083 
2084   // Update the generation for this identifier.
2085   if (getContext().getLangOpts().Modules)
2086     IdentifierGeneration[II] = getGeneration();
2087 }
2088 
2089 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2090                                     const PendingMacroInfo &PMInfo) {
2091   ModuleFile &M = *PMInfo.M;
2092 
2093   BitstreamCursor &Cursor = M.MacroCursor;
2094   SavedStreamPosition SavedPosition(Cursor);
2095   if (llvm::Error Err =
2096           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2097     Error(std::move(Err));
2098     return;
2099   }
2100 
2101   struct ModuleMacroRecord {
2102     SubmoduleID SubModID;
2103     MacroInfo *MI;
2104     SmallVector<SubmoduleID, 8> Overrides;
2105   };
2106   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2107 
2108   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2109   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2110   // macro histroy.
2111   RecordData Record;
2112   while (true) {
2113     Expected<llvm::BitstreamEntry> MaybeEntry =
2114         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2115     if (!MaybeEntry) {
2116       Error(MaybeEntry.takeError());
2117       return;
2118     }
2119     llvm::BitstreamEntry Entry = MaybeEntry.get();
2120 
2121     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2122       Error("malformed block record in AST file");
2123       return;
2124     }
2125 
2126     Record.clear();
2127     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2128     if (!MaybePP) {
2129       Error(MaybePP.takeError());
2130       return;
2131     }
2132     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2133     case PP_MACRO_DIRECTIVE_HISTORY:
2134       break;
2135 
2136     case PP_MODULE_MACRO: {
2137       ModuleMacros.push_back(ModuleMacroRecord());
2138       auto &Info = ModuleMacros.back();
2139       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2140       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2141       for (int I = 2, N = Record.size(); I != N; ++I)
2142         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2143       continue;
2144     }
2145 
2146     default:
2147       Error("malformed block record in AST file");
2148       return;
2149     }
2150 
2151     // We found the macro directive history; that's the last record
2152     // for this macro.
2153     break;
2154   }
2155 
2156   // Module macros are listed in reverse dependency order.
2157   {
2158     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2159     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2160     for (auto &MMR : ModuleMacros) {
2161       Overrides.clear();
2162       for (unsigned ModID : MMR.Overrides) {
2163         Module *Mod = getSubmodule(ModID);
2164         auto *Macro = PP.getModuleMacro(Mod, II);
2165         assert(Macro && "missing definition for overridden macro");
2166         Overrides.push_back(Macro);
2167       }
2168 
2169       bool Inserted = false;
2170       Module *Owner = getSubmodule(MMR.SubModID);
2171       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2172     }
2173   }
2174 
2175   // Don't read the directive history for a module; we don't have anywhere
2176   // to put it.
2177   if (M.isModule())
2178     return;
2179 
2180   // Deserialize the macro directives history in reverse source-order.
2181   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2182   unsigned Idx = 0, N = Record.size();
2183   while (Idx < N) {
2184     MacroDirective *MD = nullptr;
2185     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2186     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2187     switch (K) {
2188     case MacroDirective::MD_Define: {
2189       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2190       MD = PP.AllocateDefMacroDirective(MI, Loc);
2191       break;
2192     }
2193     case MacroDirective::MD_Undefine:
2194       MD = PP.AllocateUndefMacroDirective(Loc);
2195       break;
2196     case MacroDirective::MD_Visibility:
2197       bool isPublic = Record[Idx++];
2198       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2199       break;
2200     }
2201 
2202     if (!Latest)
2203       Latest = MD;
2204     if (Earliest)
2205       Earliest->setPrevious(MD);
2206     Earliest = MD;
2207   }
2208 
2209   if (Latest)
2210     PP.setLoadedMacroDirective(II, Earliest, Latest);
2211 }
2212 
2213 bool ASTReader::shouldDisableValidationForFile(
2214     const serialization::ModuleFile &M) const {
2215   if (DisableValidationKind == DisableValidationForModuleKind::None)
2216     return false;
2217 
2218   // If a PCH is loaded and validation is disabled for PCH then disable
2219   // validation for the PCH and the modules it loads.
2220   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2221 
2222   switch (K) {
2223   case MK_MainFile:
2224   case MK_Preamble:
2225   case MK_PCH:
2226     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2227   case MK_ImplicitModule:
2228   case MK_ExplicitModule:
2229   case MK_PrebuiltModule:
2230     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2231   }
2232 
2233   return false;
2234 }
2235 
2236 ASTReader::InputFileInfo
2237 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2238   // Go find this input file.
2239   BitstreamCursor &Cursor = F.InputFilesCursor;
2240   SavedStreamPosition SavedPosition(Cursor);
2241   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2242     // FIXME this drops errors on the floor.
2243     consumeError(std::move(Err));
2244   }
2245 
2246   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2247   if (!MaybeCode) {
2248     // FIXME this drops errors on the floor.
2249     consumeError(MaybeCode.takeError());
2250   }
2251   unsigned Code = MaybeCode.get();
2252   RecordData Record;
2253   StringRef Blob;
2254 
2255   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2256     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2257            "invalid record type for input file");
2258   else {
2259     // FIXME this drops errors on the floor.
2260     consumeError(Maybe.takeError());
2261   }
2262 
2263   assert(Record[0] == ID && "Bogus stored ID or offset");
2264   InputFileInfo R;
2265   R.StoredSize = static_cast<off_t>(Record[1]);
2266   R.StoredTime = static_cast<time_t>(Record[2]);
2267   R.Overridden = static_cast<bool>(Record[3]);
2268   R.Transient = static_cast<bool>(Record[4]);
2269   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2270   R.Filename = std::string(Blob);
2271   ResolveImportedPath(F, R.Filename);
2272 
2273   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2274   if (!MaybeEntry) // FIXME this drops errors on the floor.
2275     consumeError(MaybeEntry.takeError());
2276   llvm::BitstreamEntry Entry = MaybeEntry.get();
2277   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2278          "expected record type for input file hash");
2279 
2280   Record.clear();
2281   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2282     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2283            "invalid record type for input file hash");
2284   else {
2285     // FIXME this drops errors on the floor.
2286     consumeError(Maybe.takeError());
2287   }
2288   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2289                   static_cast<uint64_t>(Record[0]);
2290   return R;
2291 }
2292 
2293 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2294 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2295   // If this ID is bogus, just return an empty input file.
2296   if (ID == 0 || ID > F.InputFilesLoaded.size())
2297     return InputFile();
2298 
2299   // If we've already loaded this input file, return it.
2300   if (F.InputFilesLoaded[ID-1].getFile())
2301     return F.InputFilesLoaded[ID-1];
2302 
2303   if (F.InputFilesLoaded[ID-1].isNotFound())
2304     return InputFile();
2305 
2306   // Go find this input file.
2307   BitstreamCursor &Cursor = F.InputFilesCursor;
2308   SavedStreamPosition SavedPosition(Cursor);
2309   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2310     // FIXME this drops errors on the floor.
2311     consumeError(std::move(Err));
2312   }
2313 
2314   InputFileInfo FI = readInputFileInfo(F, ID);
2315   off_t StoredSize = FI.StoredSize;
2316   time_t StoredTime = FI.StoredTime;
2317   bool Overridden = FI.Overridden;
2318   bool Transient = FI.Transient;
2319   StringRef Filename = FI.Filename;
2320   uint64_t StoredContentHash = FI.ContentHash;
2321 
2322   OptionalFileEntryRefDegradesToFileEntryPtr File =
2323       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2324 
2325   // If we didn't find the file, resolve it relative to the
2326   // original directory from which this AST file was created.
2327   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2328       F.OriginalDir != F.BaseDirectory) {
2329     std::string Resolved = resolveFileRelativeToOriginalDir(
2330         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2331     if (!Resolved.empty())
2332       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2333   }
2334 
2335   // For an overridden file, create a virtual file with the stored
2336   // size/timestamp.
2337   if ((Overridden || Transient) && !File)
2338     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2339 
2340   if (!File) {
2341     if (Complain) {
2342       std::string ErrorStr = "could not find file '";
2343       ErrorStr += Filename;
2344       ErrorStr += "' referenced by AST file '";
2345       ErrorStr += F.FileName;
2346       ErrorStr += "'";
2347       Error(ErrorStr);
2348     }
2349     // Record that we didn't find the file.
2350     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2351     return InputFile();
2352   }
2353 
2354   // Check if there was a request to override the contents of the file
2355   // that was part of the precompiled header. Overriding such a file
2356   // can lead to problems when lexing using the source locations from the
2357   // PCH.
2358   SourceManager &SM = getSourceManager();
2359   // FIXME: Reject if the overrides are different.
2360   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2361     if (Complain)
2362       Error(diag::err_fe_pch_file_overridden, Filename);
2363 
2364     // After emitting the diagnostic, bypass the overriding file to recover
2365     // (this creates a separate FileEntry).
2366     File = SM.bypassFileContentsOverride(*File);
2367     if (!File) {
2368       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2369       return InputFile();
2370     }
2371   }
2372 
2373   enum ModificationType {
2374     Size,
2375     ModTime,
2376     Content,
2377     None,
2378   };
2379   auto HasInputFileChanged = [&]() {
2380     if (StoredSize != File->getSize())
2381       return ModificationType::Size;
2382     if (!shouldDisableValidationForFile(F) && StoredTime &&
2383         StoredTime != File->getModificationTime()) {
2384       // In case the modification time changes but not the content,
2385       // accept the cached file as legit.
2386       if (ValidateASTInputFilesContent &&
2387           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2388         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2389         if (!MemBuffOrError) {
2390           if (!Complain)
2391             return ModificationType::ModTime;
2392           std::string ErrorStr = "could not get buffer for file '";
2393           ErrorStr += File->getName();
2394           ErrorStr += "'";
2395           Error(ErrorStr);
2396           return ModificationType::ModTime;
2397         }
2398 
2399         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2400         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2401           return ModificationType::None;
2402         return ModificationType::Content;
2403       }
2404       return ModificationType::ModTime;
2405     }
2406     return ModificationType::None;
2407   };
2408 
2409   bool IsOutOfDate = false;
2410   auto FileChange = HasInputFileChanged();
2411   // For an overridden file, there is nothing to validate.
2412   if (!Overridden && FileChange != ModificationType::None) {
2413     if (Complain && !Diags.isDiagnosticInFlight()) {
2414       // Build a list of the PCH imports that got us here (in reverse).
2415       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2416       while (!ImportStack.back()->ImportedBy.empty())
2417         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2418 
2419       // The top-level PCH is stale.
2420       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2421       Diag(diag::err_fe_ast_file_modified)
2422           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2423           << TopLevelPCHName << FileChange;
2424 
2425       // Print the import stack.
2426       if (ImportStack.size() > 1) {
2427         Diag(diag::note_pch_required_by)
2428           << Filename << ImportStack[0]->FileName;
2429         for (unsigned I = 1; I < ImportStack.size(); ++I)
2430           Diag(diag::note_pch_required_by)
2431             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2432       }
2433 
2434       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2435     }
2436 
2437     IsOutOfDate = true;
2438   }
2439   // FIXME: If the file is overridden and we've already opened it,
2440   // issue an error (or split it into a separate FileEntry).
2441 
2442   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2443 
2444   // Note that we've loaded this input file.
2445   F.InputFilesLoaded[ID-1] = IF;
2446   return IF;
2447 }
2448 
2449 /// If we are loading a relocatable PCH or module file, and the filename
2450 /// is not an absolute path, add the system or module root to the beginning of
2451 /// the file name.
2452 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2453   // Resolve relative to the base directory, if we have one.
2454   if (!M.BaseDirectory.empty())
2455     return ResolveImportedPath(Filename, M.BaseDirectory);
2456 }
2457 
2458 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2459   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2460     return;
2461 
2462   SmallString<128> Buffer;
2463   llvm::sys::path::append(Buffer, Prefix, Filename);
2464   Filename.assign(Buffer.begin(), Buffer.end());
2465 }
2466 
2467 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2468   switch (ARR) {
2469   case ASTReader::Failure: return true;
2470   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2471   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2472   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2473   case ASTReader::ConfigurationMismatch:
2474     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2475   case ASTReader::HadErrors: return true;
2476   case ASTReader::Success: return false;
2477   }
2478 
2479   llvm_unreachable("unknown ASTReadResult");
2480 }
2481 
2482 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2483     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2484     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2485     std::string &SuggestedPredefines) {
2486   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2487     // FIXME this drops errors on the floor.
2488     consumeError(std::move(Err));
2489     return Failure;
2490   }
2491 
2492   // Read all of the records in the options block.
2493   RecordData Record;
2494   ASTReadResult Result = Success;
2495   while (true) {
2496     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2497     if (!MaybeEntry) {
2498       // FIXME this drops errors on the floor.
2499       consumeError(MaybeEntry.takeError());
2500       return Failure;
2501     }
2502     llvm::BitstreamEntry Entry = MaybeEntry.get();
2503 
2504     switch (Entry.Kind) {
2505     case llvm::BitstreamEntry::Error:
2506     case llvm::BitstreamEntry::SubBlock:
2507       return Failure;
2508 
2509     case llvm::BitstreamEntry::EndBlock:
2510       return Result;
2511 
2512     case llvm::BitstreamEntry::Record:
2513       // The interesting case.
2514       break;
2515     }
2516 
2517     // Read and process a record.
2518     Record.clear();
2519     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2520     if (!MaybeRecordType) {
2521       // FIXME this drops errors on the floor.
2522       consumeError(MaybeRecordType.takeError());
2523       return Failure;
2524     }
2525     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2526     case LANGUAGE_OPTIONS: {
2527       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2528       if (ParseLanguageOptions(Record, Complain, Listener,
2529                                AllowCompatibleConfigurationMismatch))
2530         Result = ConfigurationMismatch;
2531       break;
2532     }
2533 
2534     case TARGET_OPTIONS: {
2535       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2536       if (ParseTargetOptions(Record, Complain, Listener,
2537                              AllowCompatibleConfigurationMismatch))
2538         Result = ConfigurationMismatch;
2539       break;
2540     }
2541 
2542     case FILE_SYSTEM_OPTIONS: {
2543       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2544       if (!AllowCompatibleConfigurationMismatch &&
2545           ParseFileSystemOptions(Record, Complain, Listener))
2546         Result = ConfigurationMismatch;
2547       break;
2548     }
2549 
2550     case HEADER_SEARCH_OPTIONS: {
2551       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2552       if (!AllowCompatibleConfigurationMismatch &&
2553           ParseHeaderSearchOptions(Record, Complain, Listener))
2554         Result = ConfigurationMismatch;
2555       break;
2556     }
2557 
2558     case PREPROCESSOR_OPTIONS:
2559       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2560       if (!AllowCompatibleConfigurationMismatch &&
2561           ParsePreprocessorOptions(Record, Complain, Listener,
2562                                    SuggestedPredefines))
2563         Result = ConfigurationMismatch;
2564       break;
2565     }
2566   }
2567 }
2568 
2569 ASTReader::ASTReadResult
2570 ASTReader::ReadControlBlock(ModuleFile &F,
2571                             SmallVectorImpl<ImportedModule> &Loaded,
2572                             const ModuleFile *ImportedBy,
2573                             unsigned ClientLoadCapabilities) {
2574   BitstreamCursor &Stream = F.Stream;
2575 
2576   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2577     Error(std::move(Err));
2578     return Failure;
2579   }
2580 
2581   // Lambda to read the unhashed control block the first time it's called.
2582   //
2583   // For PCM files, the unhashed control block cannot be read until after the
2584   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2585   // need to look ahead before reading the IMPORTS record.  For consistency,
2586   // this block is always read somehow (see BitstreamEntry::EndBlock).
2587   bool HasReadUnhashedControlBlock = false;
2588   auto readUnhashedControlBlockOnce = [&]() {
2589     if (!HasReadUnhashedControlBlock) {
2590       HasReadUnhashedControlBlock = true;
2591       if (ASTReadResult Result =
2592               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2593         return Result;
2594     }
2595     return Success;
2596   };
2597 
2598   bool DisableValidation = shouldDisableValidationForFile(F);
2599 
2600   // Read all of the records and blocks in the control block.
2601   RecordData Record;
2602   unsigned NumInputs = 0;
2603   unsigned NumUserInputs = 0;
2604   StringRef BaseDirectoryAsWritten;
2605   while (true) {
2606     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2607     if (!MaybeEntry) {
2608       Error(MaybeEntry.takeError());
2609       return Failure;
2610     }
2611     llvm::BitstreamEntry Entry = MaybeEntry.get();
2612 
2613     switch (Entry.Kind) {
2614     case llvm::BitstreamEntry::Error:
2615       Error("malformed block record in AST file");
2616       return Failure;
2617     case llvm::BitstreamEntry::EndBlock: {
2618       // Validate the module before returning.  This call catches an AST with
2619       // no module name and no imports.
2620       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2621         return Result;
2622 
2623       // Validate input files.
2624       const HeaderSearchOptions &HSOpts =
2625           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2626 
2627       // All user input files reside at the index range [0, NumUserInputs), and
2628       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2629       // loaded module files, ignore missing inputs.
2630       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2631           F.Kind != MK_PrebuiltModule) {
2632         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2633 
2634         // If we are reading a module, we will create a verification timestamp,
2635         // so we verify all input files.  Otherwise, verify only user input
2636         // files.
2637 
2638         unsigned N = NumUserInputs;
2639         if (ValidateSystemInputs ||
2640             (HSOpts.ModulesValidateOncePerBuildSession &&
2641              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2642              F.Kind == MK_ImplicitModule))
2643           N = NumInputs;
2644 
2645         for (unsigned I = 0; I < N; ++I) {
2646           InputFile IF = getInputFile(F, I+1, Complain);
2647           if (!IF.getFile() || IF.isOutOfDate())
2648             return OutOfDate;
2649         }
2650       }
2651 
2652       if (Listener)
2653         Listener->visitModuleFile(F.FileName, F.Kind);
2654 
2655       if (Listener && Listener->needsInputFileVisitation()) {
2656         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2657                                                                 : NumUserInputs;
2658         for (unsigned I = 0; I < N; ++I) {
2659           bool IsSystem = I >= NumUserInputs;
2660           InputFileInfo FI = readInputFileInfo(F, I+1);
2661           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2662                                    F.Kind == MK_ExplicitModule ||
2663                                    F.Kind == MK_PrebuiltModule);
2664         }
2665       }
2666 
2667       return Success;
2668     }
2669 
2670     case llvm::BitstreamEntry::SubBlock:
2671       switch (Entry.ID) {
2672       case INPUT_FILES_BLOCK_ID:
2673         F.InputFilesCursor = Stream;
2674         if (llvm::Error Err = Stream.SkipBlock()) {
2675           Error(std::move(Err));
2676           return Failure;
2677         }
2678         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2679           Error("malformed block record in AST file");
2680           return Failure;
2681         }
2682         continue;
2683 
2684       case OPTIONS_BLOCK_ID:
2685         // If we're reading the first module for this group, check its options
2686         // are compatible with ours. For modules it imports, no further checking
2687         // is required, because we checked them when we built it.
2688         if (Listener && !ImportedBy) {
2689           // Should we allow the configuration of the module file to differ from
2690           // the configuration of the current translation unit in a compatible
2691           // way?
2692           //
2693           // FIXME: Allow this for files explicitly specified with -include-pch.
2694           bool AllowCompatibleConfigurationMismatch =
2695               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2696 
2697           ASTReadResult Result =
2698               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2699                                AllowCompatibleConfigurationMismatch, *Listener,
2700                                SuggestedPredefines);
2701           if (Result == Failure) {
2702             Error("malformed block record in AST file");
2703             return Result;
2704           }
2705 
2706           if (DisableValidation ||
2707               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2708             Result = Success;
2709 
2710           // If we can't load the module, exit early since we likely
2711           // will rebuild the module anyway. The stream may be in the
2712           // middle of a block.
2713           if (Result != Success)
2714             return Result;
2715         } else if (llvm::Error Err = Stream.SkipBlock()) {
2716           Error(std::move(Err));
2717           return Failure;
2718         }
2719         continue;
2720 
2721       default:
2722         if (llvm::Error Err = Stream.SkipBlock()) {
2723           Error(std::move(Err));
2724           return Failure;
2725         }
2726         continue;
2727       }
2728 
2729     case llvm::BitstreamEntry::Record:
2730       // The interesting case.
2731       break;
2732     }
2733 
2734     // Read and process a record.
2735     Record.clear();
2736     StringRef Blob;
2737     Expected<unsigned> MaybeRecordType =
2738         Stream.readRecord(Entry.ID, Record, &Blob);
2739     if (!MaybeRecordType) {
2740       Error(MaybeRecordType.takeError());
2741       return Failure;
2742     }
2743     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2744     case METADATA: {
2745       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2746         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2747           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2748                                         : diag::err_pch_version_too_new);
2749         return VersionMismatch;
2750       }
2751 
2752       bool hasErrors = Record[6];
2753       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2754         Diag(diag::err_pch_with_compiler_errors);
2755         return HadErrors;
2756       }
2757       if (hasErrors) {
2758         Diags.ErrorOccurred = true;
2759         Diags.UncompilableErrorOccurred = true;
2760         Diags.UnrecoverableErrorOccurred = true;
2761       }
2762 
2763       F.RelocatablePCH = Record[4];
2764       // Relative paths in a relocatable PCH are relative to our sysroot.
2765       if (F.RelocatablePCH)
2766         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2767 
2768       F.HasTimestamps = Record[5];
2769 
2770       const std::string &CurBranch = getClangFullRepositoryVersion();
2771       StringRef ASTBranch = Blob;
2772       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2773         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2774           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2775         return VersionMismatch;
2776       }
2777       break;
2778     }
2779 
2780     case IMPORTS: {
2781       // Validate the AST before processing any imports (otherwise, untangling
2782       // them can be error-prone and expensive).  A module will have a name and
2783       // will already have been validated, but this catches the PCH case.
2784       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2785         return Result;
2786 
2787       // Load each of the imported PCH files.
2788       unsigned Idx = 0, N = Record.size();
2789       while (Idx < N) {
2790         // Read information about the AST file.
2791         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2792         // The import location will be the local one for now; we will adjust
2793         // all import locations of module imports after the global source
2794         // location info are setup, in ReadAST.
2795         SourceLocation ImportLoc =
2796             ReadUntranslatedSourceLocation(Record[Idx++]);
2797         off_t StoredSize = (off_t)Record[Idx++];
2798         time_t StoredModTime = (time_t)Record[Idx++];
2799         auto FirstSignatureByte = Record.begin() + Idx;
2800         ASTFileSignature StoredSignature = ASTFileSignature::create(
2801             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2802         Idx += ASTFileSignature::size;
2803 
2804         std::string ImportedName = ReadString(Record, Idx);
2805         std::string ImportedFile;
2806 
2807         // For prebuilt and explicit modules first consult the file map for
2808         // an override. Note that here we don't search prebuilt module
2809         // directories, only the explicit name to file mappings. Also, we will
2810         // still verify the size/signature making sure it is essentially the
2811         // same file but perhaps in a different location.
2812         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2813           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2814             ImportedName, /*FileMapOnly*/ true);
2815 
2816         if (ImportedFile.empty())
2817           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2818           // ModuleCache as when writing.
2819           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2820         else
2821           SkipPath(Record, Idx);
2822 
2823         // If our client can't cope with us being out of date, we can't cope with
2824         // our dependency being missing.
2825         unsigned Capabilities = ClientLoadCapabilities;
2826         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2827           Capabilities &= ~ARR_Missing;
2828 
2829         // Load the AST file.
2830         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2831                                   Loaded, StoredSize, StoredModTime,
2832                                   StoredSignature, Capabilities);
2833 
2834         // If we diagnosed a problem, produce a backtrace.
2835         if (isDiagnosedResult(Result, Capabilities))
2836           Diag(diag::note_module_file_imported_by)
2837               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2838 
2839         switch (Result) {
2840         case Failure: return Failure;
2841           // If we have to ignore the dependency, we'll have to ignore this too.
2842         case Missing:
2843         case OutOfDate: return OutOfDate;
2844         case VersionMismatch: return VersionMismatch;
2845         case ConfigurationMismatch: return ConfigurationMismatch;
2846         case HadErrors: return HadErrors;
2847         case Success: break;
2848         }
2849       }
2850       break;
2851     }
2852 
2853     case ORIGINAL_FILE:
2854       F.OriginalSourceFileID = FileID::get(Record[0]);
2855       F.ActualOriginalSourceFileName = std::string(Blob);
2856       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2857       ResolveImportedPath(F, F.OriginalSourceFileName);
2858       break;
2859 
2860     case ORIGINAL_FILE_ID:
2861       F.OriginalSourceFileID = FileID::get(Record[0]);
2862       break;
2863 
2864     case ORIGINAL_PCH_DIR:
2865       F.OriginalDir = std::string(Blob);
2866       break;
2867 
2868     case MODULE_NAME:
2869       F.ModuleName = std::string(Blob);
2870       Diag(diag::remark_module_import)
2871           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2872           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2873       if (Listener)
2874         Listener->ReadModuleName(F.ModuleName);
2875 
2876       // Validate the AST as soon as we have a name so we can exit early on
2877       // failure.
2878       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2879         return Result;
2880 
2881       break;
2882 
2883     case MODULE_DIRECTORY: {
2884       // Save the BaseDirectory as written in the PCM for computing the module
2885       // filename for the ModuleCache.
2886       BaseDirectoryAsWritten = Blob;
2887       assert(!F.ModuleName.empty() &&
2888              "MODULE_DIRECTORY found before MODULE_NAME");
2889       // If we've already loaded a module map file covering this module, we may
2890       // have a better path for it (relative to the current build).
2891       Module *M = PP.getHeaderSearchInfo().lookupModule(
2892           F.ModuleName, /*AllowSearch*/ true,
2893           /*AllowExtraModuleMapSearch*/ true);
2894       if (M && M->Directory) {
2895         // If we're implicitly loading a module, the base directory can't
2896         // change between the build and use.
2897         // Don't emit module relocation error if we have -fno-validate-pch
2898         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2899                   DisableValidationForModuleKind::Module) &&
2900             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2901           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2902           if (!BuildDir || *BuildDir != M->Directory) {
2903             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2904               Diag(diag::err_imported_module_relocated)
2905                   << F.ModuleName << Blob << M->Directory->getName();
2906             return OutOfDate;
2907           }
2908         }
2909         F.BaseDirectory = std::string(M->Directory->getName());
2910       } else {
2911         F.BaseDirectory = std::string(Blob);
2912       }
2913       break;
2914     }
2915 
2916     case MODULE_MAP_FILE:
2917       if (ASTReadResult Result =
2918               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2919         return Result;
2920       break;
2921 
2922     case INPUT_FILE_OFFSETS:
2923       NumInputs = Record[0];
2924       NumUserInputs = Record[1];
2925       F.InputFileOffsets =
2926           (const llvm::support::unaligned_uint64_t *)Blob.data();
2927       F.InputFilesLoaded.resize(NumInputs);
2928       F.NumUserInputFiles = NumUserInputs;
2929       break;
2930     }
2931   }
2932 }
2933 
2934 ASTReader::ASTReadResult
2935 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2936   BitstreamCursor &Stream = F.Stream;
2937 
2938   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2939     Error(std::move(Err));
2940     return Failure;
2941   }
2942   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2943 
2944   // Read all of the records and blocks for the AST file.
2945   RecordData Record;
2946   while (true) {
2947     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2948     if (!MaybeEntry) {
2949       Error(MaybeEntry.takeError());
2950       return Failure;
2951     }
2952     llvm::BitstreamEntry Entry = MaybeEntry.get();
2953 
2954     switch (Entry.Kind) {
2955     case llvm::BitstreamEntry::Error:
2956       Error("error at end of module block in AST file");
2957       return Failure;
2958     case llvm::BitstreamEntry::EndBlock:
2959       // Outside of C++, we do not store a lookup map for the translation unit.
2960       // Instead, mark it as needing a lookup map to be built if this module
2961       // contains any declarations lexically within it (which it always does!).
2962       // This usually has no cost, since we very rarely need the lookup map for
2963       // the translation unit outside C++.
2964       if (ASTContext *Ctx = ContextObj) {
2965         DeclContext *DC = Ctx->getTranslationUnitDecl();
2966         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2967           DC->setMustBuildLookupTable();
2968       }
2969 
2970       return Success;
2971     case llvm::BitstreamEntry::SubBlock:
2972       switch (Entry.ID) {
2973       case DECLTYPES_BLOCK_ID:
2974         // We lazily load the decls block, but we want to set up the
2975         // DeclsCursor cursor to point into it.  Clone our current bitcode
2976         // cursor to it, enter the block and read the abbrevs in that block.
2977         // With the main cursor, we just skip over it.
2978         F.DeclsCursor = Stream;
2979         if (llvm::Error Err = Stream.SkipBlock()) {
2980           Error(std::move(Err));
2981           return Failure;
2982         }
2983         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
2984                              &F.DeclsBlockStartOffset)) {
2985           Error("malformed block record in AST file");
2986           return Failure;
2987         }
2988         break;
2989 
2990       case PREPROCESSOR_BLOCK_ID:
2991         F.MacroCursor = Stream;
2992         if (!PP.getExternalSource())
2993           PP.setExternalSource(this);
2994 
2995         if (llvm::Error Err = Stream.SkipBlock()) {
2996           Error(std::move(Err));
2997           return Failure;
2998         }
2999         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
3000           Error("malformed block record in AST file");
3001           return Failure;
3002         }
3003         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3004         break;
3005 
3006       case PREPROCESSOR_DETAIL_BLOCK_ID:
3007         F.PreprocessorDetailCursor = Stream;
3008 
3009         if (llvm::Error Err = Stream.SkipBlock()) {
3010           Error(std::move(Err));
3011           return Failure;
3012         }
3013         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3014                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3015           Error("malformed preprocessor detail record in AST file");
3016           return Failure;
3017         }
3018         F.PreprocessorDetailStartOffset
3019         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3020 
3021         if (!PP.getPreprocessingRecord())
3022           PP.createPreprocessingRecord();
3023         if (!PP.getPreprocessingRecord()->getExternalSource())
3024           PP.getPreprocessingRecord()->SetExternalSource(*this);
3025         break;
3026 
3027       case SOURCE_MANAGER_BLOCK_ID:
3028         if (ReadSourceManagerBlock(F))
3029           return Failure;
3030         break;
3031 
3032       case SUBMODULE_BLOCK_ID:
3033         if (ASTReadResult Result =
3034                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3035           return Result;
3036         break;
3037 
3038       case COMMENTS_BLOCK_ID: {
3039         BitstreamCursor C = Stream;
3040 
3041         if (llvm::Error Err = Stream.SkipBlock()) {
3042           Error(std::move(Err));
3043           return Failure;
3044         }
3045         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3046           Error("malformed comments block in AST file");
3047           return Failure;
3048         }
3049         CommentsCursors.push_back(std::make_pair(C, &F));
3050         break;
3051       }
3052 
3053       default:
3054         if (llvm::Error Err = Stream.SkipBlock()) {
3055           Error(std::move(Err));
3056           return Failure;
3057         }
3058         break;
3059       }
3060       continue;
3061 
3062     case llvm::BitstreamEntry::Record:
3063       // The interesting case.
3064       break;
3065     }
3066 
3067     // Read and process a record.
3068     Record.clear();
3069     StringRef Blob;
3070     Expected<unsigned> MaybeRecordType =
3071         Stream.readRecord(Entry.ID, Record, &Blob);
3072     if (!MaybeRecordType) {
3073       Error(MaybeRecordType.takeError());
3074       return Failure;
3075     }
3076     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3077 
3078     // If we're not loading an AST context, we don't care about most records.
3079     if (!ContextObj) {
3080       switch (RecordType) {
3081       case IDENTIFIER_TABLE:
3082       case IDENTIFIER_OFFSET:
3083       case INTERESTING_IDENTIFIERS:
3084       case STATISTICS:
3085       case PP_CONDITIONAL_STACK:
3086       case PP_COUNTER_VALUE:
3087       case SOURCE_LOCATION_OFFSETS:
3088       case MODULE_OFFSET_MAP:
3089       case SOURCE_MANAGER_LINE_TABLE:
3090       case SOURCE_LOCATION_PRELOADS:
3091       case PPD_ENTITIES_OFFSETS:
3092       case HEADER_SEARCH_TABLE:
3093       case IMPORTED_MODULES:
3094       case MACRO_OFFSET:
3095         break;
3096       default:
3097         continue;
3098       }
3099     }
3100 
3101     switch (RecordType) {
3102     default:  // Default behavior: ignore.
3103       break;
3104 
3105     case TYPE_OFFSET: {
3106       if (F.LocalNumTypes != 0) {
3107         Error("duplicate TYPE_OFFSET record in AST file");
3108         return Failure;
3109       }
3110       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3111       F.LocalNumTypes = Record[0];
3112       unsigned LocalBaseTypeIndex = Record[1];
3113       F.BaseTypeIndex = getTotalNumTypes();
3114 
3115       if (F.LocalNumTypes > 0) {
3116         // Introduce the global -> local mapping for types within this module.
3117         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3118 
3119         // Introduce the local -> global mapping for types within this module.
3120         F.TypeRemap.insertOrReplace(
3121           std::make_pair(LocalBaseTypeIndex,
3122                          F.BaseTypeIndex - LocalBaseTypeIndex));
3123 
3124         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3125       }
3126       break;
3127     }
3128 
3129     case DECL_OFFSET: {
3130       if (F.LocalNumDecls != 0) {
3131         Error("duplicate DECL_OFFSET record in AST file");
3132         return Failure;
3133       }
3134       F.DeclOffsets = (const DeclOffset *)Blob.data();
3135       F.LocalNumDecls = Record[0];
3136       unsigned LocalBaseDeclID = Record[1];
3137       F.BaseDeclID = getTotalNumDecls();
3138 
3139       if (F.LocalNumDecls > 0) {
3140         // Introduce the global -> local mapping for declarations within this
3141         // module.
3142         GlobalDeclMap.insert(
3143           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3144 
3145         // Introduce the local -> global mapping for declarations within this
3146         // module.
3147         F.DeclRemap.insertOrReplace(
3148           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3149 
3150         // Introduce the global -> local mapping for declarations within this
3151         // module.
3152         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3153 
3154         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3155       }
3156       break;
3157     }
3158 
3159     case TU_UPDATE_LEXICAL: {
3160       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3161       LexicalContents Contents(
3162           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3163               Blob.data()),
3164           static_cast<unsigned int>(Blob.size() / 4));
3165       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3166       TU->setHasExternalLexicalStorage(true);
3167       break;
3168     }
3169 
3170     case UPDATE_VISIBLE: {
3171       unsigned Idx = 0;
3172       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3173       auto *Data = (const unsigned char*)Blob.data();
3174       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3175       // If we've already loaded the decl, perform the updates when we finish
3176       // loading this block.
3177       if (Decl *D = GetExistingDecl(ID))
3178         PendingUpdateRecords.push_back(
3179             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3180       break;
3181     }
3182 
3183     case IDENTIFIER_TABLE:
3184       F.IdentifierTableData = Blob.data();
3185       if (Record[0]) {
3186         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3187             (const unsigned char *)F.IdentifierTableData + Record[0],
3188             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
3189             (const unsigned char *)F.IdentifierTableData,
3190             ASTIdentifierLookupTrait(*this, F));
3191 
3192         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3193       }
3194       break;
3195 
3196     case IDENTIFIER_OFFSET: {
3197       if (F.LocalNumIdentifiers != 0) {
3198         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3199         return Failure;
3200       }
3201       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3202       F.LocalNumIdentifiers = Record[0];
3203       unsigned LocalBaseIdentifierID = Record[1];
3204       F.BaseIdentifierID = getTotalNumIdentifiers();
3205 
3206       if (F.LocalNumIdentifiers > 0) {
3207         // Introduce the global -> local mapping for identifiers within this
3208         // module.
3209         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3210                                                   &F));
3211 
3212         // Introduce the local -> global mapping for identifiers within this
3213         // module.
3214         F.IdentifierRemap.insertOrReplace(
3215           std::make_pair(LocalBaseIdentifierID,
3216                          F.BaseIdentifierID - LocalBaseIdentifierID));
3217 
3218         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3219                                  + F.LocalNumIdentifiers);
3220       }
3221       break;
3222     }
3223 
3224     case INTERESTING_IDENTIFIERS:
3225       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3226       break;
3227 
3228     case EAGERLY_DESERIALIZED_DECLS:
3229       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3230       // about "interesting" decls (for instance, if we're building a module).
3231       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3232         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3233       break;
3234 
3235     case MODULAR_CODEGEN_DECLS:
3236       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3237       // them (ie: if we're not codegenerating this module).
3238       if (F.Kind == MK_MainFile ||
3239           getContext().getLangOpts().BuildingPCHWithObjectFile)
3240         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3241           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3242       break;
3243 
3244     case SPECIAL_TYPES:
3245       if (SpecialTypes.empty()) {
3246         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3247           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3248         break;
3249       }
3250 
3251       if (SpecialTypes.size() != Record.size()) {
3252         Error("invalid special-types record");
3253         return Failure;
3254       }
3255 
3256       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3257         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3258         if (!SpecialTypes[I])
3259           SpecialTypes[I] = ID;
3260         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3261         // merge step?
3262       }
3263       break;
3264 
3265     case STATISTICS:
3266       TotalNumStatements += Record[0];
3267       TotalNumMacros += Record[1];
3268       TotalLexicalDeclContexts += Record[2];
3269       TotalVisibleDeclContexts += Record[3];
3270       break;
3271 
3272     case UNUSED_FILESCOPED_DECLS:
3273       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3274         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3275       break;
3276 
3277     case DELEGATING_CTORS:
3278       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3279         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3280       break;
3281 
3282     case WEAK_UNDECLARED_IDENTIFIERS:
3283       if (Record.size() % 4 != 0) {
3284         Error("invalid weak identifiers record");
3285         return Failure;
3286       }
3287 
3288       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3289       // files. This isn't the way to do it :)
3290       WeakUndeclaredIdentifiers.clear();
3291 
3292       // Translate the weak, undeclared identifiers into global IDs.
3293       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3294         WeakUndeclaredIdentifiers.push_back(
3295           getGlobalIdentifierID(F, Record[I++]));
3296         WeakUndeclaredIdentifiers.push_back(
3297           getGlobalIdentifierID(F, Record[I++]));
3298         WeakUndeclaredIdentifiers.push_back(
3299           ReadSourceLocation(F, Record, I).getRawEncoding());
3300         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3301       }
3302       break;
3303 
3304     case SELECTOR_OFFSETS: {
3305       F.SelectorOffsets = (const uint32_t *)Blob.data();
3306       F.LocalNumSelectors = Record[0];
3307       unsigned LocalBaseSelectorID = Record[1];
3308       F.BaseSelectorID = getTotalNumSelectors();
3309 
3310       if (F.LocalNumSelectors > 0) {
3311         // Introduce the global -> local mapping for selectors within this
3312         // module.
3313         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3314 
3315         // Introduce the local -> global mapping for selectors within this
3316         // module.
3317         F.SelectorRemap.insertOrReplace(
3318           std::make_pair(LocalBaseSelectorID,
3319                          F.BaseSelectorID - LocalBaseSelectorID));
3320 
3321         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3322       }
3323       break;
3324     }
3325 
3326     case METHOD_POOL:
3327       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3328       if (Record[0])
3329         F.SelectorLookupTable
3330           = ASTSelectorLookupTable::Create(
3331                         F.SelectorLookupTableData + Record[0],
3332                         F.SelectorLookupTableData,
3333                         ASTSelectorLookupTrait(*this, F));
3334       TotalNumMethodPoolEntries += Record[1];
3335       break;
3336 
3337     case REFERENCED_SELECTOR_POOL:
3338       if (!Record.empty()) {
3339         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3340           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3341                                                                 Record[Idx++]));
3342           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3343                                               getRawEncoding());
3344         }
3345       }
3346       break;
3347 
3348     case PP_CONDITIONAL_STACK:
3349       if (!Record.empty()) {
3350         unsigned Idx = 0, End = Record.size() - 1;
3351         bool ReachedEOFWhileSkipping = Record[Idx++];
3352         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3353         if (ReachedEOFWhileSkipping) {
3354           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3355           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3356           bool FoundNonSkipPortion = Record[Idx++];
3357           bool FoundElse = Record[Idx++];
3358           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3359           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3360                            FoundElse, ElseLoc);
3361         }
3362         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3363         while (Idx < End) {
3364           auto Loc = ReadSourceLocation(F, Record, Idx);
3365           bool WasSkipping = Record[Idx++];
3366           bool FoundNonSkip = Record[Idx++];
3367           bool FoundElse = Record[Idx++];
3368           ConditionalStack.push_back(
3369               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3370         }
3371         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3372       }
3373       break;
3374 
3375     case PP_COUNTER_VALUE:
3376       if (!Record.empty() && Listener)
3377         Listener->ReadCounter(F, Record[0]);
3378       break;
3379 
3380     case FILE_SORTED_DECLS:
3381       F.FileSortedDecls = (const DeclID *)Blob.data();
3382       F.NumFileSortedDecls = Record[0];
3383       break;
3384 
3385     case SOURCE_LOCATION_OFFSETS: {
3386       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3387       F.LocalNumSLocEntries = Record[0];
3388       unsigned SLocSpaceSize = Record[1];
3389       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3390       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3391           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3392                                               SLocSpaceSize);
3393       if (!F.SLocEntryBaseID) {
3394         Error("ran out of source locations");
3395         break;
3396       }
3397       // Make our entry in the range map. BaseID is negative and growing, so
3398       // we invert it. Because we invert it, though, we need the other end of
3399       // the range.
3400       unsigned RangeStart =
3401           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3402       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3403       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3404 
3405       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3406       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3407       GlobalSLocOffsetMap.insert(
3408           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3409                            - SLocSpaceSize,&F));
3410 
3411       // Initialize the remapping table.
3412       // Invalid stays invalid.
3413       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3414       // This module. Base was 2 when being compiled.
3415       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3416                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3417 
3418       TotalNumSLocEntries += F.LocalNumSLocEntries;
3419       break;
3420     }
3421 
3422     case MODULE_OFFSET_MAP:
3423       F.ModuleOffsetMap = Blob;
3424       break;
3425 
3426     case SOURCE_MANAGER_LINE_TABLE:
3427       if (ParseLineTable(F, Record)) {
3428         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3429         return Failure;
3430       }
3431       break;
3432 
3433     case SOURCE_LOCATION_PRELOADS: {
3434       // Need to transform from the local view (1-based IDs) to the global view,
3435       // which is based off F.SLocEntryBaseID.
3436       if (!F.PreloadSLocEntries.empty()) {
3437         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3438         return Failure;
3439       }
3440 
3441       F.PreloadSLocEntries.swap(Record);
3442       break;
3443     }
3444 
3445     case EXT_VECTOR_DECLS:
3446       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3447         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3448       break;
3449 
3450     case VTABLE_USES:
3451       if (Record.size() % 3 != 0) {
3452         Error("Invalid VTABLE_USES record");
3453         return Failure;
3454       }
3455 
3456       // Later tables overwrite earlier ones.
3457       // FIXME: Modules will have some trouble with this. This is clearly not
3458       // the right way to do this.
3459       VTableUses.clear();
3460 
3461       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3462         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3463         VTableUses.push_back(
3464           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3465         VTableUses.push_back(Record[Idx++]);
3466       }
3467       break;
3468 
3469     case PENDING_IMPLICIT_INSTANTIATIONS:
3470       if (PendingInstantiations.size() % 2 != 0) {
3471         Error("Invalid existing PendingInstantiations");
3472         return Failure;
3473       }
3474 
3475       if (Record.size() % 2 != 0) {
3476         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3477         return Failure;
3478       }
3479 
3480       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3481         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3482         PendingInstantiations.push_back(
3483           ReadSourceLocation(F, Record, I).getRawEncoding());
3484       }
3485       break;
3486 
3487     case SEMA_DECL_REFS:
3488       if (Record.size() != 3) {
3489         Error("Invalid SEMA_DECL_REFS block");
3490         return Failure;
3491       }
3492       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3493         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3494       break;
3495 
3496     case PPD_ENTITIES_OFFSETS: {
3497       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3498       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3499       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3500 
3501       unsigned LocalBasePreprocessedEntityID = Record[0];
3502 
3503       unsigned StartingID;
3504       if (!PP.getPreprocessingRecord())
3505         PP.createPreprocessingRecord();
3506       if (!PP.getPreprocessingRecord()->getExternalSource())
3507         PP.getPreprocessingRecord()->SetExternalSource(*this);
3508       StartingID
3509         = PP.getPreprocessingRecord()
3510             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3511       F.BasePreprocessedEntityID = StartingID;
3512 
3513       if (F.NumPreprocessedEntities > 0) {
3514         // Introduce the global -> local mapping for preprocessed entities in
3515         // this module.
3516         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3517 
3518         // Introduce the local -> global mapping for preprocessed entities in
3519         // this module.
3520         F.PreprocessedEntityRemap.insertOrReplace(
3521           std::make_pair(LocalBasePreprocessedEntityID,
3522             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3523       }
3524 
3525       break;
3526     }
3527 
3528     case PPD_SKIPPED_RANGES: {
3529       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3530       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3531       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3532 
3533       if (!PP.getPreprocessingRecord())
3534         PP.createPreprocessingRecord();
3535       if (!PP.getPreprocessingRecord()->getExternalSource())
3536         PP.getPreprocessingRecord()->SetExternalSource(*this);
3537       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3538           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3539 
3540       if (F.NumPreprocessedSkippedRanges > 0)
3541         GlobalSkippedRangeMap.insert(
3542             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3543       break;
3544     }
3545 
3546     case DECL_UPDATE_OFFSETS:
3547       if (Record.size() % 2 != 0) {
3548         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3549         return Failure;
3550       }
3551       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3552         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3553         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3554 
3555         // If we've already loaded the decl, perform the updates when we finish
3556         // loading this block.
3557         if (Decl *D = GetExistingDecl(ID))
3558           PendingUpdateRecords.push_back(
3559               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3560       }
3561       break;
3562 
3563     case OBJC_CATEGORIES_MAP:
3564       if (F.LocalNumObjCCategoriesInMap != 0) {
3565         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3566         return Failure;
3567       }
3568 
3569       F.LocalNumObjCCategoriesInMap = Record[0];
3570       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3571       break;
3572 
3573     case OBJC_CATEGORIES:
3574       F.ObjCCategories.swap(Record);
3575       break;
3576 
3577     case CUDA_SPECIAL_DECL_REFS:
3578       // Later tables overwrite earlier ones.
3579       // FIXME: Modules will have trouble with this.
3580       CUDASpecialDeclRefs.clear();
3581       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3582         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3583       break;
3584 
3585     case HEADER_SEARCH_TABLE:
3586       F.HeaderFileInfoTableData = Blob.data();
3587       F.LocalNumHeaderFileInfos = Record[1];
3588       if (Record[0]) {
3589         F.HeaderFileInfoTable
3590           = HeaderFileInfoLookupTable::Create(
3591                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3592                    (const unsigned char *)F.HeaderFileInfoTableData,
3593                    HeaderFileInfoTrait(*this, F,
3594                                        &PP.getHeaderSearchInfo(),
3595                                        Blob.data() + Record[2]));
3596 
3597         PP.getHeaderSearchInfo().SetExternalSource(this);
3598         if (!PP.getHeaderSearchInfo().getExternalLookup())
3599           PP.getHeaderSearchInfo().SetExternalLookup(this);
3600       }
3601       break;
3602 
3603     case FP_PRAGMA_OPTIONS:
3604       // Later tables overwrite earlier ones.
3605       FPPragmaOptions.swap(Record);
3606       break;
3607 
3608     case OPENCL_EXTENSIONS:
3609       for (unsigned I = 0, E = Record.size(); I != E; ) {
3610         auto Name = ReadString(Record, I);
3611         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3612         OptInfo.Supported = Record[I++] != 0;
3613         OptInfo.Enabled = Record[I++] != 0;
3614         OptInfo.Avail = Record[I++];
3615         OptInfo.Core = Record[I++];
3616         OptInfo.Opt = Record[I++];
3617       }
3618       break;
3619 
3620     case OPENCL_EXTENSION_TYPES:
3621       for (unsigned I = 0, E = Record.size(); I != E;) {
3622         auto TypeID = static_cast<::TypeID>(Record[I++]);
3623         auto *Type = GetType(TypeID).getTypePtr();
3624         auto NumExt = static_cast<unsigned>(Record[I++]);
3625         for (unsigned II = 0; II != NumExt; ++II) {
3626           auto Ext = ReadString(Record, I);
3627           OpenCLTypeExtMap[Type].insert(Ext);
3628         }
3629       }
3630       break;
3631 
3632     case OPENCL_EXTENSION_DECLS:
3633       for (unsigned I = 0, E = Record.size(); I != E;) {
3634         auto DeclID = static_cast<::DeclID>(Record[I++]);
3635         auto *Decl = GetDecl(DeclID);
3636         auto NumExt = static_cast<unsigned>(Record[I++]);
3637         for (unsigned II = 0; II != NumExt; ++II) {
3638           auto Ext = ReadString(Record, I);
3639           OpenCLDeclExtMap[Decl].insert(Ext);
3640         }
3641       }
3642       break;
3643 
3644     case TENTATIVE_DEFINITIONS:
3645       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3646         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3647       break;
3648 
3649     case KNOWN_NAMESPACES:
3650       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3651         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3652       break;
3653 
3654     case UNDEFINED_BUT_USED:
3655       if (UndefinedButUsed.size() % 2 != 0) {
3656         Error("Invalid existing UndefinedButUsed");
3657         return Failure;
3658       }
3659 
3660       if (Record.size() % 2 != 0) {
3661         Error("invalid undefined-but-used record");
3662         return Failure;
3663       }
3664       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3665         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3666         UndefinedButUsed.push_back(
3667             ReadSourceLocation(F, Record, I).getRawEncoding());
3668       }
3669       break;
3670 
3671     case DELETE_EXPRS_TO_ANALYZE:
3672       for (unsigned I = 0, N = Record.size(); I != N;) {
3673         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3674         const uint64_t Count = Record[I++];
3675         DelayedDeleteExprs.push_back(Count);
3676         for (uint64_t C = 0; C < Count; ++C) {
3677           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3678           bool IsArrayForm = Record[I++] == 1;
3679           DelayedDeleteExprs.push_back(IsArrayForm);
3680         }
3681       }
3682       break;
3683 
3684     case IMPORTED_MODULES:
3685       if (!F.isModule()) {
3686         // If we aren't loading a module (which has its own exports), make
3687         // all of the imported modules visible.
3688         // FIXME: Deal with macros-only imports.
3689         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3690           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3691           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3692           if (GlobalID) {
3693             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3694             if (DeserializationListener)
3695               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3696           }
3697         }
3698       }
3699       break;
3700 
3701     case MACRO_OFFSET: {
3702       if (F.LocalNumMacros != 0) {
3703         Error("duplicate MACRO_OFFSET record in AST file");
3704         return Failure;
3705       }
3706       F.MacroOffsets = (const uint32_t *)Blob.data();
3707       F.LocalNumMacros = Record[0];
3708       unsigned LocalBaseMacroID = Record[1];
3709       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3710       F.BaseMacroID = getTotalNumMacros();
3711 
3712       if (F.LocalNumMacros > 0) {
3713         // Introduce the global -> local mapping for macros within this module.
3714         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3715 
3716         // Introduce the local -> global mapping for macros within this module.
3717         F.MacroRemap.insertOrReplace(
3718           std::make_pair(LocalBaseMacroID,
3719                          F.BaseMacroID - LocalBaseMacroID));
3720 
3721         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3722       }
3723       break;
3724     }
3725 
3726     case LATE_PARSED_TEMPLATE:
3727       LateParsedTemplates.emplace_back(
3728           std::piecewise_construct, std::forward_as_tuple(&F),
3729           std::forward_as_tuple(Record.begin(), Record.end()));
3730       break;
3731 
3732     case OPTIMIZE_PRAGMA_OPTIONS:
3733       if (Record.size() != 1) {
3734         Error("invalid pragma optimize record");
3735         return Failure;
3736       }
3737       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3738       break;
3739 
3740     case MSSTRUCT_PRAGMA_OPTIONS:
3741       if (Record.size() != 1) {
3742         Error("invalid pragma ms_struct record");
3743         return Failure;
3744       }
3745       PragmaMSStructState = Record[0];
3746       break;
3747 
3748     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3749       if (Record.size() != 2) {
3750         Error("invalid pragma ms_struct record");
3751         return Failure;
3752       }
3753       PragmaMSPointersToMembersState = Record[0];
3754       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3755       break;
3756 
3757     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3758       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3759         UnusedLocalTypedefNameCandidates.push_back(
3760             getGlobalDeclID(F, Record[I]));
3761       break;
3762 
3763     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3764       if (Record.size() != 1) {
3765         Error("invalid cuda pragma options record");
3766         return Failure;
3767       }
3768       ForceCUDAHostDeviceDepth = Record[0];
3769       break;
3770 
3771     case ALIGN_PACK_PRAGMA_OPTIONS: {
3772       if (Record.size() < 3) {
3773         Error("invalid pragma pack record");
3774         return Failure;
3775       }
3776       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3777       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3778       unsigned NumStackEntries = Record[2];
3779       unsigned Idx = 3;
3780       // Reset the stack when importing a new module.
3781       PragmaAlignPackStack.clear();
3782       for (unsigned I = 0; I < NumStackEntries; ++I) {
3783         PragmaAlignPackStackEntry Entry;
3784         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3785         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3786         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3787         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3788         Entry.SlotLabel = PragmaAlignPackStrings.back();
3789         PragmaAlignPackStack.push_back(Entry);
3790       }
3791       break;
3792     }
3793 
3794     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3795       if (Record.size() < 3) {
3796         Error("invalid pragma pack record");
3797         return Failure;
3798       }
3799       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3800       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3801       unsigned NumStackEntries = Record[2];
3802       unsigned Idx = 3;
3803       // Reset the stack when importing a new module.
3804       FpPragmaStack.clear();
3805       for (unsigned I = 0; I < NumStackEntries; ++I) {
3806         FpPragmaStackEntry Entry;
3807         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3808         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3809         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3810         FpPragmaStrings.push_back(ReadString(Record, Idx));
3811         Entry.SlotLabel = FpPragmaStrings.back();
3812         FpPragmaStack.push_back(Entry);
3813       }
3814       break;
3815     }
3816 
3817     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3818       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3819         DeclsToCheckForDeferredDiags.push_back(getGlobalDeclID(F, Record[I]));
3820       break;
3821     }
3822   }
3823 }
3824 
3825 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3826   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3827 
3828   // Additional remapping information.
3829   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3830   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3831   F.ModuleOffsetMap = StringRef();
3832 
3833   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3834   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3835     F.SLocRemap.insert(std::make_pair(0U, 0));
3836     F.SLocRemap.insert(std::make_pair(2U, 1));
3837   }
3838 
3839   // Continuous range maps we may be updating in our module.
3840   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3841   RemapBuilder SLocRemap(F.SLocRemap);
3842   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3843   RemapBuilder MacroRemap(F.MacroRemap);
3844   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3845   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3846   RemapBuilder SelectorRemap(F.SelectorRemap);
3847   RemapBuilder DeclRemap(F.DeclRemap);
3848   RemapBuilder TypeRemap(F.TypeRemap);
3849 
3850   while (Data < DataEnd) {
3851     // FIXME: Looking up dependency modules by filename is horrible. Let's
3852     // start fixing this with prebuilt, explicit and implicit modules and see
3853     // how it goes...
3854     using namespace llvm::support;
3855     ModuleKind Kind = static_cast<ModuleKind>(
3856       endian::readNext<uint8_t, little, unaligned>(Data));
3857     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3858     StringRef Name = StringRef((const char*)Data, Len);
3859     Data += Len;
3860     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3861                               Kind == MK_ImplicitModule
3862                           ? ModuleMgr.lookupByModuleName(Name)
3863                           : ModuleMgr.lookupByFileName(Name));
3864     if (!OM) {
3865       std::string Msg =
3866           "SourceLocation remap refers to unknown module, cannot find ";
3867       Msg.append(std::string(Name));
3868       Error(Msg);
3869       return;
3870     }
3871 
3872     uint32_t SLocOffset =
3873         endian::readNext<uint32_t, little, unaligned>(Data);
3874     uint32_t IdentifierIDOffset =
3875         endian::readNext<uint32_t, little, unaligned>(Data);
3876     uint32_t MacroIDOffset =
3877         endian::readNext<uint32_t, little, unaligned>(Data);
3878     uint32_t PreprocessedEntityIDOffset =
3879         endian::readNext<uint32_t, little, unaligned>(Data);
3880     uint32_t SubmoduleIDOffset =
3881         endian::readNext<uint32_t, little, unaligned>(Data);
3882     uint32_t SelectorIDOffset =
3883         endian::readNext<uint32_t, little, unaligned>(Data);
3884     uint32_t DeclIDOffset =
3885         endian::readNext<uint32_t, little, unaligned>(Data);
3886     uint32_t TypeIndexOffset =
3887         endian::readNext<uint32_t, little, unaligned>(Data);
3888 
3889     uint32_t None = std::numeric_limits<uint32_t>::max();
3890 
3891     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3892                          RemapBuilder &Remap) {
3893       if (Offset != None)
3894         Remap.insert(std::make_pair(Offset,
3895                                     static_cast<int>(BaseOffset - Offset)));
3896     };
3897     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3898     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3899     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3900     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3901               PreprocessedEntityRemap);
3902     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3903     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3904     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3905     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3906 
3907     // Global -> local mappings.
3908     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3909   }
3910 }
3911 
3912 ASTReader::ASTReadResult
3913 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3914                                   const ModuleFile *ImportedBy,
3915                                   unsigned ClientLoadCapabilities) {
3916   unsigned Idx = 0;
3917   F.ModuleMapPath = ReadPath(F, Record, Idx);
3918 
3919   // Try to resolve ModuleName in the current header search context and
3920   // verify that it is found in the same module map file as we saved. If the
3921   // top-level AST file is a main file, skip this check because there is no
3922   // usable header search context.
3923   assert(!F.ModuleName.empty() &&
3924          "MODULE_NAME should come before MODULE_MAP_FILE");
3925   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3926     // An implicitly-loaded module file should have its module listed in some
3927     // module map file that we've already loaded.
3928     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3929     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3930     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3931     // Don't emit module relocation error if we have -fno-validate-pch
3932     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3933               DisableValidationForModuleKind::Module) &&
3934         !ModMap) {
3935       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3936         if (auto ASTFE = M ? M->getASTFile() : None) {
3937           // This module was defined by an imported (explicit) module.
3938           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3939                                                << ASTFE->getName();
3940         } else {
3941           // This module was built with a different module map.
3942           Diag(diag::err_imported_module_not_found)
3943               << F.ModuleName << F.FileName
3944               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3945               << !ImportedBy;
3946           // In case it was imported by a PCH, there's a chance the user is
3947           // just missing to include the search path to the directory containing
3948           // the modulemap.
3949           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3950             Diag(diag::note_imported_by_pch_module_not_found)
3951                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3952         }
3953       }
3954       return OutOfDate;
3955     }
3956 
3957     assert(M && M->Name == F.ModuleName && "found module with different name");
3958 
3959     // Check the primary module map file.
3960     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3961     if (!StoredModMap || *StoredModMap != ModMap) {
3962       assert(ModMap && "found module is missing module map file");
3963       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3964              "top-level import should be verified");
3965       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3966       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3967         Diag(diag::err_imported_module_modmap_changed)
3968             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3969             << ModMap->getName() << F.ModuleMapPath << NotImported;
3970       return OutOfDate;
3971     }
3972 
3973     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3974     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3975       // FIXME: we should use input files rather than storing names.
3976       std::string Filename = ReadPath(F, Record, Idx);
3977       auto F = FileMgr.getFile(Filename, false, false);
3978       if (!F) {
3979         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3980           Error("could not find file '" + Filename +"' referenced by AST file");
3981         return OutOfDate;
3982       }
3983       AdditionalStoredMaps.insert(*F);
3984     }
3985 
3986     // Check any additional module map files (e.g. module.private.modulemap)
3987     // that are not in the pcm.
3988     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3989       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3990         // Remove files that match
3991         // Note: SmallPtrSet::erase is really remove
3992         if (!AdditionalStoredMaps.erase(ModMap)) {
3993           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3994             Diag(diag::err_module_different_modmap)
3995               << F.ModuleName << /*new*/0 << ModMap->getName();
3996           return OutOfDate;
3997         }
3998       }
3999     }
4000 
4001     // Check any additional module map files that are in the pcm, but not
4002     // found in header search. Cases that match are already removed.
4003     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4004       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4005         Diag(diag::err_module_different_modmap)
4006           << F.ModuleName << /*not new*/1 << ModMap->getName();
4007       return OutOfDate;
4008     }
4009   }
4010 
4011   if (Listener)
4012     Listener->ReadModuleMapFile(F.ModuleMapPath);
4013   return Success;
4014 }
4015 
4016 /// Move the given method to the back of the global list of methods.
4017 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4018   // Find the entry for this selector in the method pool.
4019   Sema::GlobalMethodPool::iterator Known
4020     = S.MethodPool.find(Method->getSelector());
4021   if (Known == S.MethodPool.end())
4022     return;
4023 
4024   // Retrieve the appropriate method list.
4025   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4026                                                     : Known->second.second;
4027   bool Found = false;
4028   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4029     if (!Found) {
4030       if (List->getMethod() == Method) {
4031         Found = true;
4032       } else {
4033         // Keep searching.
4034         continue;
4035       }
4036     }
4037 
4038     if (List->getNext())
4039       List->setMethod(List->getNext()->getMethod());
4040     else
4041       List->setMethod(Method);
4042   }
4043 }
4044 
4045 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4046   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4047   for (Decl *D : Names) {
4048     bool wasHidden = !D->isUnconditionallyVisible();
4049     D->setVisibleDespiteOwningModule();
4050 
4051     if (wasHidden && SemaObj) {
4052       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4053         moveMethodToBackOfGlobalList(*SemaObj, Method);
4054       }
4055     }
4056   }
4057 }
4058 
4059 void ASTReader::makeModuleVisible(Module *Mod,
4060                                   Module::NameVisibilityKind NameVisibility,
4061                                   SourceLocation ImportLoc) {
4062   llvm::SmallPtrSet<Module *, 4> Visited;
4063   SmallVector<Module *, 4> Stack;
4064   Stack.push_back(Mod);
4065   while (!Stack.empty()) {
4066     Mod = Stack.pop_back_val();
4067 
4068     if (NameVisibility <= Mod->NameVisibility) {
4069       // This module already has this level of visibility (or greater), so
4070       // there is nothing more to do.
4071       continue;
4072     }
4073 
4074     if (Mod->isUnimportable()) {
4075       // Modules that aren't importable cannot be made visible.
4076       continue;
4077     }
4078 
4079     // Update the module's name visibility.
4080     Mod->NameVisibility = NameVisibility;
4081 
4082     // If we've already deserialized any names from this module,
4083     // mark them as visible.
4084     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4085     if (Hidden != HiddenNamesMap.end()) {
4086       auto HiddenNames = std::move(*Hidden);
4087       HiddenNamesMap.erase(Hidden);
4088       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4089       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4090              "making names visible added hidden names");
4091     }
4092 
4093     // Push any exported modules onto the stack to be marked as visible.
4094     SmallVector<Module *, 16> Exports;
4095     Mod->getExportedModules(Exports);
4096     for (SmallVectorImpl<Module *>::iterator
4097            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4098       Module *Exported = *I;
4099       if (Visited.insert(Exported).second)
4100         Stack.push_back(Exported);
4101     }
4102   }
4103 }
4104 
4105 /// We've merged the definition \p MergedDef into the existing definition
4106 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4107 /// visible.
4108 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4109                                           NamedDecl *MergedDef) {
4110   if (!Def->isUnconditionallyVisible()) {
4111     // If MergedDef is visible or becomes visible, make the definition visible.
4112     if (MergedDef->isUnconditionallyVisible())
4113       Def->setVisibleDespiteOwningModule();
4114     else {
4115       getContext().mergeDefinitionIntoModule(
4116           Def, MergedDef->getImportedOwningModule(),
4117           /*NotifyListeners*/ false);
4118       PendingMergedDefinitionsToDeduplicate.insert(Def);
4119     }
4120   }
4121 }
4122 
4123 bool ASTReader::loadGlobalIndex() {
4124   if (GlobalIndex)
4125     return false;
4126 
4127   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4128       !PP.getLangOpts().Modules)
4129     return true;
4130 
4131   // Try to load the global index.
4132   TriedLoadingGlobalIndex = true;
4133   StringRef ModuleCachePath
4134     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4135   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4136       GlobalModuleIndex::readIndex(ModuleCachePath);
4137   if (llvm::Error Err = std::move(Result.second)) {
4138     assert(!Result.first);
4139     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4140     return true;
4141   }
4142 
4143   GlobalIndex.reset(Result.first);
4144   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4145   return false;
4146 }
4147 
4148 bool ASTReader::isGlobalIndexUnavailable() const {
4149   return PP.getLangOpts().Modules && UseGlobalIndex &&
4150          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4151 }
4152 
4153 static void updateModuleTimestamp(ModuleFile &MF) {
4154   // Overwrite the timestamp file contents so that file's mtime changes.
4155   std::string TimestampFilename = MF.getTimestampFilename();
4156   std::error_code EC;
4157   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4158   if (EC)
4159     return;
4160   OS << "Timestamp file\n";
4161   OS.close();
4162   OS.clear_error(); // Avoid triggering a fatal error.
4163 }
4164 
4165 /// Given a cursor at the start of an AST file, scan ahead and drop the
4166 /// cursor into the start of the given block ID, returning false on success and
4167 /// true on failure.
4168 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4169   while (true) {
4170     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4171     if (!MaybeEntry) {
4172       // FIXME this drops errors on the floor.
4173       consumeError(MaybeEntry.takeError());
4174       return true;
4175     }
4176     llvm::BitstreamEntry Entry = MaybeEntry.get();
4177 
4178     switch (Entry.Kind) {
4179     case llvm::BitstreamEntry::Error:
4180     case llvm::BitstreamEntry::EndBlock:
4181       return true;
4182 
4183     case llvm::BitstreamEntry::Record:
4184       // Ignore top-level records.
4185       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4186         break;
4187       else {
4188         // FIXME this drops errors on the floor.
4189         consumeError(Skipped.takeError());
4190         return true;
4191       }
4192 
4193     case llvm::BitstreamEntry::SubBlock:
4194       if (Entry.ID == BlockID) {
4195         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4196           // FIXME this drops the error on the floor.
4197           consumeError(std::move(Err));
4198           return true;
4199         }
4200         // Found it!
4201         return false;
4202       }
4203 
4204       if (llvm::Error Err = Cursor.SkipBlock()) {
4205         // FIXME this drops the error on the floor.
4206         consumeError(std::move(Err));
4207         return true;
4208       }
4209     }
4210   }
4211 }
4212 
4213 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4214                                             ModuleKind Type,
4215                                             SourceLocation ImportLoc,
4216                                             unsigned ClientLoadCapabilities,
4217                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4218   llvm::SaveAndRestore<SourceLocation>
4219     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4220   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4221       CurrentDeserializingModuleKind, Type);
4222 
4223   // Defer any pending actions until we get to the end of reading the AST file.
4224   Deserializing AnASTFile(this);
4225 
4226   // Bump the generation number.
4227   unsigned PreviousGeneration = 0;
4228   if (ContextObj)
4229     PreviousGeneration = incrementGeneration(*ContextObj);
4230 
4231   unsigned NumModules = ModuleMgr.size();
4232   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4233     assert(ReadResult && "expected to return error");
4234     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4235                             PP.getLangOpts().Modules
4236                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4237                                 : nullptr);
4238 
4239     // If we find that any modules are unusable, the global index is going
4240     // to be out-of-date. Just remove it.
4241     GlobalIndex.reset();
4242     ModuleMgr.setGlobalIndex(nullptr);
4243     return ReadResult;
4244   };
4245 
4246   SmallVector<ImportedModule, 4> Loaded;
4247   switch (ASTReadResult ReadResult =
4248               ReadASTCore(FileName, Type, ImportLoc,
4249                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4250                           ASTFileSignature(), ClientLoadCapabilities)) {
4251   case Failure:
4252   case Missing:
4253   case OutOfDate:
4254   case VersionMismatch:
4255   case ConfigurationMismatch:
4256   case HadErrors:
4257     return removeModulesAndReturn(ReadResult);
4258   case Success:
4259     break;
4260   }
4261 
4262   // Here comes stuff that we only do once the entire chain is loaded.
4263 
4264   // Load the AST blocks of all of the modules that we loaded.  We can still
4265   // hit errors parsing the ASTs at this point.
4266   for (ImportedModule &M : Loaded) {
4267     ModuleFile &F = *M.Mod;
4268 
4269     // Read the AST block.
4270     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4271       return removeModulesAndReturn(Result);
4272 
4273     // The AST block should always have a definition for the main module.
4274     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4275       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4276       return removeModulesAndReturn(Failure);
4277     }
4278 
4279     // Read the extension blocks.
4280     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4281       if (ASTReadResult Result = ReadExtensionBlock(F))
4282         return removeModulesAndReturn(Result);
4283     }
4284 
4285     // Once read, set the ModuleFile bit base offset and update the size in
4286     // bits of all files we've seen.
4287     F.GlobalBitOffset = TotalModulesSizeInBits;
4288     TotalModulesSizeInBits += F.SizeInBits;
4289     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4290   }
4291 
4292   // Preload source locations and interesting indentifiers.
4293   for (ImportedModule &M : Loaded) {
4294     ModuleFile &F = *M.Mod;
4295 
4296     // Preload SLocEntries.
4297     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4298       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4299       // Load it through the SourceManager and don't call ReadSLocEntry()
4300       // directly because the entry may have already been loaded in which case
4301       // calling ReadSLocEntry() directly would trigger an assertion in
4302       // SourceManager.
4303       SourceMgr.getLoadedSLocEntryByID(Index);
4304     }
4305 
4306     // Map the original source file ID into the ID space of the current
4307     // compilation.
4308     if (F.OriginalSourceFileID.isValid()) {
4309       F.OriginalSourceFileID = FileID::get(
4310           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4311     }
4312 
4313     // Preload all the pending interesting identifiers by marking them out of
4314     // date.
4315     for (auto Offset : F.PreloadIdentifierOffsets) {
4316       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
4317           F.IdentifierTableData + Offset);
4318 
4319       ASTIdentifierLookupTrait Trait(*this, F);
4320       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4321       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4322       auto &II = PP.getIdentifierTable().getOwn(Key);
4323       II.setOutOfDate(true);
4324 
4325       // Mark this identifier as being from an AST file so that we can track
4326       // whether we need to serialize it.
4327       markIdentifierFromAST(*this, II);
4328 
4329       // Associate the ID with the identifier so that the writer can reuse it.
4330       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4331       SetIdentifierInfo(ID, &II);
4332     }
4333   }
4334 
4335   // Setup the import locations and notify the module manager that we've
4336   // committed to these module files.
4337   for (ImportedModule &M : Loaded) {
4338     ModuleFile &F = *M.Mod;
4339 
4340     ModuleMgr.moduleFileAccepted(&F);
4341 
4342     // Set the import location.
4343     F.DirectImportLoc = ImportLoc;
4344     // FIXME: We assume that locations from PCH / preamble do not need
4345     // any translation.
4346     if (!M.ImportedBy)
4347       F.ImportLoc = M.ImportLoc;
4348     else
4349       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4350   }
4351 
4352   if (!PP.getLangOpts().CPlusPlus ||
4353       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4354        Type != MK_PrebuiltModule)) {
4355     // Mark all of the identifiers in the identifier table as being out of date,
4356     // so that various accessors know to check the loaded modules when the
4357     // identifier is used.
4358     //
4359     // For C++ modules, we don't need information on many identifiers (just
4360     // those that provide macros or are poisoned), so we mark all of
4361     // the interesting ones via PreloadIdentifierOffsets.
4362     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4363                                 IdEnd = PP.getIdentifierTable().end();
4364          Id != IdEnd; ++Id)
4365       Id->second->setOutOfDate(true);
4366   }
4367   // Mark selectors as out of date.
4368   for (auto Sel : SelectorGeneration)
4369     SelectorOutOfDate[Sel.first] = true;
4370 
4371   // Resolve any unresolved module exports.
4372   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4373     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4374     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4375     Module *ResolvedMod = getSubmodule(GlobalID);
4376 
4377     switch (Unresolved.Kind) {
4378     case UnresolvedModuleRef::Conflict:
4379       if (ResolvedMod) {
4380         Module::Conflict Conflict;
4381         Conflict.Other = ResolvedMod;
4382         Conflict.Message = Unresolved.String.str();
4383         Unresolved.Mod->Conflicts.push_back(Conflict);
4384       }
4385       continue;
4386 
4387     case UnresolvedModuleRef::Import:
4388       if (ResolvedMod)
4389         Unresolved.Mod->Imports.insert(ResolvedMod);
4390       continue;
4391 
4392     case UnresolvedModuleRef::Export:
4393       if (ResolvedMod || Unresolved.IsWildcard)
4394         Unresolved.Mod->Exports.push_back(
4395           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4396       continue;
4397     }
4398   }
4399   UnresolvedModuleRefs.clear();
4400 
4401   if (Imported)
4402     Imported->append(ImportedModules.begin(),
4403                      ImportedModules.end());
4404 
4405   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4406   // Might be unnecessary as use declarations are only used to build the
4407   // module itself.
4408 
4409   if (ContextObj)
4410     InitializeContext();
4411 
4412   if (SemaObj)
4413     UpdateSema();
4414 
4415   if (DeserializationListener)
4416     DeserializationListener->ReaderInitialized(this);
4417 
4418   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4419   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4420     // If this AST file is a precompiled preamble, then set the
4421     // preamble file ID of the source manager to the file source file
4422     // from which the preamble was built.
4423     if (Type == MK_Preamble) {
4424       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4425     } else if (Type == MK_MainFile) {
4426       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4427     }
4428   }
4429 
4430   // For any Objective-C class definitions we have already loaded, make sure
4431   // that we load any additional categories.
4432   if (ContextObj) {
4433     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4434       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4435                          ObjCClassesLoaded[I],
4436                          PreviousGeneration);
4437     }
4438   }
4439 
4440   if (PP.getHeaderSearchInfo()
4441           .getHeaderSearchOpts()
4442           .ModulesValidateOncePerBuildSession) {
4443     // Now we are certain that the module and all modules it depends on are
4444     // up to date.  Create or update timestamp files for modules that are
4445     // located in the module cache (not for PCH files that could be anywhere
4446     // in the filesystem).
4447     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4448       ImportedModule &M = Loaded[I];
4449       if (M.Mod->Kind == MK_ImplicitModule) {
4450         updateModuleTimestamp(*M.Mod);
4451       }
4452     }
4453   }
4454 
4455   return Success;
4456 }
4457 
4458 static ASTFileSignature readASTFileSignature(StringRef PCH);
4459 
4460 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4461 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4462   // FIXME checking magic headers is done in other places such as
4463   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4464   // always done the same. Unify it all with a helper.
4465   if (!Stream.canSkipToPos(4))
4466     return llvm::createStringError(std::errc::illegal_byte_sequence,
4467                                    "file too small to contain AST file magic");
4468   for (unsigned C : {'C', 'P', 'C', 'H'})
4469     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4470       if (Res.get() != C)
4471         return llvm::createStringError(
4472             std::errc::illegal_byte_sequence,
4473             "file doesn't start with AST file magic");
4474     } else
4475       return Res.takeError();
4476   return llvm::Error::success();
4477 }
4478 
4479 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4480   switch (Kind) {
4481   case MK_PCH:
4482     return 0; // PCH
4483   case MK_ImplicitModule:
4484   case MK_ExplicitModule:
4485   case MK_PrebuiltModule:
4486     return 1; // module
4487   case MK_MainFile:
4488   case MK_Preamble:
4489     return 2; // main source file
4490   }
4491   llvm_unreachable("unknown module kind");
4492 }
4493 
4494 ASTReader::ASTReadResult
4495 ASTReader::ReadASTCore(StringRef FileName,
4496                        ModuleKind Type,
4497                        SourceLocation ImportLoc,
4498                        ModuleFile *ImportedBy,
4499                        SmallVectorImpl<ImportedModule> &Loaded,
4500                        off_t ExpectedSize, time_t ExpectedModTime,
4501                        ASTFileSignature ExpectedSignature,
4502                        unsigned ClientLoadCapabilities) {
4503   ModuleFile *M;
4504   std::string ErrorStr;
4505   ModuleManager::AddModuleResult AddResult
4506     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4507                           getGeneration(), ExpectedSize, ExpectedModTime,
4508                           ExpectedSignature, readASTFileSignature,
4509                           M, ErrorStr);
4510 
4511   switch (AddResult) {
4512   case ModuleManager::AlreadyLoaded:
4513     Diag(diag::remark_module_import)
4514         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4515         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4516     return Success;
4517 
4518   case ModuleManager::NewlyLoaded:
4519     // Load module file below.
4520     break;
4521 
4522   case ModuleManager::Missing:
4523     // The module file was missing; if the client can handle that, return
4524     // it.
4525     if (ClientLoadCapabilities & ARR_Missing)
4526       return Missing;
4527 
4528     // Otherwise, return an error.
4529     Diag(diag::err_ast_file_not_found)
4530         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4531         << ErrorStr;
4532     return Failure;
4533 
4534   case ModuleManager::OutOfDate:
4535     // We couldn't load the module file because it is out-of-date. If the
4536     // client can handle out-of-date, return it.
4537     if (ClientLoadCapabilities & ARR_OutOfDate)
4538       return OutOfDate;
4539 
4540     // Otherwise, return an error.
4541     Diag(diag::err_ast_file_out_of_date)
4542         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4543         << ErrorStr;
4544     return Failure;
4545   }
4546 
4547   assert(M && "Missing module file");
4548 
4549   bool ShouldFinalizePCM = false;
4550   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4551     auto &MC = getModuleManager().getModuleCache();
4552     if (ShouldFinalizePCM)
4553       MC.finalizePCM(FileName);
4554     else
4555       MC.tryToDropPCM(FileName);
4556   });
4557   ModuleFile &F = *M;
4558   BitstreamCursor &Stream = F.Stream;
4559   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4560   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4561 
4562   // Sniff for the signature.
4563   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4564     Diag(diag::err_ast_file_invalid)
4565         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4566     return Failure;
4567   }
4568 
4569   // This is used for compatibility with older PCH formats.
4570   bool HaveReadControlBlock = false;
4571   while (true) {
4572     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4573     if (!MaybeEntry) {
4574       Error(MaybeEntry.takeError());
4575       return Failure;
4576     }
4577     llvm::BitstreamEntry Entry = MaybeEntry.get();
4578 
4579     switch (Entry.Kind) {
4580     case llvm::BitstreamEntry::Error:
4581     case llvm::BitstreamEntry::Record:
4582     case llvm::BitstreamEntry::EndBlock:
4583       Error("invalid record at top-level of AST file");
4584       return Failure;
4585 
4586     case llvm::BitstreamEntry::SubBlock:
4587       break;
4588     }
4589 
4590     switch (Entry.ID) {
4591     case CONTROL_BLOCK_ID:
4592       HaveReadControlBlock = true;
4593       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4594       case Success:
4595         // Check that we didn't try to load a non-module AST file as a module.
4596         //
4597         // FIXME: Should we also perform the converse check? Loading a module as
4598         // a PCH file sort of works, but it's a bit wonky.
4599         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4600              Type == MK_PrebuiltModule) &&
4601             F.ModuleName.empty()) {
4602           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4603           if (Result != OutOfDate ||
4604               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4605             Diag(diag::err_module_file_not_module) << FileName;
4606           return Result;
4607         }
4608         break;
4609 
4610       case Failure: return Failure;
4611       case Missing: return Missing;
4612       case OutOfDate: return OutOfDate;
4613       case VersionMismatch: return VersionMismatch;
4614       case ConfigurationMismatch: return ConfigurationMismatch;
4615       case HadErrors: return HadErrors;
4616       }
4617       break;
4618 
4619     case AST_BLOCK_ID:
4620       if (!HaveReadControlBlock) {
4621         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4622           Diag(diag::err_pch_version_too_old);
4623         return VersionMismatch;
4624       }
4625 
4626       // Record that we've loaded this module.
4627       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4628       ShouldFinalizePCM = true;
4629       return Success;
4630 
4631     case UNHASHED_CONTROL_BLOCK_ID:
4632       // This block is handled using look-ahead during ReadControlBlock.  We
4633       // shouldn't get here!
4634       Error("malformed block record in AST file");
4635       return Failure;
4636 
4637     default:
4638       if (llvm::Error Err = Stream.SkipBlock()) {
4639         Error(std::move(Err));
4640         return Failure;
4641       }
4642       break;
4643     }
4644   }
4645 
4646   llvm_unreachable("unexpected break; expected return");
4647 }
4648 
4649 ASTReader::ASTReadResult
4650 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4651                                     unsigned ClientLoadCapabilities) {
4652   const HeaderSearchOptions &HSOpts =
4653       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4654   bool AllowCompatibleConfigurationMismatch =
4655       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4656   bool DisableValidation = shouldDisableValidationForFile(F);
4657 
4658   ASTReadResult Result = readUnhashedControlBlockImpl(
4659       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4660       Listener.get(),
4661       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4662 
4663   // If F was directly imported by another module, it's implicitly validated by
4664   // the importing module.
4665   if (DisableValidation || WasImportedBy ||
4666       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4667     return Success;
4668 
4669   if (Result == Failure) {
4670     Error("malformed block record in AST file");
4671     return Failure;
4672   }
4673 
4674   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4675     // If this module has already been finalized in the ModuleCache, we're stuck
4676     // with it; we can only load a single version of each module.
4677     //
4678     // This can happen when a module is imported in two contexts: in one, as a
4679     // user module; in another, as a system module (due to an import from
4680     // another module marked with the [system] flag).  It usually indicates a
4681     // bug in the module map: this module should also be marked with [system].
4682     //
4683     // If -Wno-system-headers (the default), and the first import is as a
4684     // system module, then validation will fail during the as-user import,
4685     // since -Werror flags won't have been validated.  However, it's reasonable
4686     // to treat this consistently as a system module.
4687     //
4688     // If -Wsystem-headers, the PCM on disk was built with
4689     // -Wno-system-headers, and the first import is as a user module, then
4690     // validation will fail during the as-system import since the PCM on disk
4691     // doesn't guarantee that -Werror was respected.  However, the -Werror
4692     // flags were checked during the initial as-user import.
4693     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4694       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4695       return Success;
4696     }
4697   }
4698 
4699   return Result;
4700 }
4701 
4702 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4703     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4704     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4705     bool ValidateDiagnosticOptions) {
4706   // Initialize a stream.
4707   BitstreamCursor Stream(StreamData);
4708 
4709   // Sniff for the signature.
4710   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4711     // FIXME this drops the error on the floor.
4712     consumeError(std::move(Err));
4713     return Failure;
4714   }
4715 
4716   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4717   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4718     return Failure;
4719 
4720   // Read all of the records in the options block.
4721   RecordData Record;
4722   ASTReadResult Result = Success;
4723   while (true) {
4724     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4725     if (!MaybeEntry) {
4726       // FIXME this drops the error on the floor.
4727       consumeError(MaybeEntry.takeError());
4728       return Failure;
4729     }
4730     llvm::BitstreamEntry Entry = MaybeEntry.get();
4731 
4732     switch (Entry.Kind) {
4733     case llvm::BitstreamEntry::Error:
4734     case llvm::BitstreamEntry::SubBlock:
4735       return Failure;
4736 
4737     case llvm::BitstreamEntry::EndBlock:
4738       return Result;
4739 
4740     case llvm::BitstreamEntry::Record:
4741       // The interesting case.
4742       break;
4743     }
4744 
4745     // Read and process a record.
4746     Record.clear();
4747     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4748     if (!MaybeRecordType) {
4749       // FIXME this drops the error.
4750       return Failure;
4751     }
4752     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4753     case SIGNATURE:
4754       if (F)
4755         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4756       break;
4757     case AST_BLOCK_HASH:
4758       if (F)
4759         F->ASTBlockHash =
4760             ASTFileSignature::create(Record.begin(), Record.end());
4761       break;
4762     case DIAGNOSTIC_OPTIONS: {
4763       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4764       if (Listener && ValidateDiagnosticOptions &&
4765           !AllowCompatibleConfigurationMismatch &&
4766           ParseDiagnosticOptions(Record, Complain, *Listener))
4767         Result = OutOfDate; // Don't return early.  Read the signature.
4768       break;
4769     }
4770     case DIAG_PRAGMA_MAPPINGS:
4771       if (!F)
4772         break;
4773       if (F->PragmaDiagMappings.empty())
4774         F->PragmaDiagMappings.swap(Record);
4775       else
4776         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4777                                      Record.begin(), Record.end());
4778       break;
4779     }
4780   }
4781 }
4782 
4783 /// Parse a record and blob containing module file extension metadata.
4784 static bool parseModuleFileExtensionMetadata(
4785               const SmallVectorImpl<uint64_t> &Record,
4786               StringRef Blob,
4787               ModuleFileExtensionMetadata &Metadata) {
4788   if (Record.size() < 4) return true;
4789 
4790   Metadata.MajorVersion = Record[0];
4791   Metadata.MinorVersion = Record[1];
4792 
4793   unsigned BlockNameLen = Record[2];
4794   unsigned UserInfoLen = Record[3];
4795 
4796   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4797 
4798   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4799   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4800                                   Blob.data() + BlockNameLen + UserInfoLen);
4801   return false;
4802 }
4803 
4804 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4805   BitstreamCursor &Stream = F.Stream;
4806 
4807   RecordData Record;
4808   while (true) {
4809     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4810     if (!MaybeEntry) {
4811       Error(MaybeEntry.takeError());
4812       return Failure;
4813     }
4814     llvm::BitstreamEntry Entry = MaybeEntry.get();
4815 
4816     switch (Entry.Kind) {
4817     case llvm::BitstreamEntry::SubBlock:
4818       if (llvm::Error Err = Stream.SkipBlock()) {
4819         Error(std::move(Err));
4820         return Failure;
4821       }
4822       continue;
4823 
4824     case llvm::BitstreamEntry::EndBlock:
4825       return Success;
4826 
4827     case llvm::BitstreamEntry::Error:
4828       return HadErrors;
4829 
4830     case llvm::BitstreamEntry::Record:
4831       break;
4832     }
4833 
4834     Record.clear();
4835     StringRef Blob;
4836     Expected<unsigned> MaybeRecCode =
4837         Stream.readRecord(Entry.ID, Record, &Blob);
4838     if (!MaybeRecCode) {
4839       Error(MaybeRecCode.takeError());
4840       return Failure;
4841     }
4842     switch (MaybeRecCode.get()) {
4843     case EXTENSION_METADATA: {
4844       ModuleFileExtensionMetadata Metadata;
4845       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4846         Error("malformed EXTENSION_METADATA in AST file");
4847         return Failure;
4848       }
4849 
4850       // Find a module file extension with this block name.
4851       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4852       if (Known == ModuleFileExtensions.end()) break;
4853 
4854       // Form a reader.
4855       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4856                                                              F, Stream)) {
4857         F.ExtensionReaders.push_back(std::move(Reader));
4858       }
4859 
4860       break;
4861     }
4862     }
4863   }
4864 
4865   return Success;
4866 }
4867 
4868 void ASTReader::InitializeContext() {
4869   assert(ContextObj && "no context to initialize");
4870   ASTContext &Context = *ContextObj;
4871 
4872   // If there's a listener, notify them that we "read" the translation unit.
4873   if (DeserializationListener)
4874     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4875                                       Context.getTranslationUnitDecl());
4876 
4877   // FIXME: Find a better way to deal with collisions between these
4878   // built-in types. Right now, we just ignore the problem.
4879 
4880   // Load the special types.
4881   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4882     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4883       if (!Context.CFConstantStringTypeDecl)
4884         Context.setCFConstantStringType(GetType(String));
4885     }
4886 
4887     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4888       QualType FileType = GetType(File);
4889       if (FileType.isNull()) {
4890         Error("FILE type is NULL");
4891         return;
4892       }
4893 
4894       if (!Context.FILEDecl) {
4895         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4896           Context.setFILEDecl(Typedef->getDecl());
4897         else {
4898           const TagType *Tag = FileType->getAs<TagType>();
4899           if (!Tag) {
4900             Error("Invalid FILE type in AST file");
4901             return;
4902           }
4903           Context.setFILEDecl(Tag->getDecl());
4904         }
4905       }
4906     }
4907 
4908     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4909       QualType Jmp_bufType = GetType(Jmp_buf);
4910       if (Jmp_bufType.isNull()) {
4911         Error("jmp_buf type is NULL");
4912         return;
4913       }
4914 
4915       if (!Context.jmp_bufDecl) {
4916         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4917           Context.setjmp_bufDecl(Typedef->getDecl());
4918         else {
4919           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4920           if (!Tag) {
4921             Error("Invalid jmp_buf type in AST file");
4922             return;
4923           }
4924           Context.setjmp_bufDecl(Tag->getDecl());
4925         }
4926       }
4927     }
4928 
4929     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4930       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4931       if (Sigjmp_bufType.isNull()) {
4932         Error("sigjmp_buf type is NULL");
4933         return;
4934       }
4935 
4936       if (!Context.sigjmp_bufDecl) {
4937         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4938           Context.setsigjmp_bufDecl(Typedef->getDecl());
4939         else {
4940           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4941           assert(Tag && "Invalid sigjmp_buf type in AST file");
4942           Context.setsigjmp_bufDecl(Tag->getDecl());
4943         }
4944       }
4945     }
4946 
4947     if (unsigned ObjCIdRedef
4948           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4949       if (Context.ObjCIdRedefinitionType.isNull())
4950         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4951     }
4952 
4953     if (unsigned ObjCClassRedef
4954           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4955       if (Context.ObjCClassRedefinitionType.isNull())
4956         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4957     }
4958 
4959     if (unsigned ObjCSelRedef
4960           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4961       if (Context.ObjCSelRedefinitionType.isNull())
4962         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4963     }
4964 
4965     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4966       QualType Ucontext_tType = GetType(Ucontext_t);
4967       if (Ucontext_tType.isNull()) {
4968         Error("ucontext_t type is NULL");
4969         return;
4970       }
4971 
4972       if (!Context.ucontext_tDecl) {
4973         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4974           Context.setucontext_tDecl(Typedef->getDecl());
4975         else {
4976           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4977           assert(Tag && "Invalid ucontext_t type in AST file");
4978           Context.setucontext_tDecl(Tag->getDecl());
4979         }
4980       }
4981     }
4982   }
4983 
4984   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4985 
4986   // If there were any CUDA special declarations, deserialize them.
4987   if (!CUDASpecialDeclRefs.empty()) {
4988     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4989     Context.setcudaConfigureCallDecl(
4990                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4991   }
4992 
4993   // Re-export any modules that were imported by a non-module AST file.
4994   // FIXME: This does not make macro-only imports visible again.
4995   for (auto &Import : ImportedModules) {
4996     if (Module *Imported = getSubmodule(Import.ID)) {
4997       makeModuleVisible(Imported, Module::AllVisible,
4998                         /*ImportLoc=*/Import.ImportLoc);
4999       if (Import.ImportLoc.isValid())
5000         PP.makeModuleVisible(Imported, Import.ImportLoc);
5001       // This updates visibility for Preprocessor only. For Sema, which can be
5002       // nullptr here, we do the same later, in UpdateSema().
5003     }
5004   }
5005 }
5006 
5007 void ASTReader::finalizeForWriting() {
5008   // Nothing to do for now.
5009 }
5010 
5011 /// Reads and return the signature record from \p PCH's control block, or
5012 /// else returns 0.
5013 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5014   BitstreamCursor Stream(PCH);
5015   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5016     // FIXME this drops the error on the floor.
5017     consumeError(std::move(Err));
5018     return ASTFileSignature();
5019   }
5020 
5021   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5022   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5023     return ASTFileSignature();
5024 
5025   // Scan for SIGNATURE inside the diagnostic options block.
5026   ASTReader::RecordData Record;
5027   while (true) {
5028     Expected<llvm::BitstreamEntry> MaybeEntry =
5029         Stream.advanceSkippingSubblocks();
5030     if (!MaybeEntry) {
5031       // FIXME this drops the error on the floor.
5032       consumeError(MaybeEntry.takeError());
5033       return ASTFileSignature();
5034     }
5035     llvm::BitstreamEntry Entry = MaybeEntry.get();
5036 
5037     if (Entry.Kind != llvm::BitstreamEntry::Record)
5038       return ASTFileSignature();
5039 
5040     Record.clear();
5041     StringRef Blob;
5042     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5043     if (!MaybeRecord) {
5044       // FIXME this drops the error on the floor.
5045       consumeError(MaybeRecord.takeError());
5046       return ASTFileSignature();
5047     }
5048     if (SIGNATURE == MaybeRecord.get())
5049       return ASTFileSignature::create(Record.begin(),
5050                                       Record.begin() + ASTFileSignature::size);
5051   }
5052 }
5053 
5054 /// Retrieve the name of the original source file name
5055 /// directly from the AST file, without actually loading the AST
5056 /// file.
5057 std::string ASTReader::getOriginalSourceFile(
5058     const std::string &ASTFileName, FileManager &FileMgr,
5059     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5060   // Open the AST file.
5061   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5062   if (!Buffer) {
5063     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5064         << ASTFileName << Buffer.getError().message();
5065     return std::string();
5066   }
5067 
5068   // Initialize the stream
5069   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5070 
5071   // Sniff for the signature.
5072   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5073     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5074     return std::string();
5075   }
5076 
5077   // Scan for the CONTROL_BLOCK_ID block.
5078   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5079     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5080     return std::string();
5081   }
5082 
5083   // Scan for ORIGINAL_FILE inside the control block.
5084   RecordData Record;
5085   while (true) {
5086     Expected<llvm::BitstreamEntry> MaybeEntry =
5087         Stream.advanceSkippingSubblocks();
5088     if (!MaybeEntry) {
5089       // FIXME this drops errors on the floor.
5090       consumeError(MaybeEntry.takeError());
5091       return std::string();
5092     }
5093     llvm::BitstreamEntry Entry = MaybeEntry.get();
5094 
5095     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5096       return std::string();
5097 
5098     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5099       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5100       return std::string();
5101     }
5102 
5103     Record.clear();
5104     StringRef Blob;
5105     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5106     if (!MaybeRecord) {
5107       // FIXME this drops the errors on the floor.
5108       consumeError(MaybeRecord.takeError());
5109       return std::string();
5110     }
5111     if (ORIGINAL_FILE == MaybeRecord.get())
5112       return Blob.str();
5113   }
5114 }
5115 
5116 namespace {
5117 
5118   class SimplePCHValidator : public ASTReaderListener {
5119     const LangOptions &ExistingLangOpts;
5120     const TargetOptions &ExistingTargetOpts;
5121     const PreprocessorOptions &ExistingPPOpts;
5122     std::string ExistingModuleCachePath;
5123     FileManager &FileMgr;
5124 
5125   public:
5126     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5127                        const TargetOptions &ExistingTargetOpts,
5128                        const PreprocessorOptions &ExistingPPOpts,
5129                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5130         : ExistingLangOpts(ExistingLangOpts),
5131           ExistingTargetOpts(ExistingTargetOpts),
5132           ExistingPPOpts(ExistingPPOpts),
5133           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5134 
5135     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5136                              bool AllowCompatibleDifferences) override {
5137       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5138                                   AllowCompatibleDifferences);
5139     }
5140 
5141     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5142                            bool AllowCompatibleDifferences) override {
5143       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5144                                 AllowCompatibleDifferences);
5145     }
5146 
5147     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5148                                  StringRef SpecificModuleCachePath,
5149                                  bool Complain) override {
5150       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5151                                       ExistingModuleCachePath,
5152                                       nullptr, ExistingLangOpts);
5153     }
5154 
5155     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5156                                  bool Complain,
5157                                  std::string &SuggestedPredefines) override {
5158       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5159                                       SuggestedPredefines, ExistingLangOpts);
5160     }
5161   };
5162 
5163 } // namespace
5164 
5165 bool ASTReader::readASTFileControlBlock(
5166     StringRef Filename, FileManager &FileMgr,
5167     const PCHContainerReader &PCHContainerRdr,
5168     bool FindModuleFileExtensions,
5169     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5170   // Open the AST file.
5171   // FIXME: This allows use of the VFS; we do not allow use of the
5172   // VFS when actually loading a module.
5173   auto Buffer = FileMgr.getBufferForFile(Filename);
5174   if (!Buffer) {
5175     return true;
5176   }
5177 
5178   // Initialize the stream
5179   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5180   BitstreamCursor Stream(Bytes);
5181 
5182   // Sniff for the signature.
5183   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5184     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5185     return true;
5186   }
5187 
5188   // Scan for the CONTROL_BLOCK_ID block.
5189   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5190     return true;
5191 
5192   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5193   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5194   bool NeedsImports = Listener.needsImportVisitation();
5195   BitstreamCursor InputFilesCursor;
5196 
5197   RecordData Record;
5198   std::string ModuleDir;
5199   bool DoneWithControlBlock = false;
5200   while (!DoneWithControlBlock) {
5201     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5202     if (!MaybeEntry) {
5203       // FIXME this drops the error on the floor.
5204       consumeError(MaybeEntry.takeError());
5205       return true;
5206     }
5207     llvm::BitstreamEntry Entry = MaybeEntry.get();
5208 
5209     switch (Entry.Kind) {
5210     case llvm::BitstreamEntry::SubBlock: {
5211       switch (Entry.ID) {
5212       case OPTIONS_BLOCK_ID: {
5213         std::string IgnoredSuggestedPredefines;
5214         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5215                              /*AllowCompatibleConfigurationMismatch*/ false,
5216                              Listener, IgnoredSuggestedPredefines) != Success)
5217           return true;
5218         break;
5219       }
5220 
5221       case INPUT_FILES_BLOCK_ID:
5222         InputFilesCursor = Stream;
5223         if (llvm::Error Err = Stream.SkipBlock()) {
5224           // FIXME this drops the error on the floor.
5225           consumeError(std::move(Err));
5226           return true;
5227         }
5228         if (NeedsInputFiles &&
5229             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5230           return true;
5231         break;
5232 
5233       default:
5234         if (llvm::Error Err = Stream.SkipBlock()) {
5235           // FIXME this drops the error on the floor.
5236           consumeError(std::move(Err));
5237           return true;
5238         }
5239         break;
5240       }
5241 
5242       continue;
5243     }
5244 
5245     case llvm::BitstreamEntry::EndBlock:
5246       DoneWithControlBlock = true;
5247       break;
5248 
5249     case llvm::BitstreamEntry::Error:
5250       return true;
5251 
5252     case llvm::BitstreamEntry::Record:
5253       break;
5254     }
5255 
5256     if (DoneWithControlBlock) break;
5257 
5258     Record.clear();
5259     StringRef Blob;
5260     Expected<unsigned> MaybeRecCode =
5261         Stream.readRecord(Entry.ID, Record, &Blob);
5262     if (!MaybeRecCode) {
5263       // FIXME this drops the error.
5264       return Failure;
5265     }
5266     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5267     case METADATA:
5268       if (Record[0] != VERSION_MAJOR)
5269         return true;
5270       if (Listener.ReadFullVersionInformation(Blob))
5271         return true;
5272       break;
5273     case MODULE_NAME:
5274       Listener.ReadModuleName(Blob);
5275       break;
5276     case MODULE_DIRECTORY:
5277       ModuleDir = std::string(Blob);
5278       break;
5279     case MODULE_MAP_FILE: {
5280       unsigned Idx = 0;
5281       auto Path = ReadString(Record, Idx);
5282       ResolveImportedPath(Path, ModuleDir);
5283       Listener.ReadModuleMapFile(Path);
5284       break;
5285     }
5286     case INPUT_FILE_OFFSETS: {
5287       if (!NeedsInputFiles)
5288         break;
5289 
5290       unsigned NumInputFiles = Record[0];
5291       unsigned NumUserFiles = Record[1];
5292       const llvm::support::unaligned_uint64_t *InputFileOffs =
5293           (const llvm::support::unaligned_uint64_t *)Blob.data();
5294       for (unsigned I = 0; I != NumInputFiles; ++I) {
5295         // Go find this input file.
5296         bool isSystemFile = I >= NumUserFiles;
5297 
5298         if (isSystemFile && !NeedsSystemInputFiles)
5299           break; // the rest are system input files
5300 
5301         BitstreamCursor &Cursor = InputFilesCursor;
5302         SavedStreamPosition SavedPosition(Cursor);
5303         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5304           // FIXME this drops errors on the floor.
5305           consumeError(std::move(Err));
5306         }
5307 
5308         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5309         if (!MaybeCode) {
5310           // FIXME this drops errors on the floor.
5311           consumeError(MaybeCode.takeError());
5312         }
5313         unsigned Code = MaybeCode.get();
5314 
5315         RecordData Record;
5316         StringRef Blob;
5317         bool shouldContinue = false;
5318         Expected<unsigned> MaybeRecordType =
5319             Cursor.readRecord(Code, Record, &Blob);
5320         if (!MaybeRecordType) {
5321           // FIXME this drops errors on the floor.
5322           consumeError(MaybeRecordType.takeError());
5323         }
5324         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5325         case INPUT_FILE_HASH:
5326           break;
5327         case INPUT_FILE:
5328           bool Overridden = static_cast<bool>(Record[3]);
5329           std::string Filename = std::string(Blob);
5330           ResolveImportedPath(Filename, ModuleDir);
5331           shouldContinue = Listener.visitInputFile(
5332               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5333           break;
5334         }
5335         if (!shouldContinue)
5336           break;
5337       }
5338       break;
5339     }
5340 
5341     case IMPORTS: {
5342       if (!NeedsImports)
5343         break;
5344 
5345       unsigned Idx = 0, N = Record.size();
5346       while (Idx < N) {
5347         // Read information about the AST file.
5348         Idx +=
5349             1 + 1 + 1 + 1 +
5350             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5351         std::string ModuleName = ReadString(Record, Idx);
5352         std::string Filename = ReadString(Record, Idx);
5353         ResolveImportedPath(Filename, ModuleDir);
5354         Listener.visitImport(ModuleName, Filename);
5355       }
5356       break;
5357     }
5358 
5359     default:
5360       // No other validation to perform.
5361       break;
5362     }
5363   }
5364 
5365   // Look for module file extension blocks, if requested.
5366   if (FindModuleFileExtensions) {
5367     BitstreamCursor SavedStream = Stream;
5368     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5369       bool DoneWithExtensionBlock = false;
5370       while (!DoneWithExtensionBlock) {
5371         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5372         if (!MaybeEntry) {
5373           // FIXME this drops the error.
5374           return true;
5375         }
5376         llvm::BitstreamEntry Entry = MaybeEntry.get();
5377 
5378         switch (Entry.Kind) {
5379         case llvm::BitstreamEntry::SubBlock:
5380           if (llvm::Error Err = Stream.SkipBlock()) {
5381             // FIXME this drops the error on the floor.
5382             consumeError(std::move(Err));
5383             return true;
5384           }
5385           continue;
5386 
5387         case llvm::BitstreamEntry::EndBlock:
5388           DoneWithExtensionBlock = true;
5389           continue;
5390 
5391         case llvm::BitstreamEntry::Error:
5392           return true;
5393 
5394         case llvm::BitstreamEntry::Record:
5395           break;
5396         }
5397 
5398        Record.clear();
5399        StringRef Blob;
5400        Expected<unsigned> MaybeRecCode =
5401            Stream.readRecord(Entry.ID, Record, &Blob);
5402        if (!MaybeRecCode) {
5403          // FIXME this drops the error.
5404          return true;
5405        }
5406        switch (MaybeRecCode.get()) {
5407        case EXTENSION_METADATA: {
5408          ModuleFileExtensionMetadata Metadata;
5409          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5410            return true;
5411 
5412          Listener.readModuleFileExtension(Metadata);
5413          break;
5414        }
5415        }
5416       }
5417     }
5418     Stream = SavedStream;
5419   }
5420 
5421   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5422   if (readUnhashedControlBlockImpl(
5423           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5424           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5425           ValidateDiagnosticOptions) != Success)
5426     return true;
5427 
5428   return false;
5429 }
5430 
5431 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5432                                     const PCHContainerReader &PCHContainerRdr,
5433                                     const LangOptions &LangOpts,
5434                                     const TargetOptions &TargetOpts,
5435                                     const PreprocessorOptions &PPOpts,
5436                                     StringRef ExistingModuleCachePath) {
5437   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5438                                ExistingModuleCachePath, FileMgr);
5439   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5440                                   /*FindModuleFileExtensions=*/false,
5441                                   validator,
5442                                   /*ValidateDiagnosticOptions=*/true);
5443 }
5444 
5445 ASTReader::ASTReadResult
5446 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5447   // Enter the submodule block.
5448   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5449     Error(std::move(Err));
5450     return Failure;
5451   }
5452 
5453   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5454   bool First = true;
5455   Module *CurrentModule = nullptr;
5456   RecordData Record;
5457   while (true) {
5458     Expected<llvm::BitstreamEntry> MaybeEntry =
5459         F.Stream.advanceSkippingSubblocks();
5460     if (!MaybeEntry) {
5461       Error(MaybeEntry.takeError());
5462       return Failure;
5463     }
5464     llvm::BitstreamEntry Entry = MaybeEntry.get();
5465 
5466     switch (Entry.Kind) {
5467     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5468     case llvm::BitstreamEntry::Error:
5469       Error("malformed block record in AST file");
5470       return Failure;
5471     case llvm::BitstreamEntry::EndBlock:
5472       return Success;
5473     case llvm::BitstreamEntry::Record:
5474       // The interesting case.
5475       break;
5476     }
5477 
5478     // Read a record.
5479     StringRef Blob;
5480     Record.clear();
5481     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5482     if (!MaybeKind) {
5483       Error(MaybeKind.takeError());
5484       return Failure;
5485     }
5486     unsigned Kind = MaybeKind.get();
5487 
5488     if ((Kind == SUBMODULE_METADATA) != First) {
5489       Error("submodule metadata record should be at beginning of block");
5490       return Failure;
5491     }
5492     First = false;
5493 
5494     // Submodule information is only valid if we have a current module.
5495     // FIXME: Should we error on these cases?
5496     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5497         Kind != SUBMODULE_DEFINITION)
5498       continue;
5499 
5500     switch (Kind) {
5501     default:  // Default behavior: ignore.
5502       break;
5503 
5504     case SUBMODULE_DEFINITION: {
5505       if (Record.size() < 12) {
5506         Error("malformed module definition");
5507         return Failure;
5508       }
5509 
5510       StringRef Name = Blob;
5511       unsigned Idx = 0;
5512       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5513       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5514       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5515       bool IsFramework = Record[Idx++];
5516       bool IsExplicit = Record[Idx++];
5517       bool IsSystem = Record[Idx++];
5518       bool IsExternC = Record[Idx++];
5519       bool InferSubmodules = Record[Idx++];
5520       bool InferExplicitSubmodules = Record[Idx++];
5521       bool InferExportWildcard = Record[Idx++];
5522       bool ConfigMacrosExhaustive = Record[Idx++];
5523       bool ModuleMapIsPrivate = Record[Idx++];
5524 
5525       Module *ParentModule = nullptr;
5526       if (Parent)
5527         ParentModule = getSubmodule(Parent);
5528 
5529       // Retrieve this (sub)module from the module map, creating it if
5530       // necessary.
5531       CurrentModule =
5532           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5533               .first;
5534 
5535       // FIXME: set the definition loc for CurrentModule, or call
5536       // ModMap.setInferredModuleAllowedBy()
5537 
5538       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5539       if (GlobalIndex >= SubmodulesLoaded.size() ||
5540           SubmodulesLoaded[GlobalIndex]) {
5541         Error("too many submodules");
5542         return Failure;
5543       }
5544 
5545       if (!ParentModule) {
5546         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5547           // Don't emit module relocation error if we have -fno-validate-pch
5548           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5549                     DisableValidationForModuleKind::Module) &&
5550               CurFile != F.File) {
5551             Error(diag::err_module_file_conflict,
5552                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5553                   F.File->getName());
5554             return Failure;
5555           }
5556         }
5557 
5558         F.DidReadTopLevelSubmodule = true;
5559         CurrentModule->setASTFile(F.File);
5560         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5561       }
5562 
5563       CurrentModule->Kind = Kind;
5564       CurrentModule->Signature = F.Signature;
5565       CurrentModule->IsFromModuleFile = true;
5566       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5567       CurrentModule->IsExternC = IsExternC;
5568       CurrentModule->InferSubmodules = InferSubmodules;
5569       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5570       CurrentModule->InferExportWildcard = InferExportWildcard;
5571       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5572       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5573       if (DeserializationListener)
5574         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5575 
5576       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5577 
5578       // Clear out data that will be replaced by what is in the module file.
5579       CurrentModule->LinkLibraries.clear();
5580       CurrentModule->ConfigMacros.clear();
5581       CurrentModule->UnresolvedConflicts.clear();
5582       CurrentModule->Conflicts.clear();
5583 
5584       // The module is available unless it's missing a requirement; relevant
5585       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5586       // Missing headers that were present when the module was built do not
5587       // make it unavailable -- if we got this far, this must be an explicitly
5588       // imported module file.
5589       CurrentModule->Requirements.clear();
5590       CurrentModule->MissingHeaders.clear();
5591       CurrentModule->IsUnimportable =
5592           ParentModule && ParentModule->IsUnimportable;
5593       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5594       break;
5595     }
5596 
5597     case SUBMODULE_UMBRELLA_HEADER: {
5598       std::string Filename = std::string(Blob);
5599       ResolveImportedPath(F, Filename);
5600       if (auto Umbrella = PP.getFileManager().getOptionalFileRef(Filename)) {
5601         if (!CurrentModule->getUmbrellaHeader())
5602           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5603         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5604           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5605             Error("mismatched umbrella headers in submodule");
5606           return OutOfDate;
5607         }
5608       }
5609       break;
5610     }
5611 
5612     case SUBMODULE_HEADER:
5613     case SUBMODULE_EXCLUDED_HEADER:
5614     case SUBMODULE_PRIVATE_HEADER:
5615       // We lazily associate headers with their modules via the HeaderInfo table.
5616       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5617       // of complete filenames or remove it entirely.
5618       break;
5619 
5620     case SUBMODULE_TEXTUAL_HEADER:
5621     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5622       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5623       // them here.
5624       break;
5625 
5626     case SUBMODULE_TOPHEADER:
5627       CurrentModule->addTopHeaderFilename(Blob);
5628       break;
5629 
5630     case SUBMODULE_UMBRELLA_DIR: {
5631       std::string Dirname = std::string(Blob);
5632       ResolveImportedPath(F, Dirname);
5633       if (auto Umbrella =
5634               PP.getFileManager().getOptionalDirectoryRef(Dirname)) {
5635         if (!CurrentModule->getUmbrellaDir())
5636           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5637         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5638           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5639             Error("mismatched umbrella directories in submodule");
5640           return OutOfDate;
5641         }
5642       }
5643       break;
5644     }
5645 
5646     case SUBMODULE_METADATA: {
5647       F.BaseSubmoduleID = getTotalNumSubmodules();
5648       F.LocalNumSubmodules = Record[0];
5649       unsigned LocalBaseSubmoduleID = Record[1];
5650       if (F.LocalNumSubmodules > 0) {
5651         // Introduce the global -> local mapping for submodules within this
5652         // module.
5653         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5654 
5655         // Introduce the local -> global mapping for submodules within this
5656         // module.
5657         F.SubmoduleRemap.insertOrReplace(
5658           std::make_pair(LocalBaseSubmoduleID,
5659                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5660 
5661         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5662       }
5663       break;
5664     }
5665 
5666     case SUBMODULE_IMPORTS:
5667       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5668         UnresolvedModuleRef Unresolved;
5669         Unresolved.File = &F;
5670         Unresolved.Mod = CurrentModule;
5671         Unresolved.ID = Record[Idx];
5672         Unresolved.Kind = UnresolvedModuleRef::Import;
5673         Unresolved.IsWildcard = false;
5674         UnresolvedModuleRefs.push_back(Unresolved);
5675       }
5676       break;
5677 
5678     case SUBMODULE_EXPORTS:
5679       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5680         UnresolvedModuleRef Unresolved;
5681         Unresolved.File = &F;
5682         Unresolved.Mod = CurrentModule;
5683         Unresolved.ID = Record[Idx];
5684         Unresolved.Kind = UnresolvedModuleRef::Export;
5685         Unresolved.IsWildcard = Record[Idx + 1];
5686         UnresolvedModuleRefs.push_back(Unresolved);
5687       }
5688 
5689       // Once we've loaded the set of exports, there's no reason to keep
5690       // the parsed, unresolved exports around.
5691       CurrentModule->UnresolvedExports.clear();
5692       break;
5693 
5694     case SUBMODULE_REQUIRES:
5695       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5696                                     PP.getTargetInfo());
5697       break;
5698 
5699     case SUBMODULE_LINK_LIBRARY:
5700       ModMap.resolveLinkAsDependencies(CurrentModule);
5701       CurrentModule->LinkLibraries.push_back(
5702           Module::LinkLibrary(std::string(Blob), Record[0]));
5703       break;
5704 
5705     case SUBMODULE_CONFIG_MACRO:
5706       CurrentModule->ConfigMacros.push_back(Blob.str());
5707       break;
5708 
5709     case SUBMODULE_CONFLICT: {
5710       UnresolvedModuleRef Unresolved;
5711       Unresolved.File = &F;
5712       Unresolved.Mod = CurrentModule;
5713       Unresolved.ID = Record[0];
5714       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5715       Unresolved.IsWildcard = false;
5716       Unresolved.String = Blob;
5717       UnresolvedModuleRefs.push_back(Unresolved);
5718       break;
5719     }
5720 
5721     case SUBMODULE_INITIALIZERS: {
5722       if (!ContextObj)
5723         break;
5724       SmallVector<uint32_t, 16> Inits;
5725       for (auto &ID : Record)
5726         Inits.push_back(getGlobalDeclID(F, ID));
5727       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5728       break;
5729     }
5730 
5731     case SUBMODULE_EXPORT_AS:
5732       CurrentModule->ExportAsModule = Blob.str();
5733       ModMap.addLinkAsDependency(CurrentModule);
5734       break;
5735     }
5736   }
5737 }
5738 
5739 /// Parse the record that corresponds to a LangOptions data
5740 /// structure.
5741 ///
5742 /// This routine parses the language options from the AST file and then gives
5743 /// them to the AST listener if one is set.
5744 ///
5745 /// \returns true if the listener deems the file unacceptable, false otherwise.
5746 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5747                                      bool Complain,
5748                                      ASTReaderListener &Listener,
5749                                      bool AllowCompatibleDifferences) {
5750   LangOptions LangOpts;
5751   unsigned Idx = 0;
5752 #define LANGOPT(Name, Bits, Default, Description) \
5753   LangOpts.Name = Record[Idx++];
5754 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5755   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5756 #include "clang/Basic/LangOptions.def"
5757 #define SANITIZER(NAME, ID)                                                    \
5758   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5759 #include "clang/Basic/Sanitizers.def"
5760 
5761   for (unsigned N = Record[Idx++]; N; --N)
5762     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5763 
5764   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5765   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5766   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5767 
5768   LangOpts.CurrentModule = ReadString(Record, Idx);
5769 
5770   // Comment options.
5771   for (unsigned N = Record[Idx++]; N; --N) {
5772     LangOpts.CommentOpts.BlockCommandNames.push_back(
5773       ReadString(Record, Idx));
5774   }
5775   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5776 
5777   // OpenMP offloading options.
5778   for (unsigned N = Record[Idx++]; N; --N) {
5779     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5780   }
5781 
5782   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5783 
5784   return Listener.ReadLanguageOptions(LangOpts, Complain,
5785                                       AllowCompatibleDifferences);
5786 }
5787 
5788 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5789                                    ASTReaderListener &Listener,
5790                                    bool AllowCompatibleDifferences) {
5791   unsigned Idx = 0;
5792   TargetOptions TargetOpts;
5793   TargetOpts.Triple = ReadString(Record, Idx);
5794   TargetOpts.CPU = ReadString(Record, Idx);
5795   TargetOpts.TuneCPU = ReadString(Record, Idx);
5796   TargetOpts.ABI = ReadString(Record, Idx);
5797   for (unsigned N = Record[Idx++]; N; --N) {
5798     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5799   }
5800   for (unsigned N = Record[Idx++]; N; --N) {
5801     TargetOpts.Features.push_back(ReadString(Record, Idx));
5802   }
5803 
5804   return Listener.ReadTargetOptions(TargetOpts, Complain,
5805                                     AllowCompatibleDifferences);
5806 }
5807 
5808 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5809                                        ASTReaderListener &Listener) {
5810   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5811   unsigned Idx = 0;
5812 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5813 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5814   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5815 #include "clang/Basic/DiagnosticOptions.def"
5816 
5817   for (unsigned N = Record[Idx++]; N; --N)
5818     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5819   for (unsigned N = Record[Idx++]; N; --N)
5820     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5821 
5822   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5823 }
5824 
5825 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5826                                        ASTReaderListener &Listener) {
5827   FileSystemOptions FSOpts;
5828   unsigned Idx = 0;
5829   FSOpts.WorkingDir = ReadString(Record, Idx);
5830   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5831 }
5832 
5833 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5834                                          bool Complain,
5835                                          ASTReaderListener &Listener) {
5836   HeaderSearchOptions HSOpts;
5837   unsigned Idx = 0;
5838   HSOpts.Sysroot = ReadString(Record, Idx);
5839 
5840   // Include entries.
5841   for (unsigned N = Record[Idx++]; N; --N) {
5842     std::string Path = ReadString(Record, Idx);
5843     frontend::IncludeDirGroup Group
5844       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5845     bool IsFramework = Record[Idx++];
5846     bool IgnoreSysRoot = Record[Idx++];
5847     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5848                                     IgnoreSysRoot);
5849   }
5850 
5851   // System header prefixes.
5852   for (unsigned N = Record[Idx++]; N; --N) {
5853     std::string Prefix = ReadString(Record, Idx);
5854     bool IsSystemHeader = Record[Idx++];
5855     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5856   }
5857 
5858   HSOpts.ResourceDir = ReadString(Record, Idx);
5859   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5860   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5861   HSOpts.DisableModuleHash = Record[Idx++];
5862   HSOpts.ImplicitModuleMaps = Record[Idx++];
5863   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5864   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5865   HSOpts.UseBuiltinIncludes = Record[Idx++];
5866   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5867   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5868   HSOpts.UseLibcxx = Record[Idx++];
5869   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5870 
5871   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5872                                           Complain);
5873 }
5874 
5875 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5876                                          bool Complain,
5877                                          ASTReaderListener &Listener,
5878                                          std::string &SuggestedPredefines) {
5879   PreprocessorOptions PPOpts;
5880   unsigned Idx = 0;
5881 
5882   // Macro definitions/undefs
5883   for (unsigned N = Record[Idx++]; N; --N) {
5884     std::string Macro = ReadString(Record, Idx);
5885     bool IsUndef = Record[Idx++];
5886     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5887   }
5888 
5889   // Includes
5890   for (unsigned N = Record[Idx++]; N; --N) {
5891     PPOpts.Includes.push_back(ReadString(Record, Idx));
5892   }
5893 
5894   // Macro Includes
5895   for (unsigned N = Record[Idx++]; N; --N) {
5896     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5897   }
5898 
5899   PPOpts.UsePredefines = Record[Idx++];
5900   PPOpts.DetailedRecord = Record[Idx++];
5901   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5902   PPOpts.ObjCXXARCStandardLibrary =
5903     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5904   SuggestedPredefines.clear();
5905   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5906                                           SuggestedPredefines);
5907 }
5908 
5909 std::pair<ModuleFile *, unsigned>
5910 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5911   GlobalPreprocessedEntityMapType::iterator
5912   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5913   assert(I != GlobalPreprocessedEntityMap.end() &&
5914          "Corrupted global preprocessed entity map");
5915   ModuleFile *M = I->second;
5916   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5917   return std::make_pair(M, LocalIndex);
5918 }
5919 
5920 llvm::iterator_range<PreprocessingRecord::iterator>
5921 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5922   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5923     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5924                                              Mod.NumPreprocessedEntities);
5925 
5926   return llvm::make_range(PreprocessingRecord::iterator(),
5927                           PreprocessingRecord::iterator());
5928 }
5929 
5930 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5931 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5932   return llvm::make_range(
5933       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5934       ModuleDeclIterator(this, &Mod,
5935                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5936 }
5937 
5938 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5939   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5940   assert(I != GlobalSkippedRangeMap.end() &&
5941     "Corrupted global skipped range map");
5942   ModuleFile *M = I->second;
5943   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5944   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5945   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5946   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5947                     TranslateSourceLocation(*M, RawRange.getEnd()));
5948   assert(Range.isValid());
5949   return Range;
5950 }
5951 
5952 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5953   PreprocessedEntityID PPID = Index+1;
5954   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5955   ModuleFile &M = *PPInfo.first;
5956   unsigned LocalIndex = PPInfo.second;
5957   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5958 
5959   if (!PP.getPreprocessingRecord()) {
5960     Error("no preprocessing record");
5961     return nullptr;
5962   }
5963 
5964   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5965   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5966           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5967     Error(std::move(Err));
5968     return nullptr;
5969   }
5970 
5971   Expected<llvm::BitstreamEntry> MaybeEntry =
5972       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5973   if (!MaybeEntry) {
5974     Error(MaybeEntry.takeError());
5975     return nullptr;
5976   }
5977   llvm::BitstreamEntry Entry = MaybeEntry.get();
5978 
5979   if (Entry.Kind != llvm::BitstreamEntry::Record)
5980     return nullptr;
5981 
5982   // Read the record.
5983   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5984                     TranslateSourceLocation(M, PPOffs.getEnd()));
5985   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5986   StringRef Blob;
5987   RecordData Record;
5988   Expected<unsigned> MaybeRecType =
5989       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5990   if (!MaybeRecType) {
5991     Error(MaybeRecType.takeError());
5992     return nullptr;
5993   }
5994   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5995   case PPD_MACRO_EXPANSION: {
5996     bool isBuiltin = Record[0];
5997     IdentifierInfo *Name = nullptr;
5998     MacroDefinitionRecord *Def = nullptr;
5999     if (isBuiltin)
6000       Name = getLocalIdentifier(M, Record[1]);
6001     else {
6002       PreprocessedEntityID GlobalID =
6003           getGlobalPreprocessedEntityID(M, Record[1]);
6004       Def = cast<MacroDefinitionRecord>(
6005           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
6006     }
6007 
6008     MacroExpansion *ME;
6009     if (isBuiltin)
6010       ME = new (PPRec) MacroExpansion(Name, Range);
6011     else
6012       ME = new (PPRec) MacroExpansion(Def, Range);
6013 
6014     return ME;
6015   }
6016 
6017   case PPD_MACRO_DEFINITION: {
6018     // Decode the identifier info and then check again; if the macro is
6019     // still defined and associated with the identifier,
6020     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6021     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6022 
6023     if (DeserializationListener)
6024       DeserializationListener->MacroDefinitionRead(PPID, MD);
6025 
6026     return MD;
6027   }
6028 
6029   case PPD_INCLUSION_DIRECTIVE: {
6030     const char *FullFileNameStart = Blob.data() + Record[0];
6031     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6032     const FileEntry *File = nullptr;
6033     if (!FullFileName.empty())
6034       if (auto FE = PP.getFileManager().getFile(FullFileName))
6035         File = *FE;
6036 
6037     // FIXME: Stable encoding
6038     InclusionDirective::InclusionKind Kind
6039       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6040     InclusionDirective *ID
6041       = new (PPRec) InclusionDirective(PPRec, Kind,
6042                                        StringRef(Blob.data(), Record[0]),
6043                                        Record[1], Record[3],
6044                                        File,
6045                                        Range);
6046     return ID;
6047   }
6048   }
6049 
6050   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6051 }
6052 
6053 /// Find the next module that contains entities and return the ID
6054 /// of the first entry.
6055 ///
6056 /// \param SLocMapI points at a chunk of a module that contains no
6057 /// preprocessed entities or the entities it contains are not the ones we are
6058 /// looking for.
6059 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6060                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6061   ++SLocMapI;
6062   for (GlobalSLocOffsetMapType::const_iterator
6063          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6064     ModuleFile &M = *SLocMapI->second;
6065     if (M.NumPreprocessedEntities)
6066       return M.BasePreprocessedEntityID;
6067   }
6068 
6069   return getTotalNumPreprocessedEntities();
6070 }
6071 
6072 namespace {
6073 
6074 struct PPEntityComp {
6075   const ASTReader &Reader;
6076   ModuleFile &M;
6077 
6078   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6079 
6080   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6081     SourceLocation LHS = getLoc(L);
6082     SourceLocation RHS = getLoc(R);
6083     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6084   }
6085 
6086   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6087     SourceLocation LHS = getLoc(L);
6088     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6089   }
6090 
6091   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6092     SourceLocation RHS = getLoc(R);
6093     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6094   }
6095 
6096   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6097     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6098   }
6099 };
6100 
6101 } // namespace
6102 
6103 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6104                                                        bool EndsAfter) const {
6105   if (SourceMgr.isLocalSourceLocation(Loc))
6106     return getTotalNumPreprocessedEntities();
6107 
6108   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6109       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6110   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6111          "Corrupted global sloc offset map");
6112 
6113   if (SLocMapI->second->NumPreprocessedEntities == 0)
6114     return findNextPreprocessedEntity(SLocMapI);
6115 
6116   ModuleFile &M = *SLocMapI->second;
6117 
6118   using pp_iterator = const PPEntityOffset *;
6119 
6120   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6121   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6122 
6123   size_t Count = M.NumPreprocessedEntities;
6124   size_t Half;
6125   pp_iterator First = pp_begin;
6126   pp_iterator PPI;
6127 
6128   if (EndsAfter) {
6129     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6130                            PPEntityComp(*this, M));
6131   } else {
6132     // Do a binary search manually instead of using std::lower_bound because
6133     // The end locations of entities may be unordered (when a macro expansion
6134     // is inside another macro argument), but for this case it is not important
6135     // whether we get the first macro expansion or its containing macro.
6136     while (Count > 0) {
6137       Half = Count / 2;
6138       PPI = First;
6139       std::advance(PPI, Half);
6140       if (SourceMgr.isBeforeInTranslationUnit(
6141               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6142         First = PPI;
6143         ++First;
6144         Count = Count - Half - 1;
6145       } else
6146         Count = Half;
6147     }
6148   }
6149 
6150   if (PPI == pp_end)
6151     return findNextPreprocessedEntity(SLocMapI);
6152 
6153   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6154 }
6155 
6156 /// Returns a pair of [Begin, End) indices of preallocated
6157 /// preprocessed entities that \arg Range encompasses.
6158 std::pair<unsigned, unsigned>
6159     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6160   if (Range.isInvalid())
6161     return std::make_pair(0,0);
6162   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6163 
6164   PreprocessedEntityID BeginID =
6165       findPreprocessedEntity(Range.getBegin(), false);
6166   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6167   return std::make_pair(BeginID, EndID);
6168 }
6169 
6170 /// Optionally returns true or false if the preallocated preprocessed
6171 /// entity with index \arg Index came from file \arg FID.
6172 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6173                                                              FileID FID) {
6174   if (FID.isInvalid())
6175     return false;
6176 
6177   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6178   ModuleFile &M = *PPInfo.first;
6179   unsigned LocalIndex = PPInfo.second;
6180   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6181 
6182   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6183   if (Loc.isInvalid())
6184     return false;
6185 
6186   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6187     return true;
6188   else
6189     return false;
6190 }
6191 
6192 namespace {
6193 
6194   /// Visitor used to search for information about a header file.
6195   class HeaderFileInfoVisitor {
6196     const FileEntry *FE;
6197     Optional<HeaderFileInfo> HFI;
6198 
6199   public:
6200     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6201 
6202     bool operator()(ModuleFile &M) {
6203       HeaderFileInfoLookupTable *Table
6204         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6205       if (!Table)
6206         return false;
6207 
6208       // Look in the on-disk hash table for an entry for this file name.
6209       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6210       if (Pos == Table->end())
6211         return false;
6212 
6213       HFI = *Pos;
6214       return true;
6215     }
6216 
6217     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6218   };
6219 
6220 } // namespace
6221 
6222 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6223   HeaderFileInfoVisitor Visitor(FE);
6224   ModuleMgr.visit(Visitor);
6225   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6226     return *HFI;
6227 
6228   return HeaderFileInfo();
6229 }
6230 
6231 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6232   using DiagState = DiagnosticsEngine::DiagState;
6233   SmallVector<DiagState *, 32> DiagStates;
6234 
6235   for (ModuleFile &F : ModuleMgr) {
6236     unsigned Idx = 0;
6237     auto &Record = F.PragmaDiagMappings;
6238     if (Record.empty())
6239       continue;
6240 
6241     DiagStates.clear();
6242 
6243     auto ReadDiagState =
6244         [&](const DiagState &BasedOn, SourceLocation Loc,
6245             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6246       unsigned BackrefID = Record[Idx++];
6247       if (BackrefID != 0)
6248         return DiagStates[BackrefID - 1];
6249 
6250       // A new DiagState was created here.
6251       Diag.DiagStates.push_back(BasedOn);
6252       DiagState *NewState = &Diag.DiagStates.back();
6253       DiagStates.push_back(NewState);
6254       unsigned Size = Record[Idx++];
6255       assert(Idx + Size * 2 <= Record.size() &&
6256              "Invalid data, not enough diag/map pairs");
6257       while (Size--) {
6258         unsigned DiagID = Record[Idx++];
6259         DiagnosticMapping NewMapping =
6260             DiagnosticMapping::deserialize(Record[Idx++]);
6261         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6262           continue;
6263 
6264         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6265 
6266         // If this mapping was specified as a warning but the severity was
6267         // upgraded due to diagnostic settings, simulate the current diagnostic
6268         // settings (and use a warning).
6269         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6270           NewMapping.setSeverity(diag::Severity::Warning);
6271           NewMapping.setUpgradedFromWarning(false);
6272         }
6273 
6274         Mapping = NewMapping;
6275       }
6276       return NewState;
6277     };
6278 
6279     // Read the first state.
6280     DiagState *FirstState;
6281     if (F.Kind == MK_ImplicitModule) {
6282       // Implicitly-built modules are reused with different diagnostic
6283       // settings.  Use the initial diagnostic state from Diag to simulate this
6284       // compilation's diagnostic settings.
6285       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6286       DiagStates.push_back(FirstState);
6287 
6288       // Skip the initial diagnostic state from the serialized module.
6289       assert(Record[1] == 0 &&
6290              "Invalid data, unexpected backref in initial state");
6291       Idx = 3 + Record[2] * 2;
6292       assert(Idx < Record.size() &&
6293              "Invalid data, not enough state change pairs in initial state");
6294     } else if (F.isModule()) {
6295       // For an explicit module, preserve the flags from the module build
6296       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6297       // -Wblah flags.
6298       unsigned Flags = Record[Idx++];
6299       DiagState Initial;
6300       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6301       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6302       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6303       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6304       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6305       Initial.ExtBehavior = (diag::Severity)Flags;
6306       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6307 
6308       assert(F.OriginalSourceFileID.isValid());
6309 
6310       // Set up the root buffer of the module to start with the initial
6311       // diagnostic state of the module itself, to cover files that contain no
6312       // explicit transitions (for which we did not serialize anything).
6313       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6314           .StateTransitions.push_back({FirstState, 0});
6315     } else {
6316       // For prefix ASTs, start with whatever the user configured on the
6317       // command line.
6318       Idx++; // Skip flags.
6319       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6320                                  SourceLocation(), false);
6321     }
6322 
6323     // Read the state transitions.
6324     unsigned NumLocations = Record[Idx++];
6325     while (NumLocations--) {
6326       assert(Idx < Record.size() &&
6327              "Invalid data, missing pragma diagnostic states");
6328       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6329       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6330       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6331       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6332       unsigned Transitions = Record[Idx++];
6333 
6334       // Note that we don't need to set up Parent/ParentOffset here, because
6335       // we won't be changing the diagnostic state within imported FileIDs
6336       // (other than perhaps appending to the main source file, which has no
6337       // parent).
6338       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6339       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6340       for (unsigned I = 0; I != Transitions; ++I) {
6341         unsigned Offset = Record[Idx++];
6342         auto *State =
6343             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6344         F.StateTransitions.push_back({State, Offset});
6345       }
6346     }
6347 
6348     // Read the final state.
6349     assert(Idx < Record.size() &&
6350            "Invalid data, missing final pragma diagnostic state");
6351     SourceLocation CurStateLoc =
6352         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6353     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6354 
6355     if (!F.isModule()) {
6356       Diag.DiagStatesByLoc.CurDiagState = CurState;
6357       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6358 
6359       // Preserve the property that the imaginary root file describes the
6360       // current state.
6361       FileID NullFile;
6362       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6363       if (T.empty())
6364         T.push_back({CurState, 0});
6365       else
6366         T[0].State = CurState;
6367     }
6368 
6369     // Don't try to read these mappings again.
6370     Record.clear();
6371   }
6372 }
6373 
6374 /// Get the correct cursor and offset for loading a type.
6375 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6376   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6377   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6378   ModuleFile *M = I->second;
6379   return RecordLocation(
6380       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6381              M->DeclsBlockStartOffset);
6382 }
6383 
6384 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6385   switch (code) {
6386 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6387   case TYPE_##CODE_ID: return Type::CLASS_ID;
6388 #include "clang/Serialization/TypeBitCodes.def"
6389   default: return llvm::None;
6390   }
6391 }
6392 
6393 /// Read and return the type with the given index..
6394 ///
6395 /// The index is the type ID, shifted and minus the number of predefs. This
6396 /// routine actually reads the record corresponding to the type at the given
6397 /// location. It is a helper routine for GetType, which deals with reading type
6398 /// IDs.
6399 QualType ASTReader::readTypeRecord(unsigned Index) {
6400   assert(ContextObj && "reading type with no AST context");
6401   ASTContext &Context = *ContextObj;
6402   RecordLocation Loc = TypeCursorForIndex(Index);
6403   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6404 
6405   // Keep track of where we are in the stream, then jump back there
6406   // after reading this type.
6407   SavedStreamPosition SavedPosition(DeclsCursor);
6408 
6409   ReadingKindTracker ReadingKind(Read_Type, *this);
6410 
6411   // Note that we are loading a type record.
6412   Deserializing AType(this);
6413 
6414   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6415     Error(std::move(Err));
6416     return QualType();
6417   }
6418   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6419   if (!RawCode) {
6420     Error(RawCode.takeError());
6421     return QualType();
6422   }
6423 
6424   ASTRecordReader Record(*this, *Loc.F);
6425   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6426   if (!Code) {
6427     Error(Code.takeError());
6428     return QualType();
6429   }
6430   if (Code.get() == TYPE_EXT_QUAL) {
6431     QualType baseType = Record.readQualType();
6432     Qualifiers quals = Record.readQualifiers();
6433     return Context.getQualifiedType(baseType, quals);
6434   }
6435 
6436   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6437   if (!maybeClass) {
6438     Error("Unexpected code for type");
6439     return QualType();
6440   }
6441 
6442   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6443   return TypeReader.read(*maybeClass);
6444 }
6445 
6446 namespace clang {
6447 
6448 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6449   ASTRecordReader &Reader;
6450 
6451   SourceLocation readSourceLocation() {
6452     return Reader.readSourceLocation();
6453   }
6454 
6455   TypeSourceInfo *GetTypeSourceInfo() {
6456     return Reader.readTypeSourceInfo();
6457   }
6458 
6459   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6460     return Reader.readNestedNameSpecifierLoc();
6461   }
6462 
6463   Attr *ReadAttr() {
6464     return Reader.readAttr();
6465   }
6466 
6467 public:
6468   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6469 
6470   // We want compile-time assurance that we've enumerated all of
6471   // these, so unfortunately we have to declare them first, then
6472   // define them out-of-line.
6473 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6474 #define TYPELOC(CLASS, PARENT) \
6475   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6476 #include "clang/AST/TypeLocNodes.def"
6477 
6478   void VisitFunctionTypeLoc(FunctionTypeLoc);
6479   void VisitArrayTypeLoc(ArrayTypeLoc);
6480 };
6481 
6482 } // namespace clang
6483 
6484 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6485   // nothing to do
6486 }
6487 
6488 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6489   TL.setBuiltinLoc(readSourceLocation());
6490   if (TL.needsExtraLocalData()) {
6491     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6492     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6493     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6494     TL.setModeAttr(Reader.readInt());
6495   }
6496 }
6497 
6498 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6499   TL.setNameLoc(readSourceLocation());
6500 }
6501 
6502 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6503   TL.setStarLoc(readSourceLocation());
6504 }
6505 
6506 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6507   // nothing to do
6508 }
6509 
6510 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6511   // nothing to do
6512 }
6513 
6514 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6515   TL.setExpansionLoc(readSourceLocation());
6516 }
6517 
6518 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6519   TL.setCaretLoc(readSourceLocation());
6520 }
6521 
6522 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6523   TL.setAmpLoc(readSourceLocation());
6524 }
6525 
6526 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6527   TL.setAmpAmpLoc(readSourceLocation());
6528 }
6529 
6530 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6531   TL.setStarLoc(readSourceLocation());
6532   TL.setClassTInfo(GetTypeSourceInfo());
6533 }
6534 
6535 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6536   TL.setLBracketLoc(readSourceLocation());
6537   TL.setRBracketLoc(readSourceLocation());
6538   if (Reader.readBool())
6539     TL.setSizeExpr(Reader.readExpr());
6540   else
6541     TL.setSizeExpr(nullptr);
6542 }
6543 
6544 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6545   VisitArrayTypeLoc(TL);
6546 }
6547 
6548 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6549   VisitArrayTypeLoc(TL);
6550 }
6551 
6552 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6553   VisitArrayTypeLoc(TL);
6554 }
6555 
6556 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6557                                             DependentSizedArrayTypeLoc TL) {
6558   VisitArrayTypeLoc(TL);
6559 }
6560 
6561 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6562     DependentAddressSpaceTypeLoc TL) {
6563 
6564     TL.setAttrNameLoc(readSourceLocation());
6565     TL.setAttrOperandParensRange(Reader.readSourceRange());
6566     TL.setAttrExprOperand(Reader.readExpr());
6567 }
6568 
6569 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6570                                         DependentSizedExtVectorTypeLoc TL) {
6571   TL.setNameLoc(readSourceLocation());
6572 }
6573 
6574 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6575   TL.setNameLoc(readSourceLocation());
6576 }
6577 
6578 void TypeLocReader::VisitDependentVectorTypeLoc(
6579     DependentVectorTypeLoc TL) {
6580   TL.setNameLoc(readSourceLocation());
6581 }
6582 
6583 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6584   TL.setNameLoc(readSourceLocation());
6585 }
6586 
6587 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6588   TL.setAttrNameLoc(readSourceLocation());
6589   TL.setAttrOperandParensRange(Reader.readSourceRange());
6590   TL.setAttrRowOperand(Reader.readExpr());
6591   TL.setAttrColumnOperand(Reader.readExpr());
6592 }
6593 
6594 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6595     DependentSizedMatrixTypeLoc TL) {
6596   TL.setAttrNameLoc(readSourceLocation());
6597   TL.setAttrOperandParensRange(Reader.readSourceRange());
6598   TL.setAttrRowOperand(Reader.readExpr());
6599   TL.setAttrColumnOperand(Reader.readExpr());
6600 }
6601 
6602 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6603   TL.setLocalRangeBegin(readSourceLocation());
6604   TL.setLParenLoc(readSourceLocation());
6605   TL.setRParenLoc(readSourceLocation());
6606   TL.setExceptionSpecRange(Reader.readSourceRange());
6607   TL.setLocalRangeEnd(readSourceLocation());
6608   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6609     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6610   }
6611 }
6612 
6613 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6614   VisitFunctionTypeLoc(TL);
6615 }
6616 
6617 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6618   VisitFunctionTypeLoc(TL);
6619 }
6620 
6621 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6622   TL.setNameLoc(readSourceLocation());
6623 }
6624 
6625 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6626   TL.setNameLoc(readSourceLocation());
6627 }
6628 
6629 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6630   TL.setTypeofLoc(readSourceLocation());
6631   TL.setLParenLoc(readSourceLocation());
6632   TL.setRParenLoc(readSourceLocation());
6633 }
6634 
6635 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6636   TL.setTypeofLoc(readSourceLocation());
6637   TL.setLParenLoc(readSourceLocation());
6638   TL.setRParenLoc(readSourceLocation());
6639   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6640 }
6641 
6642 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6643   TL.setNameLoc(readSourceLocation());
6644 }
6645 
6646 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6647   TL.setKWLoc(readSourceLocation());
6648   TL.setLParenLoc(readSourceLocation());
6649   TL.setRParenLoc(readSourceLocation());
6650   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6651 }
6652 
6653 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6654   TL.setNameLoc(readSourceLocation());
6655   if (Reader.readBool()) {
6656     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6657     TL.setTemplateKWLoc(readSourceLocation());
6658     TL.setConceptNameLoc(readSourceLocation());
6659     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6660     TL.setLAngleLoc(readSourceLocation());
6661     TL.setRAngleLoc(readSourceLocation());
6662     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6663       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6664                               TL.getTypePtr()->getArg(i).getKind()));
6665   }
6666 }
6667 
6668 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6669     DeducedTemplateSpecializationTypeLoc TL) {
6670   TL.setTemplateNameLoc(readSourceLocation());
6671 }
6672 
6673 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6674   TL.setNameLoc(readSourceLocation());
6675 }
6676 
6677 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6678   TL.setNameLoc(readSourceLocation());
6679 }
6680 
6681 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6682   TL.setAttr(ReadAttr());
6683 }
6684 
6685 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6686   TL.setNameLoc(readSourceLocation());
6687 }
6688 
6689 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6690                                             SubstTemplateTypeParmTypeLoc TL) {
6691   TL.setNameLoc(readSourceLocation());
6692 }
6693 
6694 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6695                                           SubstTemplateTypeParmPackTypeLoc TL) {
6696   TL.setNameLoc(readSourceLocation());
6697 }
6698 
6699 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6700                                            TemplateSpecializationTypeLoc TL) {
6701   TL.setTemplateKeywordLoc(readSourceLocation());
6702   TL.setTemplateNameLoc(readSourceLocation());
6703   TL.setLAngleLoc(readSourceLocation());
6704   TL.setRAngleLoc(readSourceLocation());
6705   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6706     TL.setArgLocInfo(
6707         i,
6708         Reader.readTemplateArgumentLocInfo(
6709           TL.getTypePtr()->getArg(i).getKind()));
6710 }
6711 
6712 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6713   TL.setLParenLoc(readSourceLocation());
6714   TL.setRParenLoc(readSourceLocation());
6715 }
6716 
6717 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6718   TL.setElaboratedKeywordLoc(readSourceLocation());
6719   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6720 }
6721 
6722 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6723   TL.setNameLoc(readSourceLocation());
6724 }
6725 
6726 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6727   TL.setElaboratedKeywordLoc(readSourceLocation());
6728   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6729   TL.setNameLoc(readSourceLocation());
6730 }
6731 
6732 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6733        DependentTemplateSpecializationTypeLoc TL) {
6734   TL.setElaboratedKeywordLoc(readSourceLocation());
6735   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6736   TL.setTemplateKeywordLoc(readSourceLocation());
6737   TL.setTemplateNameLoc(readSourceLocation());
6738   TL.setLAngleLoc(readSourceLocation());
6739   TL.setRAngleLoc(readSourceLocation());
6740   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6741     TL.setArgLocInfo(
6742         I,
6743         Reader.readTemplateArgumentLocInfo(
6744             TL.getTypePtr()->getArg(I).getKind()));
6745 }
6746 
6747 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6748   TL.setEllipsisLoc(readSourceLocation());
6749 }
6750 
6751 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6752   TL.setNameLoc(readSourceLocation());
6753 }
6754 
6755 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6756   if (TL.getNumProtocols()) {
6757     TL.setProtocolLAngleLoc(readSourceLocation());
6758     TL.setProtocolRAngleLoc(readSourceLocation());
6759   }
6760   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6761     TL.setProtocolLoc(i, readSourceLocation());
6762 }
6763 
6764 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6765   TL.setHasBaseTypeAsWritten(Reader.readBool());
6766   TL.setTypeArgsLAngleLoc(readSourceLocation());
6767   TL.setTypeArgsRAngleLoc(readSourceLocation());
6768   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6769     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6770   TL.setProtocolLAngleLoc(readSourceLocation());
6771   TL.setProtocolRAngleLoc(readSourceLocation());
6772   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6773     TL.setProtocolLoc(i, readSourceLocation());
6774 }
6775 
6776 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6777   TL.setStarLoc(readSourceLocation());
6778 }
6779 
6780 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6781   TL.setKWLoc(readSourceLocation());
6782   TL.setLParenLoc(readSourceLocation());
6783   TL.setRParenLoc(readSourceLocation());
6784 }
6785 
6786 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6787   TL.setKWLoc(readSourceLocation());
6788 }
6789 
6790 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6791   TL.setNameLoc(readSourceLocation());
6792 }
6793 void TypeLocReader::VisitDependentExtIntTypeLoc(
6794     clang::DependentExtIntTypeLoc TL) {
6795   TL.setNameLoc(readSourceLocation());
6796 }
6797 
6798 
6799 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6800   TypeLocReader TLR(*this);
6801   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6802     TLR.Visit(TL);
6803 }
6804 
6805 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6806   QualType InfoTy = readType();
6807   if (InfoTy.isNull())
6808     return nullptr;
6809 
6810   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6811   readTypeLoc(TInfo->getTypeLoc());
6812   return TInfo;
6813 }
6814 
6815 QualType ASTReader::GetType(TypeID ID) {
6816   assert(ContextObj && "reading type with no AST context");
6817   ASTContext &Context = *ContextObj;
6818 
6819   unsigned FastQuals = ID & Qualifiers::FastMask;
6820   unsigned Index = ID >> Qualifiers::FastWidth;
6821 
6822   if (Index < NUM_PREDEF_TYPE_IDS) {
6823     QualType T;
6824     switch ((PredefinedTypeIDs)Index) {
6825     case PREDEF_TYPE_NULL_ID:
6826       return QualType();
6827     case PREDEF_TYPE_VOID_ID:
6828       T = Context.VoidTy;
6829       break;
6830     case PREDEF_TYPE_BOOL_ID:
6831       T = Context.BoolTy;
6832       break;
6833     case PREDEF_TYPE_CHAR_U_ID:
6834     case PREDEF_TYPE_CHAR_S_ID:
6835       // FIXME: Check that the signedness of CharTy is correct!
6836       T = Context.CharTy;
6837       break;
6838     case PREDEF_TYPE_UCHAR_ID:
6839       T = Context.UnsignedCharTy;
6840       break;
6841     case PREDEF_TYPE_USHORT_ID:
6842       T = Context.UnsignedShortTy;
6843       break;
6844     case PREDEF_TYPE_UINT_ID:
6845       T = Context.UnsignedIntTy;
6846       break;
6847     case PREDEF_TYPE_ULONG_ID:
6848       T = Context.UnsignedLongTy;
6849       break;
6850     case PREDEF_TYPE_ULONGLONG_ID:
6851       T = Context.UnsignedLongLongTy;
6852       break;
6853     case PREDEF_TYPE_UINT128_ID:
6854       T = Context.UnsignedInt128Ty;
6855       break;
6856     case PREDEF_TYPE_SCHAR_ID:
6857       T = Context.SignedCharTy;
6858       break;
6859     case PREDEF_TYPE_WCHAR_ID:
6860       T = Context.WCharTy;
6861       break;
6862     case PREDEF_TYPE_SHORT_ID:
6863       T = Context.ShortTy;
6864       break;
6865     case PREDEF_TYPE_INT_ID:
6866       T = Context.IntTy;
6867       break;
6868     case PREDEF_TYPE_LONG_ID:
6869       T = Context.LongTy;
6870       break;
6871     case PREDEF_TYPE_LONGLONG_ID:
6872       T = Context.LongLongTy;
6873       break;
6874     case PREDEF_TYPE_INT128_ID:
6875       T = Context.Int128Ty;
6876       break;
6877     case PREDEF_TYPE_BFLOAT16_ID:
6878       T = Context.BFloat16Ty;
6879       break;
6880     case PREDEF_TYPE_HALF_ID:
6881       T = Context.HalfTy;
6882       break;
6883     case PREDEF_TYPE_FLOAT_ID:
6884       T = Context.FloatTy;
6885       break;
6886     case PREDEF_TYPE_DOUBLE_ID:
6887       T = Context.DoubleTy;
6888       break;
6889     case PREDEF_TYPE_LONGDOUBLE_ID:
6890       T = Context.LongDoubleTy;
6891       break;
6892     case PREDEF_TYPE_SHORT_ACCUM_ID:
6893       T = Context.ShortAccumTy;
6894       break;
6895     case PREDEF_TYPE_ACCUM_ID:
6896       T = Context.AccumTy;
6897       break;
6898     case PREDEF_TYPE_LONG_ACCUM_ID:
6899       T = Context.LongAccumTy;
6900       break;
6901     case PREDEF_TYPE_USHORT_ACCUM_ID:
6902       T = Context.UnsignedShortAccumTy;
6903       break;
6904     case PREDEF_TYPE_UACCUM_ID:
6905       T = Context.UnsignedAccumTy;
6906       break;
6907     case PREDEF_TYPE_ULONG_ACCUM_ID:
6908       T = Context.UnsignedLongAccumTy;
6909       break;
6910     case PREDEF_TYPE_SHORT_FRACT_ID:
6911       T = Context.ShortFractTy;
6912       break;
6913     case PREDEF_TYPE_FRACT_ID:
6914       T = Context.FractTy;
6915       break;
6916     case PREDEF_TYPE_LONG_FRACT_ID:
6917       T = Context.LongFractTy;
6918       break;
6919     case PREDEF_TYPE_USHORT_FRACT_ID:
6920       T = Context.UnsignedShortFractTy;
6921       break;
6922     case PREDEF_TYPE_UFRACT_ID:
6923       T = Context.UnsignedFractTy;
6924       break;
6925     case PREDEF_TYPE_ULONG_FRACT_ID:
6926       T = Context.UnsignedLongFractTy;
6927       break;
6928     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6929       T = Context.SatShortAccumTy;
6930       break;
6931     case PREDEF_TYPE_SAT_ACCUM_ID:
6932       T = Context.SatAccumTy;
6933       break;
6934     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6935       T = Context.SatLongAccumTy;
6936       break;
6937     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6938       T = Context.SatUnsignedShortAccumTy;
6939       break;
6940     case PREDEF_TYPE_SAT_UACCUM_ID:
6941       T = Context.SatUnsignedAccumTy;
6942       break;
6943     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6944       T = Context.SatUnsignedLongAccumTy;
6945       break;
6946     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6947       T = Context.SatShortFractTy;
6948       break;
6949     case PREDEF_TYPE_SAT_FRACT_ID:
6950       T = Context.SatFractTy;
6951       break;
6952     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6953       T = Context.SatLongFractTy;
6954       break;
6955     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6956       T = Context.SatUnsignedShortFractTy;
6957       break;
6958     case PREDEF_TYPE_SAT_UFRACT_ID:
6959       T = Context.SatUnsignedFractTy;
6960       break;
6961     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6962       T = Context.SatUnsignedLongFractTy;
6963       break;
6964     case PREDEF_TYPE_FLOAT16_ID:
6965       T = Context.Float16Ty;
6966       break;
6967     case PREDEF_TYPE_FLOAT128_ID:
6968       T = Context.Float128Ty;
6969       break;
6970     case PREDEF_TYPE_OVERLOAD_ID:
6971       T = Context.OverloadTy;
6972       break;
6973     case PREDEF_TYPE_BOUND_MEMBER:
6974       T = Context.BoundMemberTy;
6975       break;
6976     case PREDEF_TYPE_PSEUDO_OBJECT:
6977       T = Context.PseudoObjectTy;
6978       break;
6979     case PREDEF_TYPE_DEPENDENT_ID:
6980       T = Context.DependentTy;
6981       break;
6982     case PREDEF_TYPE_UNKNOWN_ANY:
6983       T = Context.UnknownAnyTy;
6984       break;
6985     case PREDEF_TYPE_NULLPTR_ID:
6986       T = Context.NullPtrTy;
6987       break;
6988     case PREDEF_TYPE_CHAR8_ID:
6989       T = Context.Char8Ty;
6990       break;
6991     case PREDEF_TYPE_CHAR16_ID:
6992       T = Context.Char16Ty;
6993       break;
6994     case PREDEF_TYPE_CHAR32_ID:
6995       T = Context.Char32Ty;
6996       break;
6997     case PREDEF_TYPE_OBJC_ID:
6998       T = Context.ObjCBuiltinIdTy;
6999       break;
7000     case PREDEF_TYPE_OBJC_CLASS:
7001       T = Context.ObjCBuiltinClassTy;
7002       break;
7003     case PREDEF_TYPE_OBJC_SEL:
7004       T = Context.ObjCBuiltinSelTy;
7005       break;
7006 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7007     case PREDEF_TYPE_##Id##_ID: \
7008       T = Context.SingletonId; \
7009       break;
7010 #include "clang/Basic/OpenCLImageTypes.def"
7011 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7012     case PREDEF_TYPE_##Id##_ID: \
7013       T = Context.Id##Ty; \
7014       break;
7015 #include "clang/Basic/OpenCLExtensionTypes.def"
7016     case PREDEF_TYPE_SAMPLER_ID:
7017       T = Context.OCLSamplerTy;
7018       break;
7019     case PREDEF_TYPE_EVENT_ID:
7020       T = Context.OCLEventTy;
7021       break;
7022     case PREDEF_TYPE_CLK_EVENT_ID:
7023       T = Context.OCLClkEventTy;
7024       break;
7025     case PREDEF_TYPE_QUEUE_ID:
7026       T = Context.OCLQueueTy;
7027       break;
7028     case PREDEF_TYPE_RESERVE_ID_ID:
7029       T = Context.OCLReserveIDTy;
7030       break;
7031     case PREDEF_TYPE_AUTO_DEDUCT:
7032       T = Context.getAutoDeductType();
7033       break;
7034     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7035       T = Context.getAutoRRefDeductType();
7036       break;
7037     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7038       T = Context.ARCUnbridgedCastTy;
7039       break;
7040     case PREDEF_TYPE_BUILTIN_FN:
7041       T = Context.BuiltinFnTy;
7042       break;
7043     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7044       T = Context.IncompleteMatrixIdxTy;
7045       break;
7046     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7047       T = Context.OMPArraySectionTy;
7048       break;
7049     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7050       T = Context.OMPArraySectionTy;
7051       break;
7052     case PREDEF_TYPE_OMP_ITERATOR:
7053       T = Context.OMPIteratorTy;
7054       break;
7055 #define SVE_TYPE(Name, Id, SingletonId) \
7056     case PREDEF_TYPE_##Id##_ID: \
7057       T = Context.SingletonId; \
7058       break;
7059 #include "clang/Basic/AArch64SVEACLETypes.def"
7060 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7061     case PREDEF_TYPE_##Id##_ID: \
7062       T = Context.Id##Ty; \
7063       break;
7064 #include "clang/Basic/PPCTypes.def"
7065     }
7066 
7067     assert(!T.isNull() && "Unknown predefined type");
7068     return T.withFastQualifiers(FastQuals);
7069   }
7070 
7071   Index -= NUM_PREDEF_TYPE_IDS;
7072   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7073   if (TypesLoaded[Index].isNull()) {
7074     TypesLoaded[Index] = readTypeRecord(Index);
7075     if (TypesLoaded[Index].isNull())
7076       return QualType();
7077 
7078     TypesLoaded[Index]->setFromAST();
7079     if (DeserializationListener)
7080       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7081                                         TypesLoaded[Index]);
7082   }
7083 
7084   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7085 }
7086 
7087 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7088   return GetType(getGlobalTypeID(F, LocalID));
7089 }
7090 
7091 serialization::TypeID
7092 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7093   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7094   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7095 
7096   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7097     return LocalID;
7098 
7099   if (!F.ModuleOffsetMap.empty())
7100     ReadModuleOffsetMap(F);
7101 
7102   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7103     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7104   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7105 
7106   unsigned GlobalIndex = LocalIndex + I->second;
7107   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7108 }
7109 
7110 TemplateArgumentLocInfo
7111 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7112   switch (Kind) {
7113   case TemplateArgument::Expression:
7114     return readExpr();
7115   case TemplateArgument::Type:
7116     return readTypeSourceInfo();
7117   case TemplateArgument::Template: {
7118     NestedNameSpecifierLoc QualifierLoc =
7119       readNestedNameSpecifierLoc();
7120     SourceLocation TemplateNameLoc = readSourceLocation();
7121     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7122                                    TemplateNameLoc, SourceLocation());
7123   }
7124   case TemplateArgument::TemplateExpansion: {
7125     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7126     SourceLocation TemplateNameLoc = readSourceLocation();
7127     SourceLocation EllipsisLoc = readSourceLocation();
7128     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7129                                    TemplateNameLoc, EllipsisLoc);
7130   }
7131   case TemplateArgument::Null:
7132   case TemplateArgument::Integral:
7133   case TemplateArgument::Declaration:
7134   case TemplateArgument::NullPtr:
7135   case TemplateArgument::Pack:
7136     // FIXME: Is this right?
7137     return TemplateArgumentLocInfo();
7138   }
7139   llvm_unreachable("unexpected template argument loc");
7140 }
7141 
7142 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7143   TemplateArgument Arg = readTemplateArgument();
7144 
7145   if (Arg.getKind() == TemplateArgument::Expression) {
7146     if (readBool()) // bool InfoHasSameExpr.
7147       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7148   }
7149   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7150 }
7151 
7152 const ASTTemplateArgumentListInfo *
7153 ASTRecordReader::readASTTemplateArgumentListInfo() {
7154   SourceLocation LAngleLoc = readSourceLocation();
7155   SourceLocation RAngleLoc = readSourceLocation();
7156   unsigned NumArgsAsWritten = readInt();
7157   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7158   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7159     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7160   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7161 }
7162 
7163 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7164   return GetDecl(ID);
7165 }
7166 
7167 void ASTReader::CompleteRedeclChain(const Decl *D) {
7168   if (NumCurrentElementsDeserializing) {
7169     // We arrange to not care about the complete redeclaration chain while we're
7170     // deserializing. Just remember that the AST has marked this one as complete
7171     // but that it's not actually complete yet, so we know we still need to
7172     // complete it later.
7173     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7174     return;
7175   }
7176 
7177   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7178 
7179   // If this is a named declaration, complete it by looking it up
7180   // within its context.
7181   //
7182   // FIXME: Merging a function definition should merge
7183   // all mergeable entities within it.
7184   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7185       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7186     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7187       if (!getContext().getLangOpts().CPlusPlus &&
7188           isa<TranslationUnitDecl>(DC)) {
7189         // Outside of C++, we don't have a lookup table for the TU, so update
7190         // the identifier instead. (For C++ modules, we don't store decls
7191         // in the serialized identifier table, so we do the lookup in the TU.)
7192         auto *II = Name.getAsIdentifierInfo();
7193         assert(II && "non-identifier name in C?");
7194         if (II->isOutOfDate())
7195           updateOutOfDateIdentifier(*II);
7196       } else
7197         DC->lookup(Name);
7198     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7199       // Find all declarations of this kind from the relevant context.
7200       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7201         auto *DC = cast<DeclContext>(DCDecl);
7202         SmallVector<Decl*, 8> Decls;
7203         FindExternalLexicalDecls(
7204             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7205       }
7206     }
7207   }
7208 
7209   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7210     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7211   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7212     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7213   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7214     if (auto *Template = FD->getPrimaryTemplate())
7215       Template->LoadLazySpecializations();
7216   }
7217 }
7218 
7219 CXXCtorInitializer **
7220 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7221   RecordLocation Loc = getLocalBitOffset(Offset);
7222   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7223   SavedStreamPosition SavedPosition(Cursor);
7224   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7225     Error(std::move(Err));
7226     return nullptr;
7227   }
7228   ReadingKindTracker ReadingKind(Read_Decl, *this);
7229 
7230   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7231   if (!MaybeCode) {
7232     Error(MaybeCode.takeError());
7233     return nullptr;
7234   }
7235   unsigned Code = MaybeCode.get();
7236 
7237   ASTRecordReader Record(*this, *Loc.F);
7238   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7239   if (!MaybeRecCode) {
7240     Error(MaybeRecCode.takeError());
7241     return nullptr;
7242   }
7243   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7244     Error("malformed AST file: missing C++ ctor initializers");
7245     return nullptr;
7246   }
7247 
7248   return Record.readCXXCtorInitializers();
7249 }
7250 
7251 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7252   assert(ContextObj && "reading base specifiers with no AST context");
7253   ASTContext &Context = *ContextObj;
7254 
7255   RecordLocation Loc = getLocalBitOffset(Offset);
7256   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7257   SavedStreamPosition SavedPosition(Cursor);
7258   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7259     Error(std::move(Err));
7260     return nullptr;
7261   }
7262   ReadingKindTracker ReadingKind(Read_Decl, *this);
7263 
7264   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7265   if (!MaybeCode) {
7266     Error(MaybeCode.takeError());
7267     return nullptr;
7268   }
7269   unsigned Code = MaybeCode.get();
7270 
7271   ASTRecordReader Record(*this, *Loc.F);
7272   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7273   if (!MaybeRecCode) {
7274     Error(MaybeCode.takeError());
7275     return nullptr;
7276   }
7277   unsigned RecCode = MaybeRecCode.get();
7278 
7279   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7280     Error("malformed AST file: missing C++ base specifiers");
7281     return nullptr;
7282   }
7283 
7284   unsigned NumBases = Record.readInt();
7285   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7286   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7287   for (unsigned I = 0; I != NumBases; ++I)
7288     Bases[I] = Record.readCXXBaseSpecifier();
7289   return Bases;
7290 }
7291 
7292 serialization::DeclID
7293 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7294   if (LocalID < NUM_PREDEF_DECL_IDS)
7295     return LocalID;
7296 
7297   if (!F.ModuleOffsetMap.empty())
7298     ReadModuleOffsetMap(F);
7299 
7300   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7301     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7302   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7303 
7304   return LocalID + I->second;
7305 }
7306 
7307 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7308                                    ModuleFile &M) const {
7309   // Predefined decls aren't from any module.
7310   if (ID < NUM_PREDEF_DECL_IDS)
7311     return false;
7312 
7313   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7314          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7315 }
7316 
7317 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7318   if (!D->isFromASTFile())
7319     return nullptr;
7320   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7321   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7322   return I->second;
7323 }
7324 
7325 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7326   if (ID < NUM_PREDEF_DECL_IDS)
7327     return SourceLocation();
7328 
7329   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7330 
7331   if (Index > DeclsLoaded.size()) {
7332     Error("declaration ID out-of-range for AST file");
7333     return SourceLocation();
7334   }
7335 
7336   if (Decl *D = DeclsLoaded[Index])
7337     return D->getLocation();
7338 
7339   SourceLocation Loc;
7340   DeclCursorForID(ID, Loc);
7341   return Loc;
7342 }
7343 
7344 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7345   switch (ID) {
7346   case PREDEF_DECL_NULL_ID:
7347     return nullptr;
7348 
7349   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7350     return Context.getTranslationUnitDecl();
7351 
7352   case PREDEF_DECL_OBJC_ID_ID:
7353     return Context.getObjCIdDecl();
7354 
7355   case PREDEF_DECL_OBJC_SEL_ID:
7356     return Context.getObjCSelDecl();
7357 
7358   case PREDEF_DECL_OBJC_CLASS_ID:
7359     return Context.getObjCClassDecl();
7360 
7361   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7362     return Context.getObjCProtocolDecl();
7363 
7364   case PREDEF_DECL_INT_128_ID:
7365     return Context.getInt128Decl();
7366 
7367   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7368     return Context.getUInt128Decl();
7369 
7370   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7371     return Context.getObjCInstanceTypeDecl();
7372 
7373   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7374     return Context.getBuiltinVaListDecl();
7375 
7376   case PREDEF_DECL_VA_LIST_TAG:
7377     return Context.getVaListTagDecl();
7378 
7379   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7380     return Context.getBuiltinMSVaListDecl();
7381 
7382   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7383     return Context.getMSGuidTagDecl();
7384 
7385   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7386     return Context.getExternCContextDecl();
7387 
7388   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7389     return Context.getMakeIntegerSeqDecl();
7390 
7391   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7392     return Context.getCFConstantStringDecl();
7393 
7394   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7395     return Context.getCFConstantStringTagDecl();
7396 
7397   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7398     return Context.getTypePackElementDecl();
7399   }
7400   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7401 }
7402 
7403 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7404   assert(ContextObj && "reading decl with no AST context");
7405   if (ID < NUM_PREDEF_DECL_IDS) {
7406     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7407     if (D) {
7408       // Track that we have merged the declaration with ID \p ID into the
7409       // pre-existing predefined declaration \p D.
7410       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7411       if (Merged.empty())
7412         Merged.push_back(ID);
7413     }
7414     return D;
7415   }
7416 
7417   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7418 
7419   if (Index >= DeclsLoaded.size()) {
7420     assert(0 && "declaration ID out-of-range for AST file");
7421     Error("declaration ID out-of-range for AST file");
7422     return nullptr;
7423   }
7424 
7425   return DeclsLoaded[Index];
7426 }
7427 
7428 Decl *ASTReader::GetDecl(DeclID ID) {
7429   if (ID < NUM_PREDEF_DECL_IDS)
7430     return GetExistingDecl(ID);
7431 
7432   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7433 
7434   if (Index >= DeclsLoaded.size()) {
7435     assert(0 && "declaration ID out-of-range for AST file");
7436     Error("declaration ID out-of-range for AST file");
7437     return nullptr;
7438   }
7439 
7440   if (!DeclsLoaded[Index]) {
7441     ReadDeclRecord(ID);
7442     if (DeserializationListener)
7443       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7444   }
7445 
7446   return DeclsLoaded[Index];
7447 }
7448 
7449 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7450                                                   DeclID GlobalID) {
7451   if (GlobalID < NUM_PREDEF_DECL_IDS)
7452     return GlobalID;
7453 
7454   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7455   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7456   ModuleFile *Owner = I->second;
7457 
7458   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7459     = M.GlobalToLocalDeclIDs.find(Owner);
7460   if (Pos == M.GlobalToLocalDeclIDs.end())
7461     return 0;
7462 
7463   return GlobalID - Owner->BaseDeclID + Pos->second;
7464 }
7465 
7466 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7467                                             const RecordData &Record,
7468                                             unsigned &Idx) {
7469   if (Idx >= Record.size()) {
7470     Error("Corrupted AST file");
7471     return 0;
7472   }
7473 
7474   return getGlobalDeclID(F, Record[Idx++]);
7475 }
7476 
7477 /// Resolve the offset of a statement into a statement.
7478 ///
7479 /// This operation will read a new statement from the external
7480 /// source each time it is called, and is meant to be used via a
7481 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7482 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7483   // Switch case IDs are per Decl.
7484   ClearSwitchCaseIDs();
7485 
7486   // Offset here is a global offset across the entire chain.
7487   RecordLocation Loc = getLocalBitOffset(Offset);
7488   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7489     Error(std::move(Err));
7490     return nullptr;
7491   }
7492   assert(NumCurrentElementsDeserializing == 0 &&
7493          "should not be called while already deserializing");
7494   Deserializing D(this);
7495   return ReadStmtFromStream(*Loc.F);
7496 }
7497 
7498 void ASTReader::FindExternalLexicalDecls(
7499     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7500     SmallVectorImpl<Decl *> &Decls) {
7501   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7502 
7503   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7504     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7505     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7506       auto K = (Decl::Kind)+LexicalDecls[I];
7507       if (!IsKindWeWant(K))
7508         continue;
7509 
7510       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7511 
7512       // Don't add predefined declarations to the lexical context more
7513       // than once.
7514       if (ID < NUM_PREDEF_DECL_IDS) {
7515         if (PredefsVisited[ID])
7516           continue;
7517 
7518         PredefsVisited[ID] = true;
7519       }
7520 
7521       if (Decl *D = GetLocalDecl(*M, ID)) {
7522         assert(D->getKind() == K && "wrong kind for lexical decl");
7523         if (!DC->isDeclInLexicalTraversal(D))
7524           Decls.push_back(D);
7525       }
7526     }
7527   };
7528 
7529   if (isa<TranslationUnitDecl>(DC)) {
7530     for (auto Lexical : TULexicalDecls)
7531       Visit(Lexical.first, Lexical.second);
7532   } else {
7533     auto I = LexicalDecls.find(DC);
7534     if (I != LexicalDecls.end())
7535       Visit(I->second.first, I->second.second);
7536   }
7537 
7538   ++NumLexicalDeclContextsRead;
7539 }
7540 
7541 namespace {
7542 
7543 class DeclIDComp {
7544   ASTReader &Reader;
7545   ModuleFile &Mod;
7546 
7547 public:
7548   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7549 
7550   bool operator()(LocalDeclID L, LocalDeclID R) const {
7551     SourceLocation LHS = getLocation(L);
7552     SourceLocation RHS = getLocation(R);
7553     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7554   }
7555 
7556   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7557     SourceLocation RHS = getLocation(R);
7558     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7559   }
7560 
7561   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7562     SourceLocation LHS = getLocation(L);
7563     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7564   }
7565 
7566   SourceLocation getLocation(LocalDeclID ID) const {
7567     return Reader.getSourceManager().getFileLoc(
7568             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7569   }
7570 };
7571 
7572 } // namespace
7573 
7574 void ASTReader::FindFileRegionDecls(FileID File,
7575                                     unsigned Offset, unsigned Length,
7576                                     SmallVectorImpl<Decl *> &Decls) {
7577   SourceManager &SM = getSourceManager();
7578 
7579   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7580   if (I == FileDeclIDs.end())
7581     return;
7582 
7583   FileDeclsInfo &DInfo = I->second;
7584   if (DInfo.Decls.empty())
7585     return;
7586 
7587   SourceLocation
7588     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7589   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7590 
7591   DeclIDComp DIDComp(*this, *DInfo.Mod);
7592   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7593       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7594   if (BeginIt != DInfo.Decls.begin())
7595     --BeginIt;
7596 
7597   // If we are pointing at a top-level decl inside an objc container, we need
7598   // to backtrack until we find it otherwise we will fail to report that the
7599   // region overlaps with an objc container.
7600   while (BeginIt != DInfo.Decls.begin() &&
7601          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7602              ->isTopLevelDeclInObjCContainer())
7603     --BeginIt;
7604 
7605   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7606       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7607   if (EndIt != DInfo.Decls.end())
7608     ++EndIt;
7609 
7610   for (ArrayRef<serialization::LocalDeclID>::iterator
7611          DIt = BeginIt; DIt != EndIt; ++DIt)
7612     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7613 }
7614 
7615 bool
7616 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7617                                           DeclarationName Name) {
7618   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7619          "DeclContext has no visible decls in storage");
7620   if (!Name)
7621     return false;
7622 
7623   auto It = Lookups.find(DC);
7624   if (It == Lookups.end())
7625     return false;
7626 
7627   Deserializing LookupResults(this);
7628 
7629   // Load the list of declarations.
7630   SmallVector<NamedDecl *, 64> Decls;
7631   for (DeclID ID : It->second.Table.find(Name)) {
7632     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7633     if (ND->getDeclName() == Name)
7634       Decls.push_back(ND);
7635   }
7636 
7637   ++NumVisibleDeclContextsRead;
7638   SetExternalVisibleDeclsForName(DC, Name, Decls);
7639   return !Decls.empty();
7640 }
7641 
7642 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7643   if (!DC->hasExternalVisibleStorage())
7644     return;
7645 
7646   auto It = Lookups.find(DC);
7647   assert(It != Lookups.end() &&
7648          "have external visible storage but no lookup tables");
7649 
7650   DeclsMap Decls;
7651 
7652   for (DeclID ID : It->second.Table.findAll()) {
7653     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7654     Decls[ND->getDeclName()].push_back(ND);
7655   }
7656 
7657   ++NumVisibleDeclContextsRead;
7658 
7659   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7660     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7661   }
7662   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7663 }
7664 
7665 const serialization::reader::DeclContextLookupTable *
7666 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7667   auto I = Lookups.find(Primary);
7668   return I == Lookups.end() ? nullptr : &I->second;
7669 }
7670 
7671 /// Under non-PCH compilation the consumer receives the objc methods
7672 /// before receiving the implementation, and codegen depends on this.
7673 /// We simulate this by deserializing and passing to consumer the methods of the
7674 /// implementation before passing the deserialized implementation decl.
7675 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7676                                        ASTConsumer *Consumer) {
7677   assert(ImplD && Consumer);
7678 
7679   for (auto *I : ImplD->methods())
7680     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7681 
7682   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7683 }
7684 
7685 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7686   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7687     PassObjCImplDeclToConsumer(ImplD, Consumer);
7688   else
7689     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7690 }
7691 
7692 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7693   this->Consumer = Consumer;
7694 
7695   if (Consumer)
7696     PassInterestingDeclsToConsumer();
7697 
7698   if (DeserializationListener)
7699     DeserializationListener->ReaderInitialized(this);
7700 }
7701 
7702 void ASTReader::PrintStats() {
7703   std::fprintf(stderr, "*** AST File Statistics:\n");
7704 
7705   unsigned NumTypesLoaded
7706     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7707                                       QualType());
7708   unsigned NumDeclsLoaded
7709     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7710                                       (Decl *)nullptr);
7711   unsigned NumIdentifiersLoaded
7712     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7713                                             IdentifiersLoaded.end(),
7714                                             (IdentifierInfo *)nullptr);
7715   unsigned NumMacrosLoaded
7716     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7717                                        MacrosLoaded.end(),
7718                                        (MacroInfo *)nullptr);
7719   unsigned NumSelectorsLoaded
7720     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7721                                           SelectorsLoaded.end(),
7722                                           Selector());
7723 
7724   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7725     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7726                  NumSLocEntriesRead, TotalNumSLocEntries,
7727                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7728   if (!TypesLoaded.empty())
7729     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7730                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7731                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7732   if (!DeclsLoaded.empty())
7733     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7734                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7735                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7736   if (!IdentifiersLoaded.empty())
7737     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7738                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7739                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7740   if (!MacrosLoaded.empty())
7741     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7742                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7743                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7744   if (!SelectorsLoaded.empty())
7745     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7746                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7747                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7748   if (TotalNumStatements)
7749     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7750                  NumStatementsRead, TotalNumStatements,
7751                  ((float)NumStatementsRead/TotalNumStatements * 100));
7752   if (TotalNumMacros)
7753     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7754                  NumMacrosRead, TotalNumMacros,
7755                  ((float)NumMacrosRead/TotalNumMacros * 100));
7756   if (TotalLexicalDeclContexts)
7757     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7758                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7759                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7760                   * 100));
7761   if (TotalVisibleDeclContexts)
7762     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7763                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7764                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7765                   * 100));
7766   if (TotalNumMethodPoolEntries)
7767     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7768                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7769                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7770                   * 100));
7771   if (NumMethodPoolLookups)
7772     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7773                  NumMethodPoolHits, NumMethodPoolLookups,
7774                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7775   if (NumMethodPoolTableLookups)
7776     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7777                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7778                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7779                   * 100.0));
7780   if (NumIdentifierLookupHits)
7781     std::fprintf(stderr,
7782                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7783                  NumIdentifierLookupHits, NumIdentifierLookups,
7784                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7785 
7786   if (GlobalIndex) {
7787     std::fprintf(stderr, "\n");
7788     GlobalIndex->printStats();
7789   }
7790 
7791   std::fprintf(stderr, "\n");
7792   dump();
7793   std::fprintf(stderr, "\n");
7794 }
7795 
7796 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7797 LLVM_DUMP_METHOD static void
7798 dumpModuleIDMap(StringRef Name,
7799                 const ContinuousRangeMap<Key, ModuleFile *,
7800                                          InitialCapacity> &Map) {
7801   if (Map.begin() == Map.end())
7802     return;
7803 
7804   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7805 
7806   llvm::errs() << Name << ":\n";
7807   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7808        I != IEnd; ++I) {
7809     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7810       << "\n";
7811   }
7812 }
7813 
7814 LLVM_DUMP_METHOD void ASTReader::dump() {
7815   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7816   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7817   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7818   dumpModuleIDMap("Global type map", GlobalTypeMap);
7819   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7820   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7821   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7822   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7823   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7824   dumpModuleIDMap("Global preprocessed entity map",
7825                   GlobalPreprocessedEntityMap);
7826 
7827   llvm::errs() << "\n*** PCH/Modules Loaded:";
7828   for (ModuleFile &M : ModuleMgr)
7829     M.dump();
7830 }
7831 
7832 /// Return the amount of memory used by memory buffers, breaking down
7833 /// by heap-backed versus mmap'ed memory.
7834 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7835   for (ModuleFile &I : ModuleMgr) {
7836     if (llvm::MemoryBuffer *buf = I.Buffer) {
7837       size_t bytes = buf->getBufferSize();
7838       switch (buf->getBufferKind()) {
7839         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7840           sizes.malloc_bytes += bytes;
7841           break;
7842         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7843           sizes.mmap_bytes += bytes;
7844           break;
7845       }
7846     }
7847   }
7848 }
7849 
7850 void ASTReader::InitializeSema(Sema &S) {
7851   SemaObj = &S;
7852   S.addExternalSource(this);
7853 
7854   // Makes sure any declarations that were deserialized "too early"
7855   // still get added to the identifier's declaration chains.
7856   for (uint64_t ID : PreloadedDeclIDs) {
7857     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7858     pushExternalDeclIntoScope(D, D->getDeclName());
7859   }
7860   PreloadedDeclIDs.clear();
7861 
7862   // FIXME: What happens if these are changed by a module import?
7863   if (!FPPragmaOptions.empty()) {
7864     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7865     FPOptionsOverride NewOverrides =
7866         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7867     SemaObj->CurFPFeatures =
7868         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7869   }
7870 
7871   SemaObj->OpenCLFeatures = OpenCLExtensions;
7872   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7873   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7874 
7875   UpdateSema();
7876 }
7877 
7878 void ASTReader::UpdateSema() {
7879   assert(SemaObj && "no Sema to update");
7880 
7881   // Load the offsets of the declarations that Sema references.
7882   // They will be lazily deserialized when needed.
7883   if (!SemaDeclRefs.empty()) {
7884     assert(SemaDeclRefs.size() % 3 == 0);
7885     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7886       if (!SemaObj->StdNamespace)
7887         SemaObj->StdNamespace = SemaDeclRefs[I];
7888       if (!SemaObj->StdBadAlloc)
7889         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7890       if (!SemaObj->StdAlignValT)
7891         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7892     }
7893     SemaDeclRefs.clear();
7894   }
7895 
7896   // Update the state of pragmas. Use the same API as if we had encountered the
7897   // pragma in the source.
7898   if(OptimizeOffPragmaLocation.isValid())
7899     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7900   if (PragmaMSStructState != -1)
7901     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7902   if (PointersToMembersPragmaLocation.isValid()) {
7903     SemaObj->ActOnPragmaMSPointersToMembers(
7904         (LangOptions::PragmaMSPointersToMembersKind)
7905             PragmaMSPointersToMembersState,
7906         PointersToMembersPragmaLocation);
7907   }
7908   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7909 
7910   if (PragmaAlignPackCurrentValue) {
7911     // The bottom of the stack might have a default value. It must be adjusted
7912     // to the current value to ensure that the packing state is preserved after
7913     // popping entries that were included/imported from a PCH/module.
7914     bool DropFirst = false;
7915     if (!PragmaAlignPackStack.empty() &&
7916         PragmaAlignPackStack.front().Location.isInvalid()) {
7917       assert(PragmaAlignPackStack.front().Value ==
7918                  SemaObj->AlignPackStack.DefaultValue &&
7919              "Expected a default alignment value");
7920       SemaObj->AlignPackStack.Stack.emplace_back(
7921           PragmaAlignPackStack.front().SlotLabel,
7922           SemaObj->AlignPackStack.CurrentValue,
7923           SemaObj->AlignPackStack.CurrentPragmaLocation,
7924           PragmaAlignPackStack.front().PushLocation);
7925       DropFirst = true;
7926     }
7927     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7928                                  .drop_front(DropFirst ? 1 : 0)) {
7929       SemaObj->AlignPackStack.Stack.emplace_back(
7930           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7931     }
7932     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7933       assert(*PragmaAlignPackCurrentValue ==
7934                  SemaObj->AlignPackStack.DefaultValue &&
7935              "Expected a default align and pack value");
7936       // Keep the current values.
7937     } else {
7938       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7939       SemaObj->AlignPackStack.CurrentPragmaLocation =
7940           PragmaAlignPackCurrentLocation;
7941     }
7942   }
7943   if (FpPragmaCurrentValue) {
7944     // The bottom of the stack might have a default value. It must be adjusted
7945     // to the current value to ensure that fp-pragma state is preserved after
7946     // popping entries that were included/imported from a PCH/module.
7947     bool DropFirst = false;
7948     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7949       assert(FpPragmaStack.front().Value ==
7950                  SemaObj->FpPragmaStack.DefaultValue &&
7951              "Expected a default pragma float_control value");
7952       SemaObj->FpPragmaStack.Stack.emplace_back(
7953           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7954           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7955           FpPragmaStack.front().PushLocation);
7956       DropFirst = true;
7957     }
7958     for (const auto &Entry :
7959          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7960       SemaObj->FpPragmaStack.Stack.emplace_back(
7961           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7962     if (FpPragmaCurrentLocation.isInvalid()) {
7963       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7964              "Expected a default pragma float_control value");
7965       // Keep the current values.
7966     } else {
7967       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7968       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7969     }
7970   }
7971 
7972   // For non-modular AST files, restore visiblity of modules.
7973   for (auto &Import : ImportedModules) {
7974     if (Import.ImportLoc.isInvalid())
7975       continue;
7976     if (Module *Imported = getSubmodule(Import.ID)) {
7977       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7978     }
7979   }
7980 }
7981 
7982 IdentifierInfo *ASTReader::get(StringRef Name) {
7983   // Note that we are loading an identifier.
7984   Deserializing AnIdentifier(this);
7985 
7986   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7987                                   NumIdentifierLookups,
7988                                   NumIdentifierLookupHits);
7989 
7990   // We don't need to do identifier table lookups in C++ modules (we preload
7991   // all interesting declarations, and don't need to use the scope for name
7992   // lookups). Perform the lookup in PCH files, though, since we don't build
7993   // a complete initial identifier table if we're carrying on from a PCH.
7994   if (PP.getLangOpts().CPlusPlus) {
7995     for (auto F : ModuleMgr.pch_modules())
7996       if (Visitor(*F))
7997         break;
7998   } else {
7999     // If there is a global index, look there first to determine which modules
8000     // provably do not have any results for this identifier.
8001     GlobalModuleIndex::HitSet Hits;
8002     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8003     if (!loadGlobalIndex()) {
8004       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8005         HitsPtr = &Hits;
8006       }
8007     }
8008 
8009     ModuleMgr.visit(Visitor, HitsPtr);
8010   }
8011 
8012   IdentifierInfo *II = Visitor.getIdentifierInfo();
8013   markIdentifierUpToDate(II);
8014   return II;
8015 }
8016 
8017 namespace clang {
8018 
8019   /// An identifier-lookup iterator that enumerates all of the
8020   /// identifiers stored within a set of AST files.
8021   class ASTIdentifierIterator : public IdentifierIterator {
8022     /// The AST reader whose identifiers are being enumerated.
8023     const ASTReader &Reader;
8024 
8025     /// The current index into the chain of AST files stored in
8026     /// the AST reader.
8027     unsigned Index;
8028 
8029     /// The current position within the identifier lookup table
8030     /// of the current AST file.
8031     ASTIdentifierLookupTable::key_iterator Current;
8032 
8033     /// The end position within the identifier lookup table of
8034     /// the current AST file.
8035     ASTIdentifierLookupTable::key_iterator End;
8036 
8037     /// Whether to skip any modules in the ASTReader.
8038     bool SkipModules;
8039 
8040   public:
8041     explicit ASTIdentifierIterator(const ASTReader &Reader,
8042                                    bool SkipModules = false);
8043 
8044     StringRef Next() override;
8045   };
8046 
8047 } // namespace clang
8048 
8049 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8050                                              bool SkipModules)
8051     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8052 }
8053 
8054 StringRef ASTIdentifierIterator::Next() {
8055   while (Current == End) {
8056     // If we have exhausted all of our AST files, we're done.
8057     if (Index == 0)
8058       return StringRef();
8059 
8060     --Index;
8061     ModuleFile &F = Reader.ModuleMgr[Index];
8062     if (SkipModules && F.isModule())
8063       continue;
8064 
8065     ASTIdentifierLookupTable *IdTable =
8066         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8067     Current = IdTable->key_begin();
8068     End = IdTable->key_end();
8069   }
8070 
8071   // We have any identifiers remaining in the current AST file; return
8072   // the next one.
8073   StringRef Result = *Current;
8074   ++Current;
8075   return Result;
8076 }
8077 
8078 namespace {
8079 
8080 /// A utility for appending two IdentifierIterators.
8081 class ChainedIdentifierIterator : public IdentifierIterator {
8082   std::unique_ptr<IdentifierIterator> Current;
8083   std::unique_ptr<IdentifierIterator> Queued;
8084 
8085 public:
8086   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8087                             std::unique_ptr<IdentifierIterator> Second)
8088       : Current(std::move(First)), Queued(std::move(Second)) {}
8089 
8090   StringRef Next() override {
8091     if (!Current)
8092       return StringRef();
8093 
8094     StringRef result = Current->Next();
8095     if (!result.empty())
8096       return result;
8097 
8098     // Try the queued iterator, which may itself be empty.
8099     Current.reset();
8100     std::swap(Current, Queued);
8101     return Next();
8102   }
8103 };
8104 
8105 } // namespace
8106 
8107 IdentifierIterator *ASTReader::getIdentifiers() {
8108   if (!loadGlobalIndex()) {
8109     std::unique_ptr<IdentifierIterator> ReaderIter(
8110         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8111     std::unique_ptr<IdentifierIterator> ModulesIter(
8112         GlobalIndex->createIdentifierIterator());
8113     return new ChainedIdentifierIterator(std::move(ReaderIter),
8114                                          std::move(ModulesIter));
8115   }
8116 
8117   return new ASTIdentifierIterator(*this);
8118 }
8119 
8120 namespace clang {
8121 namespace serialization {
8122 
8123   class ReadMethodPoolVisitor {
8124     ASTReader &Reader;
8125     Selector Sel;
8126     unsigned PriorGeneration;
8127     unsigned InstanceBits = 0;
8128     unsigned FactoryBits = 0;
8129     bool InstanceHasMoreThanOneDecl = false;
8130     bool FactoryHasMoreThanOneDecl = false;
8131     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8132     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8133 
8134   public:
8135     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8136                           unsigned PriorGeneration)
8137         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8138 
8139     bool operator()(ModuleFile &M) {
8140       if (!M.SelectorLookupTable)
8141         return false;
8142 
8143       // If we've already searched this module file, skip it now.
8144       if (M.Generation <= PriorGeneration)
8145         return true;
8146 
8147       ++Reader.NumMethodPoolTableLookups;
8148       ASTSelectorLookupTable *PoolTable
8149         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8150       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8151       if (Pos == PoolTable->end())
8152         return false;
8153 
8154       ++Reader.NumMethodPoolTableHits;
8155       ++Reader.NumSelectorsRead;
8156       // FIXME: Not quite happy with the statistics here. We probably should
8157       // disable this tracking when called via LoadSelector.
8158       // Also, should entries without methods count as misses?
8159       ++Reader.NumMethodPoolEntriesRead;
8160       ASTSelectorLookupTrait::data_type Data = *Pos;
8161       if (Reader.DeserializationListener)
8162         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8163 
8164       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8165       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8166       InstanceBits = Data.InstanceBits;
8167       FactoryBits = Data.FactoryBits;
8168       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8169       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8170       return true;
8171     }
8172 
8173     /// Retrieve the instance methods found by this visitor.
8174     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8175       return InstanceMethods;
8176     }
8177 
8178     /// Retrieve the instance methods found by this visitor.
8179     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8180       return FactoryMethods;
8181     }
8182 
8183     unsigned getInstanceBits() const { return InstanceBits; }
8184     unsigned getFactoryBits() const { return FactoryBits; }
8185 
8186     bool instanceHasMoreThanOneDecl() const {
8187       return InstanceHasMoreThanOneDecl;
8188     }
8189 
8190     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8191   };
8192 
8193 } // namespace serialization
8194 } // namespace clang
8195 
8196 /// Add the given set of methods to the method list.
8197 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8198                              ObjCMethodList &List) {
8199   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8200     S.addMethodToGlobalList(&List, Methods[I]);
8201   }
8202 }
8203 
8204 void ASTReader::ReadMethodPool(Selector Sel) {
8205   // Get the selector generation and update it to the current generation.
8206   unsigned &Generation = SelectorGeneration[Sel];
8207   unsigned PriorGeneration = Generation;
8208   Generation = getGeneration();
8209   SelectorOutOfDate[Sel] = false;
8210 
8211   // Search for methods defined with this selector.
8212   ++NumMethodPoolLookups;
8213   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8214   ModuleMgr.visit(Visitor);
8215 
8216   if (Visitor.getInstanceMethods().empty() &&
8217       Visitor.getFactoryMethods().empty())
8218     return;
8219 
8220   ++NumMethodPoolHits;
8221 
8222   if (!getSema())
8223     return;
8224 
8225   Sema &S = *getSema();
8226   Sema::GlobalMethodPool::iterator Pos
8227     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8228 
8229   Pos->second.first.setBits(Visitor.getInstanceBits());
8230   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8231   Pos->second.second.setBits(Visitor.getFactoryBits());
8232   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8233 
8234   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8235   // when building a module we keep every method individually and may need to
8236   // update hasMoreThanOneDecl as we add the methods.
8237   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8238   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8239 }
8240 
8241 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8242   if (SelectorOutOfDate[Sel])
8243     ReadMethodPool(Sel);
8244 }
8245 
8246 void ASTReader::ReadKnownNamespaces(
8247                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8248   Namespaces.clear();
8249 
8250   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8251     if (NamespaceDecl *Namespace
8252                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8253       Namespaces.push_back(Namespace);
8254   }
8255 }
8256 
8257 void ASTReader::ReadUndefinedButUsed(
8258     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8259   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8260     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8261     SourceLocation Loc =
8262         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8263     Undefined.insert(std::make_pair(D, Loc));
8264   }
8265 }
8266 
8267 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8268     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8269                                                      Exprs) {
8270   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8271     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8272     uint64_t Count = DelayedDeleteExprs[Idx++];
8273     for (uint64_t C = 0; C < Count; ++C) {
8274       SourceLocation DeleteLoc =
8275           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8276       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8277       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8278     }
8279   }
8280 }
8281 
8282 void ASTReader::ReadTentativeDefinitions(
8283                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8284   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8285     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8286     if (Var)
8287       TentativeDefs.push_back(Var);
8288   }
8289   TentativeDefinitions.clear();
8290 }
8291 
8292 void ASTReader::ReadUnusedFileScopedDecls(
8293                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8294   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8295     DeclaratorDecl *D
8296       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8297     if (D)
8298       Decls.push_back(D);
8299   }
8300   UnusedFileScopedDecls.clear();
8301 }
8302 
8303 void ASTReader::ReadDelegatingConstructors(
8304                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8305   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8306     CXXConstructorDecl *D
8307       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8308     if (D)
8309       Decls.push_back(D);
8310   }
8311   DelegatingCtorDecls.clear();
8312 }
8313 
8314 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8315   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8316     TypedefNameDecl *D
8317       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8318     if (D)
8319       Decls.push_back(D);
8320   }
8321   ExtVectorDecls.clear();
8322 }
8323 
8324 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8325     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8326   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8327        ++I) {
8328     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8329         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8330     if (D)
8331       Decls.insert(D);
8332   }
8333   UnusedLocalTypedefNameCandidates.clear();
8334 }
8335 
8336 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8337     llvm::SmallVector<Decl *, 4> &Decls) {
8338   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8339        ++I) {
8340     auto *D = dyn_cast_or_null<Decl>(
8341         GetDecl(DeclsToCheckForDeferredDiags[I]));
8342     if (D)
8343       Decls.push_back(D);
8344   }
8345   DeclsToCheckForDeferredDiags.clear();
8346 }
8347 
8348 
8349 void ASTReader::ReadReferencedSelectors(
8350        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8351   if (ReferencedSelectorsData.empty())
8352     return;
8353 
8354   // If there are @selector references added them to its pool. This is for
8355   // implementation of -Wselector.
8356   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8357   unsigned I = 0;
8358   while (I < DataSize) {
8359     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8360     SourceLocation SelLoc
8361       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8362     Sels.push_back(std::make_pair(Sel, SelLoc));
8363   }
8364   ReferencedSelectorsData.clear();
8365 }
8366 
8367 void ASTReader::ReadWeakUndeclaredIdentifiers(
8368        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8369   if (WeakUndeclaredIdentifiers.empty())
8370     return;
8371 
8372   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8373     IdentifierInfo *WeakId
8374       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8375     IdentifierInfo *AliasId
8376       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8377     SourceLocation Loc
8378       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8379     bool Used = WeakUndeclaredIdentifiers[I++];
8380     WeakInfo WI(AliasId, Loc);
8381     WI.setUsed(Used);
8382     WeakIDs.push_back(std::make_pair(WeakId, WI));
8383   }
8384   WeakUndeclaredIdentifiers.clear();
8385 }
8386 
8387 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8388   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8389     ExternalVTableUse VT;
8390     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8391     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8392     VT.DefinitionRequired = VTableUses[Idx++];
8393     VTables.push_back(VT);
8394   }
8395 
8396   VTableUses.clear();
8397 }
8398 
8399 void ASTReader::ReadPendingInstantiations(
8400        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8401   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8402     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8403     SourceLocation Loc
8404       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8405 
8406     Pending.push_back(std::make_pair(D, Loc));
8407   }
8408   PendingInstantiations.clear();
8409 }
8410 
8411 void ASTReader::ReadLateParsedTemplates(
8412     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8413         &LPTMap) {
8414   for (auto &LPT : LateParsedTemplates) {
8415     ModuleFile *FMod = LPT.first;
8416     RecordDataImpl &LateParsed = LPT.second;
8417     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8418          /* In loop */) {
8419       FunctionDecl *FD =
8420           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8421 
8422       auto LT = std::make_unique<LateParsedTemplate>();
8423       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8424 
8425       ModuleFile *F = getOwningModuleFile(LT->D);
8426       assert(F && "No module");
8427 
8428       unsigned TokN = LateParsed[Idx++];
8429       LT->Toks.reserve(TokN);
8430       for (unsigned T = 0; T < TokN; ++T)
8431         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8432 
8433       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8434     }
8435   }
8436 }
8437 
8438 void ASTReader::LoadSelector(Selector Sel) {
8439   // It would be complicated to avoid reading the methods anyway. So don't.
8440   ReadMethodPool(Sel);
8441 }
8442 
8443 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8444   assert(ID && "Non-zero identifier ID required");
8445   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8446   IdentifiersLoaded[ID - 1] = II;
8447   if (DeserializationListener)
8448     DeserializationListener->IdentifierRead(ID, II);
8449 }
8450 
8451 /// Set the globally-visible declarations associated with the given
8452 /// identifier.
8453 ///
8454 /// If the AST reader is currently in a state where the given declaration IDs
8455 /// cannot safely be resolved, they are queued until it is safe to resolve
8456 /// them.
8457 ///
8458 /// \param II an IdentifierInfo that refers to one or more globally-visible
8459 /// declarations.
8460 ///
8461 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8462 /// visible at global scope.
8463 ///
8464 /// \param Decls if non-null, this vector will be populated with the set of
8465 /// deserialized declarations. These declarations will not be pushed into
8466 /// scope.
8467 void
8468 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8469                               const SmallVectorImpl<uint32_t> &DeclIDs,
8470                                    SmallVectorImpl<Decl *> *Decls) {
8471   if (NumCurrentElementsDeserializing && !Decls) {
8472     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8473     return;
8474   }
8475 
8476   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8477     if (!SemaObj) {
8478       // Queue this declaration so that it will be added to the
8479       // translation unit scope and identifier's declaration chain
8480       // once a Sema object is known.
8481       PreloadedDeclIDs.push_back(DeclIDs[I]);
8482       continue;
8483     }
8484 
8485     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8486 
8487     // If we're simply supposed to record the declarations, do so now.
8488     if (Decls) {
8489       Decls->push_back(D);
8490       continue;
8491     }
8492 
8493     // Introduce this declaration into the translation-unit scope
8494     // and add it to the declaration chain for this identifier, so
8495     // that (unqualified) name lookup will find it.
8496     pushExternalDeclIntoScope(D, II);
8497   }
8498 }
8499 
8500 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8501   if (ID == 0)
8502     return nullptr;
8503 
8504   if (IdentifiersLoaded.empty()) {
8505     Error("no identifier table in AST file");
8506     return nullptr;
8507   }
8508 
8509   ID -= 1;
8510   if (!IdentifiersLoaded[ID]) {
8511     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8512     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8513     ModuleFile *M = I->second;
8514     unsigned Index = ID - M->BaseIdentifierID;
8515     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8516 
8517     // All of the strings in the AST file are preceded by a 16-bit length.
8518     // Extract that 16-bit length to avoid having to execute strlen().
8519     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8520     //  unsigned integers.  This is important to avoid integer overflow when
8521     //  we cast them to 'unsigned'.
8522     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8523     unsigned StrLen = (((unsigned) StrLenPtr[0])
8524                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8525     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8526     IdentifiersLoaded[ID] = &II;
8527     markIdentifierFromAST(*this,  II);
8528     if (DeserializationListener)
8529       DeserializationListener->IdentifierRead(ID + 1, &II);
8530   }
8531 
8532   return IdentifiersLoaded[ID];
8533 }
8534 
8535 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8536   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8537 }
8538 
8539 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8540   if (LocalID < NUM_PREDEF_IDENT_IDS)
8541     return LocalID;
8542 
8543   if (!M.ModuleOffsetMap.empty())
8544     ReadModuleOffsetMap(M);
8545 
8546   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8547     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8548   assert(I != M.IdentifierRemap.end()
8549          && "Invalid index into identifier index remap");
8550 
8551   return LocalID + I->second;
8552 }
8553 
8554 MacroInfo *ASTReader::getMacro(MacroID ID) {
8555   if (ID == 0)
8556     return nullptr;
8557 
8558   if (MacrosLoaded.empty()) {
8559     Error("no macro table in AST file");
8560     return nullptr;
8561   }
8562 
8563   ID -= NUM_PREDEF_MACRO_IDS;
8564   if (!MacrosLoaded[ID]) {
8565     GlobalMacroMapType::iterator I
8566       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8567     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8568     ModuleFile *M = I->second;
8569     unsigned Index = ID - M->BaseMacroID;
8570     MacrosLoaded[ID] =
8571         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8572 
8573     if (DeserializationListener)
8574       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8575                                          MacrosLoaded[ID]);
8576   }
8577 
8578   return MacrosLoaded[ID];
8579 }
8580 
8581 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8582   if (LocalID < NUM_PREDEF_MACRO_IDS)
8583     return LocalID;
8584 
8585   if (!M.ModuleOffsetMap.empty())
8586     ReadModuleOffsetMap(M);
8587 
8588   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8589     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8590   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8591 
8592   return LocalID + I->second;
8593 }
8594 
8595 serialization::SubmoduleID
8596 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8597   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8598     return LocalID;
8599 
8600   if (!M.ModuleOffsetMap.empty())
8601     ReadModuleOffsetMap(M);
8602 
8603   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8604     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8605   assert(I != M.SubmoduleRemap.end()
8606          && "Invalid index into submodule index remap");
8607 
8608   return LocalID + I->second;
8609 }
8610 
8611 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8612   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8613     assert(GlobalID == 0 && "Unhandled global submodule ID");
8614     return nullptr;
8615   }
8616 
8617   if (GlobalID > SubmodulesLoaded.size()) {
8618     Error("submodule ID out of range in AST file");
8619     return nullptr;
8620   }
8621 
8622   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8623 }
8624 
8625 Module *ASTReader::getModule(unsigned ID) {
8626   return getSubmodule(ID);
8627 }
8628 
8629 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8630   if (ID & 1) {
8631     // It's a module, look it up by submodule ID.
8632     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8633     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8634   } else {
8635     // It's a prefix (preamble, PCH, ...). Look it up by index.
8636     unsigned IndexFromEnd = ID >> 1;
8637     assert(IndexFromEnd && "got reference to unknown module file");
8638     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8639   }
8640 }
8641 
8642 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8643   if (!F)
8644     return 1;
8645 
8646   // For a file representing a module, use the submodule ID of the top-level
8647   // module as the file ID. For any other kind of file, the number of such
8648   // files loaded beforehand will be the same on reload.
8649   // FIXME: Is this true even if we have an explicit module file and a PCH?
8650   if (F->isModule())
8651     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8652 
8653   auto PCHModules = getModuleManager().pch_modules();
8654   auto I = llvm::find(PCHModules, F);
8655   assert(I != PCHModules.end() && "emitting reference to unknown file");
8656   return (I - PCHModules.end()) << 1;
8657 }
8658 
8659 llvm::Optional<ASTSourceDescriptor>
8660 ASTReader::getSourceDescriptor(unsigned ID) {
8661   if (Module *M = getSubmodule(ID))
8662     return ASTSourceDescriptor(*M);
8663 
8664   // If there is only a single PCH, return it instead.
8665   // Chained PCH are not supported.
8666   const auto &PCHChain = ModuleMgr.pch_modules();
8667   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8668     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8669     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8670     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8671     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8672                                MF.Signature);
8673   }
8674   return None;
8675 }
8676 
8677 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8678   auto I = DefinitionSource.find(FD);
8679   if (I == DefinitionSource.end())
8680     return EK_ReplyHazy;
8681   return I->second ? EK_Never : EK_Always;
8682 }
8683 
8684 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8685   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8686 }
8687 
8688 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8689   if (ID == 0)
8690     return Selector();
8691 
8692   if (ID > SelectorsLoaded.size()) {
8693     Error("selector ID out of range in AST file");
8694     return Selector();
8695   }
8696 
8697   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8698     // Load this selector from the selector table.
8699     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8700     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8701     ModuleFile &M = *I->second;
8702     ASTSelectorLookupTrait Trait(*this, M);
8703     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8704     SelectorsLoaded[ID - 1] =
8705       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8706     if (DeserializationListener)
8707       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8708   }
8709 
8710   return SelectorsLoaded[ID - 1];
8711 }
8712 
8713 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8714   return DecodeSelector(ID);
8715 }
8716 
8717 uint32_t ASTReader::GetNumExternalSelectors() {
8718   // ID 0 (the null selector) is considered an external selector.
8719   return getTotalNumSelectors() + 1;
8720 }
8721 
8722 serialization::SelectorID
8723 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8724   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8725     return LocalID;
8726 
8727   if (!M.ModuleOffsetMap.empty())
8728     ReadModuleOffsetMap(M);
8729 
8730   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8731     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8732   assert(I != M.SelectorRemap.end()
8733          && "Invalid index into selector index remap");
8734 
8735   return LocalID + I->second;
8736 }
8737 
8738 DeclarationNameLoc
8739 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8740   DeclarationNameLoc DNLoc;
8741   switch (Name.getNameKind()) {
8742   case DeclarationName::CXXConstructorName:
8743   case DeclarationName::CXXDestructorName:
8744   case DeclarationName::CXXConversionFunctionName:
8745     DNLoc.NamedType.TInfo = readTypeSourceInfo();
8746     break;
8747 
8748   case DeclarationName::CXXOperatorName:
8749     DNLoc.CXXOperatorName.BeginOpNameLoc
8750       = readSourceLocation().getRawEncoding();
8751     DNLoc.CXXOperatorName.EndOpNameLoc
8752       = readSourceLocation().getRawEncoding();
8753     break;
8754 
8755   case DeclarationName::CXXLiteralOperatorName:
8756     DNLoc.CXXLiteralOperatorName.OpNameLoc
8757       = readSourceLocation().getRawEncoding();
8758     break;
8759 
8760   case DeclarationName::Identifier:
8761   case DeclarationName::ObjCZeroArgSelector:
8762   case DeclarationName::ObjCOneArgSelector:
8763   case DeclarationName::ObjCMultiArgSelector:
8764   case DeclarationName::CXXUsingDirective:
8765   case DeclarationName::CXXDeductionGuideName:
8766     break;
8767   }
8768   return DNLoc;
8769 }
8770 
8771 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8772   DeclarationNameInfo NameInfo;
8773   NameInfo.setName(readDeclarationName());
8774   NameInfo.setLoc(readSourceLocation());
8775   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8776   return NameInfo;
8777 }
8778 
8779 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8780   Info.QualifierLoc = readNestedNameSpecifierLoc();
8781   unsigned NumTPLists = readInt();
8782   Info.NumTemplParamLists = NumTPLists;
8783   if (NumTPLists) {
8784     Info.TemplParamLists =
8785         new (getContext()) TemplateParameterList *[NumTPLists];
8786     for (unsigned i = 0; i != NumTPLists; ++i)
8787       Info.TemplParamLists[i] = readTemplateParameterList();
8788   }
8789 }
8790 
8791 TemplateParameterList *
8792 ASTRecordReader::readTemplateParameterList() {
8793   SourceLocation TemplateLoc = readSourceLocation();
8794   SourceLocation LAngleLoc = readSourceLocation();
8795   SourceLocation RAngleLoc = readSourceLocation();
8796 
8797   unsigned NumParams = readInt();
8798   SmallVector<NamedDecl *, 16> Params;
8799   Params.reserve(NumParams);
8800   while (NumParams--)
8801     Params.push_back(readDeclAs<NamedDecl>());
8802 
8803   bool HasRequiresClause = readBool();
8804   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8805 
8806   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8807       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8808   return TemplateParams;
8809 }
8810 
8811 void ASTRecordReader::readTemplateArgumentList(
8812                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8813                         bool Canonicalize) {
8814   unsigned NumTemplateArgs = readInt();
8815   TemplArgs.reserve(NumTemplateArgs);
8816   while (NumTemplateArgs--)
8817     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8818 }
8819 
8820 /// Read a UnresolvedSet structure.
8821 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8822   unsigned NumDecls = readInt();
8823   Set.reserve(getContext(), NumDecls);
8824   while (NumDecls--) {
8825     DeclID ID = readDeclID();
8826     AccessSpecifier AS = (AccessSpecifier) readInt();
8827     Set.addLazyDecl(getContext(), ID, AS);
8828   }
8829 }
8830 
8831 CXXBaseSpecifier
8832 ASTRecordReader::readCXXBaseSpecifier() {
8833   bool isVirtual = readBool();
8834   bool isBaseOfClass = readBool();
8835   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8836   bool inheritConstructors = readBool();
8837   TypeSourceInfo *TInfo = readTypeSourceInfo();
8838   SourceRange Range = readSourceRange();
8839   SourceLocation EllipsisLoc = readSourceLocation();
8840   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8841                           EllipsisLoc);
8842   Result.setInheritConstructors(inheritConstructors);
8843   return Result;
8844 }
8845 
8846 CXXCtorInitializer **
8847 ASTRecordReader::readCXXCtorInitializers() {
8848   ASTContext &Context = getContext();
8849   unsigned NumInitializers = readInt();
8850   assert(NumInitializers && "wrote ctor initializers but have no inits");
8851   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8852   for (unsigned i = 0; i != NumInitializers; ++i) {
8853     TypeSourceInfo *TInfo = nullptr;
8854     bool IsBaseVirtual = false;
8855     FieldDecl *Member = nullptr;
8856     IndirectFieldDecl *IndirectMember = nullptr;
8857 
8858     CtorInitializerType Type = (CtorInitializerType) readInt();
8859     switch (Type) {
8860     case CTOR_INITIALIZER_BASE:
8861       TInfo = readTypeSourceInfo();
8862       IsBaseVirtual = readBool();
8863       break;
8864 
8865     case CTOR_INITIALIZER_DELEGATING:
8866       TInfo = readTypeSourceInfo();
8867       break;
8868 
8869      case CTOR_INITIALIZER_MEMBER:
8870       Member = readDeclAs<FieldDecl>();
8871       break;
8872 
8873      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8874       IndirectMember = readDeclAs<IndirectFieldDecl>();
8875       break;
8876     }
8877 
8878     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8879     Expr *Init = readExpr();
8880     SourceLocation LParenLoc = readSourceLocation();
8881     SourceLocation RParenLoc = readSourceLocation();
8882 
8883     CXXCtorInitializer *BOMInit;
8884     if (Type == CTOR_INITIALIZER_BASE)
8885       BOMInit = new (Context)
8886           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8887                              RParenLoc, MemberOrEllipsisLoc);
8888     else if (Type == CTOR_INITIALIZER_DELEGATING)
8889       BOMInit = new (Context)
8890           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8891     else if (Member)
8892       BOMInit = new (Context)
8893           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8894                              Init, RParenLoc);
8895     else
8896       BOMInit = new (Context)
8897           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8898                              LParenLoc, Init, RParenLoc);
8899 
8900     if (/*IsWritten*/readBool()) {
8901       unsigned SourceOrder = readInt();
8902       BOMInit->setSourceOrder(SourceOrder);
8903     }
8904 
8905     CtorInitializers[i] = BOMInit;
8906   }
8907 
8908   return CtorInitializers;
8909 }
8910 
8911 NestedNameSpecifierLoc
8912 ASTRecordReader::readNestedNameSpecifierLoc() {
8913   ASTContext &Context = getContext();
8914   unsigned N = readInt();
8915   NestedNameSpecifierLocBuilder Builder;
8916   for (unsigned I = 0; I != N; ++I) {
8917     auto Kind = readNestedNameSpecifierKind();
8918     switch (Kind) {
8919     case NestedNameSpecifier::Identifier: {
8920       IdentifierInfo *II = readIdentifier();
8921       SourceRange Range = readSourceRange();
8922       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8923       break;
8924     }
8925 
8926     case NestedNameSpecifier::Namespace: {
8927       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8928       SourceRange Range = readSourceRange();
8929       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8930       break;
8931     }
8932 
8933     case NestedNameSpecifier::NamespaceAlias: {
8934       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8935       SourceRange Range = readSourceRange();
8936       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8937       break;
8938     }
8939 
8940     case NestedNameSpecifier::TypeSpec:
8941     case NestedNameSpecifier::TypeSpecWithTemplate: {
8942       bool Template = readBool();
8943       TypeSourceInfo *T = readTypeSourceInfo();
8944       if (!T)
8945         return NestedNameSpecifierLoc();
8946       SourceLocation ColonColonLoc = readSourceLocation();
8947 
8948       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8949       Builder.Extend(Context,
8950                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8951                      T->getTypeLoc(), ColonColonLoc);
8952       break;
8953     }
8954 
8955     case NestedNameSpecifier::Global: {
8956       SourceLocation ColonColonLoc = readSourceLocation();
8957       Builder.MakeGlobal(Context, ColonColonLoc);
8958       break;
8959     }
8960 
8961     case NestedNameSpecifier::Super: {
8962       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8963       SourceRange Range = readSourceRange();
8964       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8965       break;
8966     }
8967     }
8968   }
8969 
8970   return Builder.getWithLocInContext(Context);
8971 }
8972 
8973 SourceRange
8974 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8975                            unsigned &Idx) {
8976   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8977   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8978   return SourceRange(beg, end);
8979 }
8980 
8981 /// Read a floating-point value
8982 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8983   return llvm::APFloat(Sem, readAPInt());
8984 }
8985 
8986 // Read a string
8987 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8988   unsigned Len = Record[Idx++];
8989   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8990   Idx += Len;
8991   return Result;
8992 }
8993 
8994 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8995                                 unsigned &Idx) {
8996   std::string Filename = ReadString(Record, Idx);
8997   ResolveImportedPath(F, Filename);
8998   return Filename;
8999 }
9000 
9001 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9002                                 const RecordData &Record, unsigned &Idx) {
9003   std::string Filename = ReadString(Record, Idx);
9004   if (!BaseDirectory.empty())
9005     ResolveImportedPath(Filename, BaseDirectory);
9006   return Filename;
9007 }
9008 
9009 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9010                                          unsigned &Idx) {
9011   unsigned Major = Record[Idx++];
9012   unsigned Minor = Record[Idx++];
9013   unsigned Subminor = Record[Idx++];
9014   if (Minor == 0)
9015     return VersionTuple(Major);
9016   if (Subminor == 0)
9017     return VersionTuple(Major, Minor - 1);
9018   return VersionTuple(Major, Minor - 1, Subminor - 1);
9019 }
9020 
9021 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9022                                           const RecordData &Record,
9023                                           unsigned &Idx) {
9024   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9025   return CXXTemporary::Create(getContext(), Decl);
9026 }
9027 
9028 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9029   return Diag(CurrentImportLoc, DiagID);
9030 }
9031 
9032 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9033   return Diags.Report(Loc, DiagID);
9034 }
9035 
9036 /// Retrieve the identifier table associated with the
9037 /// preprocessor.
9038 IdentifierTable &ASTReader::getIdentifierTable() {
9039   return PP.getIdentifierTable();
9040 }
9041 
9042 /// Record that the given ID maps to the given switch-case
9043 /// statement.
9044 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9045   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9046          "Already have a SwitchCase with this ID");
9047   (*CurrSwitchCaseStmts)[ID] = SC;
9048 }
9049 
9050 /// Retrieve the switch-case statement with the given ID.
9051 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9052   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9053   return (*CurrSwitchCaseStmts)[ID];
9054 }
9055 
9056 void ASTReader::ClearSwitchCaseIDs() {
9057   CurrSwitchCaseStmts->clear();
9058 }
9059 
9060 void ASTReader::ReadComments() {
9061   ASTContext &Context = getContext();
9062   std::vector<RawComment *> Comments;
9063   for (SmallVectorImpl<std::pair<BitstreamCursor,
9064                                  serialization::ModuleFile *>>::iterator
9065        I = CommentsCursors.begin(),
9066        E = CommentsCursors.end();
9067        I != E; ++I) {
9068     Comments.clear();
9069     BitstreamCursor &Cursor = I->first;
9070     serialization::ModuleFile &F = *I->second;
9071     SavedStreamPosition SavedPosition(Cursor);
9072 
9073     RecordData Record;
9074     while (true) {
9075       Expected<llvm::BitstreamEntry> MaybeEntry =
9076           Cursor.advanceSkippingSubblocks(
9077               BitstreamCursor::AF_DontPopBlockAtEnd);
9078       if (!MaybeEntry) {
9079         Error(MaybeEntry.takeError());
9080         return;
9081       }
9082       llvm::BitstreamEntry Entry = MaybeEntry.get();
9083 
9084       switch (Entry.Kind) {
9085       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9086       case llvm::BitstreamEntry::Error:
9087         Error("malformed block record in AST file");
9088         return;
9089       case llvm::BitstreamEntry::EndBlock:
9090         goto NextCursor;
9091       case llvm::BitstreamEntry::Record:
9092         // The interesting case.
9093         break;
9094       }
9095 
9096       // Read a record.
9097       Record.clear();
9098       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9099       if (!MaybeComment) {
9100         Error(MaybeComment.takeError());
9101         return;
9102       }
9103       switch ((CommentRecordTypes)MaybeComment.get()) {
9104       case COMMENTS_RAW_COMMENT: {
9105         unsigned Idx = 0;
9106         SourceRange SR = ReadSourceRange(F, Record, Idx);
9107         RawComment::CommentKind Kind =
9108             (RawComment::CommentKind) Record[Idx++];
9109         bool IsTrailingComment = Record[Idx++];
9110         bool IsAlmostTrailingComment = Record[Idx++];
9111         Comments.push_back(new (Context) RawComment(
9112             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9113         break;
9114       }
9115       }
9116     }
9117   NextCursor:
9118     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9119         FileToOffsetToComment;
9120     for (RawComment *C : Comments) {
9121       SourceLocation CommentLoc = C->getBeginLoc();
9122       if (CommentLoc.isValid()) {
9123         std::pair<FileID, unsigned> Loc =
9124             SourceMgr.getDecomposedLoc(CommentLoc);
9125         if (Loc.first.isValid())
9126           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9127       }
9128     }
9129   }
9130 }
9131 
9132 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9133                                 bool IncludeSystem, bool Complain,
9134                     llvm::function_ref<void(const serialization::InputFile &IF,
9135                                             bool isSystem)> Visitor) {
9136   unsigned NumUserInputs = MF.NumUserInputFiles;
9137   unsigned NumInputs = MF.InputFilesLoaded.size();
9138   assert(NumUserInputs <= NumInputs);
9139   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9140   for (unsigned I = 0; I < N; ++I) {
9141     bool IsSystem = I >= NumUserInputs;
9142     InputFile IF = getInputFile(MF, I+1, Complain);
9143     Visitor(IF, IsSystem);
9144   }
9145 }
9146 
9147 void ASTReader::visitTopLevelModuleMaps(
9148     serialization::ModuleFile &MF,
9149     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9150   unsigned NumInputs = MF.InputFilesLoaded.size();
9151   for (unsigned I = 0; I < NumInputs; ++I) {
9152     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9153     if (IFI.TopLevelModuleMap)
9154       // FIXME: This unnecessarily re-reads the InputFileInfo.
9155       if (auto FE = getInputFile(MF, I + 1).getFile())
9156         Visitor(FE);
9157   }
9158 }
9159 
9160 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9161   // If we know the owning module, use it.
9162   if (Module *M = D->getImportedOwningModule())
9163     return M->getFullModuleName();
9164 
9165   // Otherwise, use the name of the top-level module the decl is within.
9166   if (ModuleFile *M = getOwningModuleFile(D))
9167     return M->ModuleName;
9168 
9169   // Not from a module.
9170   return {};
9171 }
9172 
9173 void ASTReader::finishPendingActions() {
9174   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9175          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9176          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9177          !PendingUpdateRecords.empty()) {
9178     // If any identifiers with corresponding top-level declarations have
9179     // been loaded, load those declarations now.
9180     using TopLevelDeclsMap =
9181         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9182     TopLevelDeclsMap TopLevelDecls;
9183 
9184     while (!PendingIdentifierInfos.empty()) {
9185       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9186       SmallVector<uint32_t, 4> DeclIDs =
9187           std::move(PendingIdentifierInfos.back().second);
9188       PendingIdentifierInfos.pop_back();
9189 
9190       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9191     }
9192 
9193     // Load each function type that we deferred loading because it was a
9194     // deduced type that might refer to a local type declared within itself.
9195     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9196       auto *FD = PendingFunctionTypes[I].first;
9197       FD->setType(GetType(PendingFunctionTypes[I].second));
9198 
9199       // If we gave a function a deduced return type, remember that we need to
9200       // propagate that along the redeclaration chain.
9201       auto *DT = FD->getReturnType()->getContainedDeducedType();
9202       if (DT && DT->isDeduced())
9203         PendingDeducedTypeUpdates.insert(
9204             {FD->getCanonicalDecl(), FD->getReturnType()});
9205     }
9206     PendingFunctionTypes.clear();
9207 
9208     // For each decl chain that we wanted to complete while deserializing, mark
9209     // it as "still needs to be completed".
9210     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9211       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9212     }
9213     PendingIncompleteDeclChains.clear();
9214 
9215     // Load pending declaration chains.
9216     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9217       loadPendingDeclChain(PendingDeclChains[I].first,
9218                            PendingDeclChains[I].second);
9219     PendingDeclChains.clear();
9220 
9221     // Make the most recent of the top-level declarations visible.
9222     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9223            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9224       IdentifierInfo *II = TLD->first;
9225       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9226         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9227       }
9228     }
9229 
9230     // Load any pending macro definitions.
9231     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9232       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9233       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9234       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9235       // Initialize the macro history from chained-PCHs ahead of module imports.
9236       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9237            ++IDIdx) {
9238         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9239         if (!Info.M->isModule())
9240           resolvePendingMacro(II, Info);
9241       }
9242       // Handle module imports.
9243       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9244            ++IDIdx) {
9245         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9246         if (Info.M->isModule())
9247           resolvePendingMacro(II, Info);
9248       }
9249     }
9250     PendingMacroIDs.clear();
9251 
9252     // Wire up the DeclContexts for Decls that we delayed setting until
9253     // recursive loading is completed.
9254     while (!PendingDeclContextInfos.empty()) {
9255       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9256       PendingDeclContextInfos.pop_front();
9257       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9258       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9259       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9260     }
9261 
9262     // Perform any pending declaration updates.
9263     while (!PendingUpdateRecords.empty()) {
9264       auto Update = PendingUpdateRecords.pop_back_val();
9265       ReadingKindTracker ReadingKind(Read_Decl, *this);
9266       loadDeclUpdateRecords(Update);
9267     }
9268   }
9269 
9270   // At this point, all update records for loaded decls are in place, so any
9271   // fake class definitions should have become real.
9272   assert(PendingFakeDefinitionData.empty() &&
9273          "faked up a class definition but never saw the real one");
9274 
9275   // If we deserialized any C++ or Objective-C class definitions, any
9276   // Objective-C protocol definitions, or any redeclarable templates, make sure
9277   // that all redeclarations point to the definitions. Note that this can only
9278   // happen now, after the redeclaration chains have been fully wired.
9279   for (Decl *D : PendingDefinitions) {
9280     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9281       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9282         // Make sure that the TagType points at the definition.
9283         const_cast<TagType*>(TagT)->decl = TD;
9284       }
9285 
9286       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9287         for (auto *R = getMostRecentExistingDecl(RD); R;
9288              R = R->getPreviousDecl()) {
9289           assert((R == D) ==
9290                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9291                  "declaration thinks it's the definition but it isn't");
9292           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9293         }
9294       }
9295 
9296       continue;
9297     }
9298 
9299     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9300       // Make sure that the ObjCInterfaceType points at the definition.
9301       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9302         ->Decl = ID;
9303 
9304       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9305         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9306 
9307       continue;
9308     }
9309 
9310     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9311       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9312         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9313 
9314       continue;
9315     }
9316 
9317     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9318     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9319       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9320   }
9321   PendingDefinitions.clear();
9322 
9323   // Load the bodies of any functions or methods we've encountered. We do
9324   // this now (delayed) so that we can be sure that the declaration chains
9325   // have been fully wired up (hasBody relies on this).
9326   // FIXME: We shouldn't require complete redeclaration chains here.
9327   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9328                                PBEnd = PendingBodies.end();
9329        PB != PBEnd; ++PB) {
9330     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9331       // For a function defined inline within a class template, force the
9332       // canonical definition to be the one inside the canonical definition of
9333       // the template. This ensures that we instantiate from a correct view
9334       // of the template.
9335       //
9336       // Sadly we can't do this more generally: we can't be sure that all
9337       // copies of an arbitrary class definition will have the same members
9338       // defined (eg, some member functions may not be instantiated, and some
9339       // special members may or may not have been implicitly defined).
9340       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9341         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9342           continue;
9343 
9344       // FIXME: Check for =delete/=default?
9345       // FIXME: Complain about ODR violations here?
9346       const FunctionDecl *Defn = nullptr;
9347       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9348         FD->setLazyBody(PB->second);
9349       } else {
9350         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9351         mergeDefinitionVisibility(NonConstDefn, FD);
9352 
9353         if (!FD->isLateTemplateParsed() &&
9354             !NonConstDefn->isLateTemplateParsed() &&
9355             FD->getODRHash() != NonConstDefn->getODRHash()) {
9356           if (!isa<CXXMethodDecl>(FD)) {
9357             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9358           } else if (FD->getLexicalParent()->isFileContext() &&
9359                      NonConstDefn->getLexicalParent()->isFileContext()) {
9360             // Only diagnose out-of-line method definitions.  If they are
9361             // in class definitions, then an error will be generated when
9362             // processing the class bodies.
9363             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9364           }
9365         }
9366       }
9367       continue;
9368     }
9369 
9370     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9371     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9372       MD->setLazyBody(PB->second);
9373   }
9374   PendingBodies.clear();
9375 
9376   // Do some cleanup.
9377   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9378     getContext().deduplicateMergedDefinitonsFor(ND);
9379   PendingMergedDefinitionsToDeduplicate.clear();
9380 }
9381 
9382 void ASTReader::diagnoseOdrViolations() {
9383   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9384       PendingFunctionOdrMergeFailures.empty() &&
9385       PendingEnumOdrMergeFailures.empty())
9386     return;
9387 
9388   // Trigger the import of the full definition of each class that had any
9389   // odr-merging problems, so we can produce better diagnostics for them.
9390   // These updates may in turn find and diagnose some ODR failures, so take
9391   // ownership of the set first.
9392   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9393   PendingOdrMergeFailures.clear();
9394   for (auto &Merge : OdrMergeFailures) {
9395     Merge.first->buildLookup();
9396     Merge.first->decls_begin();
9397     Merge.first->bases_begin();
9398     Merge.first->vbases_begin();
9399     for (auto &RecordPair : Merge.second) {
9400       auto *RD = RecordPair.first;
9401       RD->decls_begin();
9402       RD->bases_begin();
9403       RD->vbases_begin();
9404     }
9405   }
9406 
9407   // Trigger the import of functions.
9408   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9409   PendingFunctionOdrMergeFailures.clear();
9410   for (auto &Merge : FunctionOdrMergeFailures) {
9411     Merge.first->buildLookup();
9412     Merge.first->decls_begin();
9413     Merge.first->getBody();
9414     for (auto &FD : Merge.second) {
9415       FD->buildLookup();
9416       FD->decls_begin();
9417       FD->getBody();
9418     }
9419   }
9420 
9421   // Trigger the import of enums.
9422   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9423   PendingEnumOdrMergeFailures.clear();
9424   for (auto &Merge : EnumOdrMergeFailures) {
9425     Merge.first->decls_begin();
9426     for (auto &Enum : Merge.second) {
9427       Enum->decls_begin();
9428     }
9429   }
9430 
9431   // For each declaration from a merged context, check that the canonical
9432   // definition of that context also contains a declaration of the same
9433   // entity.
9434   //
9435   // Caution: this loop does things that might invalidate iterators into
9436   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9437   while (!PendingOdrMergeChecks.empty()) {
9438     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9439 
9440     // FIXME: Skip over implicit declarations for now. This matters for things
9441     // like implicitly-declared special member functions. This isn't entirely
9442     // correct; we can end up with multiple unmerged declarations of the same
9443     // implicit entity.
9444     if (D->isImplicit())
9445       continue;
9446 
9447     DeclContext *CanonDef = D->getDeclContext();
9448 
9449     bool Found = false;
9450     const Decl *DCanon = D->getCanonicalDecl();
9451 
9452     for (auto RI : D->redecls()) {
9453       if (RI->getLexicalDeclContext() == CanonDef) {
9454         Found = true;
9455         break;
9456       }
9457     }
9458     if (Found)
9459       continue;
9460 
9461     // Quick check failed, time to do the slow thing. Note, we can't just
9462     // look up the name of D in CanonDef here, because the member that is
9463     // in CanonDef might not be found by name lookup (it might have been
9464     // replaced by a more recent declaration in the lookup table), and we
9465     // can't necessarily find it in the redeclaration chain because it might
9466     // be merely mergeable, not redeclarable.
9467     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9468     for (auto *CanonMember : CanonDef->decls()) {
9469       if (CanonMember->getCanonicalDecl() == DCanon) {
9470         // This can happen if the declaration is merely mergeable and not
9471         // actually redeclarable (we looked for redeclarations earlier).
9472         //
9473         // FIXME: We should be able to detect this more efficiently, without
9474         // pulling in all of the members of CanonDef.
9475         Found = true;
9476         break;
9477       }
9478       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9479         if (ND->getDeclName() == D->getDeclName())
9480           Candidates.push_back(ND);
9481     }
9482 
9483     if (!Found) {
9484       // The AST doesn't like TagDecls becoming invalid after they've been
9485       // completed. We only really need to mark FieldDecls as invalid here.
9486       if (!isa<TagDecl>(D))
9487         D->setInvalidDecl();
9488 
9489       // Ensure we don't accidentally recursively enter deserialization while
9490       // we're producing our diagnostic.
9491       Deserializing RecursionGuard(this);
9492 
9493       std::string CanonDefModule =
9494           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9495       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9496         << D << getOwningModuleNameForDiagnostic(D)
9497         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9498 
9499       if (Candidates.empty())
9500         Diag(cast<Decl>(CanonDef)->getLocation(),
9501              diag::note_module_odr_violation_no_possible_decls) << D;
9502       else {
9503         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9504           Diag(Candidates[I]->getLocation(),
9505                diag::note_module_odr_violation_possible_decl)
9506             << Candidates[I];
9507       }
9508 
9509       DiagnosedOdrMergeFailures.insert(CanonDef);
9510     }
9511   }
9512 
9513   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9514       EnumOdrMergeFailures.empty())
9515     return;
9516 
9517   // Ensure we don't accidentally recursively enter deserialization while
9518   // we're producing our diagnostics.
9519   Deserializing RecursionGuard(this);
9520 
9521   // Common code for hashing helpers.
9522   ODRHash Hash;
9523   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9524     Hash.clear();
9525     Hash.AddQualType(Ty);
9526     return Hash.CalculateHash();
9527   };
9528 
9529   auto ComputeODRHash = [&Hash](const Stmt *S) {
9530     assert(S);
9531     Hash.clear();
9532     Hash.AddStmt(S);
9533     return Hash.CalculateHash();
9534   };
9535 
9536   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9537     assert(D);
9538     Hash.clear();
9539     Hash.AddSubDecl(D);
9540     return Hash.CalculateHash();
9541   };
9542 
9543   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9544     Hash.clear();
9545     Hash.AddTemplateArgument(TA);
9546     return Hash.CalculateHash();
9547   };
9548 
9549   auto ComputeTemplateParameterListODRHash =
9550       [&Hash](const TemplateParameterList *TPL) {
9551         assert(TPL);
9552         Hash.clear();
9553         Hash.AddTemplateParameterList(TPL);
9554         return Hash.CalculateHash();
9555       };
9556 
9557   // Used with err_module_odr_violation_mismatch_decl and
9558   // note_module_odr_violation_mismatch_decl
9559   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9560   enum ODRMismatchDecl {
9561     EndOfClass,
9562     PublicSpecifer,
9563     PrivateSpecifer,
9564     ProtectedSpecifer,
9565     StaticAssert,
9566     Field,
9567     CXXMethod,
9568     TypeAlias,
9569     TypeDef,
9570     Var,
9571     Friend,
9572     FunctionTemplate,
9573     Other
9574   };
9575 
9576   // Used with err_module_odr_violation_mismatch_decl_diff and
9577   // note_module_odr_violation_mismatch_decl_diff
9578   enum ODRMismatchDeclDifference {
9579     StaticAssertCondition,
9580     StaticAssertMessage,
9581     StaticAssertOnlyMessage,
9582     FieldName,
9583     FieldTypeName,
9584     FieldSingleBitField,
9585     FieldDifferentWidthBitField,
9586     FieldSingleMutable,
9587     FieldSingleInitializer,
9588     FieldDifferentInitializers,
9589     MethodName,
9590     MethodDeleted,
9591     MethodDefaulted,
9592     MethodVirtual,
9593     MethodStatic,
9594     MethodVolatile,
9595     MethodConst,
9596     MethodInline,
9597     MethodNumberParameters,
9598     MethodParameterType,
9599     MethodParameterName,
9600     MethodParameterSingleDefaultArgument,
9601     MethodParameterDifferentDefaultArgument,
9602     MethodNoTemplateArguments,
9603     MethodDifferentNumberTemplateArguments,
9604     MethodDifferentTemplateArgument,
9605     MethodSingleBody,
9606     MethodDifferentBody,
9607     TypedefName,
9608     TypedefType,
9609     VarName,
9610     VarType,
9611     VarSingleInitializer,
9612     VarDifferentInitializer,
9613     VarConstexpr,
9614     FriendTypeFunction,
9615     FriendType,
9616     FriendFunction,
9617     FunctionTemplateDifferentNumberParameters,
9618     FunctionTemplateParameterDifferentKind,
9619     FunctionTemplateParameterName,
9620     FunctionTemplateParameterSingleDefaultArgument,
9621     FunctionTemplateParameterDifferentDefaultArgument,
9622     FunctionTemplateParameterDifferentType,
9623     FunctionTemplatePackParameter,
9624   };
9625 
9626   // These lambdas have the common portions of the ODR diagnostics.  This
9627   // has the same return as Diag(), so addition parameters can be passed
9628   // in with operator<<
9629   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9630                                  SourceLocation Loc, SourceRange Range,
9631                                  ODRMismatchDeclDifference DiffType) {
9632     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9633            << FirstRecord << FirstModule.empty() << FirstModule << Range
9634            << DiffType;
9635   };
9636   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9637                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9638     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9639            << SecondModule << Range << DiffType;
9640   };
9641 
9642   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9643                        &ComputeQualTypeODRHash, &ComputeODRHash](
9644                           NamedDecl *FirstRecord, StringRef FirstModule,
9645                           StringRef SecondModule, FieldDecl *FirstField,
9646                           FieldDecl *SecondField) {
9647     IdentifierInfo *FirstII = FirstField->getIdentifier();
9648     IdentifierInfo *SecondII = SecondField->getIdentifier();
9649     if (FirstII->getName() != SecondII->getName()) {
9650       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9651                        FirstField->getSourceRange(), FieldName)
9652           << FirstII;
9653       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9654                       SecondField->getSourceRange(), FieldName)
9655           << SecondII;
9656 
9657       return true;
9658     }
9659 
9660     assert(getContext().hasSameType(FirstField->getType(),
9661                                     SecondField->getType()));
9662 
9663     QualType FirstType = FirstField->getType();
9664     QualType SecondType = SecondField->getType();
9665     if (ComputeQualTypeODRHash(FirstType) !=
9666         ComputeQualTypeODRHash(SecondType)) {
9667       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9668                        FirstField->getSourceRange(), FieldTypeName)
9669           << FirstII << FirstType;
9670       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9671                       SecondField->getSourceRange(), FieldTypeName)
9672           << SecondII << SecondType;
9673 
9674       return true;
9675     }
9676 
9677     const bool IsFirstBitField = FirstField->isBitField();
9678     const bool IsSecondBitField = SecondField->isBitField();
9679     if (IsFirstBitField != IsSecondBitField) {
9680       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9681                        FirstField->getSourceRange(), FieldSingleBitField)
9682           << FirstII << IsFirstBitField;
9683       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9684                       SecondField->getSourceRange(), FieldSingleBitField)
9685           << SecondII << IsSecondBitField;
9686       return true;
9687     }
9688 
9689     if (IsFirstBitField && IsSecondBitField) {
9690       unsigned FirstBitWidthHash =
9691           ComputeODRHash(FirstField->getBitWidth());
9692       unsigned SecondBitWidthHash =
9693           ComputeODRHash(SecondField->getBitWidth());
9694       if (FirstBitWidthHash != SecondBitWidthHash) {
9695         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9696                          FirstField->getSourceRange(),
9697                          FieldDifferentWidthBitField)
9698             << FirstII << FirstField->getBitWidth()->getSourceRange();
9699         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9700                         SecondField->getSourceRange(),
9701                         FieldDifferentWidthBitField)
9702             << SecondII << SecondField->getBitWidth()->getSourceRange();
9703         return true;
9704       }
9705     }
9706 
9707     if (!PP.getLangOpts().CPlusPlus)
9708       return false;
9709 
9710     const bool IsFirstMutable = FirstField->isMutable();
9711     const bool IsSecondMutable = SecondField->isMutable();
9712     if (IsFirstMutable != IsSecondMutable) {
9713       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9714                        FirstField->getSourceRange(), FieldSingleMutable)
9715           << FirstII << IsFirstMutable;
9716       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9717                       SecondField->getSourceRange(), FieldSingleMutable)
9718           << SecondII << IsSecondMutable;
9719       return true;
9720     }
9721 
9722     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9723     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9724     if ((!FirstInitializer && SecondInitializer) ||
9725         (FirstInitializer && !SecondInitializer)) {
9726       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9727                        FirstField->getSourceRange(), FieldSingleInitializer)
9728           << FirstII << (FirstInitializer != nullptr);
9729       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9730                       SecondField->getSourceRange(), FieldSingleInitializer)
9731           << SecondII << (SecondInitializer != nullptr);
9732       return true;
9733     }
9734 
9735     if (FirstInitializer && SecondInitializer) {
9736       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9737       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9738       if (FirstInitHash != SecondInitHash) {
9739         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9740                          FirstField->getSourceRange(),
9741                          FieldDifferentInitializers)
9742             << FirstII << FirstInitializer->getSourceRange();
9743         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9744                         SecondField->getSourceRange(),
9745                         FieldDifferentInitializers)
9746             << SecondII << SecondInitializer->getSourceRange();
9747         return true;
9748       }
9749     }
9750 
9751     return false;
9752   };
9753 
9754   auto ODRDiagTypeDefOrAlias =
9755       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9756           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9757           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9758           bool IsTypeAlias) {
9759         auto FirstName = FirstTD->getDeclName();
9760         auto SecondName = SecondTD->getDeclName();
9761         if (FirstName != SecondName) {
9762           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9763                            FirstTD->getSourceRange(), TypedefName)
9764               << IsTypeAlias << FirstName;
9765           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9766                           SecondTD->getSourceRange(), TypedefName)
9767               << IsTypeAlias << SecondName;
9768           return true;
9769         }
9770 
9771         QualType FirstType = FirstTD->getUnderlyingType();
9772         QualType SecondType = SecondTD->getUnderlyingType();
9773         if (ComputeQualTypeODRHash(FirstType) !=
9774             ComputeQualTypeODRHash(SecondType)) {
9775           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9776                            FirstTD->getSourceRange(), TypedefType)
9777               << IsTypeAlias << FirstName << FirstType;
9778           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9779                           SecondTD->getSourceRange(), TypedefType)
9780               << IsTypeAlias << SecondName << SecondType;
9781           return true;
9782         }
9783 
9784         return false;
9785   };
9786 
9787   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9788                      &ComputeQualTypeODRHash, &ComputeODRHash,
9789                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9790                            StringRef SecondModule, VarDecl *FirstVD,
9791                            VarDecl *SecondVD) {
9792     auto FirstName = FirstVD->getDeclName();
9793     auto SecondName = SecondVD->getDeclName();
9794     if (FirstName != SecondName) {
9795       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9796                        FirstVD->getSourceRange(), VarName)
9797           << FirstName;
9798       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9799                       SecondVD->getSourceRange(), VarName)
9800           << SecondName;
9801       return true;
9802     }
9803 
9804     QualType FirstType = FirstVD->getType();
9805     QualType SecondType = SecondVD->getType();
9806     if (ComputeQualTypeODRHash(FirstType) !=
9807         ComputeQualTypeODRHash(SecondType)) {
9808       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9809                        FirstVD->getSourceRange(), VarType)
9810           << FirstName << FirstType;
9811       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9812                       SecondVD->getSourceRange(), VarType)
9813           << SecondName << SecondType;
9814       return true;
9815     }
9816 
9817     if (!PP.getLangOpts().CPlusPlus)
9818       return false;
9819 
9820     const Expr *FirstInit = FirstVD->getInit();
9821     const Expr *SecondInit = SecondVD->getInit();
9822     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9823       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9824                        FirstVD->getSourceRange(), VarSingleInitializer)
9825           << FirstName << (FirstInit == nullptr)
9826           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9827       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9828                       SecondVD->getSourceRange(), VarSingleInitializer)
9829           << SecondName << (SecondInit == nullptr)
9830           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9831       return true;
9832     }
9833 
9834     if (FirstInit && SecondInit &&
9835         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9836       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9837                        FirstVD->getSourceRange(), VarDifferentInitializer)
9838           << FirstName << FirstInit->getSourceRange();
9839       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9840                       SecondVD->getSourceRange(), VarDifferentInitializer)
9841           << SecondName << SecondInit->getSourceRange();
9842       return true;
9843     }
9844 
9845     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9846     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9847     if (FirstIsConstexpr != SecondIsConstexpr) {
9848       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9849                        FirstVD->getSourceRange(), VarConstexpr)
9850           << FirstName << FirstIsConstexpr;
9851       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9852                       SecondVD->getSourceRange(), VarConstexpr)
9853           << SecondName << SecondIsConstexpr;
9854       return true;
9855     }
9856     return false;
9857   };
9858 
9859   auto DifferenceSelector = [](Decl *D) {
9860     assert(D && "valid Decl required");
9861     switch (D->getKind()) {
9862     default:
9863       return Other;
9864     case Decl::AccessSpec:
9865       switch (D->getAccess()) {
9866       case AS_public:
9867         return PublicSpecifer;
9868       case AS_private:
9869         return PrivateSpecifer;
9870       case AS_protected:
9871         return ProtectedSpecifer;
9872       case AS_none:
9873         break;
9874       }
9875       llvm_unreachable("Invalid access specifier");
9876     case Decl::StaticAssert:
9877       return StaticAssert;
9878     case Decl::Field:
9879       return Field;
9880     case Decl::CXXMethod:
9881     case Decl::CXXConstructor:
9882     case Decl::CXXDestructor:
9883       return CXXMethod;
9884     case Decl::TypeAlias:
9885       return TypeAlias;
9886     case Decl::Typedef:
9887       return TypeDef;
9888     case Decl::Var:
9889       return Var;
9890     case Decl::Friend:
9891       return Friend;
9892     case Decl::FunctionTemplate:
9893       return FunctionTemplate;
9894     }
9895   };
9896 
9897   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9898   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9899                                                  RecordDecl *Record,
9900                                                  const DeclContext *DC) {
9901     for (auto *D : Record->decls()) {
9902       if (!ODRHash::isDeclToBeProcessed(D, DC))
9903         continue;
9904       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9905     }
9906   };
9907 
9908   struct DiffResult {
9909     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9910     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9911   };
9912 
9913   // If there is a diagnoseable difference, FirstDiffType and
9914   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9915   // filled in if not EndOfClass.
9916   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9917                                              DeclHashes &SecondHashes) {
9918     DiffResult DR;
9919     auto FirstIt = FirstHashes.begin();
9920     auto SecondIt = SecondHashes.begin();
9921     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9922       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9923           FirstIt->second == SecondIt->second) {
9924         ++FirstIt;
9925         ++SecondIt;
9926         continue;
9927       }
9928 
9929       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9930       DR.SecondDecl =
9931           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9932 
9933       DR.FirstDiffType =
9934           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9935       DR.SecondDiffType =
9936           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9937       return DR;
9938     }
9939     return DR;
9940   };
9941 
9942   // Use this to diagnose that an unexpected Decl was encountered
9943   // or no difference was detected. This causes a generic error
9944   // message to be emitted.
9945   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9946                                       StringRef FirstModule,
9947                                       NamedDecl *SecondRecord,
9948                                       StringRef SecondModule) {
9949     Diag(FirstRecord->getLocation(),
9950          diag::err_module_odr_violation_different_definitions)
9951         << FirstRecord << FirstModule.empty() << FirstModule;
9952 
9953     if (DR.FirstDecl) {
9954       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9955           << FirstRecord << DR.FirstDecl->getSourceRange();
9956     }
9957 
9958     Diag(SecondRecord->getLocation(),
9959          diag::note_module_odr_violation_different_definitions)
9960         << SecondModule;
9961 
9962     if (DR.SecondDecl) {
9963       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9964           << DR.SecondDecl->getSourceRange();
9965     }
9966   };
9967 
9968   auto DiagnoseODRMismatch =
9969       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9970              NamedDecl *SecondRecord, StringRef SecondModule) {
9971         SourceLocation FirstLoc;
9972         SourceRange FirstRange;
9973         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9974         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9975           FirstLoc = FirstTag->getBraceRange().getEnd();
9976         } else {
9977           FirstLoc = DR.FirstDecl->getLocation();
9978           FirstRange = DR.FirstDecl->getSourceRange();
9979         }
9980         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9981             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9982             << DR.FirstDiffType;
9983 
9984         SourceLocation SecondLoc;
9985         SourceRange SecondRange;
9986         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9987         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9988           SecondLoc = SecondTag->getBraceRange().getEnd();
9989         } else {
9990           SecondLoc = DR.SecondDecl->getLocation();
9991           SecondRange = DR.SecondDecl->getSourceRange();
9992         }
9993         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9994             << SecondModule << SecondRange << DR.SecondDiffType;
9995       };
9996 
9997   // Issue any pending ODR-failure diagnostics.
9998   for (auto &Merge : OdrMergeFailures) {
9999     // If we've already pointed out a specific problem with this class, don't
10000     // bother issuing a general "something's different" diagnostic.
10001     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10002       continue;
10003 
10004     bool Diagnosed = false;
10005     CXXRecordDecl *FirstRecord = Merge.first;
10006     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10007     for (auto &RecordPair : Merge.second) {
10008       CXXRecordDecl *SecondRecord = RecordPair.first;
10009       // Multiple different declarations got merged together; tell the user
10010       // where they came from.
10011       if (FirstRecord == SecondRecord)
10012         continue;
10013 
10014       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10015 
10016       auto *FirstDD = FirstRecord->DefinitionData;
10017       auto *SecondDD = RecordPair.second;
10018 
10019       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10020 
10021       // Diagnostics from DefinitionData are emitted here.
10022       if (FirstDD != SecondDD) {
10023         enum ODRDefinitionDataDifference {
10024           NumBases,
10025           NumVBases,
10026           BaseType,
10027           BaseVirtual,
10028           BaseAccess,
10029         };
10030         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10031                                  this](SourceLocation Loc, SourceRange Range,
10032                                        ODRDefinitionDataDifference DiffType) {
10033           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10034                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10035                  << DiffType;
10036         };
10037         auto ODRDiagBaseNote = [&SecondModule,
10038                                 this](SourceLocation Loc, SourceRange Range,
10039                                       ODRDefinitionDataDifference DiffType) {
10040           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10041                  << SecondModule << Range << DiffType;
10042         };
10043 
10044         unsigned FirstNumBases = FirstDD->NumBases;
10045         unsigned FirstNumVBases = FirstDD->NumVBases;
10046         unsigned SecondNumBases = SecondDD->NumBases;
10047         unsigned SecondNumVBases = SecondDD->NumVBases;
10048 
10049         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10050           unsigned NumBases = DD->NumBases;
10051           if (NumBases == 0) return SourceRange();
10052           auto bases = DD->bases();
10053           return SourceRange(bases[0].getBeginLoc(),
10054                              bases[NumBases - 1].getEndLoc());
10055         };
10056 
10057         if (FirstNumBases != SecondNumBases) {
10058           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10059                            NumBases)
10060               << FirstNumBases;
10061           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10062                           NumBases)
10063               << SecondNumBases;
10064           Diagnosed = true;
10065           break;
10066         }
10067 
10068         if (FirstNumVBases != SecondNumVBases) {
10069           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10070                            NumVBases)
10071               << FirstNumVBases;
10072           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10073                           NumVBases)
10074               << SecondNumVBases;
10075           Diagnosed = true;
10076           break;
10077         }
10078 
10079         auto FirstBases = FirstDD->bases();
10080         auto SecondBases = SecondDD->bases();
10081         unsigned i = 0;
10082         for (i = 0; i < FirstNumBases; ++i) {
10083           auto FirstBase = FirstBases[i];
10084           auto SecondBase = SecondBases[i];
10085           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10086               ComputeQualTypeODRHash(SecondBase.getType())) {
10087             ODRDiagBaseError(FirstRecord->getLocation(),
10088                              FirstBase.getSourceRange(), BaseType)
10089                 << (i + 1) << FirstBase.getType();
10090             ODRDiagBaseNote(SecondRecord->getLocation(),
10091                             SecondBase.getSourceRange(), BaseType)
10092                 << (i + 1) << SecondBase.getType();
10093             break;
10094           }
10095 
10096           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10097             ODRDiagBaseError(FirstRecord->getLocation(),
10098                              FirstBase.getSourceRange(), BaseVirtual)
10099                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10100             ODRDiagBaseNote(SecondRecord->getLocation(),
10101                             SecondBase.getSourceRange(), BaseVirtual)
10102                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10103             break;
10104           }
10105 
10106           if (FirstBase.getAccessSpecifierAsWritten() !=
10107               SecondBase.getAccessSpecifierAsWritten()) {
10108             ODRDiagBaseError(FirstRecord->getLocation(),
10109                              FirstBase.getSourceRange(), BaseAccess)
10110                 << (i + 1) << FirstBase.getType()
10111                 << (int)FirstBase.getAccessSpecifierAsWritten();
10112             ODRDiagBaseNote(SecondRecord->getLocation(),
10113                             SecondBase.getSourceRange(), BaseAccess)
10114                 << (i + 1) << SecondBase.getType()
10115                 << (int)SecondBase.getAccessSpecifierAsWritten();
10116             break;
10117           }
10118         }
10119 
10120         if (i != FirstNumBases) {
10121           Diagnosed = true;
10122           break;
10123         }
10124       }
10125 
10126       const ClassTemplateDecl *FirstTemplate =
10127           FirstRecord->getDescribedClassTemplate();
10128       const ClassTemplateDecl *SecondTemplate =
10129           SecondRecord->getDescribedClassTemplate();
10130 
10131       assert(!FirstTemplate == !SecondTemplate &&
10132              "Both pointers should be null or non-null");
10133 
10134       enum ODRTemplateDifference {
10135         ParamEmptyName,
10136         ParamName,
10137         ParamSingleDefaultArgument,
10138         ParamDifferentDefaultArgument,
10139       };
10140 
10141       if (FirstTemplate && SecondTemplate) {
10142         DeclHashes FirstTemplateHashes;
10143         DeclHashes SecondTemplateHashes;
10144 
10145         auto PopulateTemplateParameterHashs =
10146             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10147                                      const ClassTemplateDecl *TD) {
10148               for (auto *D : TD->getTemplateParameters()->asArray()) {
10149                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10150               }
10151             };
10152 
10153         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10154         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10155 
10156         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10157                "Number of template parameters should be equal.");
10158 
10159         auto FirstIt = FirstTemplateHashes.begin();
10160         auto FirstEnd = FirstTemplateHashes.end();
10161         auto SecondIt = SecondTemplateHashes.begin();
10162         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10163           if (FirstIt->second == SecondIt->second)
10164             continue;
10165 
10166           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10167                                           SourceLocation Loc, SourceRange Range,
10168                                           ODRTemplateDifference DiffType) {
10169             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10170                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10171                    << DiffType;
10172           };
10173           auto ODRDiagTemplateNote = [&SecondModule, this](
10174                                          SourceLocation Loc, SourceRange Range,
10175                                          ODRTemplateDifference DiffType) {
10176             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10177                    << SecondModule << Range << DiffType;
10178           };
10179 
10180           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10181           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10182 
10183           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10184                  "Parameter Decl's should be the same kind.");
10185 
10186           DeclarationName FirstName = FirstDecl->getDeclName();
10187           DeclarationName SecondName = SecondDecl->getDeclName();
10188 
10189           if (FirstName != SecondName) {
10190             const bool FirstNameEmpty =
10191                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10192             const bool SecondNameEmpty =
10193                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10194             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10195                    "Both template parameters cannot be unnamed.");
10196             ODRDiagTemplateError(FirstDecl->getLocation(),
10197                                  FirstDecl->getSourceRange(),
10198                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10199                 << FirstName;
10200             ODRDiagTemplateNote(SecondDecl->getLocation(),
10201                                 SecondDecl->getSourceRange(),
10202                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10203                 << SecondName;
10204             break;
10205           }
10206 
10207           switch (FirstDecl->getKind()) {
10208           default:
10209             llvm_unreachable("Invalid template parameter type.");
10210           case Decl::TemplateTypeParm: {
10211             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10212             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10213             const bool HasFirstDefaultArgument =
10214                 FirstParam->hasDefaultArgument() &&
10215                 !FirstParam->defaultArgumentWasInherited();
10216             const bool HasSecondDefaultArgument =
10217                 SecondParam->hasDefaultArgument() &&
10218                 !SecondParam->defaultArgumentWasInherited();
10219 
10220             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10221               ODRDiagTemplateError(FirstDecl->getLocation(),
10222                                    FirstDecl->getSourceRange(),
10223                                    ParamSingleDefaultArgument)
10224                   << HasFirstDefaultArgument;
10225               ODRDiagTemplateNote(SecondDecl->getLocation(),
10226                                   SecondDecl->getSourceRange(),
10227                                   ParamSingleDefaultArgument)
10228                   << HasSecondDefaultArgument;
10229               break;
10230             }
10231 
10232             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10233                    "Expecting default arguments.");
10234 
10235             ODRDiagTemplateError(FirstDecl->getLocation(),
10236                                  FirstDecl->getSourceRange(),
10237                                  ParamDifferentDefaultArgument);
10238             ODRDiagTemplateNote(SecondDecl->getLocation(),
10239                                 SecondDecl->getSourceRange(),
10240                                 ParamDifferentDefaultArgument);
10241 
10242             break;
10243           }
10244           case Decl::NonTypeTemplateParm: {
10245             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10246             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10247             const bool HasFirstDefaultArgument =
10248                 FirstParam->hasDefaultArgument() &&
10249                 !FirstParam->defaultArgumentWasInherited();
10250             const bool HasSecondDefaultArgument =
10251                 SecondParam->hasDefaultArgument() &&
10252                 !SecondParam->defaultArgumentWasInherited();
10253 
10254             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10255               ODRDiagTemplateError(FirstDecl->getLocation(),
10256                                    FirstDecl->getSourceRange(),
10257                                    ParamSingleDefaultArgument)
10258                   << HasFirstDefaultArgument;
10259               ODRDiagTemplateNote(SecondDecl->getLocation(),
10260                                   SecondDecl->getSourceRange(),
10261                                   ParamSingleDefaultArgument)
10262                   << HasSecondDefaultArgument;
10263               break;
10264             }
10265 
10266             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10267                    "Expecting default arguments.");
10268 
10269             ODRDiagTemplateError(FirstDecl->getLocation(),
10270                                  FirstDecl->getSourceRange(),
10271                                  ParamDifferentDefaultArgument);
10272             ODRDiagTemplateNote(SecondDecl->getLocation(),
10273                                 SecondDecl->getSourceRange(),
10274                                 ParamDifferentDefaultArgument);
10275 
10276             break;
10277           }
10278           case Decl::TemplateTemplateParm: {
10279             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10280             const auto *SecondParam =
10281                 cast<TemplateTemplateParmDecl>(SecondDecl);
10282             const bool HasFirstDefaultArgument =
10283                 FirstParam->hasDefaultArgument() &&
10284                 !FirstParam->defaultArgumentWasInherited();
10285             const bool HasSecondDefaultArgument =
10286                 SecondParam->hasDefaultArgument() &&
10287                 !SecondParam->defaultArgumentWasInherited();
10288 
10289             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10290               ODRDiagTemplateError(FirstDecl->getLocation(),
10291                                    FirstDecl->getSourceRange(),
10292                                    ParamSingleDefaultArgument)
10293                   << HasFirstDefaultArgument;
10294               ODRDiagTemplateNote(SecondDecl->getLocation(),
10295                                   SecondDecl->getSourceRange(),
10296                                   ParamSingleDefaultArgument)
10297                   << HasSecondDefaultArgument;
10298               break;
10299             }
10300 
10301             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10302                    "Expecting default arguments.");
10303 
10304             ODRDiagTemplateError(FirstDecl->getLocation(),
10305                                  FirstDecl->getSourceRange(),
10306                                  ParamDifferentDefaultArgument);
10307             ODRDiagTemplateNote(SecondDecl->getLocation(),
10308                                 SecondDecl->getSourceRange(),
10309                                 ParamDifferentDefaultArgument);
10310 
10311             break;
10312           }
10313           }
10314 
10315           break;
10316         }
10317 
10318         if (FirstIt != FirstEnd) {
10319           Diagnosed = true;
10320           break;
10321         }
10322       }
10323 
10324       DeclHashes FirstHashes;
10325       DeclHashes SecondHashes;
10326       const DeclContext *DC = FirstRecord;
10327       PopulateHashes(FirstHashes, FirstRecord, DC);
10328       PopulateHashes(SecondHashes, SecondRecord, DC);
10329 
10330       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10331       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10332       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10333       Decl *FirstDecl = DR.FirstDecl;
10334       Decl *SecondDecl = DR.SecondDecl;
10335 
10336       if (FirstDiffType == Other || SecondDiffType == Other) {
10337         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10338                               SecondModule);
10339         Diagnosed = true;
10340         break;
10341       }
10342 
10343       if (FirstDiffType != SecondDiffType) {
10344         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10345                             SecondModule);
10346         Diagnosed = true;
10347         break;
10348       }
10349 
10350       assert(FirstDiffType == SecondDiffType);
10351 
10352       switch (FirstDiffType) {
10353       case Other:
10354       case EndOfClass:
10355       case PublicSpecifer:
10356       case PrivateSpecifer:
10357       case ProtectedSpecifer:
10358         llvm_unreachable("Invalid diff type");
10359 
10360       case StaticAssert: {
10361         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10362         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10363 
10364         Expr *FirstExpr = FirstSA->getAssertExpr();
10365         Expr *SecondExpr = SecondSA->getAssertExpr();
10366         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10367         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10368         if (FirstODRHash != SecondODRHash) {
10369           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10370                            FirstExpr->getSourceRange(), StaticAssertCondition);
10371           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10372                           SecondExpr->getSourceRange(), StaticAssertCondition);
10373           Diagnosed = true;
10374           break;
10375         }
10376 
10377         StringLiteral *FirstStr = FirstSA->getMessage();
10378         StringLiteral *SecondStr = SecondSA->getMessage();
10379         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10380         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10381           SourceLocation FirstLoc, SecondLoc;
10382           SourceRange FirstRange, SecondRange;
10383           if (FirstStr) {
10384             FirstLoc = FirstStr->getBeginLoc();
10385             FirstRange = FirstStr->getSourceRange();
10386           } else {
10387             FirstLoc = FirstSA->getBeginLoc();
10388             FirstRange = FirstSA->getSourceRange();
10389           }
10390           if (SecondStr) {
10391             SecondLoc = SecondStr->getBeginLoc();
10392             SecondRange = SecondStr->getSourceRange();
10393           } else {
10394             SecondLoc = SecondSA->getBeginLoc();
10395             SecondRange = SecondSA->getSourceRange();
10396           }
10397           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10398                            StaticAssertOnlyMessage)
10399               << (FirstStr == nullptr);
10400           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10401                           StaticAssertOnlyMessage)
10402               << (SecondStr == nullptr);
10403           Diagnosed = true;
10404           break;
10405         }
10406 
10407         if (FirstStr && SecondStr &&
10408             FirstStr->getString() != SecondStr->getString()) {
10409           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10410                            FirstStr->getSourceRange(), StaticAssertMessage);
10411           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10412                           SecondStr->getSourceRange(), StaticAssertMessage);
10413           Diagnosed = true;
10414           break;
10415         }
10416         break;
10417       }
10418       case Field: {
10419         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10420                                  cast<FieldDecl>(FirstDecl),
10421                                  cast<FieldDecl>(SecondDecl));
10422         break;
10423       }
10424       case CXXMethod: {
10425         enum {
10426           DiagMethod,
10427           DiagConstructor,
10428           DiagDestructor,
10429         } FirstMethodType,
10430             SecondMethodType;
10431         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10432           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10433           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10434           return DiagMethod;
10435         };
10436         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10437         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10438         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10439         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10440         auto FirstName = FirstMethod->getDeclName();
10441         auto SecondName = SecondMethod->getDeclName();
10442         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10443           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10444                            FirstMethod->getSourceRange(), MethodName)
10445               << FirstMethodType << FirstName;
10446           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10447                           SecondMethod->getSourceRange(), MethodName)
10448               << SecondMethodType << SecondName;
10449 
10450           Diagnosed = true;
10451           break;
10452         }
10453 
10454         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10455         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10456         if (FirstDeleted != SecondDeleted) {
10457           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10458                            FirstMethod->getSourceRange(), MethodDeleted)
10459               << FirstMethodType << FirstName << FirstDeleted;
10460 
10461           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10462                           SecondMethod->getSourceRange(), MethodDeleted)
10463               << SecondMethodType << SecondName << SecondDeleted;
10464           Diagnosed = true;
10465           break;
10466         }
10467 
10468         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10469         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10470         if (FirstDefaulted != SecondDefaulted) {
10471           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10472                            FirstMethod->getSourceRange(), MethodDefaulted)
10473               << FirstMethodType << FirstName << FirstDefaulted;
10474 
10475           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10476                           SecondMethod->getSourceRange(), MethodDefaulted)
10477               << SecondMethodType << SecondName << SecondDefaulted;
10478           Diagnosed = true;
10479           break;
10480         }
10481 
10482         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10483         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10484         const bool FirstPure = FirstMethod->isPure();
10485         const bool SecondPure = SecondMethod->isPure();
10486         if ((FirstVirtual || SecondVirtual) &&
10487             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10488           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10489                            FirstMethod->getSourceRange(), MethodVirtual)
10490               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10491           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10492                           SecondMethod->getSourceRange(), MethodVirtual)
10493               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10494           Diagnosed = true;
10495           break;
10496         }
10497 
10498         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10499         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10500         // class needs to be checked instead.
10501         const auto FirstStorage = FirstMethod->getStorageClass();
10502         const auto SecondStorage = SecondMethod->getStorageClass();
10503         const bool FirstStatic = FirstStorage == SC_Static;
10504         const bool SecondStatic = SecondStorage == SC_Static;
10505         if (FirstStatic != SecondStatic) {
10506           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10507                            FirstMethod->getSourceRange(), MethodStatic)
10508               << FirstMethodType << FirstName << FirstStatic;
10509           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10510                           SecondMethod->getSourceRange(), MethodStatic)
10511               << SecondMethodType << SecondName << SecondStatic;
10512           Diagnosed = true;
10513           break;
10514         }
10515 
10516         const bool FirstVolatile = FirstMethod->isVolatile();
10517         const bool SecondVolatile = SecondMethod->isVolatile();
10518         if (FirstVolatile != SecondVolatile) {
10519           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10520                            FirstMethod->getSourceRange(), MethodVolatile)
10521               << FirstMethodType << FirstName << FirstVolatile;
10522           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10523                           SecondMethod->getSourceRange(), MethodVolatile)
10524               << SecondMethodType << SecondName << SecondVolatile;
10525           Diagnosed = true;
10526           break;
10527         }
10528 
10529         const bool FirstConst = FirstMethod->isConst();
10530         const bool SecondConst = SecondMethod->isConst();
10531         if (FirstConst != SecondConst) {
10532           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10533                            FirstMethod->getSourceRange(), MethodConst)
10534               << FirstMethodType << FirstName << FirstConst;
10535           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10536                           SecondMethod->getSourceRange(), MethodConst)
10537               << SecondMethodType << SecondName << SecondConst;
10538           Diagnosed = true;
10539           break;
10540         }
10541 
10542         const bool FirstInline = FirstMethod->isInlineSpecified();
10543         const bool SecondInline = SecondMethod->isInlineSpecified();
10544         if (FirstInline != SecondInline) {
10545           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10546                            FirstMethod->getSourceRange(), MethodInline)
10547               << FirstMethodType << FirstName << FirstInline;
10548           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10549                           SecondMethod->getSourceRange(), MethodInline)
10550               << SecondMethodType << SecondName << SecondInline;
10551           Diagnosed = true;
10552           break;
10553         }
10554 
10555         const unsigned FirstNumParameters = FirstMethod->param_size();
10556         const unsigned SecondNumParameters = SecondMethod->param_size();
10557         if (FirstNumParameters != SecondNumParameters) {
10558           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10559                            FirstMethod->getSourceRange(),
10560                            MethodNumberParameters)
10561               << FirstMethodType << FirstName << FirstNumParameters;
10562           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10563                           SecondMethod->getSourceRange(),
10564                           MethodNumberParameters)
10565               << SecondMethodType << SecondName << SecondNumParameters;
10566           Diagnosed = true;
10567           break;
10568         }
10569 
10570         // Need this status boolean to know when break out of the switch.
10571         bool ParameterMismatch = false;
10572         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10573           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10574           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10575 
10576           QualType FirstParamType = FirstParam->getType();
10577           QualType SecondParamType = SecondParam->getType();
10578           if (FirstParamType != SecondParamType &&
10579               ComputeQualTypeODRHash(FirstParamType) !=
10580                   ComputeQualTypeODRHash(SecondParamType)) {
10581             if (const DecayedType *ParamDecayedType =
10582                     FirstParamType->getAs<DecayedType>()) {
10583               ODRDiagDeclError(
10584                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10585                   FirstMethod->getSourceRange(), MethodParameterType)
10586                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10587                   << true << ParamDecayedType->getOriginalType();
10588             } else {
10589               ODRDiagDeclError(
10590                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10591                   FirstMethod->getSourceRange(), MethodParameterType)
10592                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10593                   << false;
10594             }
10595 
10596             if (const DecayedType *ParamDecayedType =
10597                     SecondParamType->getAs<DecayedType>()) {
10598               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10599                               SecondMethod->getSourceRange(),
10600                               MethodParameterType)
10601                   << SecondMethodType << SecondName << (I + 1)
10602                   << SecondParamType << true
10603                   << ParamDecayedType->getOriginalType();
10604             } else {
10605               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10606                               SecondMethod->getSourceRange(),
10607                               MethodParameterType)
10608                   << SecondMethodType << SecondName << (I + 1)
10609                   << SecondParamType << false;
10610             }
10611             ParameterMismatch = true;
10612             break;
10613           }
10614 
10615           DeclarationName FirstParamName = FirstParam->getDeclName();
10616           DeclarationName SecondParamName = SecondParam->getDeclName();
10617           if (FirstParamName != SecondParamName) {
10618             ODRDiagDeclError(FirstRecord, FirstModule,
10619                              FirstMethod->getLocation(),
10620                              FirstMethod->getSourceRange(), MethodParameterName)
10621                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10622             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10623                             SecondMethod->getSourceRange(), MethodParameterName)
10624                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10625             ParameterMismatch = true;
10626             break;
10627           }
10628 
10629           const Expr *FirstInit = FirstParam->getInit();
10630           const Expr *SecondInit = SecondParam->getInit();
10631           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10632             ODRDiagDeclError(FirstRecord, FirstModule,
10633                              FirstMethod->getLocation(),
10634                              FirstMethod->getSourceRange(),
10635                              MethodParameterSingleDefaultArgument)
10636                 << FirstMethodType << FirstName << (I + 1)
10637                 << (FirstInit == nullptr)
10638                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10639             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10640                             SecondMethod->getSourceRange(),
10641                             MethodParameterSingleDefaultArgument)
10642                 << SecondMethodType << SecondName << (I + 1)
10643                 << (SecondInit == nullptr)
10644                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10645             ParameterMismatch = true;
10646             break;
10647           }
10648 
10649           if (FirstInit && SecondInit &&
10650               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10651             ODRDiagDeclError(FirstRecord, FirstModule,
10652                              FirstMethod->getLocation(),
10653                              FirstMethod->getSourceRange(),
10654                              MethodParameterDifferentDefaultArgument)
10655                 << FirstMethodType << FirstName << (I + 1)
10656                 << FirstInit->getSourceRange();
10657             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10658                             SecondMethod->getSourceRange(),
10659                             MethodParameterDifferentDefaultArgument)
10660                 << SecondMethodType << SecondName << (I + 1)
10661                 << SecondInit->getSourceRange();
10662             ParameterMismatch = true;
10663             break;
10664 
10665           }
10666         }
10667 
10668         if (ParameterMismatch) {
10669           Diagnosed = true;
10670           break;
10671         }
10672 
10673         const auto *FirstTemplateArgs =
10674             FirstMethod->getTemplateSpecializationArgs();
10675         const auto *SecondTemplateArgs =
10676             SecondMethod->getTemplateSpecializationArgs();
10677 
10678         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10679             (!FirstTemplateArgs && SecondTemplateArgs)) {
10680           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10681                            FirstMethod->getSourceRange(),
10682                            MethodNoTemplateArguments)
10683               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10684           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10685                           SecondMethod->getSourceRange(),
10686                           MethodNoTemplateArguments)
10687               << SecondMethodType << SecondName
10688               << (SecondTemplateArgs != nullptr);
10689 
10690           Diagnosed = true;
10691           break;
10692         }
10693 
10694         if (FirstTemplateArgs && SecondTemplateArgs) {
10695           // Remove pack expansions from argument list.
10696           auto ExpandTemplateArgumentList =
10697               [](const TemplateArgumentList *TAL) {
10698                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10699                 for (const TemplateArgument &TA : TAL->asArray()) {
10700                   if (TA.getKind() != TemplateArgument::Pack) {
10701                     ExpandedList.push_back(&TA);
10702                     continue;
10703                   }
10704                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10705                     ExpandedList.push_back(&PackTA);
10706                   }
10707                 }
10708                 return ExpandedList;
10709               };
10710           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10711               ExpandTemplateArgumentList(FirstTemplateArgs);
10712           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10713               ExpandTemplateArgumentList(SecondTemplateArgs);
10714 
10715           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10716             ODRDiagDeclError(FirstRecord, FirstModule,
10717                              FirstMethod->getLocation(),
10718                              FirstMethod->getSourceRange(),
10719                              MethodDifferentNumberTemplateArguments)
10720                 << FirstMethodType << FirstName
10721                 << (unsigned)FirstExpandedList.size();
10722             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10723                             SecondMethod->getSourceRange(),
10724                             MethodDifferentNumberTemplateArguments)
10725                 << SecondMethodType << SecondName
10726                 << (unsigned)SecondExpandedList.size();
10727 
10728             Diagnosed = true;
10729             break;
10730           }
10731 
10732           bool TemplateArgumentMismatch = false;
10733           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10734             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10735                                    &SecondTA = *SecondExpandedList[i];
10736             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10737                 ComputeTemplateArgumentODRHash(SecondTA)) {
10738               continue;
10739             }
10740 
10741             ODRDiagDeclError(
10742                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10743                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10744                 << FirstMethodType << FirstName << FirstTA << i + 1;
10745             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10746                             SecondMethod->getSourceRange(),
10747                             MethodDifferentTemplateArgument)
10748                 << SecondMethodType << SecondName << SecondTA << i + 1;
10749 
10750             TemplateArgumentMismatch = true;
10751             break;
10752           }
10753 
10754           if (TemplateArgumentMismatch) {
10755             Diagnosed = true;
10756             break;
10757           }
10758         }
10759 
10760         // Compute the hash of the method as if it has no body.
10761         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10762           Hash.clear();
10763           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10764           return Hash.CalculateHash();
10765         };
10766 
10767         // Compare the hash generated to the hash stored.  A difference means
10768         // that a body was present in the original source.  Due to merging,
10769         // the stardard way of detecting a body will not work.
10770         const bool HasFirstBody =
10771             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10772         const bool HasSecondBody =
10773             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10774 
10775         if (HasFirstBody != HasSecondBody) {
10776           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10777                            FirstMethod->getSourceRange(), MethodSingleBody)
10778               << FirstMethodType << FirstName << HasFirstBody;
10779           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10780                           SecondMethod->getSourceRange(), MethodSingleBody)
10781               << SecondMethodType << SecondName << HasSecondBody;
10782           Diagnosed = true;
10783           break;
10784         }
10785 
10786         if (HasFirstBody && HasSecondBody) {
10787           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10788                            FirstMethod->getSourceRange(), MethodDifferentBody)
10789               << FirstMethodType << FirstName;
10790           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10791                           SecondMethod->getSourceRange(), MethodDifferentBody)
10792               << SecondMethodType << SecondName;
10793           Diagnosed = true;
10794           break;
10795         }
10796 
10797         break;
10798       }
10799       case TypeAlias:
10800       case TypeDef: {
10801         Diagnosed = ODRDiagTypeDefOrAlias(
10802             FirstRecord, FirstModule, SecondModule,
10803             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10804             FirstDiffType == TypeAlias);
10805         break;
10806       }
10807       case Var: {
10808         Diagnosed =
10809             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10810                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10811         break;
10812       }
10813       case Friend: {
10814         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10815         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10816 
10817         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10818         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10819 
10820         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10821         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10822 
10823         if (FirstND && SecondND) {
10824           ODRDiagDeclError(FirstRecord, FirstModule,
10825                            FirstFriend->getFriendLoc(),
10826                            FirstFriend->getSourceRange(), FriendFunction)
10827               << FirstND;
10828           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10829                           SecondFriend->getSourceRange(), FriendFunction)
10830               << SecondND;
10831 
10832           Diagnosed = true;
10833           break;
10834         }
10835 
10836         if (FirstTSI && SecondTSI) {
10837           QualType FirstFriendType = FirstTSI->getType();
10838           QualType SecondFriendType = SecondTSI->getType();
10839           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10840                  ComputeQualTypeODRHash(SecondFriendType));
10841           ODRDiagDeclError(FirstRecord, FirstModule,
10842                            FirstFriend->getFriendLoc(),
10843                            FirstFriend->getSourceRange(), FriendType)
10844               << FirstFriendType;
10845           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10846                           SecondFriend->getSourceRange(), FriendType)
10847               << SecondFriendType;
10848           Diagnosed = true;
10849           break;
10850         }
10851 
10852         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10853                          FirstFriend->getSourceRange(), FriendTypeFunction)
10854             << (FirstTSI == nullptr);
10855         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10856                         SecondFriend->getSourceRange(), FriendTypeFunction)
10857             << (SecondTSI == nullptr);
10858 
10859         Diagnosed = true;
10860         break;
10861       }
10862       case FunctionTemplate: {
10863         FunctionTemplateDecl *FirstTemplate =
10864             cast<FunctionTemplateDecl>(FirstDecl);
10865         FunctionTemplateDecl *SecondTemplate =
10866             cast<FunctionTemplateDecl>(SecondDecl);
10867 
10868         TemplateParameterList *FirstTPL =
10869             FirstTemplate->getTemplateParameters();
10870         TemplateParameterList *SecondTPL =
10871             SecondTemplate->getTemplateParameters();
10872 
10873         if (FirstTPL->size() != SecondTPL->size()) {
10874           ODRDiagDeclError(FirstRecord, FirstModule,
10875                            FirstTemplate->getLocation(),
10876                            FirstTemplate->getSourceRange(),
10877                            FunctionTemplateDifferentNumberParameters)
10878               << FirstTemplate << FirstTPL->size();
10879           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10880                           SecondTemplate->getSourceRange(),
10881                           FunctionTemplateDifferentNumberParameters)
10882               << SecondTemplate << SecondTPL->size();
10883 
10884           Diagnosed = true;
10885           break;
10886         }
10887 
10888         bool ParameterMismatch = false;
10889         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10890           NamedDecl *FirstParam = FirstTPL->getParam(i);
10891           NamedDecl *SecondParam = SecondTPL->getParam(i);
10892 
10893           if (FirstParam->getKind() != SecondParam->getKind()) {
10894             enum {
10895               TemplateTypeParameter,
10896               NonTypeTemplateParameter,
10897               TemplateTemplateParameter,
10898             };
10899             auto GetParamType = [](NamedDecl *D) {
10900               switch (D->getKind()) {
10901                 default:
10902                   llvm_unreachable("Unexpected template parameter type");
10903                 case Decl::TemplateTypeParm:
10904                   return TemplateTypeParameter;
10905                 case Decl::NonTypeTemplateParm:
10906                   return NonTypeTemplateParameter;
10907                 case Decl::TemplateTemplateParm:
10908                   return TemplateTemplateParameter;
10909               }
10910             };
10911 
10912             ODRDiagDeclError(FirstRecord, FirstModule,
10913                              FirstTemplate->getLocation(),
10914                              FirstTemplate->getSourceRange(),
10915                              FunctionTemplateParameterDifferentKind)
10916                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10917             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10918                             SecondTemplate->getSourceRange(),
10919                             FunctionTemplateParameterDifferentKind)
10920                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10921 
10922             ParameterMismatch = true;
10923             break;
10924           }
10925 
10926           if (FirstParam->getName() != SecondParam->getName()) {
10927             ODRDiagDeclError(
10928                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10929                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10930                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10931                 << FirstParam;
10932             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10933                             SecondTemplate->getSourceRange(),
10934                             FunctionTemplateParameterName)
10935                 << SecondTemplate << (i + 1)
10936                 << (bool)SecondParam->getIdentifier() << SecondParam;
10937             ParameterMismatch = true;
10938             break;
10939           }
10940 
10941           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10942               isa<TemplateTypeParmDecl>(SecondParam)) {
10943             TemplateTypeParmDecl *FirstTTPD =
10944                 cast<TemplateTypeParmDecl>(FirstParam);
10945             TemplateTypeParmDecl *SecondTTPD =
10946                 cast<TemplateTypeParmDecl>(SecondParam);
10947             bool HasFirstDefaultArgument =
10948                 FirstTTPD->hasDefaultArgument() &&
10949                 !FirstTTPD->defaultArgumentWasInherited();
10950             bool HasSecondDefaultArgument =
10951                 SecondTTPD->hasDefaultArgument() &&
10952                 !SecondTTPD->defaultArgumentWasInherited();
10953             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10954               ODRDiagDeclError(FirstRecord, FirstModule,
10955                                FirstTemplate->getLocation(),
10956                                FirstTemplate->getSourceRange(),
10957                                FunctionTemplateParameterSingleDefaultArgument)
10958                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10959               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10960                               SecondTemplate->getSourceRange(),
10961                               FunctionTemplateParameterSingleDefaultArgument)
10962                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10963               ParameterMismatch = true;
10964               break;
10965             }
10966 
10967             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10968               QualType FirstType = FirstTTPD->getDefaultArgument();
10969               QualType SecondType = SecondTTPD->getDefaultArgument();
10970               if (ComputeQualTypeODRHash(FirstType) !=
10971                   ComputeQualTypeODRHash(SecondType)) {
10972                 ODRDiagDeclError(
10973                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10974                     FirstTemplate->getSourceRange(),
10975                     FunctionTemplateParameterDifferentDefaultArgument)
10976                     << FirstTemplate << (i + 1) << FirstType;
10977                 ODRDiagDeclNote(
10978                     SecondModule, SecondTemplate->getLocation(),
10979                     SecondTemplate->getSourceRange(),
10980                     FunctionTemplateParameterDifferentDefaultArgument)
10981                     << SecondTemplate << (i + 1) << SecondType;
10982                 ParameterMismatch = true;
10983                 break;
10984               }
10985             }
10986 
10987             if (FirstTTPD->isParameterPack() !=
10988                 SecondTTPD->isParameterPack()) {
10989               ODRDiagDeclError(FirstRecord, FirstModule,
10990                                FirstTemplate->getLocation(),
10991                                FirstTemplate->getSourceRange(),
10992                                FunctionTemplatePackParameter)
10993                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10994               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10995                               SecondTemplate->getSourceRange(),
10996                               FunctionTemplatePackParameter)
10997                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10998               ParameterMismatch = true;
10999               break;
11000             }
11001           }
11002 
11003           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11004               isa<TemplateTemplateParmDecl>(SecondParam)) {
11005             TemplateTemplateParmDecl *FirstTTPD =
11006                 cast<TemplateTemplateParmDecl>(FirstParam);
11007             TemplateTemplateParmDecl *SecondTTPD =
11008                 cast<TemplateTemplateParmDecl>(SecondParam);
11009 
11010             TemplateParameterList *FirstTPL =
11011                 FirstTTPD->getTemplateParameters();
11012             TemplateParameterList *SecondTPL =
11013                 SecondTTPD->getTemplateParameters();
11014 
11015             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11016                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11017               ODRDiagDeclError(FirstRecord, FirstModule,
11018                                FirstTemplate->getLocation(),
11019                                FirstTemplate->getSourceRange(),
11020                                FunctionTemplateParameterDifferentType)
11021                   << FirstTemplate << (i + 1);
11022               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11023                               SecondTemplate->getSourceRange(),
11024                               FunctionTemplateParameterDifferentType)
11025                   << SecondTemplate << (i + 1);
11026               ParameterMismatch = true;
11027               break;
11028             }
11029 
11030             bool HasFirstDefaultArgument =
11031                 FirstTTPD->hasDefaultArgument() &&
11032                 !FirstTTPD->defaultArgumentWasInherited();
11033             bool HasSecondDefaultArgument =
11034                 SecondTTPD->hasDefaultArgument() &&
11035                 !SecondTTPD->defaultArgumentWasInherited();
11036             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11037               ODRDiagDeclError(FirstRecord, FirstModule,
11038                                FirstTemplate->getLocation(),
11039                                FirstTemplate->getSourceRange(),
11040                                FunctionTemplateParameterSingleDefaultArgument)
11041                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11042               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11043                               SecondTemplate->getSourceRange(),
11044                               FunctionTemplateParameterSingleDefaultArgument)
11045                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11046               ParameterMismatch = true;
11047               break;
11048             }
11049 
11050             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11051               TemplateArgument FirstTA =
11052                   FirstTTPD->getDefaultArgument().getArgument();
11053               TemplateArgument SecondTA =
11054                   SecondTTPD->getDefaultArgument().getArgument();
11055               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11056                   ComputeTemplateArgumentODRHash(SecondTA)) {
11057                 ODRDiagDeclError(
11058                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11059                     FirstTemplate->getSourceRange(),
11060                     FunctionTemplateParameterDifferentDefaultArgument)
11061                     << FirstTemplate << (i + 1) << FirstTA;
11062                 ODRDiagDeclNote(
11063                     SecondModule, SecondTemplate->getLocation(),
11064                     SecondTemplate->getSourceRange(),
11065                     FunctionTemplateParameterDifferentDefaultArgument)
11066                     << SecondTemplate << (i + 1) << SecondTA;
11067                 ParameterMismatch = true;
11068                 break;
11069               }
11070             }
11071 
11072             if (FirstTTPD->isParameterPack() !=
11073                 SecondTTPD->isParameterPack()) {
11074               ODRDiagDeclError(FirstRecord, FirstModule,
11075                                FirstTemplate->getLocation(),
11076                                FirstTemplate->getSourceRange(),
11077                                FunctionTemplatePackParameter)
11078                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11079               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11080                               SecondTemplate->getSourceRange(),
11081                               FunctionTemplatePackParameter)
11082                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11083               ParameterMismatch = true;
11084               break;
11085             }
11086           }
11087 
11088           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11089               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11090             NonTypeTemplateParmDecl *FirstNTTPD =
11091                 cast<NonTypeTemplateParmDecl>(FirstParam);
11092             NonTypeTemplateParmDecl *SecondNTTPD =
11093                 cast<NonTypeTemplateParmDecl>(SecondParam);
11094 
11095             QualType FirstType = FirstNTTPD->getType();
11096             QualType SecondType = SecondNTTPD->getType();
11097             if (ComputeQualTypeODRHash(FirstType) !=
11098                 ComputeQualTypeODRHash(SecondType)) {
11099               ODRDiagDeclError(FirstRecord, FirstModule,
11100                                FirstTemplate->getLocation(),
11101                                FirstTemplate->getSourceRange(),
11102                                FunctionTemplateParameterDifferentType)
11103                   << FirstTemplate << (i + 1);
11104               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11105                               SecondTemplate->getSourceRange(),
11106                               FunctionTemplateParameterDifferentType)
11107                   << SecondTemplate << (i + 1);
11108               ParameterMismatch = true;
11109               break;
11110             }
11111 
11112             bool HasFirstDefaultArgument =
11113                 FirstNTTPD->hasDefaultArgument() &&
11114                 !FirstNTTPD->defaultArgumentWasInherited();
11115             bool HasSecondDefaultArgument =
11116                 SecondNTTPD->hasDefaultArgument() &&
11117                 !SecondNTTPD->defaultArgumentWasInherited();
11118             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11119               ODRDiagDeclError(FirstRecord, FirstModule,
11120                                FirstTemplate->getLocation(),
11121                                FirstTemplate->getSourceRange(),
11122                                FunctionTemplateParameterSingleDefaultArgument)
11123                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11124               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11125                               SecondTemplate->getSourceRange(),
11126                               FunctionTemplateParameterSingleDefaultArgument)
11127                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11128               ParameterMismatch = true;
11129               break;
11130             }
11131 
11132             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11133               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11134               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11135               if (ComputeODRHash(FirstDefaultArgument) !=
11136                   ComputeODRHash(SecondDefaultArgument)) {
11137                 ODRDiagDeclError(
11138                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11139                     FirstTemplate->getSourceRange(),
11140                     FunctionTemplateParameterDifferentDefaultArgument)
11141                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11142                 ODRDiagDeclNote(
11143                     SecondModule, SecondTemplate->getLocation(),
11144                     SecondTemplate->getSourceRange(),
11145                     FunctionTemplateParameterDifferentDefaultArgument)
11146                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11147                 ParameterMismatch = true;
11148                 break;
11149               }
11150             }
11151 
11152             if (FirstNTTPD->isParameterPack() !=
11153                 SecondNTTPD->isParameterPack()) {
11154               ODRDiagDeclError(FirstRecord, FirstModule,
11155                                FirstTemplate->getLocation(),
11156                                FirstTemplate->getSourceRange(),
11157                                FunctionTemplatePackParameter)
11158                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11159               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11160                               SecondTemplate->getSourceRange(),
11161                               FunctionTemplatePackParameter)
11162                   << SecondTemplate << (i + 1)
11163                   << SecondNTTPD->isParameterPack();
11164               ParameterMismatch = true;
11165               break;
11166             }
11167           }
11168         }
11169 
11170         if (ParameterMismatch) {
11171           Diagnosed = true;
11172           break;
11173         }
11174 
11175         break;
11176       }
11177       }
11178 
11179       if (Diagnosed)
11180         continue;
11181 
11182       Diag(FirstDecl->getLocation(),
11183            diag::err_module_odr_violation_mismatch_decl_unknown)
11184           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11185           << FirstDecl->getSourceRange();
11186       Diag(SecondDecl->getLocation(),
11187            diag::note_module_odr_violation_mismatch_decl_unknown)
11188           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11189       Diagnosed = true;
11190     }
11191 
11192     if (!Diagnosed) {
11193       // All definitions are updates to the same declaration. This happens if a
11194       // module instantiates the declaration of a class template specialization
11195       // and two or more other modules instantiate its definition.
11196       //
11197       // FIXME: Indicate which modules had instantiations of this definition.
11198       // FIXME: How can this even happen?
11199       Diag(Merge.first->getLocation(),
11200            diag::err_module_odr_violation_different_instantiations)
11201         << Merge.first;
11202     }
11203   }
11204 
11205   // Issue ODR failures diagnostics for functions.
11206   for (auto &Merge : FunctionOdrMergeFailures) {
11207     enum ODRFunctionDifference {
11208       ReturnType,
11209       ParameterName,
11210       ParameterType,
11211       ParameterSingleDefaultArgument,
11212       ParameterDifferentDefaultArgument,
11213       FunctionBody,
11214     };
11215 
11216     FunctionDecl *FirstFunction = Merge.first;
11217     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11218 
11219     bool Diagnosed = false;
11220     for (auto &SecondFunction : Merge.second) {
11221 
11222       if (FirstFunction == SecondFunction)
11223         continue;
11224 
11225       std::string SecondModule =
11226           getOwningModuleNameForDiagnostic(SecondFunction);
11227 
11228       auto ODRDiagError = [FirstFunction, &FirstModule,
11229                            this](SourceLocation Loc, SourceRange Range,
11230                                  ODRFunctionDifference DiffType) {
11231         return Diag(Loc, diag::err_module_odr_violation_function)
11232                << FirstFunction << FirstModule.empty() << FirstModule << Range
11233                << DiffType;
11234       };
11235       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11236                                                SourceRange Range,
11237                                                ODRFunctionDifference DiffType) {
11238         return Diag(Loc, diag::note_module_odr_violation_function)
11239                << SecondModule << Range << DiffType;
11240       };
11241 
11242       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11243           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11244         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11245                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11246             << FirstFunction->getReturnType();
11247         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11248                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11249             << SecondFunction->getReturnType();
11250         Diagnosed = true;
11251         break;
11252       }
11253 
11254       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11255              "Merged functions with different number of parameters");
11256 
11257       auto ParamSize = FirstFunction->param_size();
11258       bool ParameterMismatch = false;
11259       for (unsigned I = 0; I < ParamSize; ++I) {
11260         auto *FirstParam = FirstFunction->getParamDecl(I);
11261         auto *SecondParam = SecondFunction->getParamDecl(I);
11262 
11263         assert(getContext().hasSameType(FirstParam->getType(),
11264                                       SecondParam->getType()) &&
11265                "Merged function has different parameter types.");
11266 
11267         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11268           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11269                        ParameterName)
11270               << I + 1 << FirstParam->getDeclName();
11271           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11272                       ParameterName)
11273               << I + 1 << SecondParam->getDeclName();
11274           ParameterMismatch = true;
11275           break;
11276         };
11277 
11278         QualType FirstParamType = FirstParam->getType();
11279         QualType SecondParamType = SecondParam->getType();
11280         if (FirstParamType != SecondParamType &&
11281             ComputeQualTypeODRHash(FirstParamType) !=
11282                 ComputeQualTypeODRHash(SecondParamType)) {
11283           if (const DecayedType *ParamDecayedType =
11284                   FirstParamType->getAs<DecayedType>()) {
11285             ODRDiagError(FirstParam->getLocation(),
11286                          FirstParam->getSourceRange(), ParameterType)
11287                 << (I + 1) << FirstParamType << true
11288                 << ParamDecayedType->getOriginalType();
11289           } else {
11290             ODRDiagError(FirstParam->getLocation(),
11291                          FirstParam->getSourceRange(), ParameterType)
11292                 << (I + 1) << FirstParamType << false;
11293           }
11294 
11295           if (const DecayedType *ParamDecayedType =
11296                   SecondParamType->getAs<DecayedType>()) {
11297             ODRDiagNote(SecondParam->getLocation(),
11298                         SecondParam->getSourceRange(), ParameterType)
11299                 << (I + 1) << SecondParamType << true
11300                 << ParamDecayedType->getOriginalType();
11301           } else {
11302             ODRDiagNote(SecondParam->getLocation(),
11303                         SecondParam->getSourceRange(), ParameterType)
11304                 << (I + 1) << SecondParamType << false;
11305           }
11306           ParameterMismatch = true;
11307           break;
11308         }
11309 
11310         const Expr *FirstInit = FirstParam->getInit();
11311         const Expr *SecondInit = SecondParam->getInit();
11312         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11313           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11314                        ParameterSingleDefaultArgument)
11315               << (I + 1) << (FirstInit == nullptr)
11316               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11317           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11318                       ParameterSingleDefaultArgument)
11319               << (I + 1) << (SecondInit == nullptr)
11320               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11321           ParameterMismatch = true;
11322           break;
11323         }
11324 
11325         if (FirstInit && SecondInit &&
11326             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11327           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11328                        ParameterDifferentDefaultArgument)
11329               << (I + 1) << FirstInit->getSourceRange();
11330           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11331                       ParameterDifferentDefaultArgument)
11332               << (I + 1) << SecondInit->getSourceRange();
11333           ParameterMismatch = true;
11334           break;
11335         }
11336 
11337         assert(ComputeSubDeclODRHash(FirstParam) ==
11338                    ComputeSubDeclODRHash(SecondParam) &&
11339                "Undiagnosed parameter difference.");
11340       }
11341 
11342       if (ParameterMismatch) {
11343         Diagnosed = true;
11344         break;
11345       }
11346 
11347       // If no error has been generated before now, assume the problem is in
11348       // the body and generate a message.
11349       ODRDiagError(FirstFunction->getLocation(),
11350                    FirstFunction->getSourceRange(), FunctionBody);
11351       ODRDiagNote(SecondFunction->getLocation(),
11352                   SecondFunction->getSourceRange(), FunctionBody);
11353       Diagnosed = true;
11354       break;
11355     }
11356     (void)Diagnosed;
11357     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11358   }
11359 
11360   // Issue ODR failures diagnostics for enums.
11361   for (auto &Merge : EnumOdrMergeFailures) {
11362     enum ODREnumDifference {
11363       SingleScopedEnum,
11364       EnumTagKeywordMismatch,
11365       SingleSpecifiedType,
11366       DifferentSpecifiedTypes,
11367       DifferentNumberEnumConstants,
11368       EnumConstantName,
11369       EnumConstantSingleInitilizer,
11370       EnumConstantDifferentInitilizer,
11371     };
11372 
11373     // If we've already pointed out a specific problem with this enum, don't
11374     // bother issuing a general "something's different" diagnostic.
11375     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11376       continue;
11377 
11378     EnumDecl *FirstEnum = Merge.first;
11379     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11380 
11381     using DeclHashes =
11382         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11383     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11384                               DeclHashes &Hashes, EnumDecl *Enum) {
11385       for (auto *D : Enum->decls()) {
11386         // Due to decl merging, the first EnumDecl is the parent of
11387         // Decls in both records.
11388         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11389           continue;
11390         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11391         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11392                             ComputeSubDeclODRHash(D));
11393       }
11394     };
11395     DeclHashes FirstHashes;
11396     PopulateHashes(FirstHashes, FirstEnum);
11397     bool Diagnosed = false;
11398     for (auto &SecondEnum : Merge.second) {
11399 
11400       if (FirstEnum == SecondEnum)
11401         continue;
11402 
11403       std::string SecondModule =
11404           getOwningModuleNameForDiagnostic(SecondEnum);
11405 
11406       auto ODRDiagError = [FirstEnum, &FirstModule,
11407                            this](SourceLocation Loc, SourceRange Range,
11408                                  ODREnumDifference DiffType) {
11409         return Diag(Loc, diag::err_module_odr_violation_enum)
11410                << FirstEnum << FirstModule.empty() << FirstModule << Range
11411                << DiffType;
11412       };
11413       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11414                                                SourceRange Range,
11415                                                ODREnumDifference DiffType) {
11416         return Diag(Loc, diag::note_module_odr_violation_enum)
11417                << SecondModule << Range << DiffType;
11418       };
11419 
11420       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11421         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11422                      SingleScopedEnum)
11423             << FirstEnum->isScoped();
11424         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11425                     SingleScopedEnum)
11426             << SecondEnum->isScoped();
11427         Diagnosed = true;
11428         continue;
11429       }
11430 
11431       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11432         if (FirstEnum->isScopedUsingClassTag() !=
11433             SecondEnum->isScopedUsingClassTag()) {
11434           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11435                        EnumTagKeywordMismatch)
11436               << FirstEnum->isScopedUsingClassTag();
11437           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11438                       EnumTagKeywordMismatch)
11439               << SecondEnum->isScopedUsingClassTag();
11440           Diagnosed = true;
11441           continue;
11442         }
11443       }
11444 
11445       QualType FirstUnderlyingType =
11446           FirstEnum->getIntegerTypeSourceInfo()
11447               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11448               : QualType();
11449       QualType SecondUnderlyingType =
11450           SecondEnum->getIntegerTypeSourceInfo()
11451               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11452               : QualType();
11453       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11454           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11455                        SingleSpecifiedType)
11456               << !FirstUnderlyingType.isNull();
11457           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11458                       SingleSpecifiedType)
11459               << !SecondUnderlyingType.isNull();
11460           Diagnosed = true;
11461           continue;
11462       }
11463 
11464       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11465         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11466             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11467           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11468                        DifferentSpecifiedTypes)
11469               << FirstUnderlyingType;
11470           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11471                       DifferentSpecifiedTypes)
11472               << SecondUnderlyingType;
11473           Diagnosed = true;
11474           continue;
11475         }
11476       }
11477 
11478       DeclHashes SecondHashes;
11479       PopulateHashes(SecondHashes, SecondEnum);
11480 
11481       if (FirstHashes.size() != SecondHashes.size()) {
11482         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11483                      DifferentNumberEnumConstants)
11484             << (int)FirstHashes.size();
11485         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11486                     DifferentNumberEnumConstants)
11487             << (int)SecondHashes.size();
11488         Diagnosed = true;
11489         continue;
11490       }
11491 
11492       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11493         if (FirstHashes[I].second == SecondHashes[I].second)
11494           continue;
11495         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11496         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11497 
11498         if (FirstEnumConstant->getDeclName() !=
11499             SecondEnumConstant->getDeclName()) {
11500 
11501           ODRDiagError(FirstEnumConstant->getLocation(),
11502                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11503               << I + 1 << FirstEnumConstant;
11504           ODRDiagNote(SecondEnumConstant->getLocation(),
11505                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11506               << I + 1 << SecondEnumConstant;
11507           Diagnosed = true;
11508           break;
11509         }
11510 
11511         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11512         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11513         if (!FirstInit && !SecondInit)
11514           continue;
11515 
11516         if (!FirstInit || !SecondInit) {
11517           ODRDiagError(FirstEnumConstant->getLocation(),
11518                        FirstEnumConstant->getSourceRange(),
11519                        EnumConstantSingleInitilizer)
11520               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11521           ODRDiagNote(SecondEnumConstant->getLocation(),
11522                       SecondEnumConstant->getSourceRange(),
11523                       EnumConstantSingleInitilizer)
11524               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11525           Diagnosed = true;
11526           break;
11527         }
11528 
11529         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11530           ODRDiagError(FirstEnumConstant->getLocation(),
11531                        FirstEnumConstant->getSourceRange(),
11532                        EnumConstantDifferentInitilizer)
11533               << I + 1 << FirstEnumConstant;
11534           ODRDiagNote(SecondEnumConstant->getLocation(),
11535                       SecondEnumConstant->getSourceRange(),
11536                       EnumConstantDifferentInitilizer)
11537               << I + 1 << SecondEnumConstant;
11538           Diagnosed = true;
11539           break;
11540         }
11541       }
11542     }
11543 
11544     (void)Diagnosed;
11545     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11546   }
11547 }
11548 
11549 void ASTReader::StartedDeserializing() {
11550   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11551     ReadTimer->startTimer();
11552 }
11553 
11554 void ASTReader::FinishedDeserializing() {
11555   assert(NumCurrentElementsDeserializing &&
11556          "FinishedDeserializing not paired with StartedDeserializing");
11557   if (NumCurrentElementsDeserializing == 1) {
11558     // We decrease NumCurrentElementsDeserializing only after pending actions
11559     // are finished, to avoid recursively re-calling finishPendingActions().
11560     finishPendingActions();
11561   }
11562   --NumCurrentElementsDeserializing;
11563 
11564   if (NumCurrentElementsDeserializing == 0) {
11565     // Propagate exception specification and deduced type updates along
11566     // redeclaration chains.
11567     //
11568     // We do this now rather than in finishPendingActions because we want to
11569     // be able to walk the complete redeclaration chains of the updated decls.
11570     while (!PendingExceptionSpecUpdates.empty() ||
11571            !PendingDeducedTypeUpdates.empty()) {
11572       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11573       PendingExceptionSpecUpdates.clear();
11574       for (auto Update : ESUpdates) {
11575         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11576         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11577         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11578         if (auto *Listener = getContext().getASTMutationListener())
11579           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11580         for (auto *Redecl : Update.second->redecls())
11581           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11582       }
11583 
11584       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11585       PendingDeducedTypeUpdates.clear();
11586       for (auto Update : DTUpdates) {
11587         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11588         // FIXME: If the return type is already deduced, check that it matches.
11589         getContext().adjustDeducedFunctionResultType(Update.first,
11590                                                      Update.second);
11591       }
11592     }
11593 
11594     if (ReadTimer)
11595       ReadTimer->stopTimer();
11596 
11597     diagnoseOdrViolations();
11598 
11599     // We are not in recursive loading, so it's safe to pass the "interesting"
11600     // decls to the consumer.
11601     if (Consumer)
11602       PassInterestingDeclsToConsumer();
11603   }
11604 }
11605 
11606 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11607   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11608     // Remove any fake results before adding any real ones.
11609     auto It = PendingFakeLookupResults.find(II);
11610     if (It != PendingFakeLookupResults.end()) {
11611       for (auto *ND : It->second)
11612         SemaObj->IdResolver.RemoveDecl(ND);
11613       // FIXME: this works around module+PCH performance issue.
11614       // Rather than erase the result from the map, which is O(n), just clear
11615       // the vector of NamedDecls.
11616       It->second.clear();
11617     }
11618   }
11619 
11620   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11621     SemaObj->TUScope->AddDecl(D);
11622   } else if (SemaObj->TUScope) {
11623     // Adding the decl to IdResolver may have failed because it was already in
11624     // (even though it was not added in scope). If it is already in, make sure
11625     // it gets in the scope as well.
11626     if (std::find(SemaObj->IdResolver.begin(Name),
11627                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11628       SemaObj->TUScope->AddDecl(D);
11629   }
11630 }
11631 
11632 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11633                      ASTContext *Context,
11634                      const PCHContainerReader &PCHContainerRdr,
11635                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11636                      StringRef isysroot,
11637                      DisableValidationForModuleKind DisableValidationKind,
11638                      bool AllowASTWithCompilerErrors,
11639                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11640                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11641                      std::unique_ptr<llvm::Timer> ReadTimer)
11642     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11643                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11644                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11645       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11646       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11647       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11648                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11649       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11650       DisableValidationKind(DisableValidationKind),
11651       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11652       AllowConfigurationMismatch(AllowConfigurationMismatch),
11653       ValidateSystemInputs(ValidateSystemInputs),
11654       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11655       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11656   SourceMgr.setExternalSLocEntrySource(this);
11657 
11658   for (const auto &Ext : Extensions) {
11659     auto BlockName = Ext->getExtensionMetadata().BlockName;
11660     auto Known = ModuleFileExtensions.find(BlockName);
11661     if (Known != ModuleFileExtensions.end()) {
11662       Diags.Report(diag::warn_duplicate_module_file_extension)
11663         << BlockName;
11664       continue;
11665     }
11666 
11667     ModuleFileExtensions.insert({BlockName, Ext});
11668   }
11669 }
11670 
11671 ASTReader::~ASTReader() {
11672   if (OwnsDeserializationListener)
11673     delete DeserializationListener;
11674 }
11675 
11676 IdentifierResolver &ASTReader::getIdResolver() {
11677   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11678 }
11679 
11680 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11681                                                unsigned AbbrevID) {
11682   Idx = 0;
11683   Record.clear();
11684   return Cursor.readRecord(AbbrevID, Record);
11685 }
11686 //===----------------------------------------------------------------------===//
11687 //// OMPClauseReader implementation
11688 ////===----------------------------------------------------------------------===//
11689 
11690 // This has to be in namespace clang because it's friended by all
11691 // of the OMP clauses.
11692 namespace clang {
11693 
11694 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11695   ASTRecordReader &Record;
11696   ASTContext &Context;
11697 
11698 public:
11699   OMPClauseReader(ASTRecordReader &Record)
11700       : Record(Record), Context(Record.getContext()) {}
11701 #define GEN_CLANG_CLAUSE_CLASS
11702 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11703 #include "llvm/Frontend/OpenMP/OMP.inc"
11704   OMPClause *readClause();
11705   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11706   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11707 };
11708 
11709 } // end namespace clang
11710 
11711 OMPClause *ASTRecordReader::readOMPClause() {
11712   return OMPClauseReader(*this).readClause();
11713 }
11714 
11715 OMPClause *OMPClauseReader::readClause() {
11716   OMPClause *C = nullptr;
11717   switch (llvm::omp::Clause(Record.readInt())) {
11718   case llvm::omp::OMPC_if:
11719     C = new (Context) OMPIfClause();
11720     break;
11721   case llvm::omp::OMPC_final:
11722     C = new (Context) OMPFinalClause();
11723     break;
11724   case llvm::omp::OMPC_num_threads:
11725     C = new (Context) OMPNumThreadsClause();
11726     break;
11727   case llvm::omp::OMPC_safelen:
11728     C = new (Context) OMPSafelenClause();
11729     break;
11730   case llvm::omp::OMPC_simdlen:
11731     C = new (Context) OMPSimdlenClause();
11732     break;
11733   case llvm::omp::OMPC_allocator:
11734     C = new (Context) OMPAllocatorClause();
11735     break;
11736   case llvm::omp::OMPC_collapse:
11737     C = new (Context) OMPCollapseClause();
11738     break;
11739   case llvm::omp::OMPC_default:
11740     C = new (Context) OMPDefaultClause();
11741     break;
11742   case llvm::omp::OMPC_proc_bind:
11743     C = new (Context) OMPProcBindClause();
11744     break;
11745   case llvm::omp::OMPC_schedule:
11746     C = new (Context) OMPScheduleClause();
11747     break;
11748   case llvm::omp::OMPC_ordered:
11749     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11750     break;
11751   case llvm::omp::OMPC_nowait:
11752     C = new (Context) OMPNowaitClause();
11753     break;
11754   case llvm::omp::OMPC_untied:
11755     C = new (Context) OMPUntiedClause();
11756     break;
11757   case llvm::omp::OMPC_mergeable:
11758     C = new (Context) OMPMergeableClause();
11759     break;
11760   case llvm::omp::OMPC_read:
11761     C = new (Context) OMPReadClause();
11762     break;
11763   case llvm::omp::OMPC_write:
11764     C = new (Context) OMPWriteClause();
11765     break;
11766   case llvm::omp::OMPC_update:
11767     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11768     break;
11769   case llvm::omp::OMPC_capture:
11770     C = new (Context) OMPCaptureClause();
11771     break;
11772   case llvm::omp::OMPC_seq_cst:
11773     C = new (Context) OMPSeqCstClause();
11774     break;
11775   case llvm::omp::OMPC_acq_rel:
11776     C = new (Context) OMPAcqRelClause();
11777     break;
11778   case llvm::omp::OMPC_acquire:
11779     C = new (Context) OMPAcquireClause();
11780     break;
11781   case llvm::omp::OMPC_release:
11782     C = new (Context) OMPReleaseClause();
11783     break;
11784   case llvm::omp::OMPC_relaxed:
11785     C = new (Context) OMPRelaxedClause();
11786     break;
11787   case llvm::omp::OMPC_threads:
11788     C = new (Context) OMPThreadsClause();
11789     break;
11790   case llvm::omp::OMPC_simd:
11791     C = new (Context) OMPSIMDClause();
11792     break;
11793   case llvm::omp::OMPC_nogroup:
11794     C = new (Context) OMPNogroupClause();
11795     break;
11796   case llvm::omp::OMPC_unified_address:
11797     C = new (Context) OMPUnifiedAddressClause();
11798     break;
11799   case llvm::omp::OMPC_unified_shared_memory:
11800     C = new (Context) OMPUnifiedSharedMemoryClause();
11801     break;
11802   case llvm::omp::OMPC_reverse_offload:
11803     C = new (Context) OMPReverseOffloadClause();
11804     break;
11805   case llvm::omp::OMPC_dynamic_allocators:
11806     C = new (Context) OMPDynamicAllocatorsClause();
11807     break;
11808   case llvm::omp::OMPC_atomic_default_mem_order:
11809     C = new (Context) OMPAtomicDefaultMemOrderClause();
11810     break;
11811  case llvm::omp::OMPC_private:
11812     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11813     break;
11814   case llvm::omp::OMPC_firstprivate:
11815     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11816     break;
11817   case llvm::omp::OMPC_lastprivate:
11818     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11819     break;
11820   case llvm::omp::OMPC_shared:
11821     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11822     break;
11823   case llvm::omp::OMPC_reduction: {
11824     unsigned N = Record.readInt();
11825     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11826     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11827     break;
11828   }
11829   case llvm::omp::OMPC_task_reduction:
11830     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11831     break;
11832   case llvm::omp::OMPC_in_reduction:
11833     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11834     break;
11835   case llvm::omp::OMPC_linear:
11836     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11837     break;
11838   case llvm::omp::OMPC_aligned:
11839     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11840     break;
11841   case llvm::omp::OMPC_copyin:
11842     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11843     break;
11844   case llvm::omp::OMPC_copyprivate:
11845     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11846     break;
11847   case llvm::omp::OMPC_flush:
11848     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11849     break;
11850   case llvm::omp::OMPC_depobj:
11851     C = OMPDepobjClause::CreateEmpty(Context);
11852     break;
11853   case llvm::omp::OMPC_depend: {
11854     unsigned NumVars = Record.readInt();
11855     unsigned NumLoops = Record.readInt();
11856     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11857     break;
11858   }
11859   case llvm::omp::OMPC_device:
11860     C = new (Context) OMPDeviceClause();
11861     break;
11862   case llvm::omp::OMPC_map: {
11863     OMPMappableExprListSizeTy Sizes;
11864     Sizes.NumVars = Record.readInt();
11865     Sizes.NumUniqueDeclarations = Record.readInt();
11866     Sizes.NumComponentLists = Record.readInt();
11867     Sizes.NumComponents = Record.readInt();
11868     C = OMPMapClause::CreateEmpty(Context, Sizes);
11869     break;
11870   }
11871   case llvm::omp::OMPC_num_teams:
11872     C = new (Context) OMPNumTeamsClause();
11873     break;
11874   case llvm::omp::OMPC_thread_limit:
11875     C = new (Context) OMPThreadLimitClause();
11876     break;
11877   case llvm::omp::OMPC_priority:
11878     C = new (Context) OMPPriorityClause();
11879     break;
11880   case llvm::omp::OMPC_grainsize:
11881     C = new (Context) OMPGrainsizeClause();
11882     break;
11883   case llvm::omp::OMPC_num_tasks:
11884     C = new (Context) OMPNumTasksClause();
11885     break;
11886   case llvm::omp::OMPC_hint:
11887     C = new (Context) OMPHintClause();
11888     break;
11889   case llvm::omp::OMPC_dist_schedule:
11890     C = new (Context) OMPDistScheduleClause();
11891     break;
11892   case llvm::omp::OMPC_defaultmap:
11893     C = new (Context) OMPDefaultmapClause();
11894     break;
11895   case llvm::omp::OMPC_to: {
11896     OMPMappableExprListSizeTy Sizes;
11897     Sizes.NumVars = Record.readInt();
11898     Sizes.NumUniqueDeclarations = Record.readInt();
11899     Sizes.NumComponentLists = Record.readInt();
11900     Sizes.NumComponents = Record.readInt();
11901     C = OMPToClause::CreateEmpty(Context, Sizes);
11902     break;
11903   }
11904   case llvm::omp::OMPC_from: {
11905     OMPMappableExprListSizeTy Sizes;
11906     Sizes.NumVars = Record.readInt();
11907     Sizes.NumUniqueDeclarations = Record.readInt();
11908     Sizes.NumComponentLists = Record.readInt();
11909     Sizes.NumComponents = Record.readInt();
11910     C = OMPFromClause::CreateEmpty(Context, Sizes);
11911     break;
11912   }
11913   case llvm::omp::OMPC_use_device_ptr: {
11914     OMPMappableExprListSizeTy Sizes;
11915     Sizes.NumVars = Record.readInt();
11916     Sizes.NumUniqueDeclarations = Record.readInt();
11917     Sizes.NumComponentLists = Record.readInt();
11918     Sizes.NumComponents = Record.readInt();
11919     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11920     break;
11921   }
11922   case llvm::omp::OMPC_use_device_addr: {
11923     OMPMappableExprListSizeTy Sizes;
11924     Sizes.NumVars = Record.readInt();
11925     Sizes.NumUniqueDeclarations = Record.readInt();
11926     Sizes.NumComponentLists = Record.readInt();
11927     Sizes.NumComponents = Record.readInt();
11928     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11929     break;
11930   }
11931   case llvm::omp::OMPC_is_device_ptr: {
11932     OMPMappableExprListSizeTy Sizes;
11933     Sizes.NumVars = Record.readInt();
11934     Sizes.NumUniqueDeclarations = Record.readInt();
11935     Sizes.NumComponentLists = Record.readInt();
11936     Sizes.NumComponents = Record.readInt();
11937     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11938     break;
11939   }
11940   case llvm::omp::OMPC_allocate:
11941     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11942     break;
11943   case llvm::omp::OMPC_nontemporal:
11944     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11945     break;
11946   case llvm::omp::OMPC_inclusive:
11947     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11948     break;
11949   case llvm::omp::OMPC_exclusive:
11950     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11951     break;
11952   case llvm::omp::OMPC_order:
11953     C = new (Context) OMPOrderClause();
11954     break;
11955   case llvm::omp::OMPC_destroy:
11956     C = new (Context) OMPDestroyClause();
11957     break;
11958   case llvm::omp::OMPC_detach:
11959     C = new (Context) OMPDetachClause();
11960     break;
11961   case llvm::omp::OMPC_uses_allocators:
11962     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11963     break;
11964   case llvm::omp::OMPC_affinity:
11965     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11966     break;
11967 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11968   case llvm::omp::Enum:                                                        \
11969     break;
11970 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11971   default:
11972     break;
11973   }
11974   assert(C && "Unknown OMPClause type");
11975 
11976   Visit(C);
11977   C->setLocStart(Record.readSourceLocation());
11978   C->setLocEnd(Record.readSourceLocation());
11979 
11980   return C;
11981 }
11982 
11983 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11984   C->setPreInitStmt(Record.readSubStmt(),
11985                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11986 }
11987 
11988 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11989   VisitOMPClauseWithPreInit(C);
11990   C->setPostUpdateExpr(Record.readSubExpr());
11991 }
11992 
11993 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11994   VisitOMPClauseWithPreInit(C);
11995   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
11996   C->setNameModifierLoc(Record.readSourceLocation());
11997   C->setColonLoc(Record.readSourceLocation());
11998   C->setCondition(Record.readSubExpr());
11999   C->setLParenLoc(Record.readSourceLocation());
12000 }
12001 
12002 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12003   VisitOMPClauseWithPreInit(C);
12004   C->setCondition(Record.readSubExpr());
12005   C->setLParenLoc(Record.readSourceLocation());
12006 }
12007 
12008 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12009   VisitOMPClauseWithPreInit(C);
12010   C->setNumThreads(Record.readSubExpr());
12011   C->setLParenLoc(Record.readSourceLocation());
12012 }
12013 
12014 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12015   C->setSafelen(Record.readSubExpr());
12016   C->setLParenLoc(Record.readSourceLocation());
12017 }
12018 
12019 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12020   C->setSimdlen(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12025   C->setAllocator(Record.readExpr());
12026   C->setLParenLoc(Record.readSourceLocation());
12027 }
12028 
12029 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12030   C->setNumForLoops(Record.readSubExpr());
12031   C->setLParenLoc(Record.readSourceLocation());
12032 }
12033 
12034 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12035   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12036   C->setLParenLoc(Record.readSourceLocation());
12037   C->setDefaultKindKwLoc(Record.readSourceLocation());
12038 }
12039 
12040 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12041   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12042   C->setLParenLoc(Record.readSourceLocation());
12043   C->setProcBindKindKwLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12047   VisitOMPClauseWithPreInit(C);
12048   C->setScheduleKind(
12049        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12050   C->setFirstScheduleModifier(
12051       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12052   C->setSecondScheduleModifier(
12053       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12054   C->setChunkSize(Record.readSubExpr());
12055   C->setLParenLoc(Record.readSourceLocation());
12056   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12057   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12058   C->setScheduleKindLoc(Record.readSourceLocation());
12059   C->setCommaLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12063   C->setNumForLoops(Record.readSubExpr());
12064   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12065     C->setLoopNumIterations(I, Record.readSubExpr());
12066   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12067     C->setLoopCounter(I, Record.readSubExpr());
12068   C->setLParenLoc(Record.readSourceLocation());
12069 }
12070 
12071 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12072   C->setEventHandler(Record.readSubExpr());
12073   C->setLParenLoc(Record.readSourceLocation());
12074 }
12075 
12076 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12077 
12078 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12079 
12080 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12081 
12082 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12083 
12084 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12085 
12086 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12087   if (C->isExtended()) {
12088     C->setLParenLoc(Record.readSourceLocation());
12089     C->setArgumentLoc(Record.readSourceLocation());
12090     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12091   }
12092 }
12093 
12094 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12095 
12096 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12097 
12098 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12099 
12100 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12101 
12102 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12103 
12104 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12105 
12106 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12107 
12108 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12109 
12110 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12111 
12112 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *) {}
12113 
12114 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12115 
12116 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12117     OMPUnifiedSharedMemoryClause *) {}
12118 
12119 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12120 
12121 void
12122 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12123 }
12124 
12125 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12126     OMPAtomicDefaultMemOrderClause *C) {
12127   C->setAtomicDefaultMemOrderKind(
12128       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12129   C->setLParenLoc(Record.readSourceLocation());
12130   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12131 }
12132 
12133 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12134   C->setLParenLoc(Record.readSourceLocation());
12135   unsigned NumVars = C->varlist_size();
12136   SmallVector<Expr *, 16> Vars;
12137   Vars.reserve(NumVars);
12138   for (unsigned i = 0; i != NumVars; ++i)
12139     Vars.push_back(Record.readSubExpr());
12140   C->setVarRefs(Vars);
12141   Vars.clear();
12142   for (unsigned i = 0; i != NumVars; ++i)
12143     Vars.push_back(Record.readSubExpr());
12144   C->setPrivateCopies(Vars);
12145 }
12146 
12147 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12148   VisitOMPClauseWithPreInit(C);
12149   C->setLParenLoc(Record.readSourceLocation());
12150   unsigned NumVars = C->varlist_size();
12151   SmallVector<Expr *, 16> Vars;
12152   Vars.reserve(NumVars);
12153   for (unsigned i = 0; i != NumVars; ++i)
12154     Vars.push_back(Record.readSubExpr());
12155   C->setVarRefs(Vars);
12156   Vars.clear();
12157   for (unsigned i = 0; i != NumVars; ++i)
12158     Vars.push_back(Record.readSubExpr());
12159   C->setPrivateCopies(Vars);
12160   Vars.clear();
12161   for (unsigned i = 0; i != NumVars; ++i)
12162     Vars.push_back(Record.readSubExpr());
12163   C->setInits(Vars);
12164 }
12165 
12166 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12167   VisitOMPClauseWithPostUpdate(C);
12168   C->setLParenLoc(Record.readSourceLocation());
12169   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12170   C->setKindLoc(Record.readSourceLocation());
12171   C->setColonLoc(Record.readSourceLocation());
12172   unsigned NumVars = C->varlist_size();
12173   SmallVector<Expr *, 16> Vars;
12174   Vars.reserve(NumVars);
12175   for (unsigned i = 0; i != NumVars; ++i)
12176     Vars.push_back(Record.readSubExpr());
12177   C->setVarRefs(Vars);
12178   Vars.clear();
12179   for (unsigned i = 0; i != NumVars; ++i)
12180     Vars.push_back(Record.readSubExpr());
12181   C->setPrivateCopies(Vars);
12182   Vars.clear();
12183   for (unsigned i = 0; i != NumVars; ++i)
12184     Vars.push_back(Record.readSubExpr());
12185   C->setSourceExprs(Vars);
12186   Vars.clear();
12187   for (unsigned i = 0; i != NumVars; ++i)
12188     Vars.push_back(Record.readSubExpr());
12189   C->setDestinationExprs(Vars);
12190   Vars.clear();
12191   for (unsigned i = 0; i != NumVars; ++i)
12192     Vars.push_back(Record.readSubExpr());
12193   C->setAssignmentOps(Vars);
12194 }
12195 
12196 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12197   C->setLParenLoc(Record.readSourceLocation());
12198   unsigned NumVars = C->varlist_size();
12199   SmallVector<Expr *, 16> Vars;
12200   Vars.reserve(NumVars);
12201   for (unsigned i = 0; i != NumVars; ++i)
12202     Vars.push_back(Record.readSubExpr());
12203   C->setVarRefs(Vars);
12204 }
12205 
12206 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12207   VisitOMPClauseWithPostUpdate(C);
12208   C->setLParenLoc(Record.readSourceLocation());
12209   C->setModifierLoc(Record.readSourceLocation());
12210   C->setColonLoc(Record.readSourceLocation());
12211   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12212   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12213   C->setQualifierLoc(NNSL);
12214   C->setNameInfo(DNI);
12215 
12216   unsigned NumVars = C->varlist_size();
12217   SmallVector<Expr *, 16> Vars;
12218   Vars.reserve(NumVars);
12219   for (unsigned i = 0; i != NumVars; ++i)
12220     Vars.push_back(Record.readSubExpr());
12221   C->setVarRefs(Vars);
12222   Vars.clear();
12223   for (unsigned i = 0; i != NumVars; ++i)
12224     Vars.push_back(Record.readSubExpr());
12225   C->setPrivates(Vars);
12226   Vars.clear();
12227   for (unsigned i = 0; i != NumVars; ++i)
12228     Vars.push_back(Record.readSubExpr());
12229   C->setLHSExprs(Vars);
12230   Vars.clear();
12231   for (unsigned i = 0; i != NumVars; ++i)
12232     Vars.push_back(Record.readSubExpr());
12233   C->setRHSExprs(Vars);
12234   Vars.clear();
12235   for (unsigned i = 0; i != NumVars; ++i)
12236     Vars.push_back(Record.readSubExpr());
12237   C->setReductionOps(Vars);
12238   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12239     Vars.clear();
12240     for (unsigned i = 0; i != NumVars; ++i)
12241       Vars.push_back(Record.readSubExpr());
12242     C->setInscanCopyOps(Vars);
12243     Vars.clear();
12244     for (unsigned i = 0; i != NumVars; ++i)
12245       Vars.push_back(Record.readSubExpr());
12246     C->setInscanCopyArrayTemps(Vars);
12247     Vars.clear();
12248     for (unsigned i = 0; i != NumVars; ++i)
12249       Vars.push_back(Record.readSubExpr());
12250     C->setInscanCopyArrayElems(Vars);
12251   }
12252 }
12253 
12254 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12255   VisitOMPClauseWithPostUpdate(C);
12256   C->setLParenLoc(Record.readSourceLocation());
12257   C->setColonLoc(Record.readSourceLocation());
12258   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12259   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12260   C->setQualifierLoc(NNSL);
12261   C->setNameInfo(DNI);
12262 
12263   unsigned NumVars = C->varlist_size();
12264   SmallVector<Expr *, 16> Vars;
12265   Vars.reserve(NumVars);
12266   for (unsigned I = 0; I != NumVars; ++I)
12267     Vars.push_back(Record.readSubExpr());
12268   C->setVarRefs(Vars);
12269   Vars.clear();
12270   for (unsigned I = 0; I != NumVars; ++I)
12271     Vars.push_back(Record.readSubExpr());
12272   C->setPrivates(Vars);
12273   Vars.clear();
12274   for (unsigned I = 0; I != NumVars; ++I)
12275     Vars.push_back(Record.readSubExpr());
12276   C->setLHSExprs(Vars);
12277   Vars.clear();
12278   for (unsigned I = 0; I != NumVars; ++I)
12279     Vars.push_back(Record.readSubExpr());
12280   C->setRHSExprs(Vars);
12281   Vars.clear();
12282   for (unsigned I = 0; I != NumVars; ++I)
12283     Vars.push_back(Record.readSubExpr());
12284   C->setReductionOps(Vars);
12285 }
12286 
12287 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12288   VisitOMPClauseWithPostUpdate(C);
12289   C->setLParenLoc(Record.readSourceLocation());
12290   C->setColonLoc(Record.readSourceLocation());
12291   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12292   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12293   C->setQualifierLoc(NNSL);
12294   C->setNameInfo(DNI);
12295 
12296   unsigned NumVars = C->varlist_size();
12297   SmallVector<Expr *, 16> Vars;
12298   Vars.reserve(NumVars);
12299   for (unsigned I = 0; I != NumVars; ++I)
12300     Vars.push_back(Record.readSubExpr());
12301   C->setVarRefs(Vars);
12302   Vars.clear();
12303   for (unsigned I = 0; I != NumVars; ++I)
12304     Vars.push_back(Record.readSubExpr());
12305   C->setPrivates(Vars);
12306   Vars.clear();
12307   for (unsigned I = 0; I != NumVars; ++I)
12308     Vars.push_back(Record.readSubExpr());
12309   C->setLHSExprs(Vars);
12310   Vars.clear();
12311   for (unsigned I = 0; I != NumVars; ++I)
12312     Vars.push_back(Record.readSubExpr());
12313   C->setRHSExprs(Vars);
12314   Vars.clear();
12315   for (unsigned I = 0; I != NumVars; ++I)
12316     Vars.push_back(Record.readSubExpr());
12317   C->setReductionOps(Vars);
12318   Vars.clear();
12319   for (unsigned I = 0; I != NumVars; ++I)
12320     Vars.push_back(Record.readSubExpr());
12321   C->setTaskgroupDescriptors(Vars);
12322 }
12323 
12324 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12325   VisitOMPClauseWithPostUpdate(C);
12326   C->setLParenLoc(Record.readSourceLocation());
12327   C->setColonLoc(Record.readSourceLocation());
12328   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12329   C->setModifierLoc(Record.readSourceLocation());
12330   unsigned NumVars = C->varlist_size();
12331   SmallVector<Expr *, 16> Vars;
12332   Vars.reserve(NumVars);
12333   for (unsigned i = 0; i != NumVars; ++i)
12334     Vars.push_back(Record.readSubExpr());
12335   C->setVarRefs(Vars);
12336   Vars.clear();
12337   for (unsigned i = 0; i != NumVars; ++i)
12338     Vars.push_back(Record.readSubExpr());
12339   C->setPrivates(Vars);
12340   Vars.clear();
12341   for (unsigned i = 0; i != NumVars; ++i)
12342     Vars.push_back(Record.readSubExpr());
12343   C->setInits(Vars);
12344   Vars.clear();
12345   for (unsigned i = 0; i != NumVars; ++i)
12346     Vars.push_back(Record.readSubExpr());
12347   C->setUpdates(Vars);
12348   Vars.clear();
12349   for (unsigned i = 0; i != NumVars; ++i)
12350     Vars.push_back(Record.readSubExpr());
12351   C->setFinals(Vars);
12352   C->setStep(Record.readSubExpr());
12353   C->setCalcStep(Record.readSubExpr());
12354   Vars.clear();
12355   for (unsigned I = 0; I != NumVars + 1; ++I)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setUsedExprs(Vars);
12358 }
12359 
12360 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12361   C->setLParenLoc(Record.readSourceLocation());
12362   C->setColonLoc(Record.readSourceLocation());
12363   unsigned NumVars = C->varlist_size();
12364   SmallVector<Expr *, 16> Vars;
12365   Vars.reserve(NumVars);
12366   for (unsigned i = 0; i != NumVars; ++i)
12367     Vars.push_back(Record.readSubExpr());
12368   C->setVarRefs(Vars);
12369   C->setAlignment(Record.readSubExpr());
12370 }
12371 
12372 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12373   C->setLParenLoc(Record.readSourceLocation());
12374   unsigned NumVars = C->varlist_size();
12375   SmallVector<Expr *, 16> Exprs;
12376   Exprs.reserve(NumVars);
12377   for (unsigned i = 0; i != NumVars; ++i)
12378     Exprs.push_back(Record.readSubExpr());
12379   C->setVarRefs(Exprs);
12380   Exprs.clear();
12381   for (unsigned i = 0; i != NumVars; ++i)
12382     Exprs.push_back(Record.readSubExpr());
12383   C->setSourceExprs(Exprs);
12384   Exprs.clear();
12385   for (unsigned i = 0; i != NumVars; ++i)
12386     Exprs.push_back(Record.readSubExpr());
12387   C->setDestinationExprs(Exprs);
12388   Exprs.clear();
12389   for (unsigned i = 0; i != NumVars; ++i)
12390     Exprs.push_back(Record.readSubExpr());
12391   C->setAssignmentOps(Exprs);
12392 }
12393 
12394 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12395   C->setLParenLoc(Record.readSourceLocation());
12396   unsigned NumVars = C->varlist_size();
12397   SmallVector<Expr *, 16> Exprs;
12398   Exprs.reserve(NumVars);
12399   for (unsigned i = 0; i != NumVars; ++i)
12400     Exprs.push_back(Record.readSubExpr());
12401   C->setVarRefs(Exprs);
12402   Exprs.clear();
12403   for (unsigned i = 0; i != NumVars; ++i)
12404     Exprs.push_back(Record.readSubExpr());
12405   C->setSourceExprs(Exprs);
12406   Exprs.clear();
12407   for (unsigned i = 0; i != NumVars; ++i)
12408     Exprs.push_back(Record.readSubExpr());
12409   C->setDestinationExprs(Exprs);
12410   Exprs.clear();
12411   for (unsigned i = 0; i != NumVars; ++i)
12412     Exprs.push_back(Record.readSubExpr());
12413   C->setAssignmentOps(Exprs);
12414 }
12415 
12416 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12417   C->setLParenLoc(Record.readSourceLocation());
12418   unsigned NumVars = C->varlist_size();
12419   SmallVector<Expr *, 16> Vars;
12420   Vars.reserve(NumVars);
12421   for (unsigned i = 0; i != NumVars; ++i)
12422     Vars.push_back(Record.readSubExpr());
12423   C->setVarRefs(Vars);
12424 }
12425 
12426 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12427   C->setDepobj(Record.readSubExpr());
12428   C->setLParenLoc(Record.readSourceLocation());
12429 }
12430 
12431 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12432   C->setLParenLoc(Record.readSourceLocation());
12433   C->setModifier(Record.readSubExpr());
12434   C->setDependencyKind(
12435       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12436   C->setDependencyLoc(Record.readSourceLocation());
12437   C->setColonLoc(Record.readSourceLocation());
12438   unsigned NumVars = C->varlist_size();
12439   SmallVector<Expr *, 16> Vars;
12440   Vars.reserve(NumVars);
12441   for (unsigned I = 0; I != NumVars; ++I)
12442     Vars.push_back(Record.readSubExpr());
12443   C->setVarRefs(Vars);
12444   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12445     C->setLoopData(I, Record.readSubExpr());
12446 }
12447 
12448 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12449   VisitOMPClauseWithPreInit(C);
12450   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12451   C->setDevice(Record.readSubExpr());
12452   C->setModifierLoc(Record.readSourceLocation());
12453   C->setLParenLoc(Record.readSourceLocation());
12454 }
12455 
12456 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12457   C->setLParenLoc(Record.readSourceLocation());
12458   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12459     C->setMapTypeModifier(
12460         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12461     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12462   }
12463   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12464   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12465   C->setMapType(
12466      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12467   C->setMapLoc(Record.readSourceLocation());
12468   C->setColonLoc(Record.readSourceLocation());
12469   auto NumVars = C->varlist_size();
12470   auto UniqueDecls = C->getUniqueDeclarationsNum();
12471   auto TotalLists = C->getTotalComponentListNum();
12472   auto TotalComponents = C->getTotalComponentsNum();
12473 
12474   SmallVector<Expr *, 16> Vars;
12475   Vars.reserve(NumVars);
12476   for (unsigned i = 0; i != NumVars; ++i)
12477     Vars.push_back(Record.readExpr());
12478   C->setVarRefs(Vars);
12479 
12480   SmallVector<Expr *, 16> UDMappers;
12481   UDMappers.reserve(NumVars);
12482   for (unsigned I = 0; I < NumVars; ++I)
12483     UDMappers.push_back(Record.readExpr());
12484   C->setUDMapperRefs(UDMappers);
12485 
12486   SmallVector<ValueDecl *, 16> Decls;
12487   Decls.reserve(UniqueDecls);
12488   for (unsigned i = 0; i < UniqueDecls; ++i)
12489     Decls.push_back(Record.readDeclAs<ValueDecl>());
12490   C->setUniqueDecls(Decls);
12491 
12492   SmallVector<unsigned, 16> ListsPerDecl;
12493   ListsPerDecl.reserve(UniqueDecls);
12494   for (unsigned i = 0; i < UniqueDecls; ++i)
12495     ListsPerDecl.push_back(Record.readInt());
12496   C->setDeclNumLists(ListsPerDecl);
12497 
12498   SmallVector<unsigned, 32> ListSizes;
12499   ListSizes.reserve(TotalLists);
12500   for (unsigned i = 0; i < TotalLists; ++i)
12501     ListSizes.push_back(Record.readInt());
12502   C->setComponentListSizes(ListSizes);
12503 
12504   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12505   Components.reserve(TotalComponents);
12506   for (unsigned i = 0; i < TotalComponents; ++i) {
12507     Expr *AssociatedExprPr = Record.readExpr();
12508     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12509     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12510                             /*IsNonContiguous=*/false);
12511   }
12512   C->setComponents(Components, ListSizes);
12513 }
12514 
12515 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12516   C->setLParenLoc(Record.readSourceLocation());
12517   C->setColonLoc(Record.readSourceLocation());
12518   C->setAllocator(Record.readSubExpr());
12519   unsigned NumVars = C->varlist_size();
12520   SmallVector<Expr *, 16> Vars;
12521   Vars.reserve(NumVars);
12522   for (unsigned i = 0; i != NumVars; ++i)
12523     Vars.push_back(Record.readSubExpr());
12524   C->setVarRefs(Vars);
12525 }
12526 
12527 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12528   VisitOMPClauseWithPreInit(C);
12529   C->setNumTeams(Record.readSubExpr());
12530   C->setLParenLoc(Record.readSourceLocation());
12531 }
12532 
12533 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12534   VisitOMPClauseWithPreInit(C);
12535   C->setThreadLimit(Record.readSubExpr());
12536   C->setLParenLoc(Record.readSourceLocation());
12537 }
12538 
12539 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12540   VisitOMPClauseWithPreInit(C);
12541   C->setPriority(Record.readSubExpr());
12542   C->setLParenLoc(Record.readSourceLocation());
12543 }
12544 
12545 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12546   VisitOMPClauseWithPreInit(C);
12547   C->setGrainsize(Record.readSubExpr());
12548   C->setLParenLoc(Record.readSourceLocation());
12549 }
12550 
12551 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12552   VisitOMPClauseWithPreInit(C);
12553   C->setNumTasks(Record.readSubExpr());
12554   C->setLParenLoc(Record.readSourceLocation());
12555 }
12556 
12557 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12558   C->setHint(Record.readSubExpr());
12559   C->setLParenLoc(Record.readSourceLocation());
12560 }
12561 
12562 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12563   VisitOMPClauseWithPreInit(C);
12564   C->setDistScheduleKind(
12565       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12566   C->setChunkSize(Record.readSubExpr());
12567   C->setLParenLoc(Record.readSourceLocation());
12568   C->setDistScheduleKindLoc(Record.readSourceLocation());
12569   C->setCommaLoc(Record.readSourceLocation());
12570 }
12571 
12572 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12573   C->setDefaultmapKind(
12574        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12575   C->setDefaultmapModifier(
12576       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12577   C->setLParenLoc(Record.readSourceLocation());
12578   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12579   C->setDefaultmapKindLoc(Record.readSourceLocation());
12580 }
12581 
12582 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12583   C->setLParenLoc(Record.readSourceLocation());
12584   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12585     C->setMotionModifier(
12586         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12587     C->setMotionModifierLoc(I, Record.readSourceLocation());
12588   }
12589   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12590   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12591   C->setColonLoc(Record.readSourceLocation());
12592   auto NumVars = C->varlist_size();
12593   auto UniqueDecls = C->getUniqueDeclarationsNum();
12594   auto TotalLists = C->getTotalComponentListNum();
12595   auto TotalComponents = C->getTotalComponentsNum();
12596 
12597   SmallVector<Expr *, 16> Vars;
12598   Vars.reserve(NumVars);
12599   for (unsigned i = 0; i != NumVars; ++i)
12600     Vars.push_back(Record.readSubExpr());
12601   C->setVarRefs(Vars);
12602 
12603   SmallVector<Expr *, 16> UDMappers;
12604   UDMappers.reserve(NumVars);
12605   for (unsigned I = 0; I < NumVars; ++I)
12606     UDMappers.push_back(Record.readSubExpr());
12607   C->setUDMapperRefs(UDMappers);
12608 
12609   SmallVector<ValueDecl *, 16> Decls;
12610   Decls.reserve(UniqueDecls);
12611   for (unsigned i = 0; i < UniqueDecls; ++i)
12612     Decls.push_back(Record.readDeclAs<ValueDecl>());
12613   C->setUniqueDecls(Decls);
12614 
12615   SmallVector<unsigned, 16> ListsPerDecl;
12616   ListsPerDecl.reserve(UniqueDecls);
12617   for (unsigned i = 0; i < UniqueDecls; ++i)
12618     ListsPerDecl.push_back(Record.readInt());
12619   C->setDeclNumLists(ListsPerDecl);
12620 
12621   SmallVector<unsigned, 32> ListSizes;
12622   ListSizes.reserve(TotalLists);
12623   for (unsigned i = 0; i < TotalLists; ++i)
12624     ListSizes.push_back(Record.readInt());
12625   C->setComponentListSizes(ListSizes);
12626 
12627   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12628   Components.reserve(TotalComponents);
12629   for (unsigned i = 0; i < TotalComponents; ++i) {
12630     Expr *AssociatedExprPr = Record.readSubExpr();
12631     bool IsNonContiguous = Record.readBool();
12632     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12633     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12634   }
12635   C->setComponents(Components, ListSizes);
12636 }
12637 
12638 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12639   C->setLParenLoc(Record.readSourceLocation());
12640   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12641     C->setMotionModifier(
12642         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12643     C->setMotionModifierLoc(I, Record.readSourceLocation());
12644   }
12645   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12646   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12647   C->setColonLoc(Record.readSourceLocation());
12648   auto NumVars = C->varlist_size();
12649   auto UniqueDecls = C->getUniqueDeclarationsNum();
12650   auto TotalLists = C->getTotalComponentListNum();
12651   auto TotalComponents = C->getTotalComponentsNum();
12652 
12653   SmallVector<Expr *, 16> Vars;
12654   Vars.reserve(NumVars);
12655   for (unsigned i = 0; i != NumVars; ++i)
12656     Vars.push_back(Record.readSubExpr());
12657   C->setVarRefs(Vars);
12658 
12659   SmallVector<Expr *, 16> UDMappers;
12660   UDMappers.reserve(NumVars);
12661   for (unsigned I = 0; I < NumVars; ++I)
12662     UDMappers.push_back(Record.readSubExpr());
12663   C->setUDMapperRefs(UDMappers);
12664 
12665   SmallVector<ValueDecl *, 16> Decls;
12666   Decls.reserve(UniqueDecls);
12667   for (unsigned i = 0; i < UniqueDecls; ++i)
12668     Decls.push_back(Record.readDeclAs<ValueDecl>());
12669   C->setUniqueDecls(Decls);
12670 
12671   SmallVector<unsigned, 16> ListsPerDecl;
12672   ListsPerDecl.reserve(UniqueDecls);
12673   for (unsigned i = 0; i < UniqueDecls; ++i)
12674     ListsPerDecl.push_back(Record.readInt());
12675   C->setDeclNumLists(ListsPerDecl);
12676 
12677   SmallVector<unsigned, 32> ListSizes;
12678   ListSizes.reserve(TotalLists);
12679   for (unsigned i = 0; i < TotalLists; ++i)
12680     ListSizes.push_back(Record.readInt());
12681   C->setComponentListSizes(ListSizes);
12682 
12683   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12684   Components.reserve(TotalComponents);
12685   for (unsigned i = 0; i < TotalComponents; ++i) {
12686     Expr *AssociatedExprPr = Record.readSubExpr();
12687     bool IsNonContiguous = Record.readBool();
12688     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12689     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12690   }
12691   C->setComponents(Components, ListSizes);
12692 }
12693 
12694 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12695   C->setLParenLoc(Record.readSourceLocation());
12696   auto NumVars = C->varlist_size();
12697   auto UniqueDecls = C->getUniqueDeclarationsNum();
12698   auto TotalLists = C->getTotalComponentListNum();
12699   auto TotalComponents = C->getTotalComponentsNum();
12700 
12701   SmallVector<Expr *, 16> Vars;
12702   Vars.reserve(NumVars);
12703   for (unsigned i = 0; i != NumVars; ++i)
12704     Vars.push_back(Record.readSubExpr());
12705   C->setVarRefs(Vars);
12706   Vars.clear();
12707   for (unsigned i = 0; i != NumVars; ++i)
12708     Vars.push_back(Record.readSubExpr());
12709   C->setPrivateCopies(Vars);
12710   Vars.clear();
12711   for (unsigned i = 0; i != NumVars; ++i)
12712     Vars.push_back(Record.readSubExpr());
12713   C->setInits(Vars);
12714 
12715   SmallVector<ValueDecl *, 16> Decls;
12716   Decls.reserve(UniqueDecls);
12717   for (unsigned i = 0; i < UniqueDecls; ++i)
12718     Decls.push_back(Record.readDeclAs<ValueDecl>());
12719   C->setUniqueDecls(Decls);
12720 
12721   SmallVector<unsigned, 16> ListsPerDecl;
12722   ListsPerDecl.reserve(UniqueDecls);
12723   for (unsigned i = 0; i < UniqueDecls; ++i)
12724     ListsPerDecl.push_back(Record.readInt());
12725   C->setDeclNumLists(ListsPerDecl);
12726 
12727   SmallVector<unsigned, 32> ListSizes;
12728   ListSizes.reserve(TotalLists);
12729   for (unsigned i = 0; i < TotalLists; ++i)
12730     ListSizes.push_back(Record.readInt());
12731   C->setComponentListSizes(ListSizes);
12732 
12733   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12734   Components.reserve(TotalComponents);
12735   for (unsigned i = 0; i < TotalComponents; ++i) {
12736     auto *AssociatedExprPr = Record.readSubExpr();
12737     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12738     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12739                             /*IsNonContiguous=*/false);
12740   }
12741   C->setComponents(Components, ListSizes);
12742 }
12743 
12744 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12745   C->setLParenLoc(Record.readSourceLocation());
12746   auto NumVars = C->varlist_size();
12747   auto UniqueDecls = C->getUniqueDeclarationsNum();
12748   auto TotalLists = C->getTotalComponentListNum();
12749   auto TotalComponents = C->getTotalComponentsNum();
12750 
12751   SmallVector<Expr *, 16> Vars;
12752   Vars.reserve(NumVars);
12753   for (unsigned i = 0; i != NumVars; ++i)
12754     Vars.push_back(Record.readSubExpr());
12755   C->setVarRefs(Vars);
12756 
12757   SmallVector<ValueDecl *, 16> Decls;
12758   Decls.reserve(UniqueDecls);
12759   for (unsigned i = 0; i < UniqueDecls; ++i)
12760     Decls.push_back(Record.readDeclAs<ValueDecl>());
12761   C->setUniqueDecls(Decls);
12762 
12763   SmallVector<unsigned, 16> ListsPerDecl;
12764   ListsPerDecl.reserve(UniqueDecls);
12765   for (unsigned i = 0; i < UniqueDecls; ++i)
12766     ListsPerDecl.push_back(Record.readInt());
12767   C->setDeclNumLists(ListsPerDecl);
12768 
12769   SmallVector<unsigned, 32> ListSizes;
12770   ListSizes.reserve(TotalLists);
12771   for (unsigned i = 0; i < TotalLists; ++i)
12772     ListSizes.push_back(Record.readInt());
12773   C->setComponentListSizes(ListSizes);
12774 
12775   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12776   Components.reserve(TotalComponents);
12777   for (unsigned i = 0; i < TotalComponents; ++i) {
12778     Expr *AssociatedExpr = Record.readSubExpr();
12779     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12780     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12781                             /*IsNonContiguous*/ false);
12782   }
12783   C->setComponents(Components, ListSizes);
12784 }
12785 
12786 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12787   C->setLParenLoc(Record.readSourceLocation());
12788   auto NumVars = C->varlist_size();
12789   auto UniqueDecls = C->getUniqueDeclarationsNum();
12790   auto TotalLists = C->getTotalComponentListNum();
12791   auto TotalComponents = C->getTotalComponentsNum();
12792 
12793   SmallVector<Expr *, 16> Vars;
12794   Vars.reserve(NumVars);
12795   for (unsigned i = 0; i != NumVars; ++i)
12796     Vars.push_back(Record.readSubExpr());
12797   C->setVarRefs(Vars);
12798   Vars.clear();
12799 
12800   SmallVector<ValueDecl *, 16> Decls;
12801   Decls.reserve(UniqueDecls);
12802   for (unsigned i = 0; i < UniqueDecls; ++i)
12803     Decls.push_back(Record.readDeclAs<ValueDecl>());
12804   C->setUniqueDecls(Decls);
12805 
12806   SmallVector<unsigned, 16> ListsPerDecl;
12807   ListsPerDecl.reserve(UniqueDecls);
12808   for (unsigned i = 0; i < UniqueDecls; ++i)
12809     ListsPerDecl.push_back(Record.readInt());
12810   C->setDeclNumLists(ListsPerDecl);
12811 
12812   SmallVector<unsigned, 32> ListSizes;
12813   ListSizes.reserve(TotalLists);
12814   for (unsigned i = 0; i < TotalLists; ++i)
12815     ListSizes.push_back(Record.readInt());
12816   C->setComponentListSizes(ListSizes);
12817 
12818   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12819   Components.reserve(TotalComponents);
12820   for (unsigned i = 0; i < TotalComponents; ++i) {
12821     Expr *AssociatedExpr = Record.readSubExpr();
12822     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12823     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12824                             /*IsNonContiguous=*/false);
12825   }
12826   C->setComponents(Components, ListSizes);
12827 }
12828 
12829 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12830   C->setLParenLoc(Record.readSourceLocation());
12831   unsigned NumVars = C->varlist_size();
12832   SmallVector<Expr *, 16> Vars;
12833   Vars.reserve(NumVars);
12834   for (unsigned i = 0; i != NumVars; ++i)
12835     Vars.push_back(Record.readSubExpr());
12836   C->setVarRefs(Vars);
12837   Vars.clear();
12838   Vars.reserve(NumVars);
12839   for (unsigned i = 0; i != NumVars; ++i)
12840     Vars.push_back(Record.readSubExpr());
12841   C->setPrivateRefs(Vars);
12842 }
12843 
12844 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12845   C->setLParenLoc(Record.readSourceLocation());
12846   unsigned NumVars = C->varlist_size();
12847   SmallVector<Expr *, 16> Vars;
12848   Vars.reserve(NumVars);
12849   for (unsigned i = 0; i != NumVars; ++i)
12850     Vars.push_back(Record.readSubExpr());
12851   C->setVarRefs(Vars);
12852 }
12853 
12854 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12855   C->setLParenLoc(Record.readSourceLocation());
12856   unsigned NumVars = C->varlist_size();
12857   SmallVector<Expr *, 16> Vars;
12858   Vars.reserve(NumVars);
12859   for (unsigned i = 0; i != NumVars; ++i)
12860     Vars.push_back(Record.readSubExpr());
12861   C->setVarRefs(Vars);
12862 }
12863 
12864 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12865   C->setLParenLoc(Record.readSourceLocation());
12866   unsigned NumOfAllocators = C->getNumberOfAllocators();
12867   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12868   Data.reserve(NumOfAllocators);
12869   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12870     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12871     D.Allocator = Record.readSubExpr();
12872     D.AllocatorTraits = Record.readSubExpr();
12873     D.LParenLoc = Record.readSourceLocation();
12874     D.RParenLoc = Record.readSourceLocation();
12875   }
12876   C->setAllocatorsData(Data);
12877 }
12878 
12879 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12880   C->setLParenLoc(Record.readSourceLocation());
12881   C->setModifier(Record.readSubExpr());
12882   C->setColonLoc(Record.readSourceLocation());
12883   unsigned NumOfLocators = C->varlist_size();
12884   SmallVector<Expr *, 4> Locators;
12885   Locators.reserve(NumOfLocators);
12886   for (unsigned I = 0; I != NumOfLocators; ++I)
12887     Locators.push_back(Record.readSubExpr());
12888   C->setVarRefs(Locators);
12889 }
12890 
12891 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12892   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12893   C->setLParenLoc(Record.readSourceLocation());
12894   C->setKindKwLoc(Record.readSourceLocation());
12895 }
12896 
12897 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12898   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12899   TI.Sets.resize(readUInt32());
12900   for (auto &Set : TI.Sets) {
12901     Set.Kind = readEnum<llvm::omp::TraitSet>();
12902     Set.Selectors.resize(readUInt32());
12903     for (auto &Selector : Set.Selectors) {
12904       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12905       Selector.ScoreOrCondition = nullptr;
12906       if (readBool())
12907         Selector.ScoreOrCondition = readExprRef();
12908       Selector.Properties.resize(readUInt32());
12909       for (auto &Property : Selector.Properties)
12910         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12911     }
12912   }
12913   return &TI;
12914 }
12915 
12916 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12917   if (!Data)
12918     return;
12919   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12920     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
12921     skipInts(3);
12922   }
12923   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
12924   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
12925     Clauses[I] = readOMPClause();
12926   Data->setClauses(Clauses);
12927   if (Data->hasAssociatedStmt())
12928     Data->setAssociatedStmt(readStmt());
12929   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
12930     Data->getChildren()[I] = readStmt();
12931 }
12932