xref: /freebsd/contrib/llvm-project/clang/lib/Serialization/ASTReader.cpp (revision 18054d0220cfc8df9c9568c437bd6fbb59d53c3c)
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 "ASTCommon.h"
14 #include "ASTReaderInternals.h"
15 #include "clang/AST/ASTConsumer.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/ASTUnresolvedSet.h"
19 #include "clang/AST/AbstractTypeReader.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclBase.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclFriend.h"
24 #include "clang/AST/DeclGroup.h"
25 #include "clang/AST/DeclObjC.h"
26 #include "clang/AST/DeclTemplate.h"
27 #include "clang/AST/DeclarationName.h"
28 #include "clang/AST/Expr.h"
29 #include "clang/AST/ExprCXX.h"
30 #include "clang/AST/ExternalASTSource.h"
31 #include "clang/AST/NestedNameSpecifier.h"
32 #include "clang/AST/ODRHash.h"
33 #include "clang/AST/OpenMPClause.h"
34 #include "clang/AST/RawCommentList.h"
35 #include "clang/AST/TemplateBase.h"
36 #include "clang/AST/TemplateName.h"
37 #include "clang/AST/Type.h"
38 #include "clang/AST/TypeLoc.h"
39 #include "clang/AST/TypeLocVisitor.h"
40 #include "clang/AST/UnresolvedSet.h"
41 #include "clang/Basic/CommentOptions.h"
42 #include "clang/Basic/Diagnostic.h"
43 #include "clang/Basic/DiagnosticError.h"
44 #include "clang/Basic/DiagnosticOptions.h"
45 #include "clang/Basic/ExceptionSpecificationType.h"
46 #include "clang/Basic/FileManager.h"
47 #include "clang/Basic/FileSystemOptions.h"
48 #include "clang/Basic/IdentifierTable.h"
49 #include "clang/Basic/LLVM.h"
50 #include "clang/Basic/LangOptions.h"
51 #include "clang/Basic/Module.h"
52 #include "clang/Basic/ObjCRuntime.h"
53 #include "clang/Basic/OpenMPKinds.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/ASTRecordReader.h"
80 #include "clang/Serialization/ContinuousRangeMap.h"
81 #include "clang/Serialization/GlobalModuleIndex.h"
82 #include "clang/Serialization/InMemoryModuleCache.h"
83 #include "clang/Serialization/ModuleFile.h"
84 #include "clang/Serialization/ModuleFileExtension.h"
85 #include "clang/Serialization/ModuleManager.h"
86 #include "clang/Serialization/PCHContainerOperations.h"
87 #include "clang/Serialization/SerializationDiagnostic.h"
88 #include "llvm/ADT/APFloat.h"
89 #include "llvm/ADT/APInt.h"
90 #include "llvm/ADT/APSInt.h"
91 #include "llvm/ADT/ArrayRef.h"
92 #include "llvm/ADT/DenseMap.h"
93 #include "llvm/ADT/FloatingPointMode.h"
94 #include "llvm/ADT/FoldingSet.h"
95 #include "llvm/ADT/Hashing.h"
96 #include "llvm/ADT/IntrusiveRefCntPtr.h"
97 #include "llvm/ADT/None.h"
98 #include "llvm/ADT/Optional.h"
99 #include "llvm/ADT/STLExtras.h"
100 #include "llvm/ADT/ScopeExit.h"
101 #include "llvm/ADT/SmallPtrSet.h"
102 #include "llvm/ADT/SmallString.h"
103 #include "llvm/ADT/SmallVector.h"
104 #include "llvm/ADT/StringExtras.h"
105 #include "llvm/ADT/StringMap.h"
106 #include "llvm/ADT/StringRef.h"
107 #include "llvm/ADT/Triple.h"
108 #include "llvm/ADT/iterator_range.h"
109 #include "llvm/Bitstream/BitstreamReader.h"
110 #include "llvm/Support/Casting.h"
111 #include "llvm/Support/Compiler.h"
112 #include "llvm/Support/Compression.h"
113 #include "llvm/Support/DJB.h"
114 #include "llvm/Support/Endian.h"
115 #include "llvm/Support/Error.h"
116 #include "llvm/Support/ErrorHandling.h"
117 #include "llvm/Support/FileSystem.h"
118 #include "llvm/Support/LEB128.h"
119 #include "llvm/Support/MemoryBuffer.h"
120 #include "llvm/Support/Path.h"
121 #include "llvm/Support/SaveAndRestore.h"
122 #include "llvm/Support/Timer.h"
123 #include "llvm/Support/VersionTuple.h"
124 #include "llvm/Support/raw_ostream.h"
125 #include <algorithm>
126 #include <cassert>
127 #include <cstddef>
128 #include <cstdint>
129 #include <cstdio>
130 #include <ctime>
131 #include <iterator>
132 #include <limits>
133 #include <map>
134 #include <memory>
135 #include <string>
136 #include <system_error>
137 #include <tuple>
138 #include <utility>
139 #include <vector>
140 
141 using namespace clang;
142 using namespace clang::serialization;
143 using namespace clang::serialization::reader;
144 using llvm::BitstreamCursor;
145 
146 //===----------------------------------------------------------------------===//
147 // ChainedASTReaderListener implementation
148 //===----------------------------------------------------------------------===//
149 
150 bool
151 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
152   return First->ReadFullVersionInformation(FullVersion) ||
153          Second->ReadFullVersionInformation(FullVersion);
154 }
155 
156 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
157   First->ReadModuleName(ModuleName);
158   Second->ReadModuleName(ModuleName);
159 }
160 
161 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
162   First->ReadModuleMapFile(ModuleMapPath);
163   Second->ReadModuleMapFile(ModuleMapPath);
164 }
165 
166 bool
167 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
168                                               bool Complain,
169                                               bool AllowCompatibleDifferences) {
170   return First->ReadLanguageOptions(LangOpts, Complain,
171                                     AllowCompatibleDifferences) ||
172          Second->ReadLanguageOptions(LangOpts, Complain,
173                                      AllowCompatibleDifferences);
174 }
175 
176 bool ChainedASTReaderListener::ReadTargetOptions(
177     const TargetOptions &TargetOpts, bool Complain,
178     bool AllowCompatibleDifferences) {
179   return First->ReadTargetOptions(TargetOpts, Complain,
180                                   AllowCompatibleDifferences) ||
181          Second->ReadTargetOptions(TargetOpts, Complain,
182                                    AllowCompatibleDifferences);
183 }
184 
185 bool ChainedASTReaderListener::ReadDiagnosticOptions(
186     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
187   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
188          Second->ReadDiagnosticOptions(DiagOpts, Complain);
189 }
190 
191 bool
192 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
193                                                 bool Complain) {
194   return First->ReadFileSystemOptions(FSOpts, Complain) ||
195          Second->ReadFileSystemOptions(FSOpts, Complain);
196 }
197 
198 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
199     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
200     bool Complain) {
201   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
202                                         Complain) ||
203          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
204                                          Complain);
205 }
206 
207 bool ChainedASTReaderListener::ReadPreprocessorOptions(
208     const PreprocessorOptions &PPOpts, bool Complain,
209     std::string &SuggestedPredefines) {
210   return First->ReadPreprocessorOptions(PPOpts, Complain,
211                                         SuggestedPredefines) ||
212          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
213 }
214 
215 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
216                                            unsigned Value) {
217   First->ReadCounter(M, Value);
218   Second->ReadCounter(M, Value);
219 }
220 
221 bool ChainedASTReaderListener::needsInputFileVisitation() {
222   return First->needsInputFileVisitation() ||
223          Second->needsInputFileVisitation();
224 }
225 
226 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
227   return First->needsSystemInputFileVisitation() ||
228   Second->needsSystemInputFileVisitation();
229 }
230 
231 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
232                                                ModuleKind Kind) {
233   First->visitModuleFile(Filename, Kind);
234   Second->visitModuleFile(Filename, Kind);
235 }
236 
237 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
238                                               bool isSystem,
239                                               bool isOverridden,
240                                               bool isExplicitModule) {
241   bool Continue = false;
242   if (First->needsInputFileVisitation() &&
243       (!isSystem || First->needsSystemInputFileVisitation()))
244     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
245                                       isExplicitModule);
246   if (Second->needsInputFileVisitation() &&
247       (!isSystem || Second->needsSystemInputFileVisitation()))
248     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
249                                        isExplicitModule);
250   return Continue;
251 }
252 
253 void ChainedASTReaderListener::readModuleFileExtension(
254        const ModuleFileExtensionMetadata &Metadata) {
255   First->readModuleFileExtension(Metadata);
256   Second->readModuleFileExtension(Metadata);
257 }
258 
259 //===----------------------------------------------------------------------===//
260 // PCH validator implementation
261 //===----------------------------------------------------------------------===//
262 
263 ASTReaderListener::~ASTReaderListener() = default;
264 
265 /// Compare the given set of language options against an existing set of
266 /// language options.
267 ///
268 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
269 /// \param AllowCompatibleDifferences If true, differences between compatible
270 ///        language options will be permitted.
271 ///
272 /// \returns true if the languagae options mis-match, false otherwise.
273 static bool checkLanguageOptions(const LangOptions &LangOpts,
274                                  const LangOptions &ExistingLangOpts,
275                                  DiagnosticsEngine *Diags,
276                                  bool AllowCompatibleDifferences = true) {
277 #define LANGOPT(Name, Bits, Default, Description)                 \
278   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
279     if (Diags)                                                    \
280       Diags->Report(diag::err_pch_langopt_mismatch)               \
281         << Description << LangOpts.Name << ExistingLangOpts.Name; \
282     return true;                                                  \
283   }
284 
285 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
286   if (ExistingLangOpts.Name != LangOpts.Name) {           \
287     if (Diags)                                            \
288       Diags->Report(diag::err_pch_langopt_value_mismatch) \
289         << Description;                                   \
290     return true;                                          \
291   }
292 
293 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
294   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
295     if (Diags)                                                 \
296       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
297         << Description;                                        \
298     return true;                                               \
299   }
300 
301 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
302   if (!AllowCompatibleDifferences)                            \
303     LANGOPT(Name, Bits, Default, Description)
304 
305 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
306   if (!AllowCompatibleDifferences)                                 \
307     ENUM_LANGOPT(Name, Bits, Default, Description)
308 
309 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
310   if (!AllowCompatibleDifferences)                                 \
311     VALUE_LANGOPT(Name, Bits, Default, Description)
312 
313 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
314 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
315 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
316 #include "clang/Basic/LangOptions.def"
317 
318   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
319     if (Diags)
320       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
321     return true;
322   }
323 
324   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
325     if (Diags)
326       Diags->Report(diag::err_pch_langopt_value_mismatch)
327       << "target Objective-C runtime";
328     return true;
329   }
330 
331   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
332       LangOpts.CommentOpts.BlockCommandNames) {
333     if (Diags)
334       Diags->Report(diag::err_pch_langopt_value_mismatch)
335         << "block command names";
336     return true;
337   }
338 
339   // Sanitizer feature mismatches are treated as compatible differences. If
340   // compatible differences aren't allowed, we still only want to check for
341   // mismatches of non-modular sanitizers (the only ones which can affect AST
342   // generation).
343   if (!AllowCompatibleDifferences) {
344     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
345     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
346     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
347     ExistingSanitizers.clear(ModularSanitizers);
348     ImportedSanitizers.clear(ModularSanitizers);
349     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
350       const std::string Flag = "-fsanitize=";
351       if (Diags) {
352 #define SANITIZER(NAME, ID)                                                    \
353   {                                                                            \
354     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
355     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
356     if (InExistingModule != InImportedModule)                                  \
357       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
358           << InExistingModule << (Flag + NAME);                                \
359   }
360 #include "clang/Basic/Sanitizers.def"
361       }
362       return true;
363     }
364   }
365 
366   return false;
367 }
368 
369 /// Compare the given set of target options against an existing set of
370 /// target options.
371 ///
372 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
373 ///
374 /// \returns true if the target options mis-match, false otherwise.
375 static bool checkTargetOptions(const TargetOptions &TargetOpts,
376                                const TargetOptions &ExistingTargetOpts,
377                                DiagnosticsEngine *Diags,
378                                bool AllowCompatibleDifferences = true) {
379 #define CHECK_TARGET_OPT(Field, Name)                             \
380   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
381     if (Diags)                                                    \
382       Diags->Report(diag::err_pch_targetopt_mismatch)             \
383         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
384     return true;                                                  \
385   }
386 
387   // The triple and ABI must match exactly.
388   CHECK_TARGET_OPT(Triple, "target");
389   CHECK_TARGET_OPT(ABI, "target ABI");
390 
391   // We can tolerate different CPUs in many cases, notably when one CPU
392   // supports a strict superset of another. When allowing compatible
393   // differences skip this check.
394   if (!AllowCompatibleDifferences) {
395     CHECK_TARGET_OPT(CPU, "target CPU");
396     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
397   }
398 
399 #undef CHECK_TARGET_OPT
400 
401   // Compare feature sets.
402   SmallVector<StringRef, 4> ExistingFeatures(
403                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
404                                              ExistingTargetOpts.FeaturesAsWritten.end());
405   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
406                                          TargetOpts.FeaturesAsWritten.end());
407   llvm::sort(ExistingFeatures);
408   llvm::sort(ReadFeatures);
409 
410   // We compute the set difference in both directions explicitly so that we can
411   // diagnose the differences differently.
412   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
413   std::set_difference(
414       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
415       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
416   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
417                       ExistingFeatures.begin(), ExistingFeatures.end(),
418                       std::back_inserter(UnmatchedReadFeatures));
419 
420   // If we are allowing compatible differences and the read feature set is
421   // a strict subset of the existing feature set, there is nothing to diagnose.
422   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
423     return false;
424 
425   if (Diags) {
426     for (StringRef Feature : UnmatchedReadFeatures)
427       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
428           << /* is-existing-feature */ false << Feature;
429     for (StringRef Feature : UnmatchedExistingFeatures)
430       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
431           << /* is-existing-feature */ true << Feature;
432   }
433 
434   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
435 }
436 
437 bool
438 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
439                                   bool Complain,
440                                   bool AllowCompatibleDifferences) {
441   const LangOptions &ExistingLangOpts = PP.getLangOpts();
442   return checkLanguageOptions(LangOpts, ExistingLangOpts,
443                               Complain ? &Reader.Diags : nullptr,
444                               AllowCompatibleDifferences);
445 }
446 
447 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
448                                      bool Complain,
449                                      bool AllowCompatibleDifferences) {
450   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
451   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
452                             Complain ? &Reader.Diags : nullptr,
453                             AllowCompatibleDifferences);
454 }
455 
456 namespace {
457 
458 using MacroDefinitionsMap =
459     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
460 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
461 
462 } // namespace
463 
464 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
465                                          DiagnosticsEngine &Diags,
466                                          bool Complain) {
467   using Level = DiagnosticsEngine::Level;
468 
469   // Check current mappings for new -Werror mappings, and the stored mappings
470   // for cases that were explicitly mapped to *not* be errors that are now
471   // errors because of options like -Werror.
472   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
473 
474   for (DiagnosticsEngine *MappingSource : MappingSources) {
475     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
476       diag::kind DiagID = DiagIDMappingPair.first;
477       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
478       if (CurLevel < DiagnosticsEngine::Error)
479         continue; // not significant
480       Level StoredLevel =
481           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
482       if (StoredLevel < DiagnosticsEngine::Error) {
483         if (Complain)
484           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
485               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
486         return true;
487       }
488     }
489   }
490 
491   return false;
492 }
493 
494 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
495   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
496   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
497     return true;
498   return Ext >= diag::Severity::Error;
499 }
500 
501 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
502                                     DiagnosticsEngine &Diags,
503                                     bool IsSystem, bool Complain) {
504   // Top-level options
505   if (IsSystem) {
506     if (Diags.getSuppressSystemWarnings())
507       return false;
508     // If -Wsystem-headers was not enabled before, be conservative
509     if (StoredDiags.getSuppressSystemWarnings()) {
510       if (Complain)
511         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
512       return true;
513     }
514   }
515 
516   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
517     if (Complain)
518       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
519     return true;
520   }
521 
522   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
523       !StoredDiags.getEnableAllWarnings()) {
524     if (Complain)
525       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
526     return true;
527   }
528 
529   if (isExtHandlingFromDiagsError(Diags) &&
530       !isExtHandlingFromDiagsError(StoredDiags)) {
531     if (Complain)
532       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
533     return true;
534   }
535 
536   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
537 }
538 
539 /// Return the top import module if it is implicit, nullptr otherwise.
540 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
541                                           Preprocessor &PP) {
542   // If the original import came from a file explicitly generated by the user,
543   // don't check the diagnostic mappings.
544   // FIXME: currently this is approximated by checking whether this is not a
545   // module import of an implicitly-loaded module file.
546   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
547   // the transitive closure of its imports, since unrelated modules cannot be
548   // imported until after this module finishes validation.
549   ModuleFile *TopImport = &*ModuleMgr.rbegin();
550   while (!TopImport->ImportedBy.empty())
551     TopImport = TopImport->ImportedBy[0];
552   if (TopImport->Kind != MK_ImplicitModule)
553     return nullptr;
554 
555   StringRef ModuleName = TopImport->ModuleName;
556   assert(!ModuleName.empty() && "diagnostic options read before module name");
557 
558   Module *M =
559       PP.getHeaderSearchInfo().lookupModule(ModuleName, TopImport->ImportLoc);
560   assert(M && "missing module");
561   return M;
562 }
563 
564 bool PCHValidator::ReadDiagnosticOptions(
565     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
566   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
567   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
568   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
569       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
570   // This should never fail, because we would have processed these options
571   // before writing them to an ASTFile.
572   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
573 
574   ModuleManager &ModuleMgr = Reader.getModuleManager();
575   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
576 
577   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
578   if (!TopM)
579     return false;
580 
581   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
582   // contains the union of their flags.
583   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
584                                  Complain);
585 }
586 
587 /// Collect the macro definitions provided by the given preprocessor
588 /// options.
589 static void
590 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
591                         MacroDefinitionsMap &Macros,
592                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
593   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
594     StringRef Macro = PPOpts.Macros[I].first;
595     bool IsUndef = PPOpts.Macros[I].second;
596 
597     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
598     StringRef MacroName = MacroPair.first;
599     StringRef MacroBody = MacroPair.second;
600 
601     // For an #undef'd macro, we only care about the name.
602     if (IsUndef) {
603       if (MacroNames && !Macros.count(MacroName))
604         MacroNames->push_back(MacroName);
605 
606       Macros[MacroName] = std::make_pair("", true);
607       continue;
608     }
609 
610     // For a #define'd macro, figure out the actual definition.
611     if (MacroName.size() == Macro.size())
612       MacroBody = "1";
613     else {
614       // Note: GCC drops anything following an end-of-line character.
615       StringRef::size_type End = MacroBody.find_first_of("\n\r");
616       MacroBody = MacroBody.substr(0, End);
617     }
618 
619     if (MacroNames && !Macros.count(MacroName))
620       MacroNames->push_back(MacroName);
621     Macros[MacroName] = std::make_pair(MacroBody, false);
622   }
623 }
624 
625 /// Check the preprocessor options deserialized from the control block
626 /// against the preprocessor options in an existing preprocessor.
627 ///
628 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
629 /// \param Validate If true, validate preprocessor options. If false, allow
630 ///        macros defined by \p ExistingPPOpts to override those defined by
631 ///        \p PPOpts in SuggestedPredefines.
632 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
633                                      const PreprocessorOptions &ExistingPPOpts,
634                                      DiagnosticsEngine *Diags,
635                                      FileManager &FileMgr,
636                                      std::string &SuggestedPredefines,
637                                      const LangOptions &LangOpts,
638                                      bool Validate = true) {
639   // Check macro definitions.
640   MacroDefinitionsMap ASTFileMacros;
641   collectMacroDefinitions(PPOpts, ASTFileMacros);
642   MacroDefinitionsMap ExistingMacros;
643   SmallVector<StringRef, 4> ExistingMacroNames;
644   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
645 
646   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
647     // Dig out the macro definition in the existing preprocessor options.
648     StringRef MacroName = ExistingMacroNames[I];
649     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
650 
651     // Check whether we know anything about this macro name or not.
652     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
653         ASTFileMacros.find(MacroName);
654     if (!Validate || Known == ASTFileMacros.end()) {
655       // FIXME: Check whether this identifier was referenced anywhere in the
656       // AST file. If so, we should reject the AST file. Unfortunately, this
657       // information isn't in the control block. What shall we do about it?
658 
659       if (Existing.second) {
660         SuggestedPredefines += "#undef ";
661         SuggestedPredefines += MacroName.str();
662         SuggestedPredefines += '\n';
663       } else {
664         SuggestedPredefines += "#define ";
665         SuggestedPredefines += MacroName.str();
666         SuggestedPredefines += ' ';
667         SuggestedPredefines += Existing.first.str();
668         SuggestedPredefines += '\n';
669       }
670       continue;
671     }
672 
673     // If the macro was defined in one but undef'd in the other, we have a
674     // conflict.
675     if (Existing.second != Known->second.second) {
676       if (Diags) {
677         Diags->Report(diag::err_pch_macro_def_undef)
678           << MacroName << Known->second.second;
679       }
680       return true;
681     }
682 
683     // If the macro was #undef'd in both, or if the macro bodies are identical,
684     // it's fine.
685     if (Existing.second || Existing.first == Known->second.first)
686       continue;
687 
688     // The macro bodies differ; complain.
689     if (Diags) {
690       Diags->Report(diag::err_pch_macro_def_conflict)
691         << MacroName << Known->second.first << Existing.first;
692     }
693     return true;
694   }
695 
696   // Check whether we're using predefines.
697   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
698     if (Diags) {
699       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
700     }
701     return true;
702   }
703 
704   // Detailed record is important since it is used for the module cache hash.
705   if (LangOpts.Modules &&
706       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
707     if (Diags) {
708       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
709     }
710     return true;
711   }
712 
713   // Compute the #include and #include_macros lines we need.
714   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
715     StringRef File = ExistingPPOpts.Includes[I];
716 
717     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
718         !ExistingPPOpts.PCHThroughHeader.empty()) {
719       // In case the through header is an include, we must add all the includes
720       // to the predefines so the start point can be determined.
721       SuggestedPredefines += "#include \"";
722       SuggestedPredefines += File;
723       SuggestedPredefines += "\"\n";
724       continue;
725     }
726 
727     if (File == ExistingPPOpts.ImplicitPCHInclude)
728       continue;
729 
730     if (llvm::is_contained(PPOpts.Includes, File))
731       continue;
732 
733     SuggestedPredefines += "#include \"";
734     SuggestedPredefines += File;
735     SuggestedPredefines += "\"\n";
736   }
737 
738   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
739     StringRef File = ExistingPPOpts.MacroIncludes[I];
740     if (llvm::is_contained(PPOpts.MacroIncludes, File))
741       continue;
742 
743     SuggestedPredefines += "#__include_macros \"";
744     SuggestedPredefines += File;
745     SuggestedPredefines += "\"\n##\n";
746   }
747 
748   return false;
749 }
750 
751 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
752                                            bool Complain,
753                                            std::string &SuggestedPredefines) {
754   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
755 
756   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
757                                   Complain? &Reader.Diags : nullptr,
758                                   PP.getFileManager(),
759                                   SuggestedPredefines,
760                                   PP.getLangOpts());
761 }
762 
763 bool SimpleASTReaderListener::ReadPreprocessorOptions(
764                                   const PreprocessorOptions &PPOpts,
765                                   bool Complain,
766                                   std::string &SuggestedPredefines) {
767   return checkPreprocessorOptions(PPOpts,
768                                   PP.getPreprocessorOpts(),
769                                   nullptr,
770                                   PP.getFileManager(),
771                                   SuggestedPredefines,
772                                   PP.getLangOpts(),
773                                   false);
774 }
775 
776 /// Check the header search options deserialized from the control block
777 /// against the header search options in an existing preprocessor.
778 ///
779 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
780 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
781                                      StringRef SpecificModuleCachePath,
782                                      StringRef ExistingModuleCachePath,
783                                      DiagnosticsEngine *Diags,
784                                      const LangOptions &LangOpts,
785                                      const PreprocessorOptions &PPOpts) {
786   if (LangOpts.Modules) {
787     if (SpecificModuleCachePath != ExistingModuleCachePath &&
788         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
789       if (Diags)
790         Diags->Report(diag::err_pch_modulecache_mismatch)
791           << SpecificModuleCachePath << ExistingModuleCachePath;
792       return true;
793     }
794   }
795 
796   return false;
797 }
798 
799 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
800                                            StringRef SpecificModuleCachePath,
801                                            bool Complain) {
802   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
803                                   PP.getHeaderSearchInfo().getModuleCachePath(),
804                                   Complain ? &Reader.Diags : nullptr,
805                                   PP.getLangOpts(), PP.getPreprocessorOpts());
806 }
807 
808 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
809   PP.setCounterValue(Value);
810 }
811 
812 //===----------------------------------------------------------------------===//
813 // AST reader implementation
814 //===----------------------------------------------------------------------===//
815 
816 static uint64_t readULEB(const unsigned char *&P) {
817   unsigned Length = 0;
818   const char *Error = nullptr;
819 
820   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
821   if (Error)
822     llvm::report_fatal_error(Error);
823   P += Length;
824   return Val;
825 }
826 
827 /// Read ULEB-encoded key length and data length.
828 static std::pair<unsigned, unsigned>
829 readULEBKeyDataLength(const unsigned char *&P) {
830   unsigned KeyLen = readULEB(P);
831   if ((unsigned)KeyLen != KeyLen)
832     llvm::report_fatal_error("key too large");
833 
834   unsigned DataLen = readULEB(P);
835   if ((unsigned)DataLen != DataLen)
836     llvm::report_fatal_error("data too large");
837 
838   return std::make_pair(KeyLen, DataLen);
839 }
840 
841 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
842                                            bool TakeOwnership) {
843   DeserializationListener = Listener;
844   OwnsDeserializationListener = TakeOwnership;
845 }
846 
847 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
848   return serialization::ComputeHash(Sel);
849 }
850 
851 std::pair<unsigned, unsigned>
852 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
853   return readULEBKeyDataLength(d);
854 }
855 
856 ASTSelectorLookupTrait::internal_key_type
857 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
858   using namespace llvm::support;
859 
860   SelectorTable &SelTable = Reader.getContext().Selectors;
861   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
862   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
863       F, endian::readNext<uint32_t, little, unaligned>(d));
864   if (N == 0)
865     return SelTable.getNullarySelector(FirstII);
866   else if (N == 1)
867     return SelTable.getUnarySelector(FirstII);
868 
869   SmallVector<IdentifierInfo *, 16> Args;
870   Args.push_back(FirstII);
871   for (unsigned I = 1; I != N; ++I)
872     Args.push_back(Reader.getLocalIdentifier(
873         F, endian::readNext<uint32_t, little, unaligned>(d)));
874 
875   return SelTable.getSelector(N, Args.data());
876 }
877 
878 ASTSelectorLookupTrait::data_type
879 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
880                                  unsigned DataLen) {
881   using namespace llvm::support;
882 
883   data_type Result;
884 
885   Result.ID = Reader.getGlobalSelectorID(
886       F, endian::readNext<uint32_t, little, unaligned>(d));
887   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
888   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
889   Result.InstanceBits = FullInstanceBits & 0x3;
890   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
891   Result.FactoryBits = FullFactoryBits & 0x3;
892   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
893   unsigned NumInstanceMethods = FullInstanceBits >> 3;
894   unsigned NumFactoryMethods = FullFactoryBits >> 3;
895 
896   // Load instance methods
897   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
898     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
899             F, endian::readNext<uint32_t, little, unaligned>(d)))
900       Result.Instance.push_back(Method);
901   }
902 
903   // Load factory methods
904   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
905     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
906             F, endian::readNext<uint32_t, little, unaligned>(d)))
907       Result.Factory.push_back(Method);
908   }
909 
910   return Result;
911 }
912 
913 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
914   return llvm::djbHash(a);
915 }
916 
917 std::pair<unsigned, unsigned>
918 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
919   return readULEBKeyDataLength(d);
920 }
921 
922 ASTIdentifierLookupTraitBase::internal_key_type
923 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
924   assert(n >= 2 && d[n-1] == '\0');
925   return StringRef((const char*) d, n-1);
926 }
927 
928 /// Whether the given identifier is "interesting".
929 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
930                                     bool IsModule) {
931   return II.hadMacroDefinition() || II.isPoisoned() ||
932          (!IsModule && II.getObjCOrBuiltinID()) ||
933          II.hasRevertedTokenIDToIdentifier() ||
934          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
935           II.getFETokenInfo());
936 }
937 
938 static bool readBit(unsigned &Bits) {
939   bool Value = Bits & 0x1;
940   Bits >>= 1;
941   return Value;
942 }
943 
944 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
945   using namespace llvm::support;
946 
947   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
948   return Reader.getGlobalIdentifierID(F, RawID >> 1);
949 }
950 
951 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
952   if (!II.isFromAST()) {
953     II.setIsFromAST();
954     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
955     if (isInterestingIdentifier(Reader, II, IsModule))
956       II.setChangedSinceDeserialization();
957   }
958 }
959 
960 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
961                                                    const unsigned char* d,
962                                                    unsigned DataLen) {
963   using namespace llvm::support;
964 
965   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
966   bool IsInteresting = RawID & 0x01;
967 
968   // Wipe out the "is interesting" bit.
969   RawID = RawID >> 1;
970 
971   // Build the IdentifierInfo and link the identifier ID with it.
972   IdentifierInfo *II = KnownII;
973   if (!II) {
974     II = &Reader.getIdentifierTable().getOwn(k);
975     KnownII = II;
976   }
977   markIdentifierFromAST(Reader, *II);
978   Reader.markIdentifierUpToDate(II);
979 
980   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
981   if (!IsInteresting) {
982     // For uninteresting identifiers, there's nothing else to do. Just notify
983     // the reader that we've finished loading this identifier.
984     Reader.SetIdentifierInfo(ID, II);
985     return II;
986   }
987 
988   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
989   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
990   bool CPlusPlusOperatorKeyword = readBit(Bits);
991   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
992   bool Poisoned = readBit(Bits);
993   bool ExtensionToken = readBit(Bits);
994   bool HadMacroDefinition = readBit(Bits);
995 
996   assert(Bits == 0 && "Extra bits in the identifier?");
997   DataLen -= 8;
998 
999   // Set or check the various bits in the IdentifierInfo structure.
1000   // Token IDs are read-only.
1001   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1002     II->revertTokenIDToIdentifier();
1003   if (!F.isModule())
1004     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1005   assert(II->isExtensionToken() == ExtensionToken &&
1006          "Incorrect extension token flag");
1007   (void)ExtensionToken;
1008   if (Poisoned)
1009     II->setIsPoisoned(true);
1010   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1011          "Incorrect C++ operator keyword flag");
1012   (void)CPlusPlusOperatorKeyword;
1013 
1014   // If this identifier is a macro, deserialize the macro
1015   // definition.
1016   if (HadMacroDefinition) {
1017     uint32_t MacroDirectivesOffset =
1018         endian::readNext<uint32_t, little, unaligned>(d);
1019     DataLen -= 4;
1020 
1021     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1022   }
1023 
1024   Reader.SetIdentifierInfo(ID, II);
1025 
1026   // Read all of the declarations visible at global scope with this
1027   // name.
1028   if (DataLen > 0) {
1029     SmallVector<uint32_t, 4> DeclIDs;
1030     for (; DataLen > 0; DataLen -= 4)
1031       DeclIDs.push_back(Reader.getGlobalDeclID(
1032           F, endian::readNext<uint32_t, little, unaligned>(d)));
1033     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1034   }
1035 
1036   return II;
1037 }
1038 
1039 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1040     : Kind(Name.getNameKind()) {
1041   switch (Kind) {
1042   case DeclarationName::Identifier:
1043     Data = (uint64_t)Name.getAsIdentifierInfo();
1044     break;
1045   case DeclarationName::ObjCZeroArgSelector:
1046   case DeclarationName::ObjCOneArgSelector:
1047   case DeclarationName::ObjCMultiArgSelector:
1048     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1049     break;
1050   case DeclarationName::CXXOperatorName:
1051     Data = Name.getCXXOverloadedOperator();
1052     break;
1053   case DeclarationName::CXXLiteralOperatorName:
1054     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1055     break;
1056   case DeclarationName::CXXDeductionGuideName:
1057     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1058                ->getDeclName().getAsIdentifierInfo();
1059     break;
1060   case DeclarationName::CXXConstructorName:
1061   case DeclarationName::CXXDestructorName:
1062   case DeclarationName::CXXConversionFunctionName:
1063   case DeclarationName::CXXUsingDirective:
1064     Data = 0;
1065     break;
1066   }
1067 }
1068 
1069 unsigned DeclarationNameKey::getHash() const {
1070   llvm::FoldingSetNodeID ID;
1071   ID.AddInteger(Kind);
1072 
1073   switch (Kind) {
1074   case DeclarationName::Identifier:
1075   case DeclarationName::CXXLiteralOperatorName:
1076   case DeclarationName::CXXDeductionGuideName:
1077     ID.AddString(((IdentifierInfo*)Data)->getName());
1078     break;
1079   case DeclarationName::ObjCZeroArgSelector:
1080   case DeclarationName::ObjCOneArgSelector:
1081   case DeclarationName::ObjCMultiArgSelector:
1082     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1083     break;
1084   case DeclarationName::CXXOperatorName:
1085     ID.AddInteger((OverloadedOperatorKind)Data);
1086     break;
1087   case DeclarationName::CXXConstructorName:
1088   case DeclarationName::CXXDestructorName:
1089   case DeclarationName::CXXConversionFunctionName:
1090   case DeclarationName::CXXUsingDirective:
1091     break;
1092   }
1093 
1094   return ID.ComputeHash();
1095 }
1096 
1097 ModuleFile *
1098 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1099   using namespace llvm::support;
1100 
1101   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1102   return Reader.getLocalModuleFile(F, ModuleFileID);
1103 }
1104 
1105 std::pair<unsigned, unsigned>
1106 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1107   return readULEBKeyDataLength(d);
1108 }
1109 
1110 ASTDeclContextNameLookupTrait::internal_key_type
1111 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1112   using namespace llvm::support;
1113 
1114   auto Kind = (DeclarationName::NameKind)*d++;
1115   uint64_t Data;
1116   switch (Kind) {
1117   case DeclarationName::Identifier:
1118   case DeclarationName::CXXLiteralOperatorName:
1119   case DeclarationName::CXXDeductionGuideName:
1120     Data = (uint64_t)Reader.getLocalIdentifier(
1121         F, endian::readNext<uint32_t, little, unaligned>(d));
1122     break;
1123   case DeclarationName::ObjCZeroArgSelector:
1124   case DeclarationName::ObjCOneArgSelector:
1125   case DeclarationName::ObjCMultiArgSelector:
1126     Data =
1127         (uint64_t)Reader.getLocalSelector(
1128                              F, endian::readNext<uint32_t, little, unaligned>(
1129                                     d)).getAsOpaquePtr();
1130     break;
1131   case DeclarationName::CXXOperatorName:
1132     Data = *d++; // OverloadedOperatorKind
1133     break;
1134   case DeclarationName::CXXConstructorName:
1135   case DeclarationName::CXXDestructorName:
1136   case DeclarationName::CXXConversionFunctionName:
1137   case DeclarationName::CXXUsingDirective:
1138     Data = 0;
1139     break;
1140   }
1141 
1142   return DeclarationNameKey(Kind, Data);
1143 }
1144 
1145 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1146                                                  const unsigned char *d,
1147                                                  unsigned DataLen,
1148                                                  data_type_builder &Val) {
1149   using namespace llvm::support;
1150 
1151   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1152     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1153     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1154   }
1155 }
1156 
1157 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1158                                               BitstreamCursor &Cursor,
1159                                               uint64_t Offset,
1160                                               DeclContext *DC) {
1161   assert(Offset != 0);
1162 
1163   SavedStreamPosition SavedPosition(Cursor);
1164   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1165     Error(std::move(Err));
1166     return true;
1167   }
1168 
1169   RecordData Record;
1170   StringRef Blob;
1171   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1172   if (!MaybeCode) {
1173     Error(MaybeCode.takeError());
1174     return true;
1175   }
1176   unsigned Code = MaybeCode.get();
1177 
1178   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1179   if (!MaybeRecCode) {
1180     Error(MaybeRecCode.takeError());
1181     return true;
1182   }
1183   unsigned RecCode = MaybeRecCode.get();
1184   if (RecCode != DECL_CONTEXT_LEXICAL) {
1185     Error("Expected lexical block");
1186     return true;
1187   }
1188 
1189   assert(!isa<TranslationUnitDecl>(DC) &&
1190          "expected a TU_UPDATE_LEXICAL record for TU");
1191   // If we are handling a C++ class template instantiation, we can see multiple
1192   // lexical updates for the same record. It's important that we select only one
1193   // of them, so that field numbering works properly. Just pick the first one we
1194   // see.
1195   auto &Lex = LexicalDecls[DC];
1196   if (!Lex.first) {
1197     Lex = std::make_pair(
1198         &M, llvm::makeArrayRef(
1199                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1200                     Blob.data()),
1201                 Blob.size() / 4));
1202   }
1203   DC->setHasExternalLexicalStorage(true);
1204   return false;
1205 }
1206 
1207 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1208                                               BitstreamCursor &Cursor,
1209                                               uint64_t Offset,
1210                                               DeclID ID) {
1211   assert(Offset != 0);
1212 
1213   SavedStreamPosition SavedPosition(Cursor);
1214   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1215     Error(std::move(Err));
1216     return true;
1217   }
1218 
1219   RecordData Record;
1220   StringRef Blob;
1221   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1222   if (!MaybeCode) {
1223     Error(MaybeCode.takeError());
1224     return true;
1225   }
1226   unsigned Code = MaybeCode.get();
1227 
1228   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1229   if (!MaybeRecCode) {
1230     Error(MaybeRecCode.takeError());
1231     return true;
1232   }
1233   unsigned RecCode = MaybeRecCode.get();
1234   if (RecCode != DECL_CONTEXT_VISIBLE) {
1235     Error("Expected visible lookup table block");
1236     return true;
1237   }
1238 
1239   // We can't safely determine the primary context yet, so delay attaching the
1240   // lookup table until we're done with recursive deserialization.
1241   auto *Data = (const unsigned char*)Blob.data();
1242   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1243   return false;
1244 }
1245 
1246 void ASTReader::Error(StringRef Msg) const {
1247   Error(diag::err_fe_pch_malformed, Msg);
1248   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1249       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1250     Diag(diag::note_module_cache_path)
1251       << PP.getHeaderSearchInfo().getModuleCachePath();
1252   }
1253 }
1254 
1255 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1256                       StringRef Arg3) const {
1257   if (Diags.isDiagnosticInFlight())
1258     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1259   else
1260     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1261 }
1262 
1263 void ASTReader::Error(llvm::Error &&Err) const {
1264   llvm::Error RemainingErr =
1265       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1266         auto Diag = E.getDiagnostic().second;
1267 
1268         // Ideally we'd just emit it, but have to handle a possible in-flight
1269         // diagnostic. Note that the location is currently ignored as well.
1270         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1271         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1272         StringRef Arg1, Arg2, Arg3;
1273         switch (NumArgs) {
1274         case 3:
1275           Arg3 = Diag.getStringArg(2);
1276           LLVM_FALLTHROUGH;
1277         case 2:
1278           Arg2 = Diag.getStringArg(1);
1279           LLVM_FALLTHROUGH;
1280         case 1:
1281           Arg1 = Diag.getStringArg(0);
1282         }
1283         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1284       });
1285   if (RemainingErr)
1286     Error(toString(std::move(RemainingErr)));
1287 }
1288 
1289 //===----------------------------------------------------------------------===//
1290 // Source Manager Deserialization
1291 //===----------------------------------------------------------------------===//
1292 
1293 /// Read the line table in the source manager block.
1294 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1295   unsigned Idx = 0;
1296   LineTableInfo &LineTable = SourceMgr.getLineTable();
1297 
1298   // Parse the file names
1299   std::map<int, int> FileIDs;
1300   FileIDs[-1] = -1; // For unspecified filenames.
1301   for (unsigned I = 0; Record[Idx]; ++I) {
1302     // Extract the file name
1303     auto Filename = ReadPath(F, Record, Idx);
1304     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1305   }
1306   ++Idx;
1307 
1308   // Parse the line entries
1309   std::vector<LineEntry> Entries;
1310   while (Idx < Record.size()) {
1311     int FID = Record[Idx++];
1312     assert(FID >= 0 && "Serialized line entries for non-local file.");
1313     // Remap FileID from 1-based old view.
1314     FID += F.SLocEntryBaseID - 1;
1315 
1316     // Extract the line entries
1317     unsigned NumEntries = Record[Idx++];
1318     assert(NumEntries && "no line entries for file ID");
1319     Entries.clear();
1320     Entries.reserve(NumEntries);
1321     for (unsigned I = 0; I != NumEntries; ++I) {
1322       unsigned FileOffset = Record[Idx++];
1323       unsigned LineNo = Record[Idx++];
1324       int FilenameID = FileIDs[Record[Idx++]];
1325       SrcMgr::CharacteristicKind FileKind
1326         = (SrcMgr::CharacteristicKind)Record[Idx++];
1327       unsigned IncludeOffset = Record[Idx++];
1328       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1329                                        FileKind, IncludeOffset));
1330     }
1331     LineTable.AddEntry(FileID::get(FID), Entries);
1332   }
1333 }
1334 
1335 /// Read a source manager block
1336 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1337   using namespace SrcMgr;
1338 
1339   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1340 
1341   // Set the source-location entry cursor to the current position in
1342   // the stream. This cursor will be used to read the contents of the
1343   // source manager block initially, and then lazily read
1344   // source-location entries as needed.
1345   SLocEntryCursor = F.Stream;
1346 
1347   // The stream itself is going to skip over the source manager block.
1348   if (llvm::Error Err = F.Stream.SkipBlock())
1349     return Err;
1350 
1351   // Enter the source manager block.
1352   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1353     return Err;
1354   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1355 
1356   RecordData Record;
1357   while (true) {
1358     Expected<llvm::BitstreamEntry> MaybeE =
1359         SLocEntryCursor.advanceSkippingSubblocks();
1360     if (!MaybeE)
1361       return MaybeE.takeError();
1362     llvm::BitstreamEntry E = MaybeE.get();
1363 
1364     switch (E.Kind) {
1365     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1366     case llvm::BitstreamEntry::Error:
1367       return llvm::createStringError(std::errc::illegal_byte_sequence,
1368                                      "malformed block record in AST file");
1369     case llvm::BitstreamEntry::EndBlock:
1370       return llvm::Error::success();
1371     case llvm::BitstreamEntry::Record:
1372       // The interesting case.
1373       break;
1374     }
1375 
1376     // Read a record.
1377     Record.clear();
1378     StringRef Blob;
1379     Expected<unsigned> MaybeRecord =
1380         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1381     if (!MaybeRecord)
1382       return MaybeRecord.takeError();
1383     switch (MaybeRecord.get()) {
1384     default:  // Default behavior: ignore.
1385       break;
1386 
1387     case SM_SLOC_FILE_ENTRY:
1388     case SM_SLOC_BUFFER_ENTRY:
1389     case SM_SLOC_EXPANSION_ENTRY:
1390       // Once we hit one of the source location entries, we're done.
1391       return llvm::Error::success();
1392     }
1393   }
1394 }
1395 
1396 /// If a header file is not found at the path that we expect it to be
1397 /// and the PCH file was moved from its original location, try to resolve the
1398 /// file by assuming that header+PCH were moved together and the header is in
1399 /// the same place relative to the PCH.
1400 static std::string
1401 resolveFileRelativeToOriginalDir(const std::string &Filename,
1402                                  const std::string &OriginalDir,
1403                                  const std::string &CurrDir) {
1404   assert(OriginalDir != CurrDir &&
1405          "No point trying to resolve the file if the PCH dir didn't change");
1406 
1407   using namespace llvm::sys;
1408 
1409   SmallString<128> filePath(Filename);
1410   fs::make_absolute(filePath);
1411   assert(path::is_absolute(OriginalDir));
1412   SmallString<128> currPCHPath(CurrDir);
1413 
1414   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1415                        fileDirE = path::end(path::parent_path(filePath));
1416   path::const_iterator origDirI = path::begin(OriginalDir),
1417                        origDirE = path::end(OriginalDir);
1418   // Skip the common path components from filePath and OriginalDir.
1419   while (fileDirI != fileDirE && origDirI != origDirE &&
1420          *fileDirI == *origDirI) {
1421     ++fileDirI;
1422     ++origDirI;
1423   }
1424   for (; origDirI != origDirE; ++origDirI)
1425     path::append(currPCHPath, "..");
1426   path::append(currPCHPath, fileDirI, fileDirE);
1427   path::append(currPCHPath, path::filename(Filename));
1428   return std::string(currPCHPath.str());
1429 }
1430 
1431 bool ASTReader::ReadSLocEntry(int ID) {
1432   if (ID == 0)
1433     return false;
1434 
1435   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1436     Error("source location entry ID out-of-range for AST file");
1437     return true;
1438   }
1439 
1440   // Local helper to read the (possibly-compressed) buffer data following the
1441   // entry record.
1442   auto ReadBuffer = [this](
1443       BitstreamCursor &SLocEntryCursor,
1444       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1445     RecordData Record;
1446     StringRef Blob;
1447     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1448     if (!MaybeCode) {
1449       Error(MaybeCode.takeError());
1450       return nullptr;
1451     }
1452     unsigned Code = MaybeCode.get();
1453 
1454     Expected<unsigned> MaybeRecCode =
1455         SLocEntryCursor.readRecord(Code, Record, &Blob);
1456     if (!MaybeRecCode) {
1457       Error(MaybeRecCode.takeError());
1458       return nullptr;
1459     }
1460     unsigned RecCode = MaybeRecCode.get();
1461 
1462     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1463       if (!llvm::zlib::isAvailable()) {
1464         Error("zlib is not available");
1465         return nullptr;
1466       }
1467       SmallString<0> Uncompressed;
1468       if (llvm::Error E =
1469               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1470         Error("could not decompress embedded file contents: " +
1471               llvm::toString(std::move(E)));
1472         return nullptr;
1473       }
1474       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1475     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1476       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1477     } else {
1478       Error("AST record has invalid code");
1479       return nullptr;
1480     }
1481   };
1482 
1483   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1484   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1485           F->SLocEntryOffsetsBase +
1486           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1487     Error(std::move(Err));
1488     return true;
1489   }
1490 
1491   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1492   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1493 
1494   ++NumSLocEntriesRead;
1495   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1496   if (!MaybeEntry) {
1497     Error(MaybeEntry.takeError());
1498     return true;
1499   }
1500   llvm::BitstreamEntry Entry = MaybeEntry.get();
1501 
1502   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1503     Error("incorrectly-formatted source location entry in AST file");
1504     return true;
1505   }
1506 
1507   RecordData Record;
1508   StringRef Blob;
1509   Expected<unsigned> MaybeSLOC =
1510       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1511   if (!MaybeSLOC) {
1512     Error(MaybeSLOC.takeError());
1513     return true;
1514   }
1515   switch (MaybeSLOC.get()) {
1516   default:
1517     Error("incorrectly-formatted source location entry in AST file");
1518     return true;
1519 
1520   case SM_SLOC_FILE_ENTRY: {
1521     // We will detect whether a file changed and return 'Failure' for it, but
1522     // we will also try to fail gracefully by setting up the SLocEntry.
1523     unsigned InputID = Record[4];
1524     InputFile IF = getInputFile(*F, InputID);
1525     Optional<FileEntryRef> File = IF.getFile();
1526     bool OverriddenBuffer = IF.isOverridden();
1527 
1528     // Note that we only check if a File was returned. If it was out-of-date
1529     // we have complained but we will continue creating a FileID to recover
1530     // gracefully.
1531     if (!File)
1532       return true;
1533 
1534     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1535     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1536       // This is the module's main file.
1537       IncludeLoc = getImportLocation(F);
1538     }
1539     SrcMgr::CharacteristicKind
1540       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1541     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1542                                         BaseOffset + Record[0]);
1543     SrcMgr::FileInfo &FileInfo =
1544           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1545     FileInfo.NumCreatedFIDs = Record[5];
1546     if (Record[3])
1547       FileInfo.setHasLineDirectives();
1548 
1549     unsigned NumFileDecls = Record[7];
1550     if (NumFileDecls && ContextObj) {
1551       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1552       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1553       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1554                                                              NumFileDecls));
1555     }
1556 
1557     const SrcMgr::ContentCache &ContentCache =
1558         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1559     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1560         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1561         !ContentCache.getBufferIfLoaded()) {
1562       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1563       if (!Buffer)
1564         return true;
1565       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1566     }
1567 
1568     break;
1569   }
1570 
1571   case SM_SLOC_BUFFER_ENTRY: {
1572     const char *Name = Blob.data();
1573     unsigned Offset = Record[0];
1574     SrcMgr::CharacteristicKind
1575       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1576     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1577     if (IncludeLoc.isInvalid() && F->isModule()) {
1578       IncludeLoc = getImportLocation(F);
1579     }
1580 
1581     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1582     if (!Buffer)
1583       return true;
1584     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1585                            BaseOffset + Offset, IncludeLoc);
1586     break;
1587   }
1588 
1589   case SM_SLOC_EXPANSION_ENTRY: {
1590     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1591     SourceMgr.createExpansionLoc(SpellingLoc,
1592                                      ReadSourceLocation(*F, Record[2]),
1593                                      ReadSourceLocation(*F, Record[3]),
1594                                      Record[5],
1595                                      Record[4],
1596                                      ID,
1597                                      BaseOffset + Record[0]);
1598     break;
1599   }
1600   }
1601 
1602   return false;
1603 }
1604 
1605 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1606   if (ID == 0)
1607     return std::make_pair(SourceLocation(), "");
1608 
1609   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1610     Error("source location entry ID out-of-range for AST file");
1611     return std::make_pair(SourceLocation(), "");
1612   }
1613 
1614   // Find which module file this entry lands in.
1615   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1616   if (!M->isModule())
1617     return std::make_pair(SourceLocation(), "");
1618 
1619   // FIXME: Can we map this down to a particular submodule? That would be
1620   // ideal.
1621   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1622 }
1623 
1624 /// Find the location where the module F is imported.
1625 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1626   if (F->ImportLoc.isValid())
1627     return F->ImportLoc;
1628 
1629   // Otherwise we have a PCH. It's considered to be "imported" at the first
1630   // location of its includer.
1631   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1632     // Main file is the importer.
1633     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1634     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1635   }
1636   return F->ImportedBy[0]->FirstLoc;
1637 }
1638 
1639 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1640 /// the abbreviations that are at the top of the block and then leave the cursor
1641 /// pointing into the block.
1642 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1643                                         unsigned BlockID,
1644                                         uint64_t *StartOfBlockOffset) {
1645   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1646     return Err;
1647 
1648   if (StartOfBlockOffset)
1649     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1650 
1651   while (true) {
1652     uint64_t Offset = Cursor.GetCurrentBitNo();
1653     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1654     if (!MaybeCode)
1655       return MaybeCode.takeError();
1656     unsigned Code = MaybeCode.get();
1657 
1658     // We expect all abbrevs to be at the start of the block.
1659     if (Code != llvm::bitc::DEFINE_ABBREV) {
1660       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1661         return Err;
1662       return llvm::Error::success();
1663     }
1664     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1665       return Err;
1666   }
1667 }
1668 
1669 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1670                            unsigned &Idx) {
1671   Token Tok;
1672   Tok.startToken();
1673   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1674   Tok.setLength(Record[Idx++]);
1675   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1676     Tok.setIdentifierInfo(II);
1677   Tok.setKind((tok::TokenKind)Record[Idx++]);
1678   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1679   return Tok;
1680 }
1681 
1682 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1683   BitstreamCursor &Stream = F.MacroCursor;
1684 
1685   // Keep track of where we are in the stream, then jump back there
1686   // after reading this macro.
1687   SavedStreamPosition SavedPosition(Stream);
1688 
1689   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1690     // FIXME this drops errors on the floor.
1691     consumeError(std::move(Err));
1692     return nullptr;
1693   }
1694   RecordData Record;
1695   SmallVector<IdentifierInfo*, 16> MacroParams;
1696   MacroInfo *Macro = nullptr;
1697 
1698   while (true) {
1699     // Advance to the next record, but if we get to the end of the block, don't
1700     // pop it (removing all the abbreviations from the cursor) since we want to
1701     // be able to reseek within the block and read entries.
1702     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1703     Expected<llvm::BitstreamEntry> MaybeEntry =
1704         Stream.advanceSkippingSubblocks(Flags);
1705     if (!MaybeEntry) {
1706       Error(MaybeEntry.takeError());
1707       return Macro;
1708     }
1709     llvm::BitstreamEntry Entry = MaybeEntry.get();
1710 
1711     switch (Entry.Kind) {
1712     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1713     case llvm::BitstreamEntry::Error:
1714       Error("malformed block record in AST file");
1715       return Macro;
1716     case llvm::BitstreamEntry::EndBlock:
1717       return Macro;
1718     case llvm::BitstreamEntry::Record:
1719       // The interesting case.
1720       break;
1721     }
1722 
1723     // Read a record.
1724     Record.clear();
1725     PreprocessorRecordTypes RecType;
1726     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1727       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1728     else {
1729       Error(MaybeRecType.takeError());
1730       return Macro;
1731     }
1732     switch (RecType) {
1733     case PP_MODULE_MACRO:
1734     case PP_MACRO_DIRECTIVE_HISTORY:
1735       return Macro;
1736 
1737     case PP_MACRO_OBJECT_LIKE:
1738     case PP_MACRO_FUNCTION_LIKE: {
1739       // If we already have a macro, that means that we've hit the end
1740       // of the definition of the macro we were looking for. We're
1741       // done.
1742       if (Macro)
1743         return Macro;
1744 
1745       unsigned NextIndex = 1; // Skip identifier ID.
1746       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1747       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1748       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1749       MI->setIsUsed(Record[NextIndex++]);
1750       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1751 
1752       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1753         // Decode function-like macro info.
1754         bool isC99VarArgs = Record[NextIndex++];
1755         bool isGNUVarArgs = Record[NextIndex++];
1756         bool hasCommaPasting = Record[NextIndex++];
1757         MacroParams.clear();
1758         unsigned NumArgs = Record[NextIndex++];
1759         for (unsigned i = 0; i != NumArgs; ++i)
1760           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1761 
1762         // Install function-like macro info.
1763         MI->setIsFunctionLike();
1764         if (isC99VarArgs) MI->setIsC99Varargs();
1765         if (isGNUVarArgs) MI->setIsGNUVarargs();
1766         if (hasCommaPasting) MI->setHasCommaPasting();
1767         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1768       }
1769 
1770       // Remember that we saw this macro last so that we add the tokens that
1771       // form its body to it.
1772       Macro = MI;
1773 
1774       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1775           Record[NextIndex]) {
1776         // We have a macro definition. Register the association
1777         PreprocessedEntityID
1778             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1779         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1780         PreprocessingRecord::PPEntityID PPID =
1781             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1782         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1783             PPRec.getPreprocessedEntity(PPID));
1784         if (PPDef)
1785           PPRec.RegisterMacroDefinition(Macro, PPDef);
1786       }
1787 
1788       ++NumMacrosRead;
1789       break;
1790     }
1791 
1792     case PP_TOKEN: {
1793       // If we see a TOKEN before a PP_MACRO_*, then the file is
1794       // erroneous, just pretend we didn't see this.
1795       if (!Macro) break;
1796 
1797       unsigned Idx = 0;
1798       Token Tok = ReadToken(F, Record, Idx);
1799       Macro->AddTokenToBody(Tok);
1800       break;
1801     }
1802     }
1803   }
1804 }
1805 
1806 PreprocessedEntityID
1807 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1808                                          unsigned LocalID) const {
1809   if (!M.ModuleOffsetMap.empty())
1810     ReadModuleOffsetMap(M);
1811 
1812   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1813     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1814   assert(I != M.PreprocessedEntityRemap.end()
1815          && "Invalid index into preprocessed entity index remap");
1816 
1817   return LocalID + I->second;
1818 }
1819 
1820 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1821   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1822 }
1823 
1824 HeaderFileInfoTrait::internal_key_type
1825 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1826   internal_key_type ikey = {FE->getSize(),
1827                             M.HasTimestamps ? FE->getModificationTime() : 0,
1828                             FE->getName(), /*Imported*/ false};
1829   return ikey;
1830 }
1831 
1832 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1833   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1834     return false;
1835 
1836   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1837     return true;
1838 
1839   // Determine whether the actual files are equivalent.
1840   FileManager &FileMgr = Reader.getFileManager();
1841   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1842     if (!Key.Imported) {
1843       if (auto File = FileMgr.getFile(Key.Filename))
1844         return *File;
1845       return nullptr;
1846     }
1847 
1848     std::string Resolved = std::string(Key.Filename);
1849     Reader.ResolveImportedPath(M, Resolved);
1850     if (auto File = FileMgr.getFile(Resolved))
1851       return *File;
1852     return nullptr;
1853   };
1854 
1855   const FileEntry *FEA = GetFile(a);
1856   const FileEntry *FEB = GetFile(b);
1857   return FEA && FEA == FEB;
1858 }
1859 
1860 std::pair<unsigned, unsigned>
1861 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1862   return readULEBKeyDataLength(d);
1863 }
1864 
1865 HeaderFileInfoTrait::internal_key_type
1866 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1867   using namespace llvm::support;
1868 
1869   internal_key_type ikey;
1870   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1871   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1872   ikey.Filename = (const char *)d;
1873   ikey.Imported = true;
1874   return ikey;
1875 }
1876 
1877 HeaderFileInfoTrait::data_type
1878 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1879                               unsigned DataLen) {
1880   using namespace llvm::support;
1881 
1882   const unsigned char *End = d + DataLen;
1883   HeaderFileInfo HFI;
1884   unsigned Flags = *d++;
1885   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1886   HFI.isImport |= (Flags >> 5) & 0x01;
1887   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1888   HFI.DirInfo = (Flags >> 1) & 0x07;
1889   HFI.IndexHeaderMapHeader = Flags & 0x01;
1890   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1891       M, endian::readNext<uint32_t, little, unaligned>(d));
1892   if (unsigned FrameworkOffset =
1893           endian::readNext<uint32_t, little, unaligned>(d)) {
1894     // The framework offset is 1 greater than the actual offset,
1895     // since 0 is used as an indicator for "no framework name".
1896     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1897     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1898   }
1899 
1900   assert((End - d) % 4 == 0 &&
1901          "Wrong data length in HeaderFileInfo deserialization");
1902   while (d != End) {
1903     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1904     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1905     LocalSMID >>= 2;
1906 
1907     // This header is part of a module. Associate it with the module to enable
1908     // implicit module import.
1909     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1910     Module *Mod = Reader.getSubmodule(GlobalSMID);
1911     FileManager &FileMgr = Reader.getFileManager();
1912     ModuleMap &ModMap =
1913         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1914 
1915     std::string Filename = std::string(key.Filename);
1916     if (key.Imported)
1917       Reader.ResolveImportedPath(M, Filename);
1918     // FIXME: NameAsWritten
1919     Module::Header H = {std::string(key.Filename), "",
1920                         *FileMgr.getFile(Filename)};
1921     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1922     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1923   }
1924 
1925   // This HeaderFileInfo was externally loaded.
1926   HFI.External = true;
1927   HFI.IsValid = true;
1928   return HFI;
1929 }
1930 
1931 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1932                                 uint32_t MacroDirectivesOffset) {
1933   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1934   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1935 }
1936 
1937 void ASTReader::ReadDefinedMacros() {
1938   // Note that we are loading defined macros.
1939   Deserializing Macros(this);
1940 
1941   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1942     BitstreamCursor &MacroCursor = I.MacroCursor;
1943 
1944     // If there was no preprocessor block, skip this file.
1945     if (MacroCursor.getBitcodeBytes().empty())
1946       continue;
1947 
1948     BitstreamCursor Cursor = MacroCursor;
1949     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1950       Error(std::move(Err));
1951       return;
1952     }
1953 
1954     RecordData Record;
1955     while (true) {
1956       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1957       if (!MaybeE) {
1958         Error(MaybeE.takeError());
1959         return;
1960       }
1961       llvm::BitstreamEntry E = MaybeE.get();
1962 
1963       switch (E.Kind) {
1964       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1965       case llvm::BitstreamEntry::Error:
1966         Error("malformed block record in AST file");
1967         return;
1968       case llvm::BitstreamEntry::EndBlock:
1969         goto NextCursor;
1970 
1971       case llvm::BitstreamEntry::Record: {
1972         Record.clear();
1973         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1974         if (!MaybeRecord) {
1975           Error(MaybeRecord.takeError());
1976           return;
1977         }
1978         switch (MaybeRecord.get()) {
1979         default:  // Default behavior: ignore.
1980           break;
1981 
1982         case PP_MACRO_OBJECT_LIKE:
1983         case PP_MACRO_FUNCTION_LIKE: {
1984           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1985           if (II->isOutOfDate())
1986             updateOutOfDateIdentifier(*II);
1987           break;
1988         }
1989 
1990         case PP_TOKEN:
1991           // Ignore tokens.
1992           break;
1993         }
1994         break;
1995       }
1996       }
1997     }
1998     NextCursor:  ;
1999   }
2000 }
2001 
2002 namespace {
2003 
2004   /// Visitor class used to look up identifirs in an AST file.
2005   class IdentifierLookupVisitor {
2006     StringRef Name;
2007     unsigned NameHash;
2008     unsigned PriorGeneration;
2009     unsigned &NumIdentifierLookups;
2010     unsigned &NumIdentifierLookupHits;
2011     IdentifierInfo *Found = nullptr;
2012 
2013   public:
2014     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2015                             unsigned &NumIdentifierLookups,
2016                             unsigned &NumIdentifierLookupHits)
2017       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2018         PriorGeneration(PriorGeneration),
2019         NumIdentifierLookups(NumIdentifierLookups),
2020         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2021 
2022     bool operator()(ModuleFile &M) {
2023       // If we've already searched this module file, skip it now.
2024       if (M.Generation <= PriorGeneration)
2025         return true;
2026 
2027       ASTIdentifierLookupTable *IdTable
2028         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2029       if (!IdTable)
2030         return false;
2031 
2032       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2033                                      Found);
2034       ++NumIdentifierLookups;
2035       ASTIdentifierLookupTable::iterator Pos =
2036           IdTable->find_hashed(Name, NameHash, &Trait);
2037       if (Pos == IdTable->end())
2038         return false;
2039 
2040       // Dereferencing the iterator has the effect of building the
2041       // IdentifierInfo node and populating it with the various
2042       // declarations it needs.
2043       ++NumIdentifierLookupHits;
2044       Found = *Pos;
2045       return true;
2046     }
2047 
2048     // Retrieve the identifier info found within the module
2049     // files.
2050     IdentifierInfo *getIdentifierInfo() const { return Found; }
2051   };
2052 
2053 } // namespace
2054 
2055 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2056   // Note that we are loading an identifier.
2057   Deserializing AnIdentifier(this);
2058 
2059   unsigned PriorGeneration = 0;
2060   if (getContext().getLangOpts().Modules)
2061     PriorGeneration = IdentifierGeneration[&II];
2062 
2063   // If there is a global index, look there first to determine which modules
2064   // provably do not have any results for this identifier.
2065   GlobalModuleIndex::HitSet Hits;
2066   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2067   if (!loadGlobalIndex()) {
2068     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2069       HitsPtr = &Hits;
2070     }
2071   }
2072 
2073   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2074                                   NumIdentifierLookups,
2075                                   NumIdentifierLookupHits);
2076   ModuleMgr.visit(Visitor, HitsPtr);
2077   markIdentifierUpToDate(&II);
2078 }
2079 
2080 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2081   if (!II)
2082     return;
2083 
2084   II->setOutOfDate(false);
2085 
2086   // Update the generation for this identifier.
2087   if (getContext().getLangOpts().Modules)
2088     IdentifierGeneration[II] = getGeneration();
2089 }
2090 
2091 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2092                                     const PendingMacroInfo &PMInfo) {
2093   ModuleFile &M = *PMInfo.M;
2094 
2095   BitstreamCursor &Cursor = M.MacroCursor;
2096   SavedStreamPosition SavedPosition(Cursor);
2097   if (llvm::Error Err =
2098           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2099     Error(std::move(Err));
2100     return;
2101   }
2102 
2103   struct ModuleMacroRecord {
2104     SubmoduleID SubModID;
2105     MacroInfo *MI;
2106     SmallVector<SubmoduleID, 8> Overrides;
2107   };
2108   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2109 
2110   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2111   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2112   // macro histroy.
2113   RecordData Record;
2114   while (true) {
2115     Expected<llvm::BitstreamEntry> MaybeEntry =
2116         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2117     if (!MaybeEntry) {
2118       Error(MaybeEntry.takeError());
2119       return;
2120     }
2121     llvm::BitstreamEntry Entry = MaybeEntry.get();
2122 
2123     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2124       Error("malformed block record in AST file");
2125       return;
2126     }
2127 
2128     Record.clear();
2129     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2130     if (!MaybePP) {
2131       Error(MaybePP.takeError());
2132       return;
2133     }
2134     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2135     case PP_MACRO_DIRECTIVE_HISTORY:
2136       break;
2137 
2138     case PP_MODULE_MACRO: {
2139       ModuleMacros.push_back(ModuleMacroRecord());
2140       auto &Info = ModuleMacros.back();
2141       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2142       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2143       for (int I = 2, N = Record.size(); I != N; ++I)
2144         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2145       continue;
2146     }
2147 
2148     default:
2149       Error("malformed block record in AST file");
2150       return;
2151     }
2152 
2153     // We found the macro directive history; that's the last record
2154     // for this macro.
2155     break;
2156   }
2157 
2158   // Module macros are listed in reverse dependency order.
2159   {
2160     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2161     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2162     for (auto &MMR : ModuleMacros) {
2163       Overrides.clear();
2164       for (unsigned ModID : MMR.Overrides) {
2165         Module *Mod = getSubmodule(ModID);
2166         auto *Macro = PP.getModuleMacro(Mod, II);
2167         assert(Macro && "missing definition for overridden macro");
2168         Overrides.push_back(Macro);
2169       }
2170 
2171       bool Inserted = false;
2172       Module *Owner = getSubmodule(MMR.SubModID);
2173       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2174     }
2175   }
2176 
2177   // Don't read the directive history for a module; we don't have anywhere
2178   // to put it.
2179   if (M.isModule())
2180     return;
2181 
2182   // Deserialize the macro directives history in reverse source-order.
2183   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2184   unsigned Idx = 0, N = Record.size();
2185   while (Idx < N) {
2186     MacroDirective *MD = nullptr;
2187     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2188     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2189     switch (K) {
2190     case MacroDirective::MD_Define: {
2191       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2192       MD = PP.AllocateDefMacroDirective(MI, Loc);
2193       break;
2194     }
2195     case MacroDirective::MD_Undefine:
2196       MD = PP.AllocateUndefMacroDirective(Loc);
2197       break;
2198     case MacroDirective::MD_Visibility:
2199       bool isPublic = Record[Idx++];
2200       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2201       break;
2202     }
2203 
2204     if (!Latest)
2205       Latest = MD;
2206     if (Earliest)
2207       Earliest->setPrevious(MD);
2208     Earliest = MD;
2209   }
2210 
2211   if (Latest)
2212     PP.setLoadedMacroDirective(II, Earliest, Latest);
2213 }
2214 
2215 bool ASTReader::shouldDisableValidationForFile(
2216     const serialization::ModuleFile &M) const {
2217   if (DisableValidationKind == DisableValidationForModuleKind::None)
2218     return false;
2219 
2220   // If a PCH is loaded and validation is disabled for PCH then disable
2221   // validation for the PCH and the modules it loads.
2222   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2223 
2224   switch (K) {
2225   case MK_MainFile:
2226   case MK_Preamble:
2227   case MK_PCH:
2228     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2229   case MK_ImplicitModule:
2230   case MK_ExplicitModule:
2231   case MK_PrebuiltModule:
2232     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2233   }
2234 
2235   return false;
2236 }
2237 
2238 ASTReader::InputFileInfo
2239 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2240   // Go find this input file.
2241   BitstreamCursor &Cursor = F.InputFilesCursor;
2242   SavedStreamPosition SavedPosition(Cursor);
2243   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2244     // FIXME this drops errors on the floor.
2245     consumeError(std::move(Err));
2246   }
2247 
2248   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2249   if (!MaybeCode) {
2250     // FIXME this drops errors on the floor.
2251     consumeError(MaybeCode.takeError());
2252   }
2253   unsigned Code = MaybeCode.get();
2254   RecordData Record;
2255   StringRef Blob;
2256 
2257   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2258     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2259            "invalid record type for input file");
2260   else {
2261     // FIXME this drops errors on the floor.
2262     consumeError(Maybe.takeError());
2263   }
2264 
2265   assert(Record[0] == ID && "Bogus stored ID or offset");
2266   InputFileInfo R;
2267   R.StoredSize = static_cast<off_t>(Record[1]);
2268   R.StoredTime = static_cast<time_t>(Record[2]);
2269   R.Overridden = static_cast<bool>(Record[3]);
2270   R.Transient = static_cast<bool>(Record[4]);
2271   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2272   R.Filename = std::string(Blob);
2273   ResolveImportedPath(F, R.Filename);
2274 
2275   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2276   if (!MaybeEntry) // FIXME this drops errors on the floor.
2277     consumeError(MaybeEntry.takeError());
2278   llvm::BitstreamEntry Entry = MaybeEntry.get();
2279   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2280          "expected record type for input file hash");
2281 
2282   Record.clear();
2283   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2284     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2285            "invalid record type for input file hash");
2286   else {
2287     // FIXME this drops errors on the floor.
2288     consumeError(Maybe.takeError());
2289   }
2290   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2291                   static_cast<uint64_t>(Record[0]);
2292   return R;
2293 }
2294 
2295 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2296 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2297   // If this ID is bogus, just return an empty input file.
2298   if (ID == 0 || ID > F.InputFilesLoaded.size())
2299     return InputFile();
2300 
2301   // If we've already loaded this input file, return it.
2302   if (F.InputFilesLoaded[ID-1].getFile())
2303     return F.InputFilesLoaded[ID-1];
2304 
2305   if (F.InputFilesLoaded[ID-1].isNotFound())
2306     return InputFile();
2307 
2308   // Go find this input file.
2309   BitstreamCursor &Cursor = F.InputFilesCursor;
2310   SavedStreamPosition SavedPosition(Cursor);
2311   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2312     // FIXME this drops errors on the floor.
2313     consumeError(std::move(Err));
2314   }
2315 
2316   InputFileInfo FI = readInputFileInfo(F, ID);
2317   off_t StoredSize = FI.StoredSize;
2318   time_t StoredTime = FI.StoredTime;
2319   bool Overridden = FI.Overridden;
2320   bool Transient = FI.Transient;
2321   StringRef Filename = FI.Filename;
2322   uint64_t StoredContentHash = FI.ContentHash;
2323 
2324   OptionalFileEntryRefDegradesToFileEntryPtr File =
2325       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2326 
2327   // If we didn't find the file, resolve it relative to the
2328   // original directory from which this AST file was created.
2329   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2330       F.OriginalDir != F.BaseDirectory) {
2331     std::string Resolved = resolveFileRelativeToOriginalDir(
2332         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2333     if (!Resolved.empty())
2334       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2335   }
2336 
2337   // For an overridden file, create a virtual file with the stored
2338   // size/timestamp.
2339   if ((Overridden || Transient) && !File)
2340     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2341 
2342   if (!File) {
2343     if (Complain) {
2344       std::string ErrorStr = "could not find file '";
2345       ErrorStr += Filename;
2346       ErrorStr += "' referenced by AST file '";
2347       ErrorStr += F.FileName;
2348       ErrorStr += "'";
2349       Error(ErrorStr);
2350     }
2351     // Record that we didn't find the file.
2352     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2353     return InputFile();
2354   }
2355 
2356   // Check if there was a request to override the contents of the file
2357   // that was part of the precompiled header. Overriding such a file
2358   // can lead to problems when lexing using the source locations from the
2359   // PCH.
2360   SourceManager &SM = getSourceManager();
2361   // FIXME: Reject if the overrides are different.
2362   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2363     if (Complain)
2364       Error(diag::err_fe_pch_file_overridden, Filename);
2365 
2366     // After emitting the diagnostic, bypass the overriding file to recover
2367     // (this creates a separate FileEntry).
2368     File = SM.bypassFileContentsOverride(*File);
2369     if (!File) {
2370       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2371       return InputFile();
2372     }
2373   }
2374 
2375   struct Change {
2376     enum ModificationKind {
2377       Size,
2378       ModTime,
2379       Content,
2380       None,
2381     } Kind;
2382     llvm::Optional<int64_t> Old = llvm::None;
2383     llvm::Optional<int64_t> New = llvm::None;
2384   };
2385   auto HasInputFileChanged = [&]() {
2386     if (StoredSize != File->getSize())
2387       return Change{Change::Size, StoredSize, File->getSize()};
2388     if (!shouldDisableValidationForFile(F) && StoredTime &&
2389         StoredTime != File->getModificationTime()) {
2390       Change MTimeChange = {Change::ModTime, StoredTime,
2391                             File->getModificationTime()};
2392 
2393       // In case the modification time changes but not the content,
2394       // accept the cached file as legit.
2395       if (ValidateASTInputFilesContent &&
2396           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2397         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2398         if (!MemBuffOrError) {
2399           if (!Complain)
2400             return MTimeChange;
2401           std::string ErrorStr = "could not get buffer for file '";
2402           ErrorStr += File->getName();
2403           ErrorStr += "'";
2404           Error(ErrorStr);
2405           return MTimeChange;
2406         }
2407 
2408         // FIXME: hash_value is not guaranteed to be stable!
2409         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2410         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2411           return Change{Change::None};
2412 
2413         return Change{Change::Content};
2414       }
2415       return MTimeChange;
2416     }
2417     return Change{Change::None};
2418   };
2419 
2420   bool IsOutOfDate = false;
2421   auto FileChange = HasInputFileChanged();
2422   // For an overridden file, there is nothing to validate.
2423   if (!Overridden && FileChange.Kind != Change::None) {
2424     if (Complain && !Diags.isDiagnosticInFlight()) {
2425       // Build a list of the PCH imports that got us here (in reverse).
2426       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2427       while (!ImportStack.back()->ImportedBy.empty())
2428         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2429 
2430       // The top-level PCH is stale.
2431       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2432       Diag(diag::err_fe_ast_file_modified)
2433           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2434           << TopLevelPCHName << FileChange.Kind
2435           << (FileChange.Old && FileChange.New)
2436           << llvm::itostr(FileChange.Old.getValueOr(0))
2437           << llvm::itostr(FileChange.New.getValueOr(0));
2438 
2439       // Print the import stack.
2440       if (ImportStack.size() > 1) {
2441         Diag(diag::note_pch_required_by)
2442           << Filename << ImportStack[0]->FileName;
2443         for (unsigned I = 1; I < ImportStack.size(); ++I)
2444           Diag(diag::note_pch_required_by)
2445             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2446       }
2447 
2448       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2449     }
2450 
2451     IsOutOfDate = true;
2452   }
2453   // FIXME: If the file is overridden and we've already opened it,
2454   // issue an error (or split it into a separate FileEntry).
2455 
2456   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2457 
2458   // Note that we've loaded this input file.
2459   F.InputFilesLoaded[ID-1] = IF;
2460   return IF;
2461 }
2462 
2463 /// If we are loading a relocatable PCH or module file, and the filename
2464 /// is not an absolute path, add the system or module root to the beginning of
2465 /// the file name.
2466 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2467   // Resolve relative to the base directory, if we have one.
2468   if (!M.BaseDirectory.empty())
2469     return ResolveImportedPath(Filename, M.BaseDirectory);
2470 }
2471 
2472 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2473   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2474     return;
2475 
2476   SmallString<128> Buffer;
2477   llvm::sys::path::append(Buffer, Prefix, Filename);
2478   Filename.assign(Buffer.begin(), Buffer.end());
2479 }
2480 
2481 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2482   switch (ARR) {
2483   case ASTReader::Failure: return true;
2484   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2485   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2486   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2487   case ASTReader::ConfigurationMismatch:
2488     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2489   case ASTReader::HadErrors: return true;
2490   case ASTReader::Success: return false;
2491   }
2492 
2493   llvm_unreachable("unknown ASTReadResult");
2494 }
2495 
2496 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2497     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2498     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2499     std::string &SuggestedPredefines) {
2500   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2501     // FIXME this drops errors on the floor.
2502     consumeError(std::move(Err));
2503     return Failure;
2504   }
2505 
2506   // Read all of the records in the options block.
2507   RecordData Record;
2508   ASTReadResult Result = Success;
2509   while (true) {
2510     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2511     if (!MaybeEntry) {
2512       // FIXME this drops errors on the floor.
2513       consumeError(MaybeEntry.takeError());
2514       return Failure;
2515     }
2516     llvm::BitstreamEntry Entry = MaybeEntry.get();
2517 
2518     switch (Entry.Kind) {
2519     case llvm::BitstreamEntry::Error:
2520     case llvm::BitstreamEntry::SubBlock:
2521       return Failure;
2522 
2523     case llvm::BitstreamEntry::EndBlock:
2524       return Result;
2525 
2526     case llvm::BitstreamEntry::Record:
2527       // The interesting case.
2528       break;
2529     }
2530 
2531     // Read and process a record.
2532     Record.clear();
2533     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2534     if (!MaybeRecordType) {
2535       // FIXME this drops errors on the floor.
2536       consumeError(MaybeRecordType.takeError());
2537       return Failure;
2538     }
2539     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2540     case LANGUAGE_OPTIONS: {
2541       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2542       if (ParseLanguageOptions(Record, Complain, Listener,
2543                                AllowCompatibleConfigurationMismatch))
2544         Result = ConfigurationMismatch;
2545       break;
2546     }
2547 
2548     case TARGET_OPTIONS: {
2549       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2550       if (ParseTargetOptions(Record, Complain, Listener,
2551                              AllowCompatibleConfigurationMismatch))
2552         Result = ConfigurationMismatch;
2553       break;
2554     }
2555 
2556     case FILE_SYSTEM_OPTIONS: {
2557       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2558       if (!AllowCompatibleConfigurationMismatch &&
2559           ParseFileSystemOptions(Record, Complain, Listener))
2560         Result = ConfigurationMismatch;
2561       break;
2562     }
2563 
2564     case HEADER_SEARCH_OPTIONS: {
2565       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2566       if (!AllowCompatibleConfigurationMismatch &&
2567           ParseHeaderSearchOptions(Record, Complain, Listener))
2568         Result = ConfigurationMismatch;
2569       break;
2570     }
2571 
2572     case PREPROCESSOR_OPTIONS:
2573       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2574       if (!AllowCompatibleConfigurationMismatch &&
2575           ParsePreprocessorOptions(Record, Complain, Listener,
2576                                    SuggestedPredefines))
2577         Result = ConfigurationMismatch;
2578       break;
2579     }
2580   }
2581 }
2582 
2583 ASTReader::ASTReadResult
2584 ASTReader::ReadControlBlock(ModuleFile &F,
2585                             SmallVectorImpl<ImportedModule> &Loaded,
2586                             const ModuleFile *ImportedBy,
2587                             unsigned ClientLoadCapabilities) {
2588   BitstreamCursor &Stream = F.Stream;
2589 
2590   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2591     Error(std::move(Err));
2592     return Failure;
2593   }
2594 
2595   // Lambda to read the unhashed control block the first time it's called.
2596   //
2597   // For PCM files, the unhashed control block cannot be read until after the
2598   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2599   // need to look ahead before reading the IMPORTS record.  For consistency,
2600   // this block is always read somehow (see BitstreamEntry::EndBlock).
2601   bool HasReadUnhashedControlBlock = false;
2602   auto readUnhashedControlBlockOnce = [&]() {
2603     if (!HasReadUnhashedControlBlock) {
2604       HasReadUnhashedControlBlock = true;
2605       if (ASTReadResult Result =
2606               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2607         return Result;
2608     }
2609     return Success;
2610   };
2611 
2612   bool DisableValidation = shouldDisableValidationForFile(F);
2613 
2614   // Read all of the records and blocks in the control block.
2615   RecordData Record;
2616   unsigned NumInputs = 0;
2617   unsigned NumUserInputs = 0;
2618   StringRef BaseDirectoryAsWritten;
2619   while (true) {
2620     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2621     if (!MaybeEntry) {
2622       Error(MaybeEntry.takeError());
2623       return Failure;
2624     }
2625     llvm::BitstreamEntry Entry = MaybeEntry.get();
2626 
2627     switch (Entry.Kind) {
2628     case llvm::BitstreamEntry::Error:
2629       Error("malformed block record in AST file");
2630       return Failure;
2631     case llvm::BitstreamEntry::EndBlock: {
2632       // Validate the module before returning.  This call catches an AST with
2633       // no module name and no imports.
2634       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2635         return Result;
2636 
2637       // Validate input files.
2638       const HeaderSearchOptions &HSOpts =
2639           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2640 
2641       // All user input files reside at the index range [0, NumUserInputs), and
2642       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2643       // loaded module files, ignore missing inputs.
2644       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2645           F.Kind != MK_PrebuiltModule) {
2646         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2647 
2648         // If we are reading a module, we will create a verification timestamp,
2649         // so we verify all input files.  Otherwise, verify only user input
2650         // files.
2651 
2652         unsigned N = NumUserInputs;
2653         if (ValidateSystemInputs ||
2654             (HSOpts.ModulesValidateOncePerBuildSession &&
2655              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2656              F.Kind == MK_ImplicitModule))
2657           N = NumInputs;
2658 
2659         for (unsigned I = 0; I < N; ++I) {
2660           InputFile IF = getInputFile(F, I+1, Complain);
2661           if (!IF.getFile() || IF.isOutOfDate())
2662             return OutOfDate;
2663         }
2664       }
2665 
2666       if (Listener)
2667         Listener->visitModuleFile(F.FileName, F.Kind);
2668 
2669       if (Listener && Listener->needsInputFileVisitation()) {
2670         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2671                                                                 : NumUserInputs;
2672         for (unsigned I = 0; I < N; ++I) {
2673           bool IsSystem = I >= NumUserInputs;
2674           InputFileInfo FI = readInputFileInfo(F, I+1);
2675           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2676                                    F.Kind == MK_ExplicitModule ||
2677                                    F.Kind == MK_PrebuiltModule);
2678         }
2679       }
2680 
2681       return Success;
2682     }
2683 
2684     case llvm::BitstreamEntry::SubBlock:
2685       switch (Entry.ID) {
2686       case INPUT_FILES_BLOCK_ID:
2687         F.InputFilesCursor = Stream;
2688         if (llvm::Error Err = Stream.SkipBlock()) {
2689           Error(std::move(Err));
2690           return Failure;
2691         }
2692         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2693           Error("malformed block record in AST file");
2694           return Failure;
2695         }
2696         continue;
2697 
2698       case OPTIONS_BLOCK_ID:
2699         // If we're reading the first module for this group, check its options
2700         // are compatible with ours. For modules it imports, no further checking
2701         // is required, because we checked them when we built it.
2702         if (Listener && !ImportedBy) {
2703           // Should we allow the configuration of the module file to differ from
2704           // the configuration of the current translation unit in a compatible
2705           // way?
2706           //
2707           // FIXME: Allow this for files explicitly specified with -include-pch.
2708           bool AllowCompatibleConfigurationMismatch =
2709               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2710 
2711           ASTReadResult Result =
2712               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2713                                AllowCompatibleConfigurationMismatch, *Listener,
2714                                SuggestedPredefines);
2715           if (Result == Failure) {
2716             Error("malformed block record in AST file");
2717             return Result;
2718           }
2719 
2720           if (DisableValidation ||
2721               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2722             Result = Success;
2723 
2724           // If we can't load the module, exit early since we likely
2725           // will rebuild the module anyway. The stream may be in the
2726           // middle of a block.
2727           if (Result != Success)
2728             return Result;
2729         } else if (llvm::Error Err = Stream.SkipBlock()) {
2730           Error(std::move(Err));
2731           return Failure;
2732         }
2733         continue;
2734 
2735       default:
2736         if (llvm::Error Err = Stream.SkipBlock()) {
2737           Error(std::move(Err));
2738           return Failure;
2739         }
2740         continue;
2741       }
2742 
2743     case llvm::BitstreamEntry::Record:
2744       // The interesting case.
2745       break;
2746     }
2747 
2748     // Read and process a record.
2749     Record.clear();
2750     StringRef Blob;
2751     Expected<unsigned> MaybeRecordType =
2752         Stream.readRecord(Entry.ID, Record, &Blob);
2753     if (!MaybeRecordType) {
2754       Error(MaybeRecordType.takeError());
2755       return Failure;
2756     }
2757     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2758     case METADATA: {
2759       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2760         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2761           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2762                                         : diag::err_pch_version_too_new);
2763         return VersionMismatch;
2764       }
2765 
2766       bool hasErrors = Record[6];
2767       if (hasErrors && !DisableValidation) {
2768         // If requested by the caller and the module hasn't already been read
2769         // or compiled, mark modules on error as out-of-date.
2770         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2771             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2772           return OutOfDate;
2773 
2774         if (!AllowASTWithCompilerErrors) {
2775           Diag(diag::err_pch_with_compiler_errors);
2776           return HadErrors;
2777         }
2778       }
2779       if (hasErrors) {
2780         Diags.ErrorOccurred = true;
2781         Diags.UncompilableErrorOccurred = true;
2782         Diags.UnrecoverableErrorOccurred = true;
2783       }
2784 
2785       F.RelocatablePCH = Record[4];
2786       // Relative paths in a relocatable PCH are relative to our sysroot.
2787       if (F.RelocatablePCH)
2788         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2789 
2790       F.HasTimestamps = Record[5];
2791 
2792       const std::string &CurBranch = getClangFullRepositoryVersion();
2793       StringRef ASTBranch = Blob;
2794       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2795         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2796           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2797         return VersionMismatch;
2798       }
2799       break;
2800     }
2801 
2802     case IMPORTS: {
2803       // Validate the AST before processing any imports (otherwise, untangling
2804       // them can be error-prone and expensive).  A module will have a name and
2805       // will already have been validated, but this catches the PCH case.
2806       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2807         return Result;
2808 
2809       // Load each of the imported PCH files.
2810       unsigned Idx = 0, N = Record.size();
2811       while (Idx < N) {
2812         // Read information about the AST file.
2813         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2814         // The import location will be the local one for now; we will adjust
2815         // all import locations of module imports after the global source
2816         // location info are setup, in ReadAST.
2817         SourceLocation ImportLoc =
2818             ReadUntranslatedSourceLocation(Record[Idx++]);
2819         off_t StoredSize = (off_t)Record[Idx++];
2820         time_t StoredModTime = (time_t)Record[Idx++];
2821         auto FirstSignatureByte = Record.begin() + Idx;
2822         ASTFileSignature StoredSignature = ASTFileSignature::create(
2823             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2824         Idx += ASTFileSignature::size;
2825 
2826         std::string ImportedName = ReadString(Record, Idx);
2827         std::string ImportedFile;
2828 
2829         // For prebuilt and explicit modules first consult the file map for
2830         // an override. Note that here we don't search prebuilt module
2831         // directories, only the explicit name to file mappings. Also, we will
2832         // still verify the size/signature making sure it is essentially the
2833         // same file but perhaps in a different location.
2834         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2835           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2836             ImportedName, /*FileMapOnly*/ true);
2837 
2838         if (ImportedFile.empty())
2839           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2840           // ModuleCache as when writing.
2841           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2842         else
2843           SkipPath(Record, Idx);
2844 
2845         // If our client can't cope with us being out of date, we can't cope with
2846         // our dependency being missing.
2847         unsigned Capabilities = ClientLoadCapabilities;
2848         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2849           Capabilities &= ~ARR_Missing;
2850 
2851         // Load the AST file.
2852         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2853                                   Loaded, StoredSize, StoredModTime,
2854                                   StoredSignature, Capabilities);
2855 
2856         // If we diagnosed a problem, produce a backtrace.
2857         bool recompilingFinalized =
2858             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2859             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2860         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2861           Diag(diag::note_module_file_imported_by)
2862               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2863         if (recompilingFinalized)
2864           Diag(diag::note_module_file_conflict);
2865 
2866         switch (Result) {
2867         case Failure: return Failure;
2868           // If we have to ignore the dependency, we'll have to ignore this too.
2869         case Missing:
2870         case OutOfDate: return OutOfDate;
2871         case VersionMismatch: return VersionMismatch;
2872         case ConfigurationMismatch: return ConfigurationMismatch;
2873         case HadErrors: return HadErrors;
2874         case Success: break;
2875         }
2876       }
2877       break;
2878     }
2879 
2880     case ORIGINAL_FILE:
2881       F.OriginalSourceFileID = FileID::get(Record[0]);
2882       F.ActualOriginalSourceFileName = std::string(Blob);
2883       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2884       ResolveImportedPath(F, F.OriginalSourceFileName);
2885       break;
2886 
2887     case ORIGINAL_FILE_ID:
2888       F.OriginalSourceFileID = FileID::get(Record[0]);
2889       break;
2890 
2891     case ORIGINAL_PCH_DIR:
2892       F.OriginalDir = std::string(Blob);
2893       break;
2894 
2895     case MODULE_NAME:
2896       F.ModuleName = std::string(Blob);
2897       Diag(diag::remark_module_import)
2898           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2899           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2900       if (Listener)
2901         Listener->ReadModuleName(F.ModuleName);
2902 
2903       // Validate the AST as soon as we have a name so we can exit early on
2904       // failure.
2905       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2906         return Result;
2907 
2908       break;
2909 
2910     case MODULE_DIRECTORY: {
2911       // Save the BaseDirectory as written in the PCM for computing the module
2912       // filename for the ModuleCache.
2913       BaseDirectoryAsWritten = Blob;
2914       assert(!F.ModuleName.empty() &&
2915              "MODULE_DIRECTORY found before MODULE_NAME");
2916       // If we've already loaded a module map file covering this module, we may
2917       // have a better path for it (relative to the current build).
2918       Module *M = PP.getHeaderSearchInfo().lookupModule(
2919           F.ModuleName, SourceLocation(), /*AllowSearch*/ true,
2920           /*AllowExtraModuleMapSearch*/ true);
2921       if (M && M->Directory) {
2922         // If we're implicitly loading a module, the base directory can't
2923         // change between the build and use.
2924         // Don't emit module relocation error if we have -fno-validate-pch
2925         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2926                   DisableValidationForModuleKind::Module) &&
2927             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2928           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2929           if (!BuildDir || *BuildDir != M->Directory) {
2930             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2931               Diag(diag::err_imported_module_relocated)
2932                   << F.ModuleName << Blob << M->Directory->getName();
2933             return OutOfDate;
2934           }
2935         }
2936         F.BaseDirectory = std::string(M->Directory->getName());
2937       } else {
2938         F.BaseDirectory = std::string(Blob);
2939       }
2940       break;
2941     }
2942 
2943     case MODULE_MAP_FILE:
2944       if (ASTReadResult Result =
2945               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2946         return Result;
2947       break;
2948 
2949     case INPUT_FILE_OFFSETS:
2950       NumInputs = Record[0];
2951       NumUserInputs = Record[1];
2952       F.InputFileOffsets =
2953           (const llvm::support::unaligned_uint64_t *)Blob.data();
2954       F.InputFilesLoaded.resize(NumInputs);
2955       F.NumUserInputFiles = NumUserInputs;
2956       break;
2957     }
2958   }
2959 }
2960 
2961 void ASTReader::readIncludedFiles(ModuleFile &F, StringRef Blob,
2962                                   Preprocessor &PP) {
2963   using namespace llvm::support;
2964 
2965   const unsigned char *D = (const unsigned char *)Blob.data();
2966   unsigned FileCount = endian::readNext<uint32_t, little, unaligned>(D);
2967 
2968   for (unsigned I = 0; I < FileCount; ++I) {
2969     size_t ID = endian::readNext<uint32_t, little, unaligned>(D);
2970     InputFileInfo IFI = readInputFileInfo(F, ID);
2971     if (llvm::ErrorOr<const FileEntry *> File =
2972             PP.getFileManager().getFile(IFI.Filename))
2973       PP.getIncludedFiles().insert(*File);
2974   }
2975 }
2976 
2977 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2978                                     unsigned ClientLoadCapabilities) {
2979   BitstreamCursor &Stream = F.Stream;
2980 
2981   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2982     return Err;
2983   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2984 
2985   // Read all of the records and blocks for the AST file.
2986   RecordData Record;
2987   while (true) {
2988     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2989     if (!MaybeEntry)
2990       return MaybeEntry.takeError();
2991     llvm::BitstreamEntry Entry = MaybeEntry.get();
2992 
2993     switch (Entry.Kind) {
2994     case llvm::BitstreamEntry::Error:
2995       return llvm::createStringError(
2996           std::errc::illegal_byte_sequence,
2997           "error at end of module block in AST file");
2998     case llvm::BitstreamEntry::EndBlock:
2999       // Outside of C++, we do not store a lookup map for the translation unit.
3000       // Instead, mark it as needing a lookup map to be built if this module
3001       // contains any declarations lexically within it (which it always does!).
3002       // This usually has no cost, since we very rarely need the lookup map for
3003       // the translation unit outside C++.
3004       if (ASTContext *Ctx = ContextObj) {
3005         DeclContext *DC = Ctx->getTranslationUnitDecl();
3006         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
3007           DC->setMustBuildLookupTable();
3008       }
3009 
3010       return llvm::Error::success();
3011     case llvm::BitstreamEntry::SubBlock:
3012       switch (Entry.ID) {
3013       case DECLTYPES_BLOCK_ID:
3014         // We lazily load the decls block, but we want to set up the
3015         // DeclsCursor cursor to point into it.  Clone our current bitcode
3016         // cursor to it, enter the block and read the abbrevs in that block.
3017         // With the main cursor, we just skip over it.
3018         F.DeclsCursor = Stream;
3019         if (llvm::Error Err = Stream.SkipBlock())
3020           return Err;
3021         if (llvm::Error Err = ReadBlockAbbrevs(
3022                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3023           return Err;
3024         break;
3025 
3026       case PREPROCESSOR_BLOCK_ID:
3027         F.MacroCursor = Stream;
3028         if (!PP.getExternalSource())
3029           PP.setExternalSource(this);
3030 
3031         if (llvm::Error Err = Stream.SkipBlock())
3032           return Err;
3033         if (llvm::Error Err =
3034                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3035           return Err;
3036         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3037         break;
3038 
3039       case PREPROCESSOR_DETAIL_BLOCK_ID:
3040         F.PreprocessorDetailCursor = Stream;
3041 
3042         if (llvm::Error Err = Stream.SkipBlock()) {
3043           return Err;
3044         }
3045         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3046                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3047           return Err;
3048         F.PreprocessorDetailStartOffset
3049         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3050 
3051         if (!PP.getPreprocessingRecord())
3052           PP.createPreprocessingRecord();
3053         if (!PP.getPreprocessingRecord()->getExternalSource())
3054           PP.getPreprocessingRecord()->SetExternalSource(*this);
3055         break;
3056 
3057       case SOURCE_MANAGER_BLOCK_ID:
3058         if (llvm::Error Err = ReadSourceManagerBlock(F))
3059           return Err;
3060         break;
3061 
3062       case SUBMODULE_BLOCK_ID:
3063         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3064           return Err;
3065         break;
3066 
3067       case COMMENTS_BLOCK_ID: {
3068         BitstreamCursor C = Stream;
3069 
3070         if (llvm::Error Err = Stream.SkipBlock())
3071           return Err;
3072         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3073           return Err;
3074         CommentsCursors.push_back(std::make_pair(C, &F));
3075         break;
3076       }
3077 
3078       default:
3079         if (llvm::Error Err = Stream.SkipBlock())
3080           return Err;
3081         break;
3082       }
3083       continue;
3084 
3085     case llvm::BitstreamEntry::Record:
3086       // The interesting case.
3087       break;
3088     }
3089 
3090     // Read and process a record.
3091     Record.clear();
3092     StringRef Blob;
3093     Expected<unsigned> MaybeRecordType =
3094         Stream.readRecord(Entry.ID, Record, &Blob);
3095     if (!MaybeRecordType)
3096       return MaybeRecordType.takeError();
3097     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3098 
3099     // If we're not loading an AST context, we don't care about most records.
3100     if (!ContextObj) {
3101       switch (RecordType) {
3102       case IDENTIFIER_TABLE:
3103       case IDENTIFIER_OFFSET:
3104       case INTERESTING_IDENTIFIERS:
3105       case STATISTICS:
3106       case PP_CONDITIONAL_STACK:
3107       case PP_COUNTER_VALUE:
3108       case SOURCE_LOCATION_OFFSETS:
3109       case MODULE_OFFSET_MAP:
3110       case SOURCE_MANAGER_LINE_TABLE:
3111       case SOURCE_LOCATION_PRELOADS:
3112       case PPD_ENTITIES_OFFSETS:
3113       case HEADER_SEARCH_TABLE:
3114       case IMPORTED_MODULES:
3115       case MACRO_OFFSET:
3116         break;
3117       default:
3118         continue;
3119       }
3120     }
3121 
3122     switch (RecordType) {
3123     default:  // Default behavior: ignore.
3124       break;
3125 
3126     case TYPE_OFFSET: {
3127       if (F.LocalNumTypes != 0)
3128         return llvm::createStringError(
3129             std::errc::illegal_byte_sequence,
3130             "duplicate TYPE_OFFSET record in AST file");
3131       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3132       F.LocalNumTypes = Record[0];
3133       unsigned LocalBaseTypeIndex = Record[1];
3134       F.BaseTypeIndex = getTotalNumTypes();
3135 
3136       if (F.LocalNumTypes > 0) {
3137         // Introduce the global -> local mapping for types within this module.
3138         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3139 
3140         // Introduce the local -> global mapping for types within this module.
3141         F.TypeRemap.insertOrReplace(
3142           std::make_pair(LocalBaseTypeIndex,
3143                          F.BaseTypeIndex - LocalBaseTypeIndex));
3144 
3145         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3146       }
3147       break;
3148     }
3149 
3150     case DECL_OFFSET: {
3151       if (F.LocalNumDecls != 0)
3152         return llvm::createStringError(
3153             std::errc::illegal_byte_sequence,
3154             "duplicate DECL_OFFSET record in AST file");
3155       F.DeclOffsets = (const DeclOffset *)Blob.data();
3156       F.LocalNumDecls = Record[0];
3157       unsigned LocalBaseDeclID = Record[1];
3158       F.BaseDeclID = getTotalNumDecls();
3159 
3160       if (F.LocalNumDecls > 0) {
3161         // Introduce the global -> local mapping for declarations within this
3162         // module.
3163         GlobalDeclMap.insert(
3164           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3165 
3166         // Introduce the local -> global mapping for declarations within this
3167         // module.
3168         F.DeclRemap.insertOrReplace(
3169           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3170 
3171         // Introduce the global -> local mapping for declarations within this
3172         // module.
3173         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3174 
3175         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3176       }
3177       break;
3178     }
3179 
3180     case TU_UPDATE_LEXICAL: {
3181       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3182       LexicalContents Contents(
3183           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3184               Blob.data()),
3185           static_cast<unsigned int>(Blob.size() / 4));
3186       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3187       TU->setHasExternalLexicalStorage(true);
3188       break;
3189     }
3190 
3191     case UPDATE_VISIBLE: {
3192       unsigned Idx = 0;
3193       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3194       auto *Data = (const unsigned char*)Blob.data();
3195       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3196       // If we've already loaded the decl, perform the updates when we finish
3197       // loading this block.
3198       if (Decl *D = GetExistingDecl(ID))
3199         PendingUpdateRecords.push_back(
3200             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3201       break;
3202     }
3203 
3204     case IDENTIFIER_TABLE:
3205       F.IdentifierTableData =
3206           reinterpret_cast<const unsigned char *>(Blob.data());
3207       if (Record[0]) {
3208         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3209             F.IdentifierTableData + Record[0],
3210             F.IdentifierTableData + sizeof(uint32_t),
3211             F.IdentifierTableData,
3212             ASTIdentifierLookupTrait(*this, F));
3213 
3214         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3215       }
3216       break;
3217 
3218     case IDENTIFIER_OFFSET: {
3219       if (F.LocalNumIdentifiers != 0)
3220         return llvm::createStringError(
3221             std::errc::illegal_byte_sequence,
3222             "duplicate IDENTIFIER_OFFSET record in AST file");
3223       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3224       F.LocalNumIdentifiers = Record[0];
3225       unsigned LocalBaseIdentifierID = Record[1];
3226       F.BaseIdentifierID = getTotalNumIdentifiers();
3227 
3228       if (F.LocalNumIdentifiers > 0) {
3229         // Introduce the global -> local mapping for identifiers within this
3230         // module.
3231         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3232                                                   &F));
3233 
3234         // Introduce the local -> global mapping for identifiers within this
3235         // module.
3236         F.IdentifierRemap.insertOrReplace(
3237           std::make_pair(LocalBaseIdentifierID,
3238                          F.BaseIdentifierID - LocalBaseIdentifierID));
3239 
3240         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3241                                  + F.LocalNumIdentifiers);
3242       }
3243       break;
3244     }
3245 
3246     case INTERESTING_IDENTIFIERS:
3247       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3248       break;
3249 
3250     case EAGERLY_DESERIALIZED_DECLS:
3251       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3252       // about "interesting" decls (for instance, if we're building a module).
3253       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3254         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3255       break;
3256 
3257     case MODULAR_CODEGEN_DECLS:
3258       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3259       // them (ie: if we're not codegenerating this module).
3260       if (F.Kind == MK_MainFile ||
3261           getContext().getLangOpts().BuildingPCHWithObjectFile)
3262         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3263           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3264       break;
3265 
3266     case SPECIAL_TYPES:
3267       if (SpecialTypes.empty()) {
3268         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3269           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3270         break;
3271       }
3272 
3273       if (SpecialTypes.size() != Record.size())
3274         return llvm::createStringError(std::errc::illegal_byte_sequence,
3275                                        "invalid special-types record");
3276 
3277       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3278         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3279         if (!SpecialTypes[I])
3280           SpecialTypes[I] = ID;
3281         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3282         // merge step?
3283       }
3284       break;
3285 
3286     case STATISTICS:
3287       TotalNumStatements += Record[0];
3288       TotalNumMacros += Record[1];
3289       TotalLexicalDeclContexts += Record[2];
3290       TotalVisibleDeclContexts += Record[3];
3291       break;
3292 
3293     case UNUSED_FILESCOPED_DECLS:
3294       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3295         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3296       break;
3297 
3298     case DELEGATING_CTORS:
3299       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3300         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3301       break;
3302 
3303     case WEAK_UNDECLARED_IDENTIFIERS:
3304       if (Record.size() % 4 != 0)
3305         return llvm::createStringError(std::errc::illegal_byte_sequence,
3306                                        "invalid weak identifiers record");
3307 
3308       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3309       // files. This isn't the way to do it :)
3310       WeakUndeclaredIdentifiers.clear();
3311 
3312       // Translate the weak, undeclared identifiers into global IDs.
3313       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3314         WeakUndeclaredIdentifiers.push_back(
3315           getGlobalIdentifierID(F, Record[I++]));
3316         WeakUndeclaredIdentifiers.push_back(
3317           getGlobalIdentifierID(F, Record[I++]));
3318         WeakUndeclaredIdentifiers.push_back(
3319           ReadSourceLocation(F, Record, I).getRawEncoding());
3320         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3321       }
3322       break;
3323 
3324     case SELECTOR_OFFSETS: {
3325       F.SelectorOffsets = (const uint32_t *)Blob.data();
3326       F.LocalNumSelectors = Record[0];
3327       unsigned LocalBaseSelectorID = Record[1];
3328       F.BaseSelectorID = getTotalNumSelectors();
3329 
3330       if (F.LocalNumSelectors > 0) {
3331         // Introduce the global -> local mapping for selectors within this
3332         // module.
3333         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3334 
3335         // Introduce the local -> global mapping for selectors within this
3336         // module.
3337         F.SelectorRemap.insertOrReplace(
3338           std::make_pair(LocalBaseSelectorID,
3339                          F.BaseSelectorID - LocalBaseSelectorID));
3340 
3341         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3342       }
3343       break;
3344     }
3345 
3346     case METHOD_POOL:
3347       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3348       if (Record[0])
3349         F.SelectorLookupTable
3350           = ASTSelectorLookupTable::Create(
3351                         F.SelectorLookupTableData + Record[0],
3352                         F.SelectorLookupTableData,
3353                         ASTSelectorLookupTrait(*this, F));
3354       TotalNumMethodPoolEntries += Record[1];
3355       break;
3356 
3357     case REFERENCED_SELECTOR_POOL:
3358       if (!Record.empty()) {
3359         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3360           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3361                                                                 Record[Idx++]));
3362           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3363                                               getRawEncoding());
3364         }
3365       }
3366       break;
3367 
3368     case PP_CONDITIONAL_STACK:
3369       if (!Record.empty()) {
3370         unsigned Idx = 0, End = Record.size() - 1;
3371         bool ReachedEOFWhileSkipping = Record[Idx++];
3372         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3373         if (ReachedEOFWhileSkipping) {
3374           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3375           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3376           bool FoundNonSkipPortion = Record[Idx++];
3377           bool FoundElse = Record[Idx++];
3378           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3379           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3380                            FoundElse, ElseLoc);
3381         }
3382         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3383         while (Idx < End) {
3384           auto Loc = ReadSourceLocation(F, Record, Idx);
3385           bool WasSkipping = Record[Idx++];
3386           bool FoundNonSkip = Record[Idx++];
3387           bool FoundElse = Record[Idx++];
3388           ConditionalStack.push_back(
3389               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3390         }
3391         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3392       }
3393       break;
3394 
3395     case PP_COUNTER_VALUE:
3396       if (!Record.empty() && Listener)
3397         Listener->ReadCounter(F, Record[0]);
3398       break;
3399 
3400     case FILE_SORTED_DECLS:
3401       F.FileSortedDecls = (const DeclID *)Blob.data();
3402       F.NumFileSortedDecls = Record[0];
3403       break;
3404 
3405     case SOURCE_LOCATION_OFFSETS: {
3406       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3407       F.LocalNumSLocEntries = Record[0];
3408       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3409       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3410       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3411           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3412                                               SLocSpaceSize);
3413       if (!F.SLocEntryBaseID)
3414         return llvm::createStringError(std::errc::invalid_argument,
3415                                        "ran out of source locations");
3416       // Make our entry in the range map. BaseID is negative and growing, so
3417       // we invert it. Because we invert it, though, we need the other end of
3418       // the range.
3419       unsigned RangeStart =
3420           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3421       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3422       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3423 
3424       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3425       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3426       GlobalSLocOffsetMap.insert(
3427           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3428                            - SLocSpaceSize,&F));
3429 
3430       // Initialize the remapping table.
3431       // Invalid stays invalid.
3432       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3433       // This module. Base was 2 when being compiled.
3434       F.SLocRemap.insertOrReplace(std::make_pair(
3435           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3436 
3437       TotalNumSLocEntries += F.LocalNumSLocEntries;
3438       break;
3439     }
3440 
3441     case MODULE_OFFSET_MAP:
3442       F.ModuleOffsetMap = Blob;
3443       break;
3444 
3445     case SOURCE_MANAGER_LINE_TABLE:
3446       ParseLineTable(F, Record);
3447       break;
3448 
3449     case SOURCE_LOCATION_PRELOADS: {
3450       // Need to transform from the local view (1-based IDs) to the global view,
3451       // which is based off F.SLocEntryBaseID.
3452       if (!F.PreloadSLocEntries.empty())
3453         return llvm::createStringError(
3454             std::errc::illegal_byte_sequence,
3455             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3456 
3457       F.PreloadSLocEntries.swap(Record);
3458       break;
3459     }
3460 
3461     case EXT_VECTOR_DECLS:
3462       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3463         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3464       break;
3465 
3466     case VTABLE_USES:
3467       if (Record.size() % 3 != 0)
3468         return llvm::createStringError(std::errc::illegal_byte_sequence,
3469                                        "Invalid VTABLE_USES record");
3470 
3471       // Later tables overwrite earlier ones.
3472       // FIXME: Modules will have some trouble with this. This is clearly not
3473       // the right way to do this.
3474       VTableUses.clear();
3475 
3476       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3477         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3478         VTableUses.push_back(
3479           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3480         VTableUses.push_back(Record[Idx++]);
3481       }
3482       break;
3483 
3484     case PENDING_IMPLICIT_INSTANTIATIONS:
3485       if (PendingInstantiations.size() % 2 != 0)
3486         return llvm::createStringError(
3487             std::errc::illegal_byte_sequence,
3488             "Invalid existing PendingInstantiations");
3489 
3490       if (Record.size() % 2 != 0)
3491         return llvm::createStringError(
3492             std::errc::illegal_byte_sequence,
3493             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3494 
3495       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3496         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3497         PendingInstantiations.push_back(
3498           ReadSourceLocation(F, Record, I).getRawEncoding());
3499       }
3500       break;
3501 
3502     case SEMA_DECL_REFS:
3503       if (Record.size() != 3)
3504         return llvm::createStringError(std::errc::illegal_byte_sequence,
3505                                        "Invalid SEMA_DECL_REFS block");
3506       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3507         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3508       break;
3509 
3510     case PPD_ENTITIES_OFFSETS: {
3511       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3512       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3513       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3514 
3515       unsigned LocalBasePreprocessedEntityID = Record[0];
3516 
3517       unsigned StartingID;
3518       if (!PP.getPreprocessingRecord())
3519         PP.createPreprocessingRecord();
3520       if (!PP.getPreprocessingRecord()->getExternalSource())
3521         PP.getPreprocessingRecord()->SetExternalSource(*this);
3522       StartingID
3523         = PP.getPreprocessingRecord()
3524             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3525       F.BasePreprocessedEntityID = StartingID;
3526 
3527       if (F.NumPreprocessedEntities > 0) {
3528         // Introduce the global -> local mapping for preprocessed entities in
3529         // this module.
3530         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3531 
3532         // Introduce the local -> global mapping for preprocessed entities in
3533         // this module.
3534         F.PreprocessedEntityRemap.insertOrReplace(
3535           std::make_pair(LocalBasePreprocessedEntityID,
3536             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3537       }
3538 
3539       break;
3540     }
3541 
3542     case PPD_SKIPPED_RANGES: {
3543       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3544       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3545       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3546 
3547       if (!PP.getPreprocessingRecord())
3548         PP.createPreprocessingRecord();
3549       if (!PP.getPreprocessingRecord()->getExternalSource())
3550         PP.getPreprocessingRecord()->SetExternalSource(*this);
3551       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3552           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3553 
3554       if (F.NumPreprocessedSkippedRanges > 0)
3555         GlobalSkippedRangeMap.insert(
3556             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3557       break;
3558     }
3559 
3560     case DECL_UPDATE_OFFSETS:
3561       if (Record.size() % 2 != 0)
3562         return llvm::createStringError(
3563             std::errc::illegal_byte_sequence,
3564             "invalid DECL_UPDATE_OFFSETS block in AST file");
3565       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3566         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3567         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3568 
3569         // If we've already loaded the decl, perform the updates when we finish
3570         // loading this block.
3571         if (Decl *D = GetExistingDecl(ID))
3572           PendingUpdateRecords.push_back(
3573               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3574       }
3575       break;
3576 
3577     case OBJC_CATEGORIES_MAP:
3578       if (F.LocalNumObjCCategoriesInMap != 0)
3579         return llvm::createStringError(
3580             std::errc::illegal_byte_sequence,
3581             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3582 
3583       F.LocalNumObjCCategoriesInMap = Record[0];
3584       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3585       break;
3586 
3587     case OBJC_CATEGORIES:
3588       F.ObjCCategories.swap(Record);
3589       break;
3590 
3591     case CUDA_SPECIAL_DECL_REFS:
3592       // Later tables overwrite earlier ones.
3593       // FIXME: Modules will have trouble with this.
3594       CUDASpecialDeclRefs.clear();
3595       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3596         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3597       break;
3598 
3599     case HEADER_SEARCH_TABLE:
3600       F.HeaderFileInfoTableData = Blob.data();
3601       F.LocalNumHeaderFileInfos = Record[1];
3602       if (Record[0]) {
3603         F.HeaderFileInfoTable
3604           = HeaderFileInfoLookupTable::Create(
3605                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3606                    (const unsigned char *)F.HeaderFileInfoTableData,
3607                    HeaderFileInfoTrait(*this, F,
3608                                        &PP.getHeaderSearchInfo(),
3609                                        Blob.data() + Record[2]));
3610 
3611         PP.getHeaderSearchInfo().SetExternalSource(this);
3612         if (!PP.getHeaderSearchInfo().getExternalLookup())
3613           PP.getHeaderSearchInfo().SetExternalLookup(this);
3614       }
3615       break;
3616 
3617     case FP_PRAGMA_OPTIONS:
3618       // Later tables overwrite earlier ones.
3619       FPPragmaOptions.swap(Record);
3620       break;
3621 
3622     case OPENCL_EXTENSIONS:
3623       for (unsigned I = 0, E = Record.size(); I != E; ) {
3624         auto Name = ReadString(Record, I);
3625         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3626         OptInfo.Supported = Record[I++] != 0;
3627         OptInfo.Enabled = Record[I++] != 0;
3628         OptInfo.WithPragma = Record[I++] != 0;
3629         OptInfo.Avail = Record[I++];
3630         OptInfo.Core = Record[I++];
3631         OptInfo.Opt = Record[I++];
3632       }
3633       break;
3634 
3635     case TENTATIVE_DEFINITIONS:
3636       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3637         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3638       break;
3639 
3640     case KNOWN_NAMESPACES:
3641       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3642         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3643       break;
3644 
3645     case UNDEFINED_BUT_USED:
3646       if (UndefinedButUsed.size() % 2 != 0)
3647         return llvm::createStringError(std::errc::illegal_byte_sequence,
3648                                        "Invalid existing UndefinedButUsed");
3649 
3650       if (Record.size() % 2 != 0)
3651         return llvm::createStringError(std::errc::illegal_byte_sequence,
3652                                        "invalid undefined-but-used record");
3653       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3654         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3655         UndefinedButUsed.push_back(
3656             ReadSourceLocation(F, Record, I).getRawEncoding());
3657       }
3658       break;
3659 
3660     case DELETE_EXPRS_TO_ANALYZE:
3661       for (unsigned I = 0, N = Record.size(); I != N;) {
3662         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3663         const uint64_t Count = Record[I++];
3664         DelayedDeleteExprs.push_back(Count);
3665         for (uint64_t C = 0; C < Count; ++C) {
3666           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3667           bool IsArrayForm = Record[I++] == 1;
3668           DelayedDeleteExprs.push_back(IsArrayForm);
3669         }
3670       }
3671       break;
3672 
3673     case IMPORTED_MODULES:
3674       if (!F.isModule()) {
3675         // If we aren't loading a module (which has its own exports), make
3676         // all of the imported modules visible.
3677         // FIXME: Deal with macros-only imports.
3678         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3679           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3680           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3681           if (GlobalID) {
3682             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3683             if (DeserializationListener)
3684               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3685           }
3686         }
3687       }
3688       break;
3689 
3690     case MACRO_OFFSET: {
3691       if (F.LocalNumMacros != 0)
3692         return llvm::createStringError(
3693             std::errc::illegal_byte_sequence,
3694             "duplicate MACRO_OFFSET record in AST file");
3695       F.MacroOffsets = (const uint32_t *)Blob.data();
3696       F.LocalNumMacros = Record[0];
3697       unsigned LocalBaseMacroID = Record[1];
3698       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3699       F.BaseMacroID = getTotalNumMacros();
3700 
3701       if (F.LocalNumMacros > 0) {
3702         // Introduce the global -> local mapping for macros within this module.
3703         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3704 
3705         // Introduce the local -> global mapping for macros within this module.
3706         F.MacroRemap.insertOrReplace(
3707           std::make_pair(LocalBaseMacroID,
3708                          F.BaseMacroID - LocalBaseMacroID));
3709 
3710         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3711       }
3712       break;
3713     }
3714 
3715     case PP_INCLUDED_FILES:
3716       readIncludedFiles(F, Blob, PP);
3717       break;
3718 
3719     case LATE_PARSED_TEMPLATE:
3720       LateParsedTemplates.emplace_back(
3721           std::piecewise_construct, std::forward_as_tuple(&F),
3722           std::forward_as_tuple(Record.begin(), Record.end()));
3723       break;
3724 
3725     case OPTIMIZE_PRAGMA_OPTIONS:
3726       if (Record.size() != 1)
3727         return llvm::createStringError(std::errc::illegal_byte_sequence,
3728                                        "invalid pragma optimize record");
3729       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3730       break;
3731 
3732     case MSSTRUCT_PRAGMA_OPTIONS:
3733       if (Record.size() != 1)
3734         return llvm::createStringError(std::errc::illegal_byte_sequence,
3735                                        "invalid pragma ms_struct record");
3736       PragmaMSStructState = Record[0];
3737       break;
3738 
3739     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3740       if (Record.size() != 2)
3741         return llvm::createStringError(
3742             std::errc::illegal_byte_sequence,
3743             "invalid pragma pointers to members record");
3744       PragmaMSPointersToMembersState = Record[0];
3745       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3746       break;
3747 
3748     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3749       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3750         UnusedLocalTypedefNameCandidates.push_back(
3751             getGlobalDeclID(F, Record[I]));
3752       break;
3753 
3754     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3755       if (Record.size() != 1)
3756         return llvm::createStringError(std::errc::illegal_byte_sequence,
3757                                        "invalid cuda pragma options record");
3758       ForceCUDAHostDeviceDepth = Record[0];
3759       break;
3760 
3761     case ALIGN_PACK_PRAGMA_OPTIONS: {
3762       if (Record.size() < 3)
3763         return llvm::createStringError(std::errc::illegal_byte_sequence,
3764                                        "invalid pragma pack record");
3765       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3766       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3767       unsigned NumStackEntries = Record[2];
3768       unsigned Idx = 3;
3769       // Reset the stack when importing a new module.
3770       PragmaAlignPackStack.clear();
3771       for (unsigned I = 0; I < NumStackEntries; ++I) {
3772         PragmaAlignPackStackEntry Entry;
3773         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3774         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3775         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3776         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3777         Entry.SlotLabel = PragmaAlignPackStrings.back();
3778         PragmaAlignPackStack.push_back(Entry);
3779       }
3780       break;
3781     }
3782 
3783     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3784       if (Record.size() < 3)
3785         return llvm::createStringError(std::errc::illegal_byte_sequence,
3786                                        "invalid pragma float control record");
3787       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3788       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3789       unsigned NumStackEntries = Record[2];
3790       unsigned Idx = 3;
3791       // Reset the stack when importing a new module.
3792       FpPragmaStack.clear();
3793       for (unsigned I = 0; I < NumStackEntries; ++I) {
3794         FpPragmaStackEntry Entry;
3795         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3796         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3797         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3798         FpPragmaStrings.push_back(ReadString(Record, Idx));
3799         Entry.SlotLabel = FpPragmaStrings.back();
3800         FpPragmaStack.push_back(Entry);
3801       }
3802       break;
3803     }
3804 
3805     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3806       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3807         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3808       break;
3809     }
3810   }
3811 }
3812 
3813 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3814   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3815 
3816   // Additional remapping information.
3817   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3818   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3819   F.ModuleOffsetMap = StringRef();
3820 
3821   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3822   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3823     F.SLocRemap.insert(std::make_pair(0U, 0));
3824     F.SLocRemap.insert(std::make_pair(2U, 1));
3825   }
3826 
3827   // Continuous range maps we may be updating in our module.
3828   using SLocRemapBuilder =
3829       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3830                          2>::Builder;
3831   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3832   SLocRemapBuilder SLocRemap(F.SLocRemap);
3833   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3834   RemapBuilder MacroRemap(F.MacroRemap);
3835   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3836   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3837   RemapBuilder SelectorRemap(F.SelectorRemap);
3838   RemapBuilder DeclRemap(F.DeclRemap);
3839   RemapBuilder TypeRemap(F.TypeRemap);
3840 
3841   while (Data < DataEnd) {
3842     // FIXME: Looking up dependency modules by filename is horrible. Let's
3843     // start fixing this with prebuilt, explicit and implicit modules and see
3844     // how it goes...
3845     using namespace llvm::support;
3846     ModuleKind Kind = static_cast<ModuleKind>(
3847       endian::readNext<uint8_t, little, unaligned>(Data));
3848     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3849     StringRef Name = StringRef((const char*)Data, Len);
3850     Data += Len;
3851     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3852                               Kind == MK_ImplicitModule
3853                           ? ModuleMgr.lookupByModuleName(Name)
3854                           : ModuleMgr.lookupByFileName(Name));
3855     if (!OM) {
3856       std::string Msg =
3857           "SourceLocation remap refers to unknown module, cannot find ";
3858       Msg.append(std::string(Name));
3859       Error(Msg);
3860       return;
3861     }
3862 
3863     SourceLocation::UIntTy SLocOffset =
3864         endian::readNext<uint32_t, little, unaligned>(Data);
3865     uint32_t IdentifierIDOffset =
3866         endian::readNext<uint32_t, little, unaligned>(Data);
3867     uint32_t MacroIDOffset =
3868         endian::readNext<uint32_t, little, unaligned>(Data);
3869     uint32_t PreprocessedEntityIDOffset =
3870         endian::readNext<uint32_t, little, unaligned>(Data);
3871     uint32_t SubmoduleIDOffset =
3872         endian::readNext<uint32_t, little, unaligned>(Data);
3873     uint32_t SelectorIDOffset =
3874         endian::readNext<uint32_t, little, unaligned>(Data);
3875     uint32_t DeclIDOffset =
3876         endian::readNext<uint32_t, little, unaligned>(Data);
3877     uint32_t TypeIndexOffset =
3878         endian::readNext<uint32_t, little, unaligned>(Data);
3879 
3880     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3881                          RemapBuilder &Remap) {
3882       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3883       if (Offset != None)
3884         Remap.insert(std::make_pair(Offset,
3885                                     static_cast<int>(BaseOffset - Offset)));
3886     };
3887 
3888     constexpr SourceLocation::UIntTy SLocNone =
3889         std::numeric_limits<SourceLocation::UIntTy>::max();
3890     if (SLocOffset != SLocNone)
3891       SLocRemap.insert(std::make_pair(
3892           SLocOffset, static_cast<SourceLocation::IntTy>(
3893                           OM->SLocEntryBaseOffset - SLocOffset)));
3894 
3895     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3896     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3897     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3898               PreprocessedEntityRemap);
3899     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3900     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3901     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3902     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3903 
3904     // Global -> local mappings.
3905     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3906   }
3907 }
3908 
3909 ASTReader::ASTReadResult
3910 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3911                                   const ModuleFile *ImportedBy,
3912                                   unsigned ClientLoadCapabilities) {
3913   unsigned Idx = 0;
3914   F.ModuleMapPath = ReadPath(F, Record, Idx);
3915 
3916   // Try to resolve ModuleName in the current header search context and
3917   // verify that it is found in the same module map file as we saved. If the
3918   // top-level AST file is a main file, skip this check because there is no
3919   // usable header search context.
3920   assert(!F.ModuleName.empty() &&
3921          "MODULE_NAME should come before MODULE_MAP_FILE");
3922   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3923     // An implicitly-loaded module file should have its module listed in some
3924     // module map file that we've already loaded.
3925     Module *M =
3926         PP.getHeaderSearchInfo().lookupModule(F.ModuleName, F.ImportLoc);
3927     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3928     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3929     // Don't emit module relocation error if we have -fno-validate-pch
3930     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3931               DisableValidationForModuleKind::Module) &&
3932         !ModMap) {
3933       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3934         if (auto ASTFE = M ? M->getASTFile() : None) {
3935           // This module was defined by an imported (explicit) module.
3936           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3937                                                << ASTFE->getName();
3938         } else {
3939           // This module was built with a different module map.
3940           Diag(diag::err_imported_module_not_found)
3941               << F.ModuleName << F.FileName
3942               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3943               << !ImportedBy;
3944           // In case it was imported by a PCH, there's a chance the user is
3945           // just missing to include the search path to the directory containing
3946           // the modulemap.
3947           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3948             Diag(diag::note_imported_by_pch_module_not_found)
3949                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3950         }
3951       }
3952       return OutOfDate;
3953     }
3954 
3955     assert(M && M->Name == F.ModuleName && "found module with different name");
3956 
3957     // Check the primary module map file.
3958     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3959     if (!StoredModMap || *StoredModMap != ModMap) {
3960       assert(ModMap && "found module is missing module map file");
3961       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3962              "top-level import should be verified");
3963       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3964       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3965         Diag(diag::err_imported_module_modmap_changed)
3966             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3967             << ModMap->getName() << F.ModuleMapPath << NotImported;
3968       return OutOfDate;
3969     }
3970 
3971     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3972     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3973       // FIXME: we should use input files rather than storing names.
3974       std::string Filename = ReadPath(F, Record, Idx);
3975       auto SF = FileMgr.getFile(Filename, false, false);
3976       if (!SF) {
3977         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3978           Error("could not find file '" + Filename +"' referenced by AST file");
3979         return OutOfDate;
3980       }
3981       AdditionalStoredMaps.insert(*SF);
3982     }
3983 
3984     // Check any additional module map files (e.g. module.private.modulemap)
3985     // that are not in the pcm.
3986     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3987       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3988         // Remove files that match
3989         // Note: SmallPtrSet::erase is really remove
3990         if (!AdditionalStoredMaps.erase(ModMap)) {
3991           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3992             Diag(diag::err_module_different_modmap)
3993               << F.ModuleName << /*new*/0 << ModMap->getName();
3994           return OutOfDate;
3995         }
3996       }
3997     }
3998 
3999     // Check any additional module map files that are in the pcm, but not
4000     // found in header search. Cases that match are already removed.
4001     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4002       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4003         Diag(diag::err_module_different_modmap)
4004           << F.ModuleName << /*not new*/1 << ModMap->getName();
4005       return OutOfDate;
4006     }
4007   }
4008 
4009   if (Listener)
4010     Listener->ReadModuleMapFile(F.ModuleMapPath);
4011   return Success;
4012 }
4013 
4014 /// Move the given method to the back of the global list of methods.
4015 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4016   // Find the entry for this selector in the method pool.
4017   Sema::GlobalMethodPool::iterator Known
4018     = S.MethodPool.find(Method->getSelector());
4019   if (Known == S.MethodPool.end())
4020     return;
4021 
4022   // Retrieve the appropriate method list.
4023   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4024                                                     : Known->second.second;
4025   bool Found = false;
4026   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4027     if (!Found) {
4028       if (List->getMethod() == Method) {
4029         Found = true;
4030       } else {
4031         // Keep searching.
4032         continue;
4033       }
4034     }
4035 
4036     if (List->getNext())
4037       List->setMethod(List->getNext()->getMethod());
4038     else
4039       List->setMethod(Method);
4040   }
4041 }
4042 
4043 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4044   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4045   for (Decl *D : Names) {
4046     bool wasHidden = !D->isUnconditionallyVisible();
4047     D->setVisibleDespiteOwningModule();
4048 
4049     if (wasHidden && SemaObj) {
4050       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4051         moveMethodToBackOfGlobalList(*SemaObj, Method);
4052       }
4053     }
4054   }
4055 }
4056 
4057 void ASTReader::makeModuleVisible(Module *Mod,
4058                                   Module::NameVisibilityKind NameVisibility,
4059                                   SourceLocation ImportLoc) {
4060   llvm::SmallPtrSet<Module *, 4> Visited;
4061   SmallVector<Module *, 4> Stack;
4062   Stack.push_back(Mod);
4063   while (!Stack.empty()) {
4064     Mod = Stack.pop_back_val();
4065 
4066     if (NameVisibility <= Mod->NameVisibility) {
4067       // This module already has this level of visibility (or greater), so
4068       // there is nothing more to do.
4069       continue;
4070     }
4071 
4072     if (Mod->isUnimportable()) {
4073       // Modules that aren't importable cannot be made visible.
4074       continue;
4075     }
4076 
4077     // Update the module's name visibility.
4078     Mod->NameVisibility = NameVisibility;
4079 
4080     // If we've already deserialized any names from this module,
4081     // mark them as visible.
4082     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4083     if (Hidden != HiddenNamesMap.end()) {
4084       auto HiddenNames = std::move(*Hidden);
4085       HiddenNamesMap.erase(Hidden);
4086       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4087       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4088              "making names visible added hidden names");
4089     }
4090 
4091     // Push any exported modules onto the stack to be marked as visible.
4092     SmallVector<Module *, 16> Exports;
4093     Mod->getExportedModules(Exports);
4094     for (SmallVectorImpl<Module *>::iterator
4095            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4096       Module *Exported = *I;
4097       if (Visited.insert(Exported).second)
4098         Stack.push_back(Exported);
4099     }
4100   }
4101 }
4102 
4103 /// We've merged the definition \p MergedDef into the existing definition
4104 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4105 /// visible.
4106 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4107                                           NamedDecl *MergedDef) {
4108   if (!Def->isUnconditionallyVisible()) {
4109     // If MergedDef is visible or becomes visible, make the definition visible.
4110     if (MergedDef->isUnconditionallyVisible())
4111       Def->setVisibleDespiteOwningModule();
4112     else {
4113       getContext().mergeDefinitionIntoModule(
4114           Def, MergedDef->getImportedOwningModule(),
4115           /*NotifyListeners*/ false);
4116       PendingMergedDefinitionsToDeduplicate.insert(Def);
4117     }
4118   }
4119 }
4120 
4121 bool ASTReader::loadGlobalIndex() {
4122   if (GlobalIndex)
4123     return false;
4124 
4125   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4126       !PP.getLangOpts().Modules)
4127     return true;
4128 
4129   // Try to load the global index.
4130   TriedLoadingGlobalIndex = true;
4131   StringRef ModuleCachePath
4132     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4133   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4134       GlobalModuleIndex::readIndex(ModuleCachePath);
4135   if (llvm::Error Err = std::move(Result.second)) {
4136     assert(!Result.first);
4137     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4138     return true;
4139   }
4140 
4141   GlobalIndex.reset(Result.first);
4142   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4143   return false;
4144 }
4145 
4146 bool ASTReader::isGlobalIndexUnavailable() const {
4147   return PP.getLangOpts().Modules && UseGlobalIndex &&
4148          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4149 }
4150 
4151 static void updateModuleTimestamp(ModuleFile &MF) {
4152   // Overwrite the timestamp file contents so that file's mtime changes.
4153   std::string TimestampFilename = MF.getTimestampFilename();
4154   std::error_code EC;
4155   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4156                           llvm::sys::fs::OF_TextWithCRLF);
4157   if (EC)
4158     return;
4159   OS << "Timestamp file\n";
4160   OS.close();
4161   OS.clear_error(); // Avoid triggering a fatal error.
4162 }
4163 
4164 /// Given a cursor at the start of an AST file, scan ahead and drop the
4165 /// cursor into the start of the given block ID, returning false on success and
4166 /// true on failure.
4167 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4168   while (true) {
4169     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4170     if (!MaybeEntry) {
4171       // FIXME this drops errors on the floor.
4172       consumeError(MaybeEntry.takeError());
4173       return true;
4174     }
4175     llvm::BitstreamEntry Entry = MaybeEntry.get();
4176 
4177     switch (Entry.Kind) {
4178     case llvm::BitstreamEntry::Error:
4179     case llvm::BitstreamEntry::EndBlock:
4180       return true;
4181 
4182     case llvm::BitstreamEntry::Record:
4183       // Ignore top-level records.
4184       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4185         break;
4186       else {
4187         // FIXME this drops errors on the floor.
4188         consumeError(Skipped.takeError());
4189         return true;
4190       }
4191 
4192     case llvm::BitstreamEntry::SubBlock:
4193       if (Entry.ID == BlockID) {
4194         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4195           // FIXME this drops the error on the floor.
4196           consumeError(std::move(Err));
4197           return true;
4198         }
4199         // Found it!
4200         return false;
4201       }
4202 
4203       if (llvm::Error Err = Cursor.SkipBlock()) {
4204         // FIXME this drops the error on the floor.
4205         consumeError(std::move(Err));
4206         return true;
4207       }
4208     }
4209   }
4210 }
4211 
4212 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4213                                             ModuleKind Type,
4214                                             SourceLocation ImportLoc,
4215                                             unsigned ClientLoadCapabilities,
4216                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4217   llvm::SaveAndRestore<SourceLocation>
4218     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4219   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4220       CurrentDeserializingModuleKind, Type);
4221 
4222   // Defer any pending actions until we get to the end of reading the AST file.
4223   Deserializing AnASTFile(this);
4224 
4225   // Bump the generation number.
4226   unsigned PreviousGeneration = 0;
4227   if (ContextObj)
4228     PreviousGeneration = incrementGeneration(*ContextObj);
4229 
4230   unsigned NumModules = ModuleMgr.size();
4231   SmallVector<ImportedModule, 4> Loaded;
4232   if (ASTReadResult ReadResult =
4233           ReadASTCore(FileName, Type, ImportLoc,
4234                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4235                       ClientLoadCapabilities)) {
4236     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4237                             PP.getLangOpts().Modules
4238                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4239                                 : nullptr);
4240 
4241     // If we find that any modules are unusable, the global index is going
4242     // to be out-of-date. Just remove it.
4243     GlobalIndex.reset();
4244     ModuleMgr.setGlobalIndex(nullptr);
4245     return ReadResult;
4246   }
4247 
4248   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4249   // remove modules from this point. Various fields are updated during reading
4250   // the AST block and removing the modules would result in dangling pointers.
4251   // They are generally only incidentally dereferenced, ie. a binary search
4252   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4253   // be dereferenced but it wouldn't actually be used.
4254 
4255   // Load the AST blocks of all of the modules that we loaded. We can still
4256   // hit errors parsing the ASTs at this point.
4257   for (ImportedModule &M : Loaded) {
4258     ModuleFile &F = *M.Mod;
4259 
4260     // Read the AST block.
4261     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4262       Error(std::move(Err));
4263       return Failure;
4264     }
4265 
4266     // The AST block should always have a definition for the main module.
4267     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4268       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4269       return Failure;
4270     }
4271 
4272     // Read the extension blocks.
4273     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4274       if (llvm::Error Err = ReadExtensionBlock(F)) {
4275         Error(std::move(Err));
4276         return Failure;
4277       }
4278     }
4279 
4280     // Once read, set the ModuleFile bit base offset and update the size in
4281     // bits of all files we've seen.
4282     F.GlobalBitOffset = TotalModulesSizeInBits;
4283     TotalModulesSizeInBits += F.SizeInBits;
4284     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4285   }
4286 
4287   // Preload source locations and interesting indentifiers.
4288   for (ImportedModule &M : Loaded) {
4289     ModuleFile &F = *M.Mod;
4290 
4291     // Preload SLocEntries.
4292     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4293       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4294       // Load it through the SourceManager and don't call ReadSLocEntry()
4295       // directly because the entry may have already been loaded in which case
4296       // calling ReadSLocEntry() directly would trigger an assertion in
4297       // SourceManager.
4298       SourceMgr.getLoadedSLocEntryByID(Index);
4299     }
4300 
4301     // Map the original source file ID into the ID space of the current
4302     // compilation.
4303     if (F.OriginalSourceFileID.isValid()) {
4304       F.OriginalSourceFileID = FileID::get(
4305           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4306     }
4307 
4308     // Preload all the pending interesting identifiers by marking them out of
4309     // date.
4310     for (auto Offset : F.PreloadIdentifierOffsets) {
4311       const unsigned char *Data = F.IdentifierTableData + Offset;
4312 
4313       ASTIdentifierLookupTrait Trait(*this, F);
4314       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4315       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4316       auto &II = PP.getIdentifierTable().getOwn(Key);
4317       II.setOutOfDate(true);
4318 
4319       // Mark this identifier as being from an AST file so that we can track
4320       // whether we need to serialize it.
4321       markIdentifierFromAST(*this, II);
4322 
4323       // Associate the ID with the identifier so that the writer can reuse it.
4324       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4325       SetIdentifierInfo(ID, &II);
4326     }
4327   }
4328 
4329   // Setup the import locations and notify the module manager that we've
4330   // committed to these module files.
4331   for (ImportedModule &M : Loaded) {
4332     ModuleFile &F = *M.Mod;
4333 
4334     ModuleMgr.moduleFileAccepted(&F);
4335 
4336     // Set the import location.
4337     F.DirectImportLoc = ImportLoc;
4338     // FIXME: We assume that locations from PCH / preamble do not need
4339     // any translation.
4340     if (!M.ImportedBy)
4341       F.ImportLoc = M.ImportLoc;
4342     else
4343       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4344   }
4345 
4346   if (!PP.getLangOpts().CPlusPlus ||
4347       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4348        Type != MK_PrebuiltModule)) {
4349     // Mark all of the identifiers in the identifier table as being out of date,
4350     // so that various accessors know to check the loaded modules when the
4351     // identifier is used.
4352     //
4353     // For C++ modules, we don't need information on many identifiers (just
4354     // those that provide macros or are poisoned), so we mark all of
4355     // the interesting ones via PreloadIdentifierOffsets.
4356     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4357                                 IdEnd = PP.getIdentifierTable().end();
4358          Id != IdEnd; ++Id)
4359       Id->second->setOutOfDate(true);
4360   }
4361   // Mark selectors as out of date.
4362   for (auto Sel : SelectorGeneration)
4363     SelectorOutOfDate[Sel.first] = true;
4364 
4365   // Resolve any unresolved module exports.
4366   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4367     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4368     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4369     Module *ResolvedMod = getSubmodule(GlobalID);
4370 
4371     switch (Unresolved.Kind) {
4372     case UnresolvedModuleRef::Conflict:
4373       if (ResolvedMod) {
4374         Module::Conflict Conflict;
4375         Conflict.Other = ResolvedMod;
4376         Conflict.Message = Unresolved.String.str();
4377         Unresolved.Mod->Conflicts.push_back(Conflict);
4378       }
4379       continue;
4380 
4381     case UnresolvedModuleRef::Import:
4382       if (ResolvedMod)
4383         Unresolved.Mod->Imports.insert(ResolvedMod);
4384       continue;
4385 
4386     case UnresolvedModuleRef::Export:
4387       if (ResolvedMod || Unresolved.IsWildcard)
4388         Unresolved.Mod->Exports.push_back(
4389           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4390       continue;
4391     }
4392   }
4393   UnresolvedModuleRefs.clear();
4394 
4395   if (Imported)
4396     Imported->append(ImportedModules.begin(),
4397                      ImportedModules.end());
4398 
4399   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4400   // Might be unnecessary as use declarations are only used to build the
4401   // module itself.
4402 
4403   if (ContextObj)
4404     InitializeContext();
4405 
4406   if (SemaObj)
4407     UpdateSema();
4408 
4409   if (DeserializationListener)
4410     DeserializationListener->ReaderInitialized(this);
4411 
4412   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4413   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4414     // If this AST file is a precompiled preamble, then set the
4415     // preamble file ID of the source manager to the file source file
4416     // from which the preamble was built.
4417     if (Type == MK_Preamble) {
4418       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4419     } else if (Type == MK_MainFile) {
4420       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4421     }
4422   }
4423 
4424   // For any Objective-C class definitions we have already loaded, make sure
4425   // that we load any additional categories.
4426   if (ContextObj) {
4427     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4428       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4429                          ObjCClassesLoaded[I],
4430                          PreviousGeneration);
4431     }
4432   }
4433 
4434   if (PP.getHeaderSearchInfo()
4435           .getHeaderSearchOpts()
4436           .ModulesValidateOncePerBuildSession) {
4437     // Now we are certain that the module and all modules it depends on are
4438     // up to date.  Create or update timestamp files for modules that are
4439     // located in the module cache (not for PCH files that could be anywhere
4440     // in the filesystem).
4441     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4442       ImportedModule &M = Loaded[I];
4443       if (M.Mod->Kind == MK_ImplicitModule) {
4444         updateModuleTimestamp(*M.Mod);
4445       }
4446     }
4447   }
4448 
4449   return Success;
4450 }
4451 
4452 static ASTFileSignature readASTFileSignature(StringRef PCH);
4453 
4454 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4455 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4456   // FIXME checking magic headers is done in other places such as
4457   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4458   // always done the same. Unify it all with a helper.
4459   if (!Stream.canSkipToPos(4))
4460     return llvm::createStringError(std::errc::illegal_byte_sequence,
4461                                    "file too small to contain AST file magic");
4462   for (unsigned C : {'C', 'P', 'C', 'H'})
4463     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4464       if (Res.get() != C)
4465         return llvm::createStringError(
4466             std::errc::illegal_byte_sequence,
4467             "file doesn't start with AST file magic");
4468     } else
4469       return Res.takeError();
4470   return llvm::Error::success();
4471 }
4472 
4473 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4474   switch (Kind) {
4475   case MK_PCH:
4476     return 0; // PCH
4477   case MK_ImplicitModule:
4478   case MK_ExplicitModule:
4479   case MK_PrebuiltModule:
4480     return 1; // module
4481   case MK_MainFile:
4482   case MK_Preamble:
4483     return 2; // main source file
4484   }
4485   llvm_unreachable("unknown module kind");
4486 }
4487 
4488 ASTReader::ASTReadResult
4489 ASTReader::ReadASTCore(StringRef FileName,
4490                        ModuleKind Type,
4491                        SourceLocation ImportLoc,
4492                        ModuleFile *ImportedBy,
4493                        SmallVectorImpl<ImportedModule> &Loaded,
4494                        off_t ExpectedSize, time_t ExpectedModTime,
4495                        ASTFileSignature ExpectedSignature,
4496                        unsigned ClientLoadCapabilities) {
4497   ModuleFile *M;
4498   std::string ErrorStr;
4499   ModuleManager::AddModuleResult AddResult
4500     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4501                           getGeneration(), ExpectedSize, ExpectedModTime,
4502                           ExpectedSignature, readASTFileSignature,
4503                           M, ErrorStr);
4504 
4505   switch (AddResult) {
4506   case ModuleManager::AlreadyLoaded:
4507     Diag(diag::remark_module_import)
4508         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4509         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4510     return Success;
4511 
4512   case ModuleManager::NewlyLoaded:
4513     // Load module file below.
4514     break;
4515 
4516   case ModuleManager::Missing:
4517     // The module file was missing; if the client can handle that, return
4518     // it.
4519     if (ClientLoadCapabilities & ARR_Missing)
4520       return Missing;
4521 
4522     // Otherwise, return an error.
4523     Diag(diag::err_ast_file_not_found)
4524         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4525         << ErrorStr;
4526     return Failure;
4527 
4528   case ModuleManager::OutOfDate:
4529     // We couldn't load the module file because it is out-of-date. If the
4530     // client can handle out-of-date, return it.
4531     if (ClientLoadCapabilities & ARR_OutOfDate)
4532       return OutOfDate;
4533 
4534     // Otherwise, return an error.
4535     Diag(diag::err_ast_file_out_of_date)
4536         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4537         << ErrorStr;
4538     return Failure;
4539   }
4540 
4541   assert(M && "Missing module file");
4542 
4543   bool ShouldFinalizePCM = false;
4544   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4545     auto &MC = getModuleManager().getModuleCache();
4546     if (ShouldFinalizePCM)
4547       MC.finalizePCM(FileName);
4548     else
4549       MC.tryToDropPCM(FileName);
4550   });
4551   ModuleFile &F = *M;
4552   BitstreamCursor &Stream = F.Stream;
4553   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4554   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4555 
4556   // Sniff for the signature.
4557   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4558     Diag(diag::err_ast_file_invalid)
4559         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4560     return Failure;
4561   }
4562 
4563   // This is used for compatibility with older PCH formats.
4564   bool HaveReadControlBlock = false;
4565   while (true) {
4566     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4567     if (!MaybeEntry) {
4568       Error(MaybeEntry.takeError());
4569       return Failure;
4570     }
4571     llvm::BitstreamEntry Entry = MaybeEntry.get();
4572 
4573     switch (Entry.Kind) {
4574     case llvm::BitstreamEntry::Error:
4575     case llvm::BitstreamEntry::Record:
4576     case llvm::BitstreamEntry::EndBlock:
4577       Error("invalid record at top-level of AST file");
4578       return Failure;
4579 
4580     case llvm::BitstreamEntry::SubBlock:
4581       break;
4582     }
4583 
4584     switch (Entry.ID) {
4585     case CONTROL_BLOCK_ID:
4586       HaveReadControlBlock = true;
4587       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4588       case Success:
4589         // Check that we didn't try to load a non-module AST file as a module.
4590         //
4591         // FIXME: Should we also perform the converse check? Loading a module as
4592         // a PCH file sort of works, but it's a bit wonky.
4593         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4594              Type == MK_PrebuiltModule) &&
4595             F.ModuleName.empty()) {
4596           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4597           if (Result != OutOfDate ||
4598               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4599             Diag(diag::err_module_file_not_module) << FileName;
4600           return Result;
4601         }
4602         break;
4603 
4604       case Failure: return Failure;
4605       case Missing: return Missing;
4606       case OutOfDate: return OutOfDate;
4607       case VersionMismatch: return VersionMismatch;
4608       case ConfigurationMismatch: return ConfigurationMismatch;
4609       case HadErrors: return HadErrors;
4610       }
4611       break;
4612 
4613     case AST_BLOCK_ID:
4614       if (!HaveReadControlBlock) {
4615         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4616           Diag(diag::err_pch_version_too_old);
4617         return VersionMismatch;
4618       }
4619 
4620       // Record that we've loaded this module.
4621       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4622       ShouldFinalizePCM = true;
4623       return Success;
4624 
4625     case UNHASHED_CONTROL_BLOCK_ID:
4626       // This block is handled using look-ahead during ReadControlBlock.  We
4627       // shouldn't get here!
4628       Error("malformed block record in AST file");
4629       return Failure;
4630 
4631     default:
4632       if (llvm::Error Err = Stream.SkipBlock()) {
4633         Error(std::move(Err));
4634         return Failure;
4635       }
4636       break;
4637     }
4638   }
4639 
4640   llvm_unreachable("unexpected break; expected return");
4641 }
4642 
4643 ASTReader::ASTReadResult
4644 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4645                                     unsigned ClientLoadCapabilities) {
4646   const HeaderSearchOptions &HSOpts =
4647       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4648   bool AllowCompatibleConfigurationMismatch =
4649       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4650   bool DisableValidation = shouldDisableValidationForFile(F);
4651 
4652   ASTReadResult Result = readUnhashedControlBlockImpl(
4653       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4654       Listener.get(),
4655       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4656 
4657   // If F was directly imported by another module, it's implicitly validated by
4658   // the importing module.
4659   if (DisableValidation || WasImportedBy ||
4660       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4661     return Success;
4662 
4663   if (Result == Failure) {
4664     Error("malformed block record in AST file");
4665     return Failure;
4666   }
4667 
4668   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4669     // If this module has already been finalized in the ModuleCache, we're stuck
4670     // with it; we can only load a single version of each module.
4671     //
4672     // This can happen when a module is imported in two contexts: in one, as a
4673     // user module; in another, as a system module (due to an import from
4674     // another module marked with the [system] flag).  It usually indicates a
4675     // bug in the module map: this module should also be marked with [system].
4676     //
4677     // If -Wno-system-headers (the default), and the first import is as a
4678     // system module, then validation will fail during the as-user import,
4679     // since -Werror flags won't have been validated.  However, it's reasonable
4680     // to treat this consistently as a system module.
4681     //
4682     // If -Wsystem-headers, the PCM on disk was built with
4683     // -Wno-system-headers, and the first import is as a user module, then
4684     // validation will fail during the as-system import since the PCM on disk
4685     // doesn't guarantee that -Werror was respected.  However, the -Werror
4686     // flags were checked during the initial as-user import.
4687     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4688       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4689       return Success;
4690     }
4691   }
4692 
4693   return Result;
4694 }
4695 
4696 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4697     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4698     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4699     bool ValidateDiagnosticOptions) {
4700   // Initialize a stream.
4701   BitstreamCursor Stream(StreamData);
4702 
4703   // Sniff for the signature.
4704   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4705     // FIXME this drops the error on the floor.
4706     consumeError(std::move(Err));
4707     return Failure;
4708   }
4709 
4710   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4711   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4712     return Failure;
4713 
4714   // Read all of the records in the options block.
4715   RecordData Record;
4716   ASTReadResult Result = Success;
4717   while (true) {
4718     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4719     if (!MaybeEntry) {
4720       // FIXME this drops the error on the floor.
4721       consumeError(MaybeEntry.takeError());
4722       return Failure;
4723     }
4724     llvm::BitstreamEntry Entry = MaybeEntry.get();
4725 
4726     switch (Entry.Kind) {
4727     case llvm::BitstreamEntry::Error:
4728     case llvm::BitstreamEntry::SubBlock:
4729       return Failure;
4730 
4731     case llvm::BitstreamEntry::EndBlock:
4732       return Result;
4733 
4734     case llvm::BitstreamEntry::Record:
4735       // The interesting case.
4736       break;
4737     }
4738 
4739     // Read and process a record.
4740     Record.clear();
4741     StringRef Blob;
4742     Expected<unsigned> MaybeRecordType =
4743         Stream.readRecord(Entry.ID, Record, &Blob);
4744     if (!MaybeRecordType) {
4745       // FIXME this drops the error.
4746       return Failure;
4747     }
4748     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4749     case SIGNATURE:
4750       if (F)
4751         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4752       break;
4753     case AST_BLOCK_HASH:
4754       if (F)
4755         F->ASTBlockHash =
4756             ASTFileSignature::create(Record.begin(), Record.end());
4757       break;
4758     case DIAGNOSTIC_OPTIONS: {
4759       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4760       if (Listener && ValidateDiagnosticOptions &&
4761           !AllowCompatibleConfigurationMismatch &&
4762           ParseDiagnosticOptions(Record, Complain, *Listener))
4763         Result = OutOfDate; // Don't return early.  Read the signature.
4764       break;
4765     }
4766     case DIAG_PRAGMA_MAPPINGS:
4767       if (!F)
4768         break;
4769       if (F->PragmaDiagMappings.empty())
4770         F->PragmaDiagMappings.swap(Record);
4771       else
4772         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4773                                      Record.begin(), Record.end());
4774       break;
4775     case HEADER_SEARCH_ENTRY_USAGE:
4776       if (!F)
4777         break;
4778       unsigned Count = Record[0];
4779       const char *Byte = Blob.data();
4780       F->SearchPathUsage = llvm::BitVector(Count, false);
4781       for (unsigned I = 0; I < Count; ++Byte)
4782         for (unsigned Bit = 0; Bit < 8 && I < Count; ++Bit, ++I)
4783           if (*Byte & (1 << Bit))
4784             F->SearchPathUsage[I] = true;
4785       break;
4786     }
4787   }
4788 }
4789 
4790 /// Parse a record and blob containing module file extension metadata.
4791 static bool parseModuleFileExtensionMetadata(
4792               const SmallVectorImpl<uint64_t> &Record,
4793               StringRef Blob,
4794               ModuleFileExtensionMetadata &Metadata) {
4795   if (Record.size() < 4) return true;
4796 
4797   Metadata.MajorVersion = Record[0];
4798   Metadata.MinorVersion = Record[1];
4799 
4800   unsigned BlockNameLen = Record[2];
4801   unsigned UserInfoLen = Record[3];
4802 
4803   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4804 
4805   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4806   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4807                                   Blob.data() + BlockNameLen + UserInfoLen);
4808   return false;
4809 }
4810 
4811 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4812   BitstreamCursor &Stream = F.Stream;
4813 
4814   RecordData Record;
4815   while (true) {
4816     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4817     if (!MaybeEntry)
4818       return MaybeEntry.takeError();
4819     llvm::BitstreamEntry Entry = MaybeEntry.get();
4820 
4821     switch (Entry.Kind) {
4822     case llvm::BitstreamEntry::SubBlock:
4823       if (llvm::Error Err = Stream.SkipBlock())
4824         return Err;
4825       continue;
4826     case llvm::BitstreamEntry::EndBlock:
4827       return llvm::Error::success();
4828     case llvm::BitstreamEntry::Error:
4829       return llvm::createStringError(std::errc::illegal_byte_sequence,
4830                                      "malformed block record in AST file");
4831     case llvm::BitstreamEntry::Record:
4832       break;
4833     }
4834 
4835     Record.clear();
4836     StringRef Blob;
4837     Expected<unsigned> MaybeRecCode =
4838         Stream.readRecord(Entry.ID, Record, &Blob);
4839     if (!MaybeRecCode)
4840       return MaybeRecCode.takeError();
4841     switch (MaybeRecCode.get()) {
4842     case EXTENSION_METADATA: {
4843       ModuleFileExtensionMetadata Metadata;
4844       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4845         return llvm::createStringError(
4846             std::errc::illegal_byte_sequence,
4847             "malformed EXTENSION_METADATA in AST file");
4848 
4849       // Find a module file extension with this block name.
4850       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4851       if (Known == ModuleFileExtensions.end()) break;
4852 
4853       // Form a reader.
4854       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4855                                                              F, Stream)) {
4856         F.ExtensionReaders.push_back(std::move(Reader));
4857       }
4858 
4859       break;
4860     }
4861     }
4862   }
4863 
4864   return llvm::Error::success();
4865 }
4866 
4867 void ASTReader::InitializeContext() {
4868   assert(ContextObj && "no context to initialize");
4869   ASTContext &Context = *ContextObj;
4870 
4871   // If there's a listener, notify them that we "read" the translation unit.
4872   if (DeserializationListener)
4873     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4874                                       Context.getTranslationUnitDecl());
4875 
4876   // FIXME: Find a better way to deal with collisions between these
4877   // built-in types. Right now, we just ignore the problem.
4878 
4879   // Load the special types.
4880   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4881     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4882       if (!Context.CFConstantStringTypeDecl)
4883         Context.setCFConstantStringType(GetType(String));
4884     }
4885 
4886     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4887       QualType FileType = GetType(File);
4888       if (FileType.isNull()) {
4889         Error("FILE type is NULL");
4890         return;
4891       }
4892 
4893       if (!Context.FILEDecl) {
4894         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4895           Context.setFILEDecl(Typedef->getDecl());
4896         else {
4897           const TagType *Tag = FileType->getAs<TagType>();
4898           if (!Tag) {
4899             Error("Invalid FILE type in AST file");
4900             return;
4901           }
4902           Context.setFILEDecl(Tag->getDecl());
4903         }
4904       }
4905     }
4906 
4907     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4908       QualType Jmp_bufType = GetType(Jmp_buf);
4909       if (Jmp_bufType.isNull()) {
4910         Error("jmp_buf type is NULL");
4911         return;
4912       }
4913 
4914       if (!Context.jmp_bufDecl) {
4915         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4916           Context.setjmp_bufDecl(Typedef->getDecl());
4917         else {
4918           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4919           if (!Tag) {
4920             Error("Invalid jmp_buf type in AST file");
4921             return;
4922           }
4923           Context.setjmp_bufDecl(Tag->getDecl());
4924         }
4925       }
4926     }
4927 
4928     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4929       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4930       if (Sigjmp_bufType.isNull()) {
4931         Error("sigjmp_buf type is NULL");
4932         return;
4933       }
4934 
4935       if (!Context.sigjmp_bufDecl) {
4936         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4937           Context.setsigjmp_bufDecl(Typedef->getDecl());
4938         else {
4939           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4940           assert(Tag && "Invalid sigjmp_buf type in AST file");
4941           Context.setsigjmp_bufDecl(Tag->getDecl());
4942         }
4943       }
4944     }
4945 
4946     if (unsigned ObjCIdRedef
4947           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4948       if (Context.ObjCIdRedefinitionType.isNull())
4949         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4950     }
4951 
4952     if (unsigned ObjCClassRedef
4953           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4954       if (Context.ObjCClassRedefinitionType.isNull())
4955         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4956     }
4957 
4958     if (unsigned ObjCSelRedef
4959           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4960       if (Context.ObjCSelRedefinitionType.isNull())
4961         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4962     }
4963 
4964     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4965       QualType Ucontext_tType = GetType(Ucontext_t);
4966       if (Ucontext_tType.isNull()) {
4967         Error("ucontext_t type is NULL");
4968         return;
4969       }
4970 
4971       if (!Context.ucontext_tDecl) {
4972         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4973           Context.setucontext_tDecl(Typedef->getDecl());
4974         else {
4975           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4976           assert(Tag && "Invalid ucontext_t type in AST file");
4977           Context.setucontext_tDecl(Tag->getDecl());
4978         }
4979       }
4980     }
4981   }
4982 
4983   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4984 
4985   // If there were any CUDA special declarations, deserialize them.
4986   if (!CUDASpecialDeclRefs.empty()) {
4987     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4988     Context.setcudaConfigureCallDecl(
4989                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4990   }
4991 
4992   // Re-export any modules that were imported by a non-module AST file.
4993   // FIXME: This does not make macro-only imports visible again.
4994   for (auto &Import : ImportedModules) {
4995     if (Module *Imported = getSubmodule(Import.ID)) {
4996       makeModuleVisible(Imported, Module::AllVisible,
4997                         /*ImportLoc=*/Import.ImportLoc);
4998       if (Import.ImportLoc.isValid())
4999         PP.makeModuleVisible(Imported, Import.ImportLoc);
5000       // This updates visibility for Preprocessor only. For Sema, which can be
5001       // nullptr here, we do the same later, in UpdateSema().
5002     }
5003   }
5004 }
5005 
5006 void ASTReader::finalizeForWriting() {
5007   // Nothing to do for now.
5008 }
5009 
5010 /// Reads and return the signature record from \p PCH's control block, or
5011 /// else returns 0.
5012 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5013   BitstreamCursor Stream(PCH);
5014   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5015     // FIXME this drops the error on the floor.
5016     consumeError(std::move(Err));
5017     return ASTFileSignature();
5018   }
5019 
5020   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5021   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5022     return ASTFileSignature();
5023 
5024   // Scan for SIGNATURE inside the diagnostic options block.
5025   ASTReader::RecordData Record;
5026   while (true) {
5027     Expected<llvm::BitstreamEntry> MaybeEntry =
5028         Stream.advanceSkippingSubblocks();
5029     if (!MaybeEntry) {
5030       // FIXME this drops the error on the floor.
5031       consumeError(MaybeEntry.takeError());
5032       return ASTFileSignature();
5033     }
5034     llvm::BitstreamEntry Entry = MaybeEntry.get();
5035 
5036     if (Entry.Kind != llvm::BitstreamEntry::Record)
5037       return ASTFileSignature();
5038 
5039     Record.clear();
5040     StringRef Blob;
5041     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5042     if (!MaybeRecord) {
5043       // FIXME this drops the error on the floor.
5044       consumeError(MaybeRecord.takeError());
5045       return ASTFileSignature();
5046     }
5047     if (SIGNATURE == MaybeRecord.get())
5048       return ASTFileSignature::create(Record.begin(),
5049                                       Record.begin() + ASTFileSignature::size);
5050   }
5051 }
5052 
5053 /// Retrieve the name of the original source file name
5054 /// directly from the AST file, without actually loading the AST
5055 /// file.
5056 std::string ASTReader::getOriginalSourceFile(
5057     const std::string &ASTFileName, FileManager &FileMgr,
5058     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5059   // Open the AST file.
5060   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5061   if (!Buffer) {
5062     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5063         << ASTFileName << Buffer.getError().message();
5064     return std::string();
5065   }
5066 
5067   // Initialize the stream
5068   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5069 
5070   // Sniff for the signature.
5071   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5072     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5073     return std::string();
5074   }
5075 
5076   // Scan for the CONTROL_BLOCK_ID block.
5077   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5078     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5079     return std::string();
5080   }
5081 
5082   // Scan for ORIGINAL_FILE inside the control block.
5083   RecordData Record;
5084   while (true) {
5085     Expected<llvm::BitstreamEntry> MaybeEntry =
5086         Stream.advanceSkippingSubblocks();
5087     if (!MaybeEntry) {
5088       // FIXME this drops errors on the floor.
5089       consumeError(MaybeEntry.takeError());
5090       return std::string();
5091     }
5092     llvm::BitstreamEntry Entry = MaybeEntry.get();
5093 
5094     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5095       return std::string();
5096 
5097     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5098       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5099       return std::string();
5100     }
5101 
5102     Record.clear();
5103     StringRef Blob;
5104     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5105     if (!MaybeRecord) {
5106       // FIXME this drops the errors on the floor.
5107       consumeError(MaybeRecord.takeError());
5108       return std::string();
5109     }
5110     if (ORIGINAL_FILE == MaybeRecord.get())
5111       return Blob.str();
5112   }
5113 }
5114 
5115 namespace {
5116 
5117   class SimplePCHValidator : public ASTReaderListener {
5118     const LangOptions &ExistingLangOpts;
5119     const TargetOptions &ExistingTargetOpts;
5120     const PreprocessorOptions &ExistingPPOpts;
5121     std::string ExistingModuleCachePath;
5122     FileManager &FileMgr;
5123 
5124   public:
5125     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5126                        const TargetOptions &ExistingTargetOpts,
5127                        const PreprocessorOptions &ExistingPPOpts,
5128                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5129         : ExistingLangOpts(ExistingLangOpts),
5130           ExistingTargetOpts(ExistingTargetOpts),
5131           ExistingPPOpts(ExistingPPOpts),
5132           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5133 
5134     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5135                              bool AllowCompatibleDifferences) override {
5136       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5137                                   AllowCompatibleDifferences);
5138     }
5139 
5140     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5141                            bool AllowCompatibleDifferences) override {
5142       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5143                                 AllowCompatibleDifferences);
5144     }
5145 
5146     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5147                                  StringRef SpecificModuleCachePath,
5148                                  bool Complain) override {
5149       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5150                                       ExistingModuleCachePath, nullptr,
5151                                       ExistingLangOpts, ExistingPPOpts);
5152     }
5153 
5154     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5155                                  bool Complain,
5156                                  std::string &SuggestedPredefines) override {
5157       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5158                                       SuggestedPredefines, ExistingLangOpts);
5159     }
5160   };
5161 
5162 } // namespace
5163 
5164 bool ASTReader::readASTFileControlBlock(
5165     StringRef Filename, FileManager &FileMgr,
5166     const PCHContainerReader &PCHContainerRdr,
5167     bool FindModuleFileExtensions,
5168     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5169   // Open the AST file.
5170   // FIXME: This allows use of the VFS; we do not allow use of the
5171   // VFS when actually loading a module.
5172   auto Buffer = FileMgr.getBufferForFile(Filename);
5173   if (!Buffer) {
5174     return true;
5175   }
5176 
5177   // Initialize the stream
5178   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5179   BitstreamCursor Stream(Bytes);
5180 
5181   // Sniff for the signature.
5182   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5183     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5184     return true;
5185   }
5186 
5187   // Scan for the CONTROL_BLOCK_ID block.
5188   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5189     return true;
5190 
5191   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5192   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5193   bool NeedsImports = Listener.needsImportVisitation();
5194   BitstreamCursor InputFilesCursor;
5195 
5196   RecordData Record;
5197   std::string ModuleDir;
5198   bool DoneWithControlBlock = false;
5199   while (!DoneWithControlBlock) {
5200     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5201     if (!MaybeEntry) {
5202       // FIXME this drops the error on the floor.
5203       consumeError(MaybeEntry.takeError());
5204       return true;
5205     }
5206     llvm::BitstreamEntry Entry = MaybeEntry.get();
5207 
5208     switch (Entry.Kind) {
5209     case llvm::BitstreamEntry::SubBlock: {
5210       switch (Entry.ID) {
5211       case OPTIONS_BLOCK_ID: {
5212         std::string IgnoredSuggestedPredefines;
5213         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5214                              /*AllowCompatibleConfigurationMismatch*/ false,
5215                              Listener, IgnoredSuggestedPredefines) != Success)
5216           return true;
5217         break;
5218       }
5219 
5220       case INPUT_FILES_BLOCK_ID:
5221         InputFilesCursor = Stream;
5222         if (llvm::Error Err = Stream.SkipBlock()) {
5223           // FIXME this drops the error on the floor.
5224           consumeError(std::move(Err));
5225           return true;
5226         }
5227         if (NeedsInputFiles &&
5228             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5229           return true;
5230         break;
5231 
5232       default:
5233         if (llvm::Error Err = Stream.SkipBlock()) {
5234           // FIXME this drops the error on the floor.
5235           consumeError(std::move(Err));
5236           return true;
5237         }
5238         break;
5239       }
5240 
5241       continue;
5242     }
5243 
5244     case llvm::BitstreamEntry::EndBlock:
5245       DoneWithControlBlock = true;
5246       break;
5247 
5248     case llvm::BitstreamEntry::Error:
5249       return true;
5250 
5251     case llvm::BitstreamEntry::Record:
5252       break;
5253     }
5254 
5255     if (DoneWithControlBlock) break;
5256 
5257     Record.clear();
5258     StringRef Blob;
5259     Expected<unsigned> MaybeRecCode =
5260         Stream.readRecord(Entry.ID, Record, &Blob);
5261     if (!MaybeRecCode) {
5262       // FIXME this drops the error.
5263       return Failure;
5264     }
5265     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5266     case METADATA:
5267       if (Record[0] != VERSION_MAJOR)
5268         return true;
5269       if (Listener.ReadFullVersionInformation(Blob))
5270         return true;
5271       break;
5272     case MODULE_NAME:
5273       Listener.ReadModuleName(Blob);
5274       break;
5275     case MODULE_DIRECTORY:
5276       ModuleDir = std::string(Blob);
5277       break;
5278     case MODULE_MAP_FILE: {
5279       unsigned Idx = 0;
5280       auto Path = ReadString(Record, Idx);
5281       ResolveImportedPath(Path, ModuleDir);
5282       Listener.ReadModuleMapFile(Path);
5283       break;
5284     }
5285     case INPUT_FILE_OFFSETS: {
5286       if (!NeedsInputFiles)
5287         break;
5288 
5289       unsigned NumInputFiles = Record[0];
5290       unsigned NumUserFiles = Record[1];
5291       const llvm::support::unaligned_uint64_t *InputFileOffs =
5292           (const llvm::support::unaligned_uint64_t *)Blob.data();
5293       for (unsigned I = 0; I != NumInputFiles; ++I) {
5294         // Go find this input file.
5295         bool isSystemFile = I >= NumUserFiles;
5296 
5297         if (isSystemFile && !NeedsSystemInputFiles)
5298           break; // the rest are system input files
5299 
5300         BitstreamCursor &Cursor = InputFilesCursor;
5301         SavedStreamPosition SavedPosition(Cursor);
5302         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5303           // FIXME this drops errors on the floor.
5304           consumeError(std::move(Err));
5305         }
5306 
5307         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5308         if (!MaybeCode) {
5309           // FIXME this drops errors on the floor.
5310           consumeError(MaybeCode.takeError());
5311         }
5312         unsigned Code = MaybeCode.get();
5313 
5314         RecordData Record;
5315         StringRef Blob;
5316         bool shouldContinue = false;
5317         Expected<unsigned> MaybeRecordType =
5318             Cursor.readRecord(Code, Record, &Blob);
5319         if (!MaybeRecordType) {
5320           // FIXME this drops errors on the floor.
5321           consumeError(MaybeRecordType.takeError());
5322         }
5323         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5324         case INPUT_FILE_HASH:
5325           break;
5326         case INPUT_FILE:
5327           bool Overridden = static_cast<bool>(Record[3]);
5328           std::string Filename = std::string(Blob);
5329           ResolveImportedPath(Filename, ModuleDir);
5330           shouldContinue = Listener.visitInputFile(
5331               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5332           break;
5333         }
5334         if (!shouldContinue)
5335           break;
5336       }
5337       break;
5338     }
5339 
5340     case IMPORTS: {
5341       if (!NeedsImports)
5342         break;
5343 
5344       unsigned Idx = 0, N = Record.size();
5345       while (Idx < N) {
5346         // Read information about the AST file.
5347         Idx +=
5348             1 + 1 + 1 + 1 +
5349             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5350         std::string ModuleName = ReadString(Record, Idx);
5351         std::string Filename = ReadString(Record, Idx);
5352         ResolveImportedPath(Filename, ModuleDir);
5353         Listener.visitImport(ModuleName, Filename);
5354       }
5355       break;
5356     }
5357 
5358     default:
5359       // No other validation to perform.
5360       break;
5361     }
5362   }
5363 
5364   // Look for module file extension blocks, if requested.
5365   if (FindModuleFileExtensions) {
5366     BitstreamCursor SavedStream = Stream;
5367     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5368       bool DoneWithExtensionBlock = false;
5369       while (!DoneWithExtensionBlock) {
5370         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5371         if (!MaybeEntry) {
5372           // FIXME this drops the error.
5373           return true;
5374         }
5375         llvm::BitstreamEntry Entry = MaybeEntry.get();
5376 
5377         switch (Entry.Kind) {
5378         case llvm::BitstreamEntry::SubBlock:
5379           if (llvm::Error Err = Stream.SkipBlock()) {
5380             // FIXME this drops the error on the floor.
5381             consumeError(std::move(Err));
5382             return true;
5383           }
5384           continue;
5385 
5386         case llvm::BitstreamEntry::EndBlock:
5387           DoneWithExtensionBlock = true;
5388           continue;
5389 
5390         case llvm::BitstreamEntry::Error:
5391           return true;
5392 
5393         case llvm::BitstreamEntry::Record:
5394           break;
5395         }
5396 
5397        Record.clear();
5398        StringRef Blob;
5399        Expected<unsigned> MaybeRecCode =
5400            Stream.readRecord(Entry.ID, Record, &Blob);
5401        if (!MaybeRecCode) {
5402          // FIXME this drops the error.
5403          return true;
5404        }
5405        switch (MaybeRecCode.get()) {
5406        case EXTENSION_METADATA: {
5407          ModuleFileExtensionMetadata Metadata;
5408          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5409            return true;
5410 
5411          Listener.readModuleFileExtension(Metadata);
5412          break;
5413        }
5414        }
5415       }
5416     }
5417     Stream = SavedStream;
5418   }
5419 
5420   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5421   if (readUnhashedControlBlockImpl(
5422           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5423           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5424           ValidateDiagnosticOptions) != Success)
5425     return true;
5426 
5427   return false;
5428 }
5429 
5430 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5431                                     const PCHContainerReader &PCHContainerRdr,
5432                                     const LangOptions &LangOpts,
5433                                     const TargetOptions &TargetOpts,
5434                                     const PreprocessorOptions &PPOpts,
5435                                     StringRef ExistingModuleCachePath) {
5436   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5437                                ExistingModuleCachePath, FileMgr);
5438   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5439                                   /*FindModuleFileExtensions=*/false,
5440                                   validator,
5441                                   /*ValidateDiagnosticOptions=*/true);
5442 }
5443 
5444 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5445                                           unsigned ClientLoadCapabilities) {
5446   // Enter the submodule block.
5447   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5448     return Err;
5449 
5450   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5451   bool First = true;
5452   Module *CurrentModule = nullptr;
5453   RecordData Record;
5454   while (true) {
5455     Expected<llvm::BitstreamEntry> MaybeEntry =
5456         F.Stream.advanceSkippingSubblocks();
5457     if (!MaybeEntry)
5458       return MaybeEntry.takeError();
5459     llvm::BitstreamEntry Entry = MaybeEntry.get();
5460 
5461     switch (Entry.Kind) {
5462     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5463     case llvm::BitstreamEntry::Error:
5464       return llvm::createStringError(std::errc::illegal_byte_sequence,
5465                                      "malformed block record in AST file");
5466     case llvm::BitstreamEntry::EndBlock:
5467       return llvm::Error::success();
5468     case llvm::BitstreamEntry::Record:
5469       // The interesting case.
5470       break;
5471     }
5472 
5473     // Read a record.
5474     StringRef Blob;
5475     Record.clear();
5476     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5477     if (!MaybeKind)
5478       return MaybeKind.takeError();
5479     unsigned Kind = MaybeKind.get();
5480 
5481     if ((Kind == SUBMODULE_METADATA) != First)
5482       return llvm::createStringError(
5483           std::errc::illegal_byte_sequence,
5484           "submodule metadata record should be at beginning of block");
5485     First = false;
5486 
5487     // Submodule information is only valid if we have a current module.
5488     // FIXME: Should we error on these cases?
5489     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5490         Kind != SUBMODULE_DEFINITION)
5491       continue;
5492 
5493     switch (Kind) {
5494     default:  // Default behavior: ignore.
5495       break;
5496 
5497     case SUBMODULE_DEFINITION: {
5498       if (Record.size() < 12)
5499         return llvm::createStringError(std::errc::illegal_byte_sequence,
5500                                        "malformed module definition");
5501 
5502       StringRef Name = Blob;
5503       unsigned Idx = 0;
5504       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5505       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5506       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5507       bool IsFramework = Record[Idx++];
5508       bool IsExplicit = Record[Idx++];
5509       bool IsSystem = Record[Idx++];
5510       bool IsExternC = Record[Idx++];
5511       bool InferSubmodules = Record[Idx++];
5512       bool InferExplicitSubmodules = Record[Idx++];
5513       bool InferExportWildcard = Record[Idx++];
5514       bool ConfigMacrosExhaustive = Record[Idx++];
5515       bool ModuleMapIsPrivate = Record[Idx++];
5516 
5517       Module *ParentModule = nullptr;
5518       if (Parent)
5519         ParentModule = getSubmodule(Parent);
5520 
5521       // Retrieve this (sub)module from the module map, creating it if
5522       // necessary.
5523       CurrentModule =
5524           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5525               .first;
5526 
5527       // FIXME: set the definition loc for CurrentModule, or call
5528       // ModMap.setInferredModuleAllowedBy()
5529 
5530       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5531       if (GlobalIndex >= SubmodulesLoaded.size() ||
5532           SubmodulesLoaded[GlobalIndex])
5533         return llvm::createStringError(std::errc::invalid_argument,
5534                                        "too many submodules");
5535 
5536       if (!ParentModule) {
5537         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5538           // Don't emit module relocation error if we have -fno-validate-pch
5539           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5540                     DisableValidationForModuleKind::Module) &&
5541               CurFile != F.File) {
5542             auto ConflictError =
5543                 PartialDiagnostic(diag::err_module_file_conflict,
5544                                   ContextObj->DiagAllocator)
5545                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5546                 << F.File->getName();
5547             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5548           }
5549         }
5550 
5551         F.DidReadTopLevelSubmodule = true;
5552         CurrentModule->setASTFile(F.File);
5553         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5554       }
5555 
5556       CurrentModule->Kind = Kind;
5557       CurrentModule->Signature = F.Signature;
5558       CurrentModule->IsFromModuleFile = true;
5559       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5560       CurrentModule->IsExternC = IsExternC;
5561       CurrentModule->InferSubmodules = InferSubmodules;
5562       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5563       CurrentModule->InferExportWildcard = InferExportWildcard;
5564       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5565       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5566       if (DeserializationListener)
5567         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5568 
5569       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5570 
5571       // Clear out data that will be replaced by what is in the module file.
5572       CurrentModule->LinkLibraries.clear();
5573       CurrentModule->ConfigMacros.clear();
5574       CurrentModule->UnresolvedConflicts.clear();
5575       CurrentModule->Conflicts.clear();
5576 
5577       // The module is available unless it's missing a requirement; relevant
5578       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5579       // Missing headers that were present when the module was built do not
5580       // make it unavailable -- if we got this far, this must be an explicitly
5581       // imported module file.
5582       CurrentModule->Requirements.clear();
5583       CurrentModule->MissingHeaders.clear();
5584       CurrentModule->IsUnimportable =
5585           ParentModule && ParentModule->IsUnimportable;
5586       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5587       break;
5588     }
5589 
5590     case SUBMODULE_UMBRELLA_HEADER: {
5591       // FIXME: This doesn't work for framework modules as `Filename` is the
5592       //        name as written in the module file and does not include
5593       //        `Headers/`, so this path will never exist.
5594       std::string Filename = std::string(Blob);
5595       ResolveImportedPath(F, Filename);
5596       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5597         if (!CurrentModule->getUmbrellaHeader()) {
5598           // FIXME: NameAsWritten
5599           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5600         }
5601         // Note that it's too late at this point to return out of date if the
5602         // name from the PCM doesn't match up with the one in the module map,
5603         // but also quite unlikely since we will have already checked the
5604         // modification time and size of the module map file itself.
5605       }
5606       break;
5607     }
5608 
5609     case SUBMODULE_HEADER:
5610     case SUBMODULE_EXCLUDED_HEADER:
5611     case SUBMODULE_PRIVATE_HEADER:
5612       // We lazily associate headers with their modules via the HeaderInfo table.
5613       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5614       // of complete filenames or remove it entirely.
5615       break;
5616 
5617     case SUBMODULE_TEXTUAL_HEADER:
5618     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5619       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5620       // them here.
5621       break;
5622 
5623     case SUBMODULE_TOPHEADER:
5624       CurrentModule->addTopHeaderFilename(Blob);
5625       break;
5626 
5627     case SUBMODULE_UMBRELLA_DIR: {
5628       // See comments in SUBMODULE_UMBRELLA_HEADER
5629       std::string Dirname = std::string(Blob);
5630       ResolveImportedPath(F, Dirname);
5631       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5632         if (!CurrentModule->getUmbrellaDir()) {
5633           // FIXME: NameAsWritten
5634           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5635         }
5636       }
5637       break;
5638     }
5639 
5640     case SUBMODULE_METADATA: {
5641       F.BaseSubmoduleID = getTotalNumSubmodules();
5642       F.LocalNumSubmodules = Record[0];
5643       unsigned LocalBaseSubmoduleID = Record[1];
5644       if (F.LocalNumSubmodules > 0) {
5645         // Introduce the global -> local mapping for submodules within this
5646         // module.
5647         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5648 
5649         // Introduce the local -> global mapping for submodules within this
5650         // module.
5651         F.SubmoduleRemap.insertOrReplace(
5652           std::make_pair(LocalBaseSubmoduleID,
5653                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5654 
5655         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5656       }
5657       break;
5658     }
5659 
5660     case SUBMODULE_IMPORTS:
5661       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5662         UnresolvedModuleRef Unresolved;
5663         Unresolved.File = &F;
5664         Unresolved.Mod = CurrentModule;
5665         Unresolved.ID = Record[Idx];
5666         Unresolved.Kind = UnresolvedModuleRef::Import;
5667         Unresolved.IsWildcard = false;
5668         UnresolvedModuleRefs.push_back(Unresolved);
5669       }
5670       break;
5671 
5672     case SUBMODULE_EXPORTS:
5673       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5674         UnresolvedModuleRef Unresolved;
5675         Unresolved.File = &F;
5676         Unresolved.Mod = CurrentModule;
5677         Unresolved.ID = Record[Idx];
5678         Unresolved.Kind = UnresolvedModuleRef::Export;
5679         Unresolved.IsWildcard = Record[Idx + 1];
5680         UnresolvedModuleRefs.push_back(Unresolved);
5681       }
5682 
5683       // Once we've loaded the set of exports, there's no reason to keep
5684       // the parsed, unresolved exports around.
5685       CurrentModule->UnresolvedExports.clear();
5686       break;
5687 
5688     case SUBMODULE_REQUIRES:
5689       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5690                                     PP.getTargetInfo());
5691       break;
5692 
5693     case SUBMODULE_LINK_LIBRARY:
5694       ModMap.resolveLinkAsDependencies(CurrentModule);
5695       CurrentModule->LinkLibraries.push_back(
5696           Module::LinkLibrary(std::string(Blob), Record[0]));
5697       break;
5698 
5699     case SUBMODULE_CONFIG_MACRO:
5700       CurrentModule->ConfigMacros.push_back(Blob.str());
5701       break;
5702 
5703     case SUBMODULE_CONFLICT: {
5704       UnresolvedModuleRef Unresolved;
5705       Unresolved.File = &F;
5706       Unresolved.Mod = CurrentModule;
5707       Unresolved.ID = Record[0];
5708       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5709       Unresolved.IsWildcard = false;
5710       Unresolved.String = Blob;
5711       UnresolvedModuleRefs.push_back(Unresolved);
5712       break;
5713     }
5714 
5715     case SUBMODULE_INITIALIZERS: {
5716       if (!ContextObj)
5717         break;
5718       SmallVector<uint32_t, 16> Inits;
5719       for (auto &ID : Record)
5720         Inits.push_back(getGlobalDeclID(F, ID));
5721       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5722       break;
5723     }
5724 
5725     case SUBMODULE_EXPORT_AS:
5726       CurrentModule->ExportAsModule = Blob.str();
5727       ModMap.addLinkAsDependency(CurrentModule);
5728       break;
5729     }
5730   }
5731 }
5732 
5733 /// Parse the record that corresponds to a LangOptions data
5734 /// structure.
5735 ///
5736 /// This routine parses the language options from the AST file and then gives
5737 /// them to the AST listener if one is set.
5738 ///
5739 /// \returns true if the listener deems the file unacceptable, false otherwise.
5740 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5741                                      bool Complain,
5742                                      ASTReaderListener &Listener,
5743                                      bool AllowCompatibleDifferences) {
5744   LangOptions LangOpts;
5745   unsigned Idx = 0;
5746 #define LANGOPT(Name, Bits, Default, Description) \
5747   LangOpts.Name = Record[Idx++];
5748 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5749   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5750 #include "clang/Basic/LangOptions.def"
5751 #define SANITIZER(NAME, ID)                                                    \
5752   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5753 #include "clang/Basic/Sanitizers.def"
5754 
5755   for (unsigned N = Record[Idx++]; N; --N)
5756     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5757 
5758   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5759   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5760   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5761 
5762   LangOpts.CurrentModule = ReadString(Record, Idx);
5763 
5764   // Comment options.
5765   for (unsigned N = Record[Idx++]; N; --N) {
5766     LangOpts.CommentOpts.BlockCommandNames.push_back(
5767       ReadString(Record, Idx));
5768   }
5769   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5770 
5771   // OpenMP offloading options.
5772   for (unsigned N = Record[Idx++]; N; --N) {
5773     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5774   }
5775 
5776   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5777 
5778   return Listener.ReadLanguageOptions(LangOpts, Complain,
5779                                       AllowCompatibleDifferences);
5780 }
5781 
5782 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5783                                    ASTReaderListener &Listener,
5784                                    bool AllowCompatibleDifferences) {
5785   unsigned Idx = 0;
5786   TargetOptions TargetOpts;
5787   TargetOpts.Triple = ReadString(Record, Idx);
5788   TargetOpts.CPU = ReadString(Record, Idx);
5789   TargetOpts.TuneCPU = ReadString(Record, Idx);
5790   TargetOpts.ABI = ReadString(Record, Idx);
5791   for (unsigned N = Record[Idx++]; N; --N) {
5792     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5793   }
5794   for (unsigned N = Record[Idx++]; N; --N) {
5795     TargetOpts.Features.push_back(ReadString(Record, Idx));
5796   }
5797 
5798   return Listener.ReadTargetOptions(TargetOpts, Complain,
5799                                     AllowCompatibleDifferences);
5800 }
5801 
5802 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5803                                        ASTReaderListener &Listener) {
5804   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5805   unsigned Idx = 0;
5806 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5807 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5808   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5809 #include "clang/Basic/DiagnosticOptions.def"
5810 
5811   for (unsigned N = Record[Idx++]; N; --N)
5812     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5813   for (unsigned N = Record[Idx++]; N; --N)
5814     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5815 
5816   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5817 }
5818 
5819 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5820                                        ASTReaderListener &Listener) {
5821   FileSystemOptions FSOpts;
5822   unsigned Idx = 0;
5823   FSOpts.WorkingDir = ReadString(Record, Idx);
5824   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5825 }
5826 
5827 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5828                                          bool Complain,
5829                                          ASTReaderListener &Listener) {
5830   HeaderSearchOptions HSOpts;
5831   unsigned Idx = 0;
5832   HSOpts.Sysroot = ReadString(Record, Idx);
5833 
5834   // Include entries.
5835   for (unsigned N = Record[Idx++]; N; --N) {
5836     std::string Path = ReadString(Record, Idx);
5837     frontend::IncludeDirGroup Group
5838       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5839     bool IsFramework = Record[Idx++];
5840     bool IgnoreSysRoot = Record[Idx++];
5841     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5842                                     IgnoreSysRoot);
5843   }
5844 
5845   // System header prefixes.
5846   for (unsigned N = Record[Idx++]; N; --N) {
5847     std::string Prefix = ReadString(Record, Idx);
5848     bool IsSystemHeader = Record[Idx++];
5849     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5850   }
5851 
5852   HSOpts.ResourceDir = ReadString(Record, Idx);
5853   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5854   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5855   HSOpts.DisableModuleHash = Record[Idx++];
5856   HSOpts.ImplicitModuleMaps = Record[Idx++];
5857   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5858   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5859   HSOpts.UseBuiltinIncludes = Record[Idx++];
5860   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5861   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5862   HSOpts.UseLibcxx = Record[Idx++];
5863   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5864 
5865   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5866                                           Complain);
5867 }
5868 
5869 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5870                                          bool Complain,
5871                                          ASTReaderListener &Listener,
5872                                          std::string &SuggestedPredefines) {
5873   PreprocessorOptions PPOpts;
5874   unsigned Idx = 0;
5875 
5876   // Macro definitions/undefs
5877   for (unsigned N = Record[Idx++]; N; --N) {
5878     std::string Macro = ReadString(Record, Idx);
5879     bool IsUndef = Record[Idx++];
5880     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5881   }
5882 
5883   // Includes
5884   for (unsigned N = Record[Idx++]; N; --N) {
5885     PPOpts.Includes.push_back(ReadString(Record, Idx));
5886   }
5887 
5888   // Macro Includes
5889   for (unsigned N = Record[Idx++]; N; --N) {
5890     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5891   }
5892 
5893   PPOpts.UsePredefines = Record[Idx++];
5894   PPOpts.DetailedRecord = Record[Idx++];
5895   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5896   PPOpts.ObjCXXARCStandardLibrary =
5897     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5898   SuggestedPredefines.clear();
5899   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5900                                           SuggestedPredefines);
5901 }
5902 
5903 std::pair<ModuleFile *, unsigned>
5904 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5905   GlobalPreprocessedEntityMapType::iterator
5906   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5907   assert(I != GlobalPreprocessedEntityMap.end() &&
5908          "Corrupted global preprocessed entity map");
5909   ModuleFile *M = I->second;
5910   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5911   return std::make_pair(M, LocalIndex);
5912 }
5913 
5914 llvm::iterator_range<PreprocessingRecord::iterator>
5915 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5916   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5917     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5918                                              Mod.NumPreprocessedEntities);
5919 
5920   return llvm::make_range(PreprocessingRecord::iterator(),
5921                           PreprocessingRecord::iterator());
5922 }
5923 
5924 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5925                                         unsigned int ClientLoadCapabilities) {
5926   return ClientLoadCapabilities & ARR_OutOfDate &&
5927          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
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::VisitUsingTypeLoc(UsingTypeLoc TL) {
6626   TL.setNameLoc(readSourceLocation());
6627 }
6628 
6629 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6630   TL.setNameLoc(readSourceLocation());
6631 }
6632 
6633 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6634   TL.setTypeofLoc(readSourceLocation());
6635   TL.setLParenLoc(readSourceLocation());
6636   TL.setRParenLoc(readSourceLocation());
6637 }
6638 
6639 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6640   TL.setTypeofLoc(readSourceLocation());
6641   TL.setLParenLoc(readSourceLocation());
6642   TL.setRParenLoc(readSourceLocation());
6643   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6644 }
6645 
6646 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6647   TL.setDecltypeLoc(readSourceLocation());
6648   TL.setRParenLoc(readSourceLocation());
6649 }
6650 
6651 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6652   TL.setKWLoc(readSourceLocation());
6653   TL.setLParenLoc(readSourceLocation());
6654   TL.setRParenLoc(readSourceLocation());
6655   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6656 }
6657 
6658 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6659   TL.setNameLoc(readSourceLocation());
6660   if (Reader.readBool()) {
6661     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6662     TL.setTemplateKWLoc(readSourceLocation());
6663     TL.setConceptNameLoc(readSourceLocation());
6664     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6665     TL.setLAngleLoc(readSourceLocation());
6666     TL.setRAngleLoc(readSourceLocation());
6667     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6668       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6669                               TL.getTypePtr()->getArg(i).getKind()));
6670   }
6671   if (Reader.readBool())
6672     TL.setRParenLoc(readSourceLocation());
6673 }
6674 
6675 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6676     DeducedTemplateSpecializationTypeLoc TL) {
6677   TL.setTemplateNameLoc(readSourceLocation());
6678 }
6679 
6680 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6681   TL.setNameLoc(readSourceLocation());
6682 }
6683 
6684 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6685   TL.setNameLoc(readSourceLocation());
6686 }
6687 
6688 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6689   TL.setAttr(ReadAttr());
6690 }
6691 
6692 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6693   TL.setNameLoc(readSourceLocation());
6694 }
6695 
6696 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6697                                             SubstTemplateTypeParmTypeLoc TL) {
6698   TL.setNameLoc(readSourceLocation());
6699 }
6700 
6701 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6702                                           SubstTemplateTypeParmPackTypeLoc TL) {
6703   TL.setNameLoc(readSourceLocation());
6704 }
6705 
6706 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6707                                            TemplateSpecializationTypeLoc TL) {
6708   TL.setTemplateKeywordLoc(readSourceLocation());
6709   TL.setTemplateNameLoc(readSourceLocation());
6710   TL.setLAngleLoc(readSourceLocation());
6711   TL.setRAngleLoc(readSourceLocation());
6712   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6713     TL.setArgLocInfo(
6714         i,
6715         Reader.readTemplateArgumentLocInfo(
6716           TL.getTypePtr()->getArg(i).getKind()));
6717 }
6718 
6719 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6720   TL.setLParenLoc(readSourceLocation());
6721   TL.setRParenLoc(readSourceLocation());
6722 }
6723 
6724 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6725   TL.setElaboratedKeywordLoc(readSourceLocation());
6726   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6727 }
6728 
6729 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6730   TL.setNameLoc(readSourceLocation());
6731 }
6732 
6733 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6734   TL.setElaboratedKeywordLoc(readSourceLocation());
6735   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6736   TL.setNameLoc(readSourceLocation());
6737 }
6738 
6739 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6740        DependentTemplateSpecializationTypeLoc TL) {
6741   TL.setElaboratedKeywordLoc(readSourceLocation());
6742   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6743   TL.setTemplateKeywordLoc(readSourceLocation());
6744   TL.setTemplateNameLoc(readSourceLocation());
6745   TL.setLAngleLoc(readSourceLocation());
6746   TL.setRAngleLoc(readSourceLocation());
6747   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6748     TL.setArgLocInfo(
6749         I,
6750         Reader.readTemplateArgumentLocInfo(
6751             TL.getTypePtr()->getArg(I).getKind()));
6752 }
6753 
6754 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6755   TL.setEllipsisLoc(readSourceLocation());
6756 }
6757 
6758 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6759   TL.setNameLoc(readSourceLocation());
6760 }
6761 
6762 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6763   if (TL.getNumProtocols()) {
6764     TL.setProtocolLAngleLoc(readSourceLocation());
6765     TL.setProtocolRAngleLoc(readSourceLocation());
6766   }
6767   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6768     TL.setProtocolLoc(i, readSourceLocation());
6769 }
6770 
6771 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6772   TL.setHasBaseTypeAsWritten(Reader.readBool());
6773   TL.setTypeArgsLAngleLoc(readSourceLocation());
6774   TL.setTypeArgsRAngleLoc(readSourceLocation());
6775   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6776     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6777   TL.setProtocolLAngleLoc(readSourceLocation());
6778   TL.setProtocolRAngleLoc(readSourceLocation());
6779   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6780     TL.setProtocolLoc(i, readSourceLocation());
6781 }
6782 
6783 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6784   TL.setStarLoc(readSourceLocation());
6785 }
6786 
6787 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6788   TL.setKWLoc(readSourceLocation());
6789   TL.setLParenLoc(readSourceLocation());
6790   TL.setRParenLoc(readSourceLocation());
6791 }
6792 
6793 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6794   TL.setKWLoc(readSourceLocation());
6795 }
6796 
6797 void TypeLocReader::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
6798   TL.setNameLoc(readSourceLocation());
6799 }
6800 void TypeLocReader::VisitDependentBitIntTypeLoc(
6801     clang::DependentBitIntTypeLoc TL) {
6802   TL.setNameLoc(readSourceLocation());
6803 }
6804 
6805 
6806 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6807   TypeLocReader TLR(*this);
6808   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6809     TLR.Visit(TL);
6810 }
6811 
6812 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6813   QualType InfoTy = readType();
6814   if (InfoTy.isNull())
6815     return nullptr;
6816 
6817   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6818   readTypeLoc(TInfo->getTypeLoc());
6819   return TInfo;
6820 }
6821 
6822 QualType ASTReader::GetType(TypeID ID) {
6823   assert(ContextObj && "reading type with no AST context");
6824   ASTContext &Context = *ContextObj;
6825 
6826   unsigned FastQuals = ID & Qualifiers::FastMask;
6827   unsigned Index = ID >> Qualifiers::FastWidth;
6828 
6829   if (Index < NUM_PREDEF_TYPE_IDS) {
6830     QualType T;
6831     switch ((PredefinedTypeIDs)Index) {
6832     case PREDEF_TYPE_NULL_ID:
6833       return QualType();
6834     case PREDEF_TYPE_VOID_ID:
6835       T = Context.VoidTy;
6836       break;
6837     case PREDEF_TYPE_BOOL_ID:
6838       T = Context.BoolTy;
6839       break;
6840     case PREDEF_TYPE_CHAR_U_ID:
6841     case PREDEF_TYPE_CHAR_S_ID:
6842       // FIXME: Check that the signedness of CharTy is correct!
6843       T = Context.CharTy;
6844       break;
6845     case PREDEF_TYPE_UCHAR_ID:
6846       T = Context.UnsignedCharTy;
6847       break;
6848     case PREDEF_TYPE_USHORT_ID:
6849       T = Context.UnsignedShortTy;
6850       break;
6851     case PREDEF_TYPE_UINT_ID:
6852       T = Context.UnsignedIntTy;
6853       break;
6854     case PREDEF_TYPE_ULONG_ID:
6855       T = Context.UnsignedLongTy;
6856       break;
6857     case PREDEF_TYPE_ULONGLONG_ID:
6858       T = Context.UnsignedLongLongTy;
6859       break;
6860     case PREDEF_TYPE_UINT128_ID:
6861       T = Context.UnsignedInt128Ty;
6862       break;
6863     case PREDEF_TYPE_SCHAR_ID:
6864       T = Context.SignedCharTy;
6865       break;
6866     case PREDEF_TYPE_WCHAR_ID:
6867       T = Context.WCharTy;
6868       break;
6869     case PREDEF_TYPE_SHORT_ID:
6870       T = Context.ShortTy;
6871       break;
6872     case PREDEF_TYPE_INT_ID:
6873       T = Context.IntTy;
6874       break;
6875     case PREDEF_TYPE_LONG_ID:
6876       T = Context.LongTy;
6877       break;
6878     case PREDEF_TYPE_LONGLONG_ID:
6879       T = Context.LongLongTy;
6880       break;
6881     case PREDEF_TYPE_INT128_ID:
6882       T = Context.Int128Ty;
6883       break;
6884     case PREDEF_TYPE_BFLOAT16_ID:
6885       T = Context.BFloat16Ty;
6886       break;
6887     case PREDEF_TYPE_HALF_ID:
6888       T = Context.HalfTy;
6889       break;
6890     case PREDEF_TYPE_FLOAT_ID:
6891       T = Context.FloatTy;
6892       break;
6893     case PREDEF_TYPE_DOUBLE_ID:
6894       T = Context.DoubleTy;
6895       break;
6896     case PREDEF_TYPE_LONGDOUBLE_ID:
6897       T = Context.LongDoubleTy;
6898       break;
6899     case PREDEF_TYPE_SHORT_ACCUM_ID:
6900       T = Context.ShortAccumTy;
6901       break;
6902     case PREDEF_TYPE_ACCUM_ID:
6903       T = Context.AccumTy;
6904       break;
6905     case PREDEF_TYPE_LONG_ACCUM_ID:
6906       T = Context.LongAccumTy;
6907       break;
6908     case PREDEF_TYPE_USHORT_ACCUM_ID:
6909       T = Context.UnsignedShortAccumTy;
6910       break;
6911     case PREDEF_TYPE_UACCUM_ID:
6912       T = Context.UnsignedAccumTy;
6913       break;
6914     case PREDEF_TYPE_ULONG_ACCUM_ID:
6915       T = Context.UnsignedLongAccumTy;
6916       break;
6917     case PREDEF_TYPE_SHORT_FRACT_ID:
6918       T = Context.ShortFractTy;
6919       break;
6920     case PREDEF_TYPE_FRACT_ID:
6921       T = Context.FractTy;
6922       break;
6923     case PREDEF_TYPE_LONG_FRACT_ID:
6924       T = Context.LongFractTy;
6925       break;
6926     case PREDEF_TYPE_USHORT_FRACT_ID:
6927       T = Context.UnsignedShortFractTy;
6928       break;
6929     case PREDEF_TYPE_UFRACT_ID:
6930       T = Context.UnsignedFractTy;
6931       break;
6932     case PREDEF_TYPE_ULONG_FRACT_ID:
6933       T = Context.UnsignedLongFractTy;
6934       break;
6935     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6936       T = Context.SatShortAccumTy;
6937       break;
6938     case PREDEF_TYPE_SAT_ACCUM_ID:
6939       T = Context.SatAccumTy;
6940       break;
6941     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6942       T = Context.SatLongAccumTy;
6943       break;
6944     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6945       T = Context.SatUnsignedShortAccumTy;
6946       break;
6947     case PREDEF_TYPE_SAT_UACCUM_ID:
6948       T = Context.SatUnsignedAccumTy;
6949       break;
6950     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6951       T = Context.SatUnsignedLongAccumTy;
6952       break;
6953     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6954       T = Context.SatShortFractTy;
6955       break;
6956     case PREDEF_TYPE_SAT_FRACT_ID:
6957       T = Context.SatFractTy;
6958       break;
6959     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6960       T = Context.SatLongFractTy;
6961       break;
6962     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6963       T = Context.SatUnsignedShortFractTy;
6964       break;
6965     case PREDEF_TYPE_SAT_UFRACT_ID:
6966       T = Context.SatUnsignedFractTy;
6967       break;
6968     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6969       T = Context.SatUnsignedLongFractTy;
6970       break;
6971     case PREDEF_TYPE_FLOAT16_ID:
6972       T = Context.Float16Ty;
6973       break;
6974     case PREDEF_TYPE_FLOAT128_ID:
6975       T = Context.Float128Ty;
6976       break;
6977     case PREDEF_TYPE_IBM128_ID:
6978       T = Context.Ibm128Ty;
6979       break;
6980     case PREDEF_TYPE_OVERLOAD_ID:
6981       T = Context.OverloadTy;
6982       break;
6983     case PREDEF_TYPE_BOUND_MEMBER:
6984       T = Context.BoundMemberTy;
6985       break;
6986     case PREDEF_TYPE_PSEUDO_OBJECT:
6987       T = Context.PseudoObjectTy;
6988       break;
6989     case PREDEF_TYPE_DEPENDENT_ID:
6990       T = Context.DependentTy;
6991       break;
6992     case PREDEF_TYPE_UNKNOWN_ANY:
6993       T = Context.UnknownAnyTy;
6994       break;
6995     case PREDEF_TYPE_NULLPTR_ID:
6996       T = Context.NullPtrTy;
6997       break;
6998     case PREDEF_TYPE_CHAR8_ID:
6999       T = Context.Char8Ty;
7000       break;
7001     case PREDEF_TYPE_CHAR16_ID:
7002       T = Context.Char16Ty;
7003       break;
7004     case PREDEF_TYPE_CHAR32_ID:
7005       T = Context.Char32Ty;
7006       break;
7007     case PREDEF_TYPE_OBJC_ID:
7008       T = Context.ObjCBuiltinIdTy;
7009       break;
7010     case PREDEF_TYPE_OBJC_CLASS:
7011       T = Context.ObjCBuiltinClassTy;
7012       break;
7013     case PREDEF_TYPE_OBJC_SEL:
7014       T = Context.ObjCBuiltinSelTy;
7015       break;
7016 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7017     case PREDEF_TYPE_##Id##_ID: \
7018       T = Context.SingletonId; \
7019       break;
7020 #include "clang/Basic/OpenCLImageTypes.def"
7021 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7022     case PREDEF_TYPE_##Id##_ID: \
7023       T = Context.Id##Ty; \
7024       break;
7025 #include "clang/Basic/OpenCLExtensionTypes.def"
7026     case PREDEF_TYPE_SAMPLER_ID:
7027       T = Context.OCLSamplerTy;
7028       break;
7029     case PREDEF_TYPE_EVENT_ID:
7030       T = Context.OCLEventTy;
7031       break;
7032     case PREDEF_TYPE_CLK_EVENT_ID:
7033       T = Context.OCLClkEventTy;
7034       break;
7035     case PREDEF_TYPE_QUEUE_ID:
7036       T = Context.OCLQueueTy;
7037       break;
7038     case PREDEF_TYPE_RESERVE_ID_ID:
7039       T = Context.OCLReserveIDTy;
7040       break;
7041     case PREDEF_TYPE_AUTO_DEDUCT:
7042       T = Context.getAutoDeductType();
7043       break;
7044     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7045       T = Context.getAutoRRefDeductType();
7046       break;
7047     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7048       T = Context.ARCUnbridgedCastTy;
7049       break;
7050     case PREDEF_TYPE_BUILTIN_FN:
7051       T = Context.BuiltinFnTy;
7052       break;
7053     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7054       T = Context.IncompleteMatrixIdxTy;
7055       break;
7056     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7057       T = Context.OMPArraySectionTy;
7058       break;
7059     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7060       T = Context.OMPArraySectionTy;
7061       break;
7062     case PREDEF_TYPE_OMP_ITERATOR:
7063       T = Context.OMPIteratorTy;
7064       break;
7065 #define SVE_TYPE(Name, Id, SingletonId) \
7066     case PREDEF_TYPE_##Id##_ID: \
7067       T = Context.SingletonId; \
7068       break;
7069 #include "clang/Basic/AArch64SVEACLETypes.def"
7070 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7071     case PREDEF_TYPE_##Id##_ID: \
7072       T = Context.Id##Ty; \
7073       break;
7074 #include "clang/Basic/PPCTypes.def"
7075 #define RVV_TYPE(Name, Id, SingletonId) \
7076     case PREDEF_TYPE_##Id##_ID: \
7077       T = Context.SingletonId; \
7078       break;
7079 #include "clang/Basic/RISCVVTypes.def"
7080     }
7081 
7082     assert(!T.isNull() && "Unknown predefined type");
7083     return T.withFastQualifiers(FastQuals);
7084   }
7085 
7086   Index -= NUM_PREDEF_TYPE_IDS;
7087   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7088   if (TypesLoaded[Index].isNull()) {
7089     TypesLoaded[Index] = readTypeRecord(Index);
7090     if (TypesLoaded[Index].isNull())
7091       return QualType();
7092 
7093     TypesLoaded[Index]->setFromAST();
7094     if (DeserializationListener)
7095       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7096                                         TypesLoaded[Index]);
7097   }
7098 
7099   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7100 }
7101 
7102 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7103   return GetType(getGlobalTypeID(F, LocalID));
7104 }
7105 
7106 serialization::TypeID
7107 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7108   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7109   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7110 
7111   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7112     return LocalID;
7113 
7114   if (!F.ModuleOffsetMap.empty())
7115     ReadModuleOffsetMap(F);
7116 
7117   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7118     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7119   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7120 
7121   unsigned GlobalIndex = LocalIndex + I->second;
7122   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7123 }
7124 
7125 TemplateArgumentLocInfo
7126 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7127   switch (Kind) {
7128   case TemplateArgument::Expression:
7129     return readExpr();
7130   case TemplateArgument::Type:
7131     return readTypeSourceInfo();
7132   case TemplateArgument::Template: {
7133     NestedNameSpecifierLoc QualifierLoc =
7134       readNestedNameSpecifierLoc();
7135     SourceLocation TemplateNameLoc = readSourceLocation();
7136     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7137                                    TemplateNameLoc, SourceLocation());
7138   }
7139   case TemplateArgument::TemplateExpansion: {
7140     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7141     SourceLocation TemplateNameLoc = readSourceLocation();
7142     SourceLocation EllipsisLoc = readSourceLocation();
7143     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7144                                    TemplateNameLoc, EllipsisLoc);
7145   }
7146   case TemplateArgument::Null:
7147   case TemplateArgument::Integral:
7148   case TemplateArgument::Declaration:
7149   case TemplateArgument::NullPtr:
7150   case TemplateArgument::Pack:
7151     // FIXME: Is this right?
7152     return TemplateArgumentLocInfo();
7153   }
7154   llvm_unreachable("unexpected template argument loc");
7155 }
7156 
7157 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7158   TemplateArgument Arg = readTemplateArgument();
7159 
7160   if (Arg.getKind() == TemplateArgument::Expression) {
7161     if (readBool()) // bool InfoHasSameExpr.
7162       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7163   }
7164   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7165 }
7166 
7167 const ASTTemplateArgumentListInfo *
7168 ASTRecordReader::readASTTemplateArgumentListInfo() {
7169   SourceLocation LAngleLoc = readSourceLocation();
7170   SourceLocation RAngleLoc = readSourceLocation();
7171   unsigned NumArgsAsWritten = readInt();
7172   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7173   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7174     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7175   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7176 }
7177 
7178 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7179   return GetDecl(ID);
7180 }
7181 
7182 void ASTReader::CompleteRedeclChain(const Decl *D) {
7183   if (NumCurrentElementsDeserializing) {
7184     // We arrange to not care about the complete redeclaration chain while we're
7185     // deserializing. Just remember that the AST has marked this one as complete
7186     // but that it's not actually complete yet, so we know we still need to
7187     // complete it later.
7188     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7189     return;
7190   }
7191 
7192   if (!D->getDeclContext()) {
7193     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7194     return;
7195   }
7196 
7197   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7198 
7199   // If this is a named declaration, complete it by looking it up
7200   // within its context.
7201   //
7202   // FIXME: Merging a function definition should merge
7203   // all mergeable entities within it.
7204   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7205       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7206     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7207       if (!getContext().getLangOpts().CPlusPlus &&
7208           isa<TranslationUnitDecl>(DC)) {
7209         // Outside of C++, we don't have a lookup table for the TU, so update
7210         // the identifier instead. (For C++ modules, we don't store decls
7211         // in the serialized identifier table, so we do the lookup in the TU.)
7212         auto *II = Name.getAsIdentifierInfo();
7213         assert(II && "non-identifier name in C?");
7214         if (II->isOutOfDate())
7215           updateOutOfDateIdentifier(*II);
7216       } else
7217         DC->lookup(Name);
7218     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7219       // Find all declarations of this kind from the relevant context.
7220       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7221         auto *DC = cast<DeclContext>(DCDecl);
7222         SmallVector<Decl*, 8> Decls;
7223         FindExternalLexicalDecls(
7224             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7225       }
7226     }
7227   }
7228 
7229   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7230     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7231   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7232     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7233   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7234     if (auto *Template = FD->getPrimaryTemplate())
7235       Template->LoadLazySpecializations();
7236   }
7237 }
7238 
7239 CXXCtorInitializer **
7240 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7241   RecordLocation Loc = getLocalBitOffset(Offset);
7242   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7243   SavedStreamPosition SavedPosition(Cursor);
7244   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7245     Error(std::move(Err));
7246     return nullptr;
7247   }
7248   ReadingKindTracker ReadingKind(Read_Decl, *this);
7249 
7250   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7251   if (!MaybeCode) {
7252     Error(MaybeCode.takeError());
7253     return nullptr;
7254   }
7255   unsigned Code = MaybeCode.get();
7256 
7257   ASTRecordReader Record(*this, *Loc.F);
7258   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7259   if (!MaybeRecCode) {
7260     Error(MaybeRecCode.takeError());
7261     return nullptr;
7262   }
7263   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7264     Error("malformed AST file: missing C++ ctor initializers");
7265     return nullptr;
7266   }
7267 
7268   return Record.readCXXCtorInitializers();
7269 }
7270 
7271 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7272   assert(ContextObj && "reading base specifiers with no AST context");
7273   ASTContext &Context = *ContextObj;
7274 
7275   RecordLocation Loc = getLocalBitOffset(Offset);
7276   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7277   SavedStreamPosition SavedPosition(Cursor);
7278   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7279     Error(std::move(Err));
7280     return nullptr;
7281   }
7282   ReadingKindTracker ReadingKind(Read_Decl, *this);
7283 
7284   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7285   if (!MaybeCode) {
7286     Error(MaybeCode.takeError());
7287     return nullptr;
7288   }
7289   unsigned Code = MaybeCode.get();
7290 
7291   ASTRecordReader Record(*this, *Loc.F);
7292   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7293   if (!MaybeRecCode) {
7294     Error(MaybeCode.takeError());
7295     return nullptr;
7296   }
7297   unsigned RecCode = MaybeRecCode.get();
7298 
7299   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7300     Error("malformed AST file: missing C++ base specifiers");
7301     return nullptr;
7302   }
7303 
7304   unsigned NumBases = Record.readInt();
7305   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7306   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7307   for (unsigned I = 0; I != NumBases; ++I)
7308     Bases[I] = Record.readCXXBaseSpecifier();
7309   return Bases;
7310 }
7311 
7312 serialization::DeclID
7313 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7314   if (LocalID < NUM_PREDEF_DECL_IDS)
7315     return LocalID;
7316 
7317   if (!F.ModuleOffsetMap.empty())
7318     ReadModuleOffsetMap(F);
7319 
7320   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7321     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7322   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7323 
7324   return LocalID + I->second;
7325 }
7326 
7327 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7328                                    ModuleFile &M) const {
7329   // Predefined decls aren't from any module.
7330   if (ID < NUM_PREDEF_DECL_IDS)
7331     return false;
7332 
7333   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7334          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7335 }
7336 
7337 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7338   if (!D->isFromASTFile())
7339     return nullptr;
7340   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7341   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7342   return I->second;
7343 }
7344 
7345 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7346   if (ID < NUM_PREDEF_DECL_IDS)
7347     return SourceLocation();
7348 
7349   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7350 
7351   if (Index > DeclsLoaded.size()) {
7352     Error("declaration ID out-of-range for AST file");
7353     return SourceLocation();
7354   }
7355 
7356   if (Decl *D = DeclsLoaded[Index])
7357     return D->getLocation();
7358 
7359   SourceLocation Loc;
7360   DeclCursorForID(ID, Loc);
7361   return Loc;
7362 }
7363 
7364 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7365   switch (ID) {
7366   case PREDEF_DECL_NULL_ID:
7367     return nullptr;
7368 
7369   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7370     return Context.getTranslationUnitDecl();
7371 
7372   case PREDEF_DECL_OBJC_ID_ID:
7373     return Context.getObjCIdDecl();
7374 
7375   case PREDEF_DECL_OBJC_SEL_ID:
7376     return Context.getObjCSelDecl();
7377 
7378   case PREDEF_DECL_OBJC_CLASS_ID:
7379     return Context.getObjCClassDecl();
7380 
7381   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7382     return Context.getObjCProtocolDecl();
7383 
7384   case PREDEF_DECL_INT_128_ID:
7385     return Context.getInt128Decl();
7386 
7387   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7388     return Context.getUInt128Decl();
7389 
7390   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7391     return Context.getObjCInstanceTypeDecl();
7392 
7393   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7394     return Context.getBuiltinVaListDecl();
7395 
7396   case PREDEF_DECL_VA_LIST_TAG:
7397     return Context.getVaListTagDecl();
7398 
7399   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7400     return Context.getBuiltinMSVaListDecl();
7401 
7402   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7403     return Context.getMSGuidTagDecl();
7404 
7405   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7406     return Context.getExternCContextDecl();
7407 
7408   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7409     return Context.getMakeIntegerSeqDecl();
7410 
7411   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7412     return Context.getCFConstantStringDecl();
7413 
7414   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7415     return Context.getCFConstantStringTagDecl();
7416 
7417   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7418     return Context.getTypePackElementDecl();
7419   }
7420   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7421 }
7422 
7423 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7424   assert(ContextObj && "reading decl with no AST context");
7425   if (ID < NUM_PREDEF_DECL_IDS) {
7426     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7427     if (D) {
7428       // Track that we have merged the declaration with ID \p ID into the
7429       // pre-existing predefined declaration \p D.
7430       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7431       if (Merged.empty())
7432         Merged.push_back(ID);
7433     }
7434     return D;
7435   }
7436 
7437   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7438 
7439   if (Index >= DeclsLoaded.size()) {
7440     assert(0 && "declaration ID out-of-range for AST file");
7441     Error("declaration ID out-of-range for AST file");
7442     return nullptr;
7443   }
7444 
7445   return DeclsLoaded[Index];
7446 }
7447 
7448 Decl *ASTReader::GetDecl(DeclID ID) {
7449   if (ID < NUM_PREDEF_DECL_IDS)
7450     return GetExistingDecl(ID);
7451 
7452   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7453 
7454   if (Index >= DeclsLoaded.size()) {
7455     assert(0 && "declaration ID out-of-range for AST file");
7456     Error("declaration ID out-of-range for AST file");
7457     return nullptr;
7458   }
7459 
7460   if (!DeclsLoaded[Index]) {
7461     ReadDeclRecord(ID);
7462     if (DeserializationListener)
7463       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7464   }
7465 
7466   return DeclsLoaded[Index];
7467 }
7468 
7469 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7470                                                   DeclID GlobalID) {
7471   if (GlobalID < NUM_PREDEF_DECL_IDS)
7472     return GlobalID;
7473 
7474   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7475   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7476   ModuleFile *Owner = I->second;
7477 
7478   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7479     = M.GlobalToLocalDeclIDs.find(Owner);
7480   if (Pos == M.GlobalToLocalDeclIDs.end())
7481     return 0;
7482 
7483   return GlobalID - Owner->BaseDeclID + Pos->second;
7484 }
7485 
7486 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7487                                             const RecordData &Record,
7488                                             unsigned &Idx) {
7489   if (Idx >= Record.size()) {
7490     Error("Corrupted AST file");
7491     return 0;
7492   }
7493 
7494   return getGlobalDeclID(F, Record[Idx++]);
7495 }
7496 
7497 /// Resolve the offset of a statement into a statement.
7498 ///
7499 /// This operation will read a new statement from the external
7500 /// source each time it is called, and is meant to be used via a
7501 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7502 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7503   // Switch case IDs are per Decl.
7504   ClearSwitchCaseIDs();
7505 
7506   // Offset here is a global offset across the entire chain.
7507   RecordLocation Loc = getLocalBitOffset(Offset);
7508   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7509     Error(std::move(Err));
7510     return nullptr;
7511   }
7512   assert(NumCurrentElementsDeserializing == 0 &&
7513          "should not be called while already deserializing");
7514   Deserializing D(this);
7515   return ReadStmtFromStream(*Loc.F);
7516 }
7517 
7518 void ASTReader::FindExternalLexicalDecls(
7519     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7520     SmallVectorImpl<Decl *> &Decls) {
7521   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7522 
7523   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7524     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7525     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7526       auto K = (Decl::Kind)+LexicalDecls[I];
7527       if (!IsKindWeWant(K))
7528         continue;
7529 
7530       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7531 
7532       // Don't add predefined declarations to the lexical context more
7533       // than once.
7534       if (ID < NUM_PREDEF_DECL_IDS) {
7535         if (PredefsVisited[ID])
7536           continue;
7537 
7538         PredefsVisited[ID] = true;
7539       }
7540 
7541       if (Decl *D = GetLocalDecl(*M, ID)) {
7542         assert(D->getKind() == K && "wrong kind for lexical decl");
7543         if (!DC->isDeclInLexicalTraversal(D))
7544           Decls.push_back(D);
7545       }
7546     }
7547   };
7548 
7549   if (isa<TranslationUnitDecl>(DC)) {
7550     for (auto Lexical : TULexicalDecls)
7551       Visit(Lexical.first, Lexical.second);
7552   } else {
7553     auto I = LexicalDecls.find(DC);
7554     if (I != LexicalDecls.end())
7555       Visit(I->second.first, I->second.second);
7556   }
7557 
7558   ++NumLexicalDeclContextsRead;
7559 }
7560 
7561 namespace {
7562 
7563 class DeclIDComp {
7564   ASTReader &Reader;
7565   ModuleFile &Mod;
7566 
7567 public:
7568   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7569 
7570   bool operator()(LocalDeclID L, LocalDeclID R) const {
7571     SourceLocation LHS = getLocation(L);
7572     SourceLocation RHS = getLocation(R);
7573     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7574   }
7575 
7576   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7577     SourceLocation RHS = getLocation(R);
7578     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7579   }
7580 
7581   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7582     SourceLocation LHS = getLocation(L);
7583     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7584   }
7585 
7586   SourceLocation getLocation(LocalDeclID ID) const {
7587     return Reader.getSourceManager().getFileLoc(
7588             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7589   }
7590 };
7591 
7592 } // namespace
7593 
7594 void ASTReader::FindFileRegionDecls(FileID File,
7595                                     unsigned Offset, unsigned Length,
7596                                     SmallVectorImpl<Decl *> &Decls) {
7597   SourceManager &SM = getSourceManager();
7598 
7599   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7600   if (I == FileDeclIDs.end())
7601     return;
7602 
7603   FileDeclsInfo &DInfo = I->second;
7604   if (DInfo.Decls.empty())
7605     return;
7606 
7607   SourceLocation
7608     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7609   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7610 
7611   DeclIDComp DIDComp(*this, *DInfo.Mod);
7612   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7613       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7614   if (BeginIt != DInfo.Decls.begin())
7615     --BeginIt;
7616 
7617   // If we are pointing at a top-level decl inside an objc container, we need
7618   // to backtrack until we find it otherwise we will fail to report that the
7619   // region overlaps with an objc container.
7620   while (BeginIt != DInfo.Decls.begin() &&
7621          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7622              ->isTopLevelDeclInObjCContainer())
7623     --BeginIt;
7624 
7625   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7626       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7627   if (EndIt != DInfo.Decls.end())
7628     ++EndIt;
7629 
7630   for (ArrayRef<serialization::LocalDeclID>::iterator
7631          DIt = BeginIt; DIt != EndIt; ++DIt)
7632     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7633 }
7634 
7635 bool
7636 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7637                                           DeclarationName Name) {
7638   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7639          "DeclContext has no visible decls in storage");
7640   if (!Name)
7641     return false;
7642 
7643   auto It = Lookups.find(DC);
7644   if (It == Lookups.end())
7645     return false;
7646 
7647   Deserializing LookupResults(this);
7648 
7649   // Load the list of declarations.
7650   SmallVector<NamedDecl *, 64> Decls;
7651   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7652   for (DeclID ID : It->second.Table.find(Name)) {
7653     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7654     if (ND->getDeclName() == Name && Found.insert(ND).second)
7655       Decls.push_back(ND);
7656   }
7657 
7658   ++NumVisibleDeclContextsRead;
7659   SetExternalVisibleDeclsForName(DC, Name, Decls);
7660   return !Decls.empty();
7661 }
7662 
7663 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7664   if (!DC->hasExternalVisibleStorage())
7665     return;
7666 
7667   auto It = Lookups.find(DC);
7668   assert(It != Lookups.end() &&
7669          "have external visible storage but no lookup tables");
7670 
7671   DeclsMap Decls;
7672 
7673   for (DeclID ID : It->second.Table.findAll()) {
7674     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7675     Decls[ND->getDeclName()].push_back(ND);
7676   }
7677 
7678   ++NumVisibleDeclContextsRead;
7679 
7680   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7681     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7682   }
7683   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7684 }
7685 
7686 const serialization::reader::DeclContextLookupTable *
7687 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7688   auto I = Lookups.find(Primary);
7689   return I == Lookups.end() ? nullptr : &I->second;
7690 }
7691 
7692 /// Under non-PCH compilation the consumer receives the objc methods
7693 /// before receiving the implementation, and codegen depends on this.
7694 /// We simulate this by deserializing and passing to consumer the methods of the
7695 /// implementation before passing the deserialized implementation decl.
7696 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7697                                        ASTConsumer *Consumer) {
7698   assert(ImplD && Consumer);
7699 
7700   for (auto *I : ImplD->methods())
7701     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7702 
7703   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7704 }
7705 
7706 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7707   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7708     PassObjCImplDeclToConsumer(ImplD, Consumer);
7709   else
7710     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7711 }
7712 
7713 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7714   this->Consumer = Consumer;
7715 
7716   if (Consumer)
7717     PassInterestingDeclsToConsumer();
7718 
7719   if (DeserializationListener)
7720     DeserializationListener->ReaderInitialized(this);
7721 }
7722 
7723 void ASTReader::PrintStats() {
7724   std::fprintf(stderr, "*** AST File Statistics:\n");
7725 
7726   unsigned NumTypesLoaded =
7727       TypesLoaded.size() - llvm::count(TypesLoaded, QualType());
7728   unsigned NumDeclsLoaded =
7729       DeclsLoaded.size() - llvm::count(DeclsLoaded, (Decl *)nullptr);
7730   unsigned NumIdentifiersLoaded =
7731       IdentifiersLoaded.size() -
7732       llvm::count(IdentifiersLoaded, (IdentifierInfo *)nullptr);
7733   unsigned NumMacrosLoaded =
7734       MacrosLoaded.size() - llvm::count(MacrosLoaded, (MacroInfo *)nullptr);
7735   unsigned NumSelectorsLoaded =
7736       SelectorsLoaded.size() - llvm::count(SelectorsLoaded, Selector());
7737 
7738   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7739     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7740                  NumSLocEntriesRead, TotalNumSLocEntries,
7741                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7742   if (!TypesLoaded.empty())
7743     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7744                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7745                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7746   if (!DeclsLoaded.empty())
7747     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7748                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7749                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7750   if (!IdentifiersLoaded.empty())
7751     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7752                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7753                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7754   if (!MacrosLoaded.empty())
7755     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7756                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7757                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7758   if (!SelectorsLoaded.empty())
7759     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7760                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7761                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7762   if (TotalNumStatements)
7763     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7764                  NumStatementsRead, TotalNumStatements,
7765                  ((float)NumStatementsRead/TotalNumStatements * 100));
7766   if (TotalNumMacros)
7767     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7768                  NumMacrosRead, TotalNumMacros,
7769                  ((float)NumMacrosRead/TotalNumMacros * 100));
7770   if (TotalLexicalDeclContexts)
7771     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7772                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7773                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7774                   * 100));
7775   if (TotalVisibleDeclContexts)
7776     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7777                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7778                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7779                   * 100));
7780   if (TotalNumMethodPoolEntries)
7781     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7782                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7783                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7784                   * 100));
7785   if (NumMethodPoolLookups)
7786     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7787                  NumMethodPoolHits, NumMethodPoolLookups,
7788                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7789   if (NumMethodPoolTableLookups)
7790     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7791                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7792                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7793                   * 100.0));
7794   if (NumIdentifierLookupHits)
7795     std::fprintf(stderr,
7796                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7797                  NumIdentifierLookupHits, NumIdentifierLookups,
7798                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7799 
7800   if (GlobalIndex) {
7801     std::fprintf(stderr, "\n");
7802     GlobalIndex->printStats();
7803   }
7804 
7805   std::fprintf(stderr, "\n");
7806   dump();
7807   std::fprintf(stderr, "\n");
7808 }
7809 
7810 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7811 LLVM_DUMP_METHOD static void
7812 dumpModuleIDMap(StringRef Name,
7813                 const ContinuousRangeMap<Key, ModuleFile *,
7814                                          InitialCapacity> &Map) {
7815   if (Map.begin() == Map.end())
7816     return;
7817 
7818   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7819 
7820   llvm::errs() << Name << ":\n";
7821   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7822        I != IEnd; ++I) {
7823     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7824       << "\n";
7825   }
7826 }
7827 
7828 LLVM_DUMP_METHOD void ASTReader::dump() {
7829   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7830   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7831   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7832   dumpModuleIDMap("Global type map", GlobalTypeMap);
7833   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7834   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7835   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7836   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7837   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7838   dumpModuleIDMap("Global preprocessed entity map",
7839                   GlobalPreprocessedEntityMap);
7840 
7841   llvm::errs() << "\n*** PCH/Modules Loaded:";
7842   for (ModuleFile &M : ModuleMgr)
7843     M.dump();
7844 }
7845 
7846 /// Return the amount of memory used by memory buffers, breaking down
7847 /// by heap-backed versus mmap'ed memory.
7848 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7849   for (ModuleFile &I : ModuleMgr) {
7850     if (llvm::MemoryBuffer *buf = I.Buffer) {
7851       size_t bytes = buf->getBufferSize();
7852       switch (buf->getBufferKind()) {
7853         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7854           sizes.malloc_bytes += bytes;
7855           break;
7856         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7857           sizes.mmap_bytes += bytes;
7858           break;
7859       }
7860     }
7861   }
7862 }
7863 
7864 void ASTReader::InitializeSema(Sema &S) {
7865   SemaObj = &S;
7866   S.addExternalSource(this);
7867 
7868   // Makes sure any declarations that were deserialized "too early"
7869   // still get added to the identifier's declaration chains.
7870   for (uint64_t ID : PreloadedDeclIDs) {
7871     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7872     pushExternalDeclIntoScope(D, D->getDeclName());
7873   }
7874   PreloadedDeclIDs.clear();
7875 
7876   // FIXME: What happens if these are changed by a module import?
7877   if (!FPPragmaOptions.empty()) {
7878     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7879     FPOptionsOverride NewOverrides =
7880         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7881     SemaObj->CurFPFeatures =
7882         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7883   }
7884 
7885   SemaObj->OpenCLFeatures = OpenCLExtensions;
7886 
7887   UpdateSema();
7888 }
7889 
7890 void ASTReader::UpdateSema() {
7891   assert(SemaObj && "no Sema to update");
7892 
7893   // Load the offsets of the declarations that Sema references.
7894   // They will be lazily deserialized when needed.
7895   if (!SemaDeclRefs.empty()) {
7896     assert(SemaDeclRefs.size() % 3 == 0);
7897     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7898       if (!SemaObj->StdNamespace)
7899         SemaObj->StdNamespace = SemaDeclRefs[I];
7900       if (!SemaObj->StdBadAlloc)
7901         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7902       if (!SemaObj->StdAlignValT)
7903         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7904     }
7905     SemaDeclRefs.clear();
7906   }
7907 
7908   // Update the state of pragmas. Use the same API as if we had encountered the
7909   // pragma in the source.
7910   if(OptimizeOffPragmaLocation.isValid())
7911     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7912   if (PragmaMSStructState != -1)
7913     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7914   if (PointersToMembersPragmaLocation.isValid()) {
7915     SemaObj->ActOnPragmaMSPointersToMembers(
7916         (LangOptions::PragmaMSPointersToMembersKind)
7917             PragmaMSPointersToMembersState,
7918         PointersToMembersPragmaLocation);
7919   }
7920   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7921 
7922   if (PragmaAlignPackCurrentValue) {
7923     // The bottom of the stack might have a default value. It must be adjusted
7924     // to the current value to ensure that the packing state is preserved after
7925     // popping entries that were included/imported from a PCH/module.
7926     bool DropFirst = false;
7927     if (!PragmaAlignPackStack.empty() &&
7928         PragmaAlignPackStack.front().Location.isInvalid()) {
7929       assert(PragmaAlignPackStack.front().Value ==
7930                  SemaObj->AlignPackStack.DefaultValue &&
7931              "Expected a default alignment value");
7932       SemaObj->AlignPackStack.Stack.emplace_back(
7933           PragmaAlignPackStack.front().SlotLabel,
7934           SemaObj->AlignPackStack.CurrentValue,
7935           SemaObj->AlignPackStack.CurrentPragmaLocation,
7936           PragmaAlignPackStack.front().PushLocation);
7937       DropFirst = true;
7938     }
7939     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7940                                  .drop_front(DropFirst ? 1 : 0)) {
7941       SemaObj->AlignPackStack.Stack.emplace_back(
7942           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7943     }
7944     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7945       assert(*PragmaAlignPackCurrentValue ==
7946                  SemaObj->AlignPackStack.DefaultValue &&
7947              "Expected a default align and pack value");
7948       // Keep the current values.
7949     } else {
7950       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7951       SemaObj->AlignPackStack.CurrentPragmaLocation =
7952           PragmaAlignPackCurrentLocation;
7953     }
7954   }
7955   if (FpPragmaCurrentValue) {
7956     // The bottom of the stack might have a default value. It must be adjusted
7957     // to the current value to ensure that fp-pragma state is preserved after
7958     // popping entries that were included/imported from a PCH/module.
7959     bool DropFirst = false;
7960     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7961       assert(FpPragmaStack.front().Value ==
7962                  SemaObj->FpPragmaStack.DefaultValue &&
7963              "Expected a default pragma float_control value");
7964       SemaObj->FpPragmaStack.Stack.emplace_back(
7965           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7966           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7967           FpPragmaStack.front().PushLocation);
7968       DropFirst = true;
7969     }
7970     for (const auto &Entry :
7971          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7972       SemaObj->FpPragmaStack.Stack.emplace_back(
7973           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7974     if (FpPragmaCurrentLocation.isInvalid()) {
7975       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7976              "Expected a default pragma float_control value");
7977       // Keep the current values.
7978     } else {
7979       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7980       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7981     }
7982   }
7983 
7984   // For non-modular AST files, restore visiblity of modules.
7985   for (auto &Import : ImportedModules) {
7986     if (Import.ImportLoc.isInvalid())
7987       continue;
7988     if (Module *Imported = getSubmodule(Import.ID)) {
7989       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7990     }
7991   }
7992 }
7993 
7994 IdentifierInfo *ASTReader::get(StringRef Name) {
7995   // Note that we are loading an identifier.
7996   Deserializing AnIdentifier(this);
7997 
7998   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7999                                   NumIdentifierLookups,
8000                                   NumIdentifierLookupHits);
8001 
8002   // We don't need to do identifier table lookups in C++ modules (we preload
8003   // all interesting declarations, and don't need to use the scope for name
8004   // lookups). Perform the lookup in PCH files, though, since we don't build
8005   // a complete initial identifier table if we're carrying on from a PCH.
8006   if (PP.getLangOpts().CPlusPlus) {
8007     for (auto F : ModuleMgr.pch_modules())
8008       if (Visitor(*F))
8009         break;
8010   } else {
8011     // If there is a global index, look there first to determine which modules
8012     // provably do not have any results for this identifier.
8013     GlobalModuleIndex::HitSet Hits;
8014     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8015     if (!loadGlobalIndex()) {
8016       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8017         HitsPtr = &Hits;
8018       }
8019     }
8020 
8021     ModuleMgr.visit(Visitor, HitsPtr);
8022   }
8023 
8024   IdentifierInfo *II = Visitor.getIdentifierInfo();
8025   markIdentifierUpToDate(II);
8026   return II;
8027 }
8028 
8029 namespace clang {
8030 
8031   /// An identifier-lookup iterator that enumerates all of the
8032   /// identifiers stored within a set of AST files.
8033   class ASTIdentifierIterator : public IdentifierIterator {
8034     /// The AST reader whose identifiers are being enumerated.
8035     const ASTReader &Reader;
8036 
8037     /// The current index into the chain of AST files stored in
8038     /// the AST reader.
8039     unsigned Index;
8040 
8041     /// The current position within the identifier lookup table
8042     /// of the current AST file.
8043     ASTIdentifierLookupTable::key_iterator Current;
8044 
8045     /// The end position within the identifier lookup table of
8046     /// the current AST file.
8047     ASTIdentifierLookupTable::key_iterator End;
8048 
8049     /// Whether to skip any modules in the ASTReader.
8050     bool SkipModules;
8051 
8052   public:
8053     explicit ASTIdentifierIterator(const ASTReader &Reader,
8054                                    bool SkipModules = false);
8055 
8056     StringRef Next() override;
8057   };
8058 
8059 } // namespace clang
8060 
8061 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8062                                              bool SkipModules)
8063     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8064 }
8065 
8066 StringRef ASTIdentifierIterator::Next() {
8067   while (Current == End) {
8068     // If we have exhausted all of our AST files, we're done.
8069     if (Index == 0)
8070       return StringRef();
8071 
8072     --Index;
8073     ModuleFile &F = Reader.ModuleMgr[Index];
8074     if (SkipModules && F.isModule())
8075       continue;
8076 
8077     ASTIdentifierLookupTable *IdTable =
8078         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8079     Current = IdTable->key_begin();
8080     End = IdTable->key_end();
8081   }
8082 
8083   // We have any identifiers remaining in the current AST file; return
8084   // the next one.
8085   StringRef Result = *Current;
8086   ++Current;
8087   return Result;
8088 }
8089 
8090 namespace {
8091 
8092 /// A utility for appending two IdentifierIterators.
8093 class ChainedIdentifierIterator : public IdentifierIterator {
8094   std::unique_ptr<IdentifierIterator> Current;
8095   std::unique_ptr<IdentifierIterator> Queued;
8096 
8097 public:
8098   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8099                             std::unique_ptr<IdentifierIterator> Second)
8100       : Current(std::move(First)), Queued(std::move(Second)) {}
8101 
8102   StringRef Next() override {
8103     if (!Current)
8104       return StringRef();
8105 
8106     StringRef result = Current->Next();
8107     if (!result.empty())
8108       return result;
8109 
8110     // Try the queued iterator, which may itself be empty.
8111     Current.reset();
8112     std::swap(Current, Queued);
8113     return Next();
8114   }
8115 };
8116 
8117 } // namespace
8118 
8119 IdentifierIterator *ASTReader::getIdentifiers() {
8120   if (!loadGlobalIndex()) {
8121     std::unique_ptr<IdentifierIterator> ReaderIter(
8122         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8123     std::unique_ptr<IdentifierIterator> ModulesIter(
8124         GlobalIndex->createIdentifierIterator());
8125     return new ChainedIdentifierIterator(std::move(ReaderIter),
8126                                          std::move(ModulesIter));
8127   }
8128 
8129   return new ASTIdentifierIterator(*this);
8130 }
8131 
8132 namespace clang {
8133 namespace serialization {
8134 
8135   class ReadMethodPoolVisitor {
8136     ASTReader &Reader;
8137     Selector Sel;
8138     unsigned PriorGeneration;
8139     unsigned InstanceBits = 0;
8140     unsigned FactoryBits = 0;
8141     bool InstanceHasMoreThanOneDecl = false;
8142     bool FactoryHasMoreThanOneDecl = false;
8143     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8144     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8145 
8146   public:
8147     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8148                           unsigned PriorGeneration)
8149         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8150 
8151     bool operator()(ModuleFile &M) {
8152       if (!M.SelectorLookupTable)
8153         return false;
8154 
8155       // If we've already searched this module file, skip it now.
8156       if (M.Generation <= PriorGeneration)
8157         return true;
8158 
8159       ++Reader.NumMethodPoolTableLookups;
8160       ASTSelectorLookupTable *PoolTable
8161         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8162       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8163       if (Pos == PoolTable->end())
8164         return false;
8165 
8166       ++Reader.NumMethodPoolTableHits;
8167       ++Reader.NumSelectorsRead;
8168       // FIXME: Not quite happy with the statistics here. We probably should
8169       // disable this tracking when called via LoadSelector.
8170       // Also, should entries without methods count as misses?
8171       ++Reader.NumMethodPoolEntriesRead;
8172       ASTSelectorLookupTrait::data_type Data = *Pos;
8173       if (Reader.DeserializationListener)
8174         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8175 
8176       // Append methods in the reverse order, so that later we can process them
8177       // in the order they appear in the source code by iterating through
8178       // the vector in the reverse order.
8179       InstanceMethods.append(Data.Instance.rbegin(), Data.Instance.rend());
8180       FactoryMethods.append(Data.Factory.rbegin(), Data.Factory.rend());
8181       InstanceBits = Data.InstanceBits;
8182       FactoryBits = Data.FactoryBits;
8183       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8184       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8185       return false;
8186     }
8187 
8188     /// Retrieve the instance methods found by this visitor.
8189     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8190       return InstanceMethods;
8191     }
8192 
8193     /// Retrieve the instance methods found by this visitor.
8194     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8195       return FactoryMethods;
8196     }
8197 
8198     unsigned getInstanceBits() const { return InstanceBits; }
8199     unsigned getFactoryBits() const { return FactoryBits; }
8200 
8201     bool instanceHasMoreThanOneDecl() const {
8202       return InstanceHasMoreThanOneDecl;
8203     }
8204 
8205     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8206   };
8207 
8208 } // namespace serialization
8209 } // namespace clang
8210 
8211 /// Add the given set of methods to the method list.
8212 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8213                              ObjCMethodList &List) {
8214   for (auto I = Methods.rbegin(), E = Methods.rend(); I != E; ++I)
8215     S.addMethodToGlobalList(&List, *I);
8216 }
8217 
8218 void ASTReader::ReadMethodPool(Selector Sel) {
8219   // Get the selector generation and update it to the current generation.
8220   unsigned &Generation = SelectorGeneration[Sel];
8221   unsigned PriorGeneration = Generation;
8222   Generation = getGeneration();
8223   SelectorOutOfDate[Sel] = false;
8224 
8225   // Search for methods defined with this selector.
8226   ++NumMethodPoolLookups;
8227   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8228   ModuleMgr.visit(Visitor);
8229 
8230   if (Visitor.getInstanceMethods().empty() &&
8231       Visitor.getFactoryMethods().empty())
8232     return;
8233 
8234   ++NumMethodPoolHits;
8235 
8236   if (!getSema())
8237     return;
8238 
8239   Sema &S = *getSema();
8240   Sema::GlobalMethodPool::iterator Pos =
8241       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8242           .first;
8243 
8244   Pos->second.first.setBits(Visitor.getInstanceBits());
8245   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8246   Pos->second.second.setBits(Visitor.getFactoryBits());
8247   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8248 
8249   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8250   // when building a module we keep every method individually and may need to
8251   // update hasMoreThanOneDecl as we add the methods.
8252   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8253   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8254 }
8255 
8256 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8257   if (SelectorOutOfDate[Sel])
8258     ReadMethodPool(Sel);
8259 }
8260 
8261 void ASTReader::ReadKnownNamespaces(
8262                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8263   Namespaces.clear();
8264 
8265   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8266     if (NamespaceDecl *Namespace
8267                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8268       Namespaces.push_back(Namespace);
8269   }
8270 }
8271 
8272 void ASTReader::ReadUndefinedButUsed(
8273     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8274   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8275     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8276     SourceLocation Loc =
8277         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8278     Undefined.insert(std::make_pair(D, Loc));
8279   }
8280 }
8281 
8282 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8283     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8284                                                      Exprs) {
8285   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8286     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8287     uint64_t Count = DelayedDeleteExprs[Idx++];
8288     for (uint64_t C = 0; C < Count; ++C) {
8289       SourceLocation DeleteLoc =
8290           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8291       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8292       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8293     }
8294   }
8295 }
8296 
8297 void ASTReader::ReadTentativeDefinitions(
8298                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8299   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8300     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8301     if (Var)
8302       TentativeDefs.push_back(Var);
8303   }
8304   TentativeDefinitions.clear();
8305 }
8306 
8307 void ASTReader::ReadUnusedFileScopedDecls(
8308                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8309   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8310     DeclaratorDecl *D
8311       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8312     if (D)
8313       Decls.push_back(D);
8314   }
8315   UnusedFileScopedDecls.clear();
8316 }
8317 
8318 void ASTReader::ReadDelegatingConstructors(
8319                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8320   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8321     CXXConstructorDecl *D
8322       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8323     if (D)
8324       Decls.push_back(D);
8325   }
8326   DelegatingCtorDecls.clear();
8327 }
8328 
8329 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8330   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8331     TypedefNameDecl *D
8332       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8333     if (D)
8334       Decls.push_back(D);
8335   }
8336   ExtVectorDecls.clear();
8337 }
8338 
8339 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8340     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8341   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8342        ++I) {
8343     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8344         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8345     if (D)
8346       Decls.insert(D);
8347   }
8348   UnusedLocalTypedefNameCandidates.clear();
8349 }
8350 
8351 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8352     llvm::SmallSetVector<Decl *, 4> &Decls) {
8353   for (auto I : DeclsToCheckForDeferredDiags) {
8354     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8355     if (D)
8356       Decls.insert(D);
8357   }
8358   DeclsToCheckForDeferredDiags.clear();
8359 }
8360 
8361 void ASTReader::ReadReferencedSelectors(
8362        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8363   if (ReferencedSelectorsData.empty())
8364     return;
8365 
8366   // If there are @selector references added them to its pool. This is for
8367   // implementation of -Wselector.
8368   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8369   unsigned I = 0;
8370   while (I < DataSize) {
8371     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8372     SourceLocation SelLoc
8373       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8374     Sels.push_back(std::make_pair(Sel, SelLoc));
8375   }
8376   ReferencedSelectorsData.clear();
8377 }
8378 
8379 void ASTReader::ReadWeakUndeclaredIdentifiers(
8380        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8381   if (WeakUndeclaredIdentifiers.empty())
8382     return;
8383 
8384   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8385     IdentifierInfo *WeakId
8386       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8387     IdentifierInfo *AliasId
8388       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8389     SourceLocation Loc
8390       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8391     bool Used = WeakUndeclaredIdentifiers[I++];
8392     WeakInfo WI(AliasId, Loc);
8393     WI.setUsed(Used);
8394     WeakIDs.push_back(std::make_pair(WeakId, WI));
8395   }
8396   WeakUndeclaredIdentifiers.clear();
8397 }
8398 
8399 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8400   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8401     ExternalVTableUse VT;
8402     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8403     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8404     VT.DefinitionRequired = VTableUses[Idx++];
8405     VTables.push_back(VT);
8406   }
8407 
8408   VTableUses.clear();
8409 }
8410 
8411 void ASTReader::ReadPendingInstantiations(
8412        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8413   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8414     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8415     SourceLocation Loc
8416       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8417 
8418     Pending.push_back(std::make_pair(D, Loc));
8419   }
8420   PendingInstantiations.clear();
8421 }
8422 
8423 void ASTReader::ReadLateParsedTemplates(
8424     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8425         &LPTMap) {
8426   for (auto &LPT : LateParsedTemplates) {
8427     ModuleFile *FMod = LPT.first;
8428     RecordDataImpl &LateParsed = LPT.second;
8429     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8430          /* In loop */) {
8431       FunctionDecl *FD =
8432           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8433 
8434       auto LT = std::make_unique<LateParsedTemplate>();
8435       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8436 
8437       ModuleFile *F = getOwningModuleFile(LT->D);
8438       assert(F && "No module");
8439 
8440       unsigned TokN = LateParsed[Idx++];
8441       LT->Toks.reserve(TokN);
8442       for (unsigned T = 0; T < TokN; ++T)
8443         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8444 
8445       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8446     }
8447   }
8448 
8449   LateParsedTemplates.clear();
8450 }
8451 
8452 void ASTReader::LoadSelector(Selector Sel) {
8453   // It would be complicated to avoid reading the methods anyway. So don't.
8454   ReadMethodPool(Sel);
8455 }
8456 
8457 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8458   assert(ID && "Non-zero identifier ID required");
8459   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8460   IdentifiersLoaded[ID - 1] = II;
8461   if (DeserializationListener)
8462     DeserializationListener->IdentifierRead(ID, II);
8463 }
8464 
8465 /// Set the globally-visible declarations associated with the given
8466 /// identifier.
8467 ///
8468 /// If the AST reader is currently in a state where the given declaration IDs
8469 /// cannot safely be resolved, they are queued until it is safe to resolve
8470 /// them.
8471 ///
8472 /// \param II an IdentifierInfo that refers to one or more globally-visible
8473 /// declarations.
8474 ///
8475 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8476 /// visible at global scope.
8477 ///
8478 /// \param Decls if non-null, this vector will be populated with the set of
8479 /// deserialized declarations. These declarations will not be pushed into
8480 /// scope.
8481 void
8482 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8483                               const SmallVectorImpl<uint32_t> &DeclIDs,
8484                                    SmallVectorImpl<Decl *> *Decls) {
8485   if (NumCurrentElementsDeserializing && !Decls) {
8486     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8487     return;
8488   }
8489 
8490   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8491     if (!SemaObj) {
8492       // Queue this declaration so that it will be added to the
8493       // translation unit scope and identifier's declaration chain
8494       // once a Sema object is known.
8495       PreloadedDeclIDs.push_back(DeclIDs[I]);
8496       continue;
8497     }
8498 
8499     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8500 
8501     // If we're simply supposed to record the declarations, do so now.
8502     if (Decls) {
8503       Decls->push_back(D);
8504       continue;
8505     }
8506 
8507     // Introduce this declaration into the translation-unit scope
8508     // and add it to the declaration chain for this identifier, so
8509     // that (unqualified) name lookup will find it.
8510     pushExternalDeclIntoScope(D, II);
8511   }
8512 }
8513 
8514 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8515   if (ID == 0)
8516     return nullptr;
8517 
8518   if (IdentifiersLoaded.empty()) {
8519     Error("no identifier table in AST file");
8520     return nullptr;
8521   }
8522 
8523   ID -= 1;
8524   if (!IdentifiersLoaded[ID]) {
8525     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8526     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8527     ModuleFile *M = I->second;
8528     unsigned Index = ID - M->BaseIdentifierID;
8529     const unsigned char *Data =
8530         M->IdentifierTableData + M->IdentifierOffsets[Index];
8531 
8532     ASTIdentifierLookupTrait Trait(*this, *M);
8533     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8534     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8535     auto &II = PP.getIdentifierTable().get(Key);
8536     IdentifiersLoaded[ID] = &II;
8537     markIdentifierFromAST(*this,  II);
8538     if (DeserializationListener)
8539       DeserializationListener->IdentifierRead(ID + 1, &II);
8540   }
8541 
8542   return IdentifiersLoaded[ID];
8543 }
8544 
8545 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8546   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8547 }
8548 
8549 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8550   if (LocalID < NUM_PREDEF_IDENT_IDS)
8551     return LocalID;
8552 
8553   if (!M.ModuleOffsetMap.empty())
8554     ReadModuleOffsetMap(M);
8555 
8556   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8557     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8558   assert(I != M.IdentifierRemap.end()
8559          && "Invalid index into identifier index remap");
8560 
8561   return LocalID + I->second;
8562 }
8563 
8564 MacroInfo *ASTReader::getMacro(MacroID ID) {
8565   if (ID == 0)
8566     return nullptr;
8567 
8568   if (MacrosLoaded.empty()) {
8569     Error("no macro table in AST file");
8570     return nullptr;
8571   }
8572 
8573   ID -= NUM_PREDEF_MACRO_IDS;
8574   if (!MacrosLoaded[ID]) {
8575     GlobalMacroMapType::iterator I
8576       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8577     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8578     ModuleFile *M = I->second;
8579     unsigned Index = ID - M->BaseMacroID;
8580     MacrosLoaded[ID] =
8581         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8582 
8583     if (DeserializationListener)
8584       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8585                                          MacrosLoaded[ID]);
8586   }
8587 
8588   return MacrosLoaded[ID];
8589 }
8590 
8591 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8592   if (LocalID < NUM_PREDEF_MACRO_IDS)
8593     return LocalID;
8594 
8595   if (!M.ModuleOffsetMap.empty())
8596     ReadModuleOffsetMap(M);
8597 
8598   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8599     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8600   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8601 
8602   return LocalID + I->second;
8603 }
8604 
8605 serialization::SubmoduleID
8606 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8607   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8608     return LocalID;
8609 
8610   if (!M.ModuleOffsetMap.empty())
8611     ReadModuleOffsetMap(M);
8612 
8613   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8614     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8615   assert(I != M.SubmoduleRemap.end()
8616          && "Invalid index into submodule index remap");
8617 
8618   return LocalID + I->second;
8619 }
8620 
8621 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8622   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8623     assert(GlobalID == 0 && "Unhandled global submodule ID");
8624     return nullptr;
8625   }
8626 
8627   if (GlobalID > SubmodulesLoaded.size()) {
8628     Error("submodule ID out of range in AST file");
8629     return nullptr;
8630   }
8631 
8632   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8633 }
8634 
8635 Module *ASTReader::getModule(unsigned ID) {
8636   return getSubmodule(ID);
8637 }
8638 
8639 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8640   if (ID & 1) {
8641     // It's a module, look it up by submodule ID.
8642     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8643     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8644   } else {
8645     // It's a prefix (preamble, PCH, ...). Look it up by index.
8646     unsigned IndexFromEnd = ID >> 1;
8647     assert(IndexFromEnd && "got reference to unknown module file");
8648     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8649   }
8650 }
8651 
8652 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8653   if (!F)
8654     return 1;
8655 
8656   // For a file representing a module, use the submodule ID of the top-level
8657   // module as the file ID. For any other kind of file, the number of such
8658   // files loaded beforehand will be the same on reload.
8659   // FIXME: Is this true even if we have an explicit module file and a PCH?
8660   if (F->isModule())
8661     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8662 
8663   auto PCHModules = getModuleManager().pch_modules();
8664   auto I = llvm::find(PCHModules, F);
8665   assert(I != PCHModules.end() && "emitting reference to unknown file");
8666   return (I - PCHModules.end()) << 1;
8667 }
8668 
8669 llvm::Optional<ASTSourceDescriptor>
8670 ASTReader::getSourceDescriptor(unsigned ID) {
8671   if (Module *M = getSubmodule(ID))
8672     return ASTSourceDescriptor(*M);
8673 
8674   // If there is only a single PCH, return it instead.
8675   // Chained PCH are not supported.
8676   const auto &PCHChain = ModuleMgr.pch_modules();
8677   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8678     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8679     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8680     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8681     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8682                                MF.Signature);
8683   }
8684   return None;
8685 }
8686 
8687 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8688   auto I = DefinitionSource.find(FD);
8689   if (I == DefinitionSource.end())
8690     return EK_ReplyHazy;
8691   return I->second ? EK_Never : EK_Always;
8692 }
8693 
8694 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8695   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8696 }
8697 
8698 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8699   if (ID == 0)
8700     return Selector();
8701 
8702   if (ID > SelectorsLoaded.size()) {
8703     Error("selector ID out of range in AST file");
8704     return Selector();
8705   }
8706 
8707   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8708     // Load this selector from the selector table.
8709     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8710     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8711     ModuleFile &M = *I->second;
8712     ASTSelectorLookupTrait Trait(*this, M);
8713     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8714     SelectorsLoaded[ID - 1] =
8715       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8716     if (DeserializationListener)
8717       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8718   }
8719 
8720   return SelectorsLoaded[ID - 1];
8721 }
8722 
8723 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8724   return DecodeSelector(ID);
8725 }
8726 
8727 uint32_t ASTReader::GetNumExternalSelectors() {
8728   // ID 0 (the null selector) is considered an external selector.
8729   return getTotalNumSelectors() + 1;
8730 }
8731 
8732 serialization::SelectorID
8733 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8734   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8735     return LocalID;
8736 
8737   if (!M.ModuleOffsetMap.empty())
8738     ReadModuleOffsetMap(M);
8739 
8740   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8741     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8742   assert(I != M.SelectorRemap.end()
8743          && "Invalid index into selector index remap");
8744 
8745   return LocalID + I->second;
8746 }
8747 
8748 DeclarationNameLoc
8749 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8750   switch (Name.getNameKind()) {
8751   case DeclarationName::CXXConstructorName:
8752   case DeclarationName::CXXDestructorName:
8753   case DeclarationName::CXXConversionFunctionName:
8754     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8755 
8756   case DeclarationName::CXXOperatorName:
8757     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8758 
8759   case DeclarationName::CXXLiteralOperatorName:
8760     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8761         readSourceLocation());
8762 
8763   case DeclarationName::Identifier:
8764   case DeclarationName::ObjCZeroArgSelector:
8765   case DeclarationName::ObjCOneArgSelector:
8766   case DeclarationName::ObjCMultiArgSelector:
8767   case DeclarationName::CXXUsingDirective:
8768   case DeclarationName::CXXDeductionGuideName:
8769     break;
8770   }
8771   return DeclarationNameLoc();
8772 }
8773 
8774 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8775   DeclarationNameInfo NameInfo;
8776   NameInfo.setName(readDeclarationName());
8777   NameInfo.setLoc(readSourceLocation());
8778   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8779   return NameInfo;
8780 }
8781 
8782 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8783   Info.QualifierLoc = readNestedNameSpecifierLoc();
8784   unsigned NumTPLists = readInt();
8785   Info.NumTemplParamLists = NumTPLists;
8786   if (NumTPLists) {
8787     Info.TemplParamLists =
8788         new (getContext()) TemplateParameterList *[NumTPLists];
8789     for (unsigned i = 0; i != NumTPLists; ++i)
8790       Info.TemplParamLists[i] = readTemplateParameterList();
8791   }
8792 }
8793 
8794 TemplateParameterList *
8795 ASTRecordReader::readTemplateParameterList() {
8796   SourceLocation TemplateLoc = readSourceLocation();
8797   SourceLocation LAngleLoc = readSourceLocation();
8798   SourceLocation RAngleLoc = readSourceLocation();
8799 
8800   unsigned NumParams = readInt();
8801   SmallVector<NamedDecl *, 16> Params;
8802   Params.reserve(NumParams);
8803   while (NumParams--)
8804     Params.push_back(readDeclAs<NamedDecl>());
8805 
8806   bool HasRequiresClause = readBool();
8807   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8808 
8809   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8810       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8811   return TemplateParams;
8812 }
8813 
8814 void ASTRecordReader::readTemplateArgumentList(
8815                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8816                         bool Canonicalize) {
8817   unsigned NumTemplateArgs = readInt();
8818   TemplArgs.reserve(NumTemplateArgs);
8819   while (NumTemplateArgs--)
8820     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8821 }
8822 
8823 /// Read a UnresolvedSet structure.
8824 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8825   unsigned NumDecls = readInt();
8826   Set.reserve(getContext(), NumDecls);
8827   while (NumDecls--) {
8828     DeclID ID = readDeclID();
8829     AccessSpecifier AS = (AccessSpecifier) readInt();
8830     Set.addLazyDecl(getContext(), ID, AS);
8831   }
8832 }
8833 
8834 CXXBaseSpecifier
8835 ASTRecordReader::readCXXBaseSpecifier() {
8836   bool isVirtual = readBool();
8837   bool isBaseOfClass = readBool();
8838   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8839   bool inheritConstructors = readBool();
8840   TypeSourceInfo *TInfo = readTypeSourceInfo();
8841   SourceRange Range = readSourceRange();
8842   SourceLocation EllipsisLoc = readSourceLocation();
8843   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8844                           EllipsisLoc);
8845   Result.setInheritConstructors(inheritConstructors);
8846   return Result;
8847 }
8848 
8849 CXXCtorInitializer **
8850 ASTRecordReader::readCXXCtorInitializers() {
8851   ASTContext &Context = getContext();
8852   unsigned NumInitializers = readInt();
8853   assert(NumInitializers && "wrote ctor initializers but have no inits");
8854   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8855   for (unsigned i = 0; i != NumInitializers; ++i) {
8856     TypeSourceInfo *TInfo = nullptr;
8857     bool IsBaseVirtual = false;
8858     FieldDecl *Member = nullptr;
8859     IndirectFieldDecl *IndirectMember = nullptr;
8860 
8861     CtorInitializerType Type = (CtorInitializerType) readInt();
8862     switch (Type) {
8863     case CTOR_INITIALIZER_BASE:
8864       TInfo = readTypeSourceInfo();
8865       IsBaseVirtual = readBool();
8866       break;
8867 
8868     case CTOR_INITIALIZER_DELEGATING:
8869       TInfo = readTypeSourceInfo();
8870       break;
8871 
8872      case CTOR_INITIALIZER_MEMBER:
8873       Member = readDeclAs<FieldDecl>();
8874       break;
8875 
8876      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8877       IndirectMember = readDeclAs<IndirectFieldDecl>();
8878       break;
8879     }
8880 
8881     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8882     Expr *Init = readExpr();
8883     SourceLocation LParenLoc = readSourceLocation();
8884     SourceLocation RParenLoc = readSourceLocation();
8885 
8886     CXXCtorInitializer *BOMInit;
8887     if (Type == CTOR_INITIALIZER_BASE)
8888       BOMInit = new (Context)
8889           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8890                              RParenLoc, MemberOrEllipsisLoc);
8891     else if (Type == CTOR_INITIALIZER_DELEGATING)
8892       BOMInit = new (Context)
8893           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8894     else if (Member)
8895       BOMInit = new (Context)
8896           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8897                              Init, RParenLoc);
8898     else
8899       BOMInit = new (Context)
8900           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8901                              LParenLoc, Init, RParenLoc);
8902 
8903     if (/*IsWritten*/readBool()) {
8904       unsigned SourceOrder = readInt();
8905       BOMInit->setSourceOrder(SourceOrder);
8906     }
8907 
8908     CtorInitializers[i] = BOMInit;
8909   }
8910 
8911   return CtorInitializers;
8912 }
8913 
8914 NestedNameSpecifierLoc
8915 ASTRecordReader::readNestedNameSpecifierLoc() {
8916   ASTContext &Context = getContext();
8917   unsigned N = readInt();
8918   NestedNameSpecifierLocBuilder Builder;
8919   for (unsigned I = 0; I != N; ++I) {
8920     auto Kind = readNestedNameSpecifierKind();
8921     switch (Kind) {
8922     case NestedNameSpecifier::Identifier: {
8923       IdentifierInfo *II = readIdentifier();
8924       SourceRange Range = readSourceRange();
8925       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8926       break;
8927     }
8928 
8929     case NestedNameSpecifier::Namespace: {
8930       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8931       SourceRange Range = readSourceRange();
8932       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8933       break;
8934     }
8935 
8936     case NestedNameSpecifier::NamespaceAlias: {
8937       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8938       SourceRange Range = readSourceRange();
8939       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8940       break;
8941     }
8942 
8943     case NestedNameSpecifier::TypeSpec:
8944     case NestedNameSpecifier::TypeSpecWithTemplate: {
8945       bool Template = readBool();
8946       TypeSourceInfo *T = readTypeSourceInfo();
8947       if (!T)
8948         return NestedNameSpecifierLoc();
8949       SourceLocation ColonColonLoc = readSourceLocation();
8950 
8951       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8952       Builder.Extend(Context,
8953                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8954                      T->getTypeLoc(), ColonColonLoc);
8955       break;
8956     }
8957 
8958     case NestedNameSpecifier::Global: {
8959       SourceLocation ColonColonLoc = readSourceLocation();
8960       Builder.MakeGlobal(Context, ColonColonLoc);
8961       break;
8962     }
8963 
8964     case NestedNameSpecifier::Super: {
8965       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8966       SourceRange Range = readSourceRange();
8967       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8968       break;
8969     }
8970     }
8971   }
8972 
8973   return Builder.getWithLocInContext(Context);
8974 }
8975 
8976 SourceRange
8977 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8978                            unsigned &Idx) {
8979   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8980   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8981   return SourceRange(beg, end);
8982 }
8983 
8984 /// Read a floating-point value
8985 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8986   return llvm::APFloat(Sem, readAPInt());
8987 }
8988 
8989 // Read a string
8990 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8991   unsigned Len = Record[Idx++];
8992   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8993   Idx += Len;
8994   return Result;
8995 }
8996 
8997 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8998                                 unsigned &Idx) {
8999   std::string Filename = ReadString(Record, Idx);
9000   ResolveImportedPath(F, Filename);
9001   return Filename;
9002 }
9003 
9004 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9005                                 const RecordData &Record, unsigned &Idx) {
9006   std::string Filename = ReadString(Record, Idx);
9007   if (!BaseDirectory.empty())
9008     ResolveImportedPath(Filename, BaseDirectory);
9009   return Filename;
9010 }
9011 
9012 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9013                                          unsigned &Idx) {
9014   unsigned Major = Record[Idx++];
9015   unsigned Minor = Record[Idx++];
9016   unsigned Subminor = Record[Idx++];
9017   if (Minor == 0)
9018     return VersionTuple(Major);
9019   if (Subminor == 0)
9020     return VersionTuple(Major, Minor - 1);
9021   return VersionTuple(Major, Minor - 1, Subminor - 1);
9022 }
9023 
9024 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9025                                           const RecordData &Record,
9026                                           unsigned &Idx) {
9027   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9028   return CXXTemporary::Create(getContext(), Decl);
9029 }
9030 
9031 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9032   return Diag(CurrentImportLoc, DiagID);
9033 }
9034 
9035 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9036   return Diags.Report(Loc, DiagID);
9037 }
9038 
9039 /// Retrieve the identifier table associated with the
9040 /// preprocessor.
9041 IdentifierTable &ASTReader::getIdentifierTable() {
9042   return PP.getIdentifierTable();
9043 }
9044 
9045 /// Record that the given ID maps to the given switch-case
9046 /// statement.
9047 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9048   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9049          "Already have a SwitchCase with this ID");
9050   (*CurrSwitchCaseStmts)[ID] = SC;
9051 }
9052 
9053 /// Retrieve the switch-case statement with the given ID.
9054 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9055   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9056   return (*CurrSwitchCaseStmts)[ID];
9057 }
9058 
9059 void ASTReader::ClearSwitchCaseIDs() {
9060   CurrSwitchCaseStmts->clear();
9061 }
9062 
9063 void ASTReader::ReadComments() {
9064   ASTContext &Context = getContext();
9065   std::vector<RawComment *> Comments;
9066   for (SmallVectorImpl<std::pair<BitstreamCursor,
9067                                  serialization::ModuleFile *>>::iterator
9068        I = CommentsCursors.begin(),
9069        E = CommentsCursors.end();
9070        I != E; ++I) {
9071     Comments.clear();
9072     BitstreamCursor &Cursor = I->first;
9073     serialization::ModuleFile &F = *I->second;
9074     SavedStreamPosition SavedPosition(Cursor);
9075 
9076     RecordData Record;
9077     while (true) {
9078       Expected<llvm::BitstreamEntry> MaybeEntry =
9079           Cursor.advanceSkippingSubblocks(
9080               BitstreamCursor::AF_DontPopBlockAtEnd);
9081       if (!MaybeEntry) {
9082         Error(MaybeEntry.takeError());
9083         return;
9084       }
9085       llvm::BitstreamEntry Entry = MaybeEntry.get();
9086 
9087       switch (Entry.Kind) {
9088       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9089       case llvm::BitstreamEntry::Error:
9090         Error("malformed block record in AST file");
9091         return;
9092       case llvm::BitstreamEntry::EndBlock:
9093         goto NextCursor;
9094       case llvm::BitstreamEntry::Record:
9095         // The interesting case.
9096         break;
9097       }
9098 
9099       // Read a record.
9100       Record.clear();
9101       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9102       if (!MaybeComment) {
9103         Error(MaybeComment.takeError());
9104         return;
9105       }
9106       switch ((CommentRecordTypes)MaybeComment.get()) {
9107       case COMMENTS_RAW_COMMENT: {
9108         unsigned Idx = 0;
9109         SourceRange SR = ReadSourceRange(F, Record, Idx);
9110         RawComment::CommentKind Kind =
9111             (RawComment::CommentKind) Record[Idx++];
9112         bool IsTrailingComment = Record[Idx++];
9113         bool IsAlmostTrailingComment = Record[Idx++];
9114         Comments.push_back(new (Context) RawComment(
9115             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9116         break;
9117       }
9118       }
9119     }
9120   NextCursor:
9121     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9122         FileToOffsetToComment;
9123     for (RawComment *C : Comments) {
9124       SourceLocation CommentLoc = C->getBeginLoc();
9125       if (CommentLoc.isValid()) {
9126         std::pair<FileID, unsigned> Loc =
9127             SourceMgr.getDecomposedLoc(CommentLoc);
9128         if (Loc.first.isValid())
9129           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9130       }
9131     }
9132   }
9133 }
9134 
9135 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9136                                 bool IncludeSystem, bool Complain,
9137                     llvm::function_ref<void(const serialization::InputFile &IF,
9138                                             bool isSystem)> Visitor) {
9139   unsigned NumUserInputs = MF.NumUserInputFiles;
9140   unsigned NumInputs = MF.InputFilesLoaded.size();
9141   assert(NumUserInputs <= NumInputs);
9142   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9143   for (unsigned I = 0; I < N; ++I) {
9144     bool IsSystem = I >= NumUserInputs;
9145     InputFile IF = getInputFile(MF, I+1, Complain);
9146     Visitor(IF, IsSystem);
9147   }
9148 }
9149 
9150 void ASTReader::visitTopLevelModuleMaps(
9151     serialization::ModuleFile &MF,
9152     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9153   unsigned NumInputs = MF.InputFilesLoaded.size();
9154   for (unsigned I = 0; I < NumInputs; ++I) {
9155     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9156     if (IFI.TopLevelModuleMap)
9157       // FIXME: This unnecessarily re-reads the InputFileInfo.
9158       if (auto FE = getInputFile(MF, I + 1).getFile())
9159         Visitor(FE);
9160   }
9161 }
9162 
9163 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9164   // If we know the owning module, use it.
9165   if (Module *M = D->getImportedOwningModule())
9166     return M->getFullModuleName();
9167 
9168   // Otherwise, use the name of the top-level module the decl is within.
9169   if (ModuleFile *M = getOwningModuleFile(D))
9170     return M->ModuleName;
9171 
9172   // Not from a module.
9173   return {};
9174 }
9175 
9176 void ASTReader::finishPendingActions() {
9177   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9178          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9179          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9180          !PendingUpdateRecords.empty()) {
9181     // If any identifiers with corresponding top-level declarations have
9182     // been loaded, load those declarations now.
9183     using TopLevelDeclsMap =
9184         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9185     TopLevelDeclsMap TopLevelDecls;
9186 
9187     while (!PendingIdentifierInfos.empty()) {
9188       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9189       SmallVector<uint32_t, 4> DeclIDs =
9190           std::move(PendingIdentifierInfos.back().second);
9191       PendingIdentifierInfos.pop_back();
9192 
9193       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9194     }
9195 
9196     // Load each function type that we deferred loading because it was a
9197     // deduced type that might refer to a local type declared within itself.
9198     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9199       auto *FD = PendingFunctionTypes[I].first;
9200       FD->setType(GetType(PendingFunctionTypes[I].second));
9201 
9202       // If we gave a function a deduced return type, remember that we need to
9203       // propagate that along the redeclaration chain.
9204       auto *DT = FD->getReturnType()->getContainedDeducedType();
9205       if (DT && DT->isDeduced())
9206         PendingDeducedTypeUpdates.insert(
9207             {FD->getCanonicalDecl(), FD->getReturnType()});
9208     }
9209     PendingFunctionTypes.clear();
9210 
9211     // For each decl chain that we wanted to complete while deserializing, mark
9212     // it as "still needs to be completed".
9213     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9214       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9215     }
9216     PendingIncompleteDeclChains.clear();
9217 
9218     // Load pending declaration chains.
9219     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9220       loadPendingDeclChain(PendingDeclChains[I].first,
9221                            PendingDeclChains[I].second);
9222     PendingDeclChains.clear();
9223 
9224     // Make the most recent of the top-level declarations visible.
9225     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9226            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9227       IdentifierInfo *II = TLD->first;
9228       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9229         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9230       }
9231     }
9232 
9233     // Load any pending macro definitions.
9234     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9235       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9236       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9237       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9238       // Initialize the macro history from chained-PCHs ahead of module imports.
9239       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9240            ++IDIdx) {
9241         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9242         if (!Info.M->isModule())
9243           resolvePendingMacro(II, Info);
9244       }
9245       // Handle module imports.
9246       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9247            ++IDIdx) {
9248         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9249         if (Info.M->isModule())
9250           resolvePendingMacro(II, Info);
9251       }
9252     }
9253     PendingMacroIDs.clear();
9254 
9255     // Wire up the DeclContexts for Decls that we delayed setting until
9256     // recursive loading is completed.
9257     while (!PendingDeclContextInfos.empty()) {
9258       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9259       PendingDeclContextInfos.pop_front();
9260       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9261       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9262       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9263     }
9264 
9265     // Perform any pending declaration updates.
9266     while (!PendingUpdateRecords.empty()) {
9267       auto Update = PendingUpdateRecords.pop_back_val();
9268       ReadingKindTracker ReadingKind(Read_Decl, *this);
9269       loadDeclUpdateRecords(Update);
9270     }
9271   }
9272 
9273   // At this point, all update records for loaded decls are in place, so any
9274   // fake class definitions should have become real.
9275   assert(PendingFakeDefinitionData.empty() &&
9276          "faked up a class definition but never saw the real one");
9277 
9278   // If we deserialized any C++ or Objective-C class definitions, any
9279   // Objective-C protocol definitions, or any redeclarable templates, make sure
9280   // that all redeclarations point to the definitions. Note that this can only
9281   // happen now, after the redeclaration chains have been fully wired.
9282   for (Decl *D : PendingDefinitions) {
9283     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9284       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9285         // Make sure that the TagType points at the definition.
9286         const_cast<TagType*>(TagT)->decl = TD;
9287       }
9288 
9289       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9290         for (auto *R = getMostRecentExistingDecl(RD); R;
9291              R = R->getPreviousDecl()) {
9292           assert((R == D) ==
9293                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9294                  "declaration thinks it's the definition but it isn't");
9295           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9296         }
9297       }
9298 
9299       continue;
9300     }
9301 
9302     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9303       // Make sure that the ObjCInterfaceType points at the definition.
9304       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9305         ->Decl = ID;
9306 
9307       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9308         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9309 
9310       continue;
9311     }
9312 
9313     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9314       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9315         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9316 
9317       continue;
9318     }
9319 
9320     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9321     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9322       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9323   }
9324   PendingDefinitions.clear();
9325 
9326   // Load the bodies of any functions or methods we've encountered. We do
9327   // this now (delayed) so that we can be sure that the declaration chains
9328   // have been fully wired up (hasBody relies on this).
9329   // FIXME: We shouldn't require complete redeclaration chains here.
9330   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9331                                PBEnd = PendingBodies.end();
9332        PB != PBEnd; ++PB) {
9333     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9334       // For a function defined inline within a class template, force the
9335       // canonical definition to be the one inside the canonical definition of
9336       // the template. This ensures that we instantiate from a correct view
9337       // of the template.
9338       //
9339       // Sadly we can't do this more generally: we can't be sure that all
9340       // copies of an arbitrary class definition will have the same members
9341       // defined (eg, some member functions may not be instantiated, and some
9342       // special members may or may not have been implicitly defined).
9343       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9344         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9345           continue;
9346 
9347       // FIXME: Check for =delete/=default?
9348       // FIXME: Complain about ODR violations here?
9349       const FunctionDecl *Defn = nullptr;
9350       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9351         FD->setLazyBody(PB->second);
9352       } else {
9353         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9354         mergeDefinitionVisibility(NonConstDefn, FD);
9355 
9356         if (!FD->isLateTemplateParsed() &&
9357             !NonConstDefn->isLateTemplateParsed() &&
9358             FD->getODRHash() != NonConstDefn->getODRHash()) {
9359           if (!isa<CXXMethodDecl>(FD)) {
9360             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9361           } else if (FD->getLexicalParent()->isFileContext() &&
9362                      NonConstDefn->getLexicalParent()->isFileContext()) {
9363             // Only diagnose out-of-line method definitions.  If they are
9364             // in class definitions, then an error will be generated when
9365             // processing the class bodies.
9366             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9367           }
9368         }
9369       }
9370       continue;
9371     }
9372 
9373     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9374     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9375       MD->setLazyBody(PB->second);
9376   }
9377   PendingBodies.clear();
9378 
9379   // Do some cleanup.
9380   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9381     getContext().deduplicateMergedDefinitonsFor(ND);
9382   PendingMergedDefinitionsToDeduplicate.clear();
9383 }
9384 
9385 void ASTReader::diagnoseOdrViolations() {
9386   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9387       PendingFunctionOdrMergeFailures.empty() &&
9388       PendingEnumOdrMergeFailures.empty())
9389     return;
9390 
9391   // Trigger the import of the full definition of each class that had any
9392   // odr-merging problems, so we can produce better diagnostics for them.
9393   // These updates may in turn find and diagnose some ODR failures, so take
9394   // ownership of the set first.
9395   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9396   PendingOdrMergeFailures.clear();
9397   for (auto &Merge : OdrMergeFailures) {
9398     Merge.first->buildLookup();
9399     Merge.first->decls_begin();
9400     Merge.first->bases_begin();
9401     Merge.first->vbases_begin();
9402     for (auto &RecordPair : Merge.second) {
9403       auto *RD = RecordPair.first;
9404       RD->decls_begin();
9405       RD->bases_begin();
9406       RD->vbases_begin();
9407     }
9408   }
9409 
9410   // Trigger the import of functions.
9411   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9412   PendingFunctionOdrMergeFailures.clear();
9413   for (auto &Merge : FunctionOdrMergeFailures) {
9414     Merge.first->buildLookup();
9415     Merge.first->decls_begin();
9416     Merge.first->getBody();
9417     for (auto &FD : Merge.second) {
9418       FD->buildLookup();
9419       FD->decls_begin();
9420       FD->getBody();
9421     }
9422   }
9423 
9424   // Trigger the import of enums.
9425   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9426   PendingEnumOdrMergeFailures.clear();
9427   for (auto &Merge : EnumOdrMergeFailures) {
9428     Merge.first->decls_begin();
9429     for (auto &Enum : Merge.second) {
9430       Enum->decls_begin();
9431     }
9432   }
9433 
9434   // For each declaration from a merged context, check that the canonical
9435   // definition of that context also contains a declaration of the same
9436   // entity.
9437   //
9438   // Caution: this loop does things that might invalidate iterators into
9439   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9440   while (!PendingOdrMergeChecks.empty()) {
9441     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9442 
9443     // FIXME: Skip over implicit declarations for now. This matters for things
9444     // like implicitly-declared special member functions. This isn't entirely
9445     // correct; we can end up with multiple unmerged declarations of the same
9446     // implicit entity.
9447     if (D->isImplicit())
9448       continue;
9449 
9450     DeclContext *CanonDef = D->getDeclContext();
9451 
9452     bool Found = false;
9453     const Decl *DCanon = D->getCanonicalDecl();
9454 
9455     for (auto RI : D->redecls()) {
9456       if (RI->getLexicalDeclContext() == CanonDef) {
9457         Found = true;
9458         break;
9459       }
9460     }
9461     if (Found)
9462       continue;
9463 
9464     // Quick check failed, time to do the slow thing. Note, we can't just
9465     // look up the name of D in CanonDef here, because the member that is
9466     // in CanonDef might not be found by name lookup (it might have been
9467     // replaced by a more recent declaration in the lookup table), and we
9468     // can't necessarily find it in the redeclaration chain because it might
9469     // be merely mergeable, not redeclarable.
9470     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9471     for (auto *CanonMember : CanonDef->decls()) {
9472       if (CanonMember->getCanonicalDecl() == DCanon) {
9473         // This can happen if the declaration is merely mergeable and not
9474         // actually redeclarable (we looked for redeclarations earlier).
9475         //
9476         // FIXME: We should be able to detect this more efficiently, without
9477         // pulling in all of the members of CanonDef.
9478         Found = true;
9479         break;
9480       }
9481       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9482         if (ND->getDeclName() == D->getDeclName())
9483           Candidates.push_back(ND);
9484     }
9485 
9486     if (!Found) {
9487       // The AST doesn't like TagDecls becoming invalid after they've been
9488       // completed. We only really need to mark FieldDecls as invalid here.
9489       if (!isa<TagDecl>(D))
9490         D->setInvalidDecl();
9491 
9492       // Ensure we don't accidentally recursively enter deserialization while
9493       // we're producing our diagnostic.
9494       Deserializing RecursionGuard(this);
9495 
9496       std::string CanonDefModule =
9497           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9498       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9499         << D << getOwningModuleNameForDiagnostic(D)
9500         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9501 
9502       if (Candidates.empty())
9503         Diag(cast<Decl>(CanonDef)->getLocation(),
9504              diag::note_module_odr_violation_no_possible_decls) << D;
9505       else {
9506         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9507           Diag(Candidates[I]->getLocation(),
9508                diag::note_module_odr_violation_possible_decl)
9509             << Candidates[I];
9510       }
9511 
9512       DiagnosedOdrMergeFailures.insert(CanonDef);
9513     }
9514   }
9515 
9516   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9517       EnumOdrMergeFailures.empty())
9518     return;
9519 
9520   // Ensure we don't accidentally recursively enter deserialization while
9521   // we're producing our diagnostics.
9522   Deserializing RecursionGuard(this);
9523 
9524   // Common code for hashing helpers.
9525   ODRHash Hash;
9526   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9527     Hash.clear();
9528     Hash.AddQualType(Ty);
9529     return Hash.CalculateHash();
9530   };
9531 
9532   auto ComputeODRHash = [&Hash](const Stmt *S) {
9533     assert(S);
9534     Hash.clear();
9535     Hash.AddStmt(S);
9536     return Hash.CalculateHash();
9537   };
9538 
9539   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9540     assert(D);
9541     Hash.clear();
9542     Hash.AddSubDecl(D);
9543     return Hash.CalculateHash();
9544   };
9545 
9546   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9547     Hash.clear();
9548     Hash.AddTemplateArgument(TA);
9549     return Hash.CalculateHash();
9550   };
9551 
9552   auto ComputeTemplateParameterListODRHash =
9553       [&Hash](const TemplateParameterList *TPL) {
9554         assert(TPL);
9555         Hash.clear();
9556         Hash.AddTemplateParameterList(TPL);
9557         return Hash.CalculateHash();
9558       };
9559 
9560   // Used with err_module_odr_violation_mismatch_decl and
9561   // note_module_odr_violation_mismatch_decl
9562   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9563   enum ODRMismatchDecl {
9564     EndOfClass,
9565     PublicSpecifer,
9566     PrivateSpecifer,
9567     ProtectedSpecifer,
9568     StaticAssert,
9569     Field,
9570     CXXMethod,
9571     TypeAlias,
9572     TypeDef,
9573     Var,
9574     Friend,
9575     FunctionTemplate,
9576     Other
9577   };
9578 
9579   // Used with err_module_odr_violation_mismatch_decl_diff and
9580   // note_module_odr_violation_mismatch_decl_diff
9581   enum ODRMismatchDeclDifference {
9582     StaticAssertCondition,
9583     StaticAssertMessage,
9584     StaticAssertOnlyMessage,
9585     FieldName,
9586     FieldTypeName,
9587     FieldSingleBitField,
9588     FieldDifferentWidthBitField,
9589     FieldSingleMutable,
9590     FieldSingleInitializer,
9591     FieldDifferentInitializers,
9592     MethodName,
9593     MethodDeleted,
9594     MethodDefaulted,
9595     MethodVirtual,
9596     MethodStatic,
9597     MethodVolatile,
9598     MethodConst,
9599     MethodInline,
9600     MethodNumberParameters,
9601     MethodParameterType,
9602     MethodParameterName,
9603     MethodParameterSingleDefaultArgument,
9604     MethodParameterDifferentDefaultArgument,
9605     MethodNoTemplateArguments,
9606     MethodDifferentNumberTemplateArguments,
9607     MethodDifferentTemplateArgument,
9608     MethodSingleBody,
9609     MethodDifferentBody,
9610     TypedefName,
9611     TypedefType,
9612     VarName,
9613     VarType,
9614     VarSingleInitializer,
9615     VarDifferentInitializer,
9616     VarConstexpr,
9617     FriendTypeFunction,
9618     FriendType,
9619     FriendFunction,
9620     FunctionTemplateDifferentNumberParameters,
9621     FunctionTemplateParameterDifferentKind,
9622     FunctionTemplateParameterName,
9623     FunctionTemplateParameterSingleDefaultArgument,
9624     FunctionTemplateParameterDifferentDefaultArgument,
9625     FunctionTemplateParameterDifferentType,
9626     FunctionTemplatePackParameter,
9627   };
9628 
9629   // These lambdas have the common portions of the ODR diagnostics.  This
9630   // has the same return as Diag(), so addition parameters can be passed
9631   // in with operator<<
9632   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9633                                  SourceLocation Loc, SourceRange Range,
9634                                  ODRMismatchDeclDifference DiffType) {
9635     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9636            << FirstRecord << FirstModule.empty() << FirstModule << Range
9637            << DiffType;
9638   };
9639   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9640                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9641     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9642            << SecondModule << Range << DiffType;
9643   };
9644 
9645   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9646                        &ComputeQualTypeODRHash, &ComputeODRHash](
9647                           NamedDecl *FirstRecord, StringRef FirstModule,
9648                           StringRef SecondModule, FieldDecl *FirstField,
9649                           FieldDecl *SecondField) {
9650     IdentifierInfo *FirstII = FirstField->getIdentifier();
9651     IdentifierInfo *SecondII = SecondField->getIdentifier();
9652     if (FirstII->getName() != SecondII->getName()) {
9653       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9654                        FirstField->getSourceRange(), FieldName)
9655           << FirstII;
9656       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9657                       SecondField->getSourceRange(), FieldName)
9658           << SecondII;
9659 
9660       return true;
9661     }
9662 
9663     assert(getContext().hasSameType(FirstField->getType(),
9664                                     SecondField->getType()));
9665 
9666     QualType FirstType = FirstField->getType();
9667     QualType SecondType = SecondField->getType();
9668     if (ComputeQualTypeODRHash(FirstType) !=
9669         ComputeQualTypeODRHash(SecondType)) {
9670       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9671                        FirstField->getSourceRange(), FieldTypeName)
9672           << FirstII << FirstType;
9673       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9674                       SecondField->getSourceRange(), FieldTypeName)
9675           << SecondII << SecondType;
9676 
9677       return true;
9678     }
9679 
9680     const bool IsFirstBitField = FirstField->isBitField();
9681     const bool IsSecondBitField = SecondField->isBitField();
9682     if (IsFirstBitField != IsSecondBitField) {
9683       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9684                        FirstField->getSourceRange(), FieldSingleBitField)
9685           << FirstII << IsFirstBitField;
9686       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9687                       SecondField->getSourceRange(), FieldSingleBitField)
9688           << SecondII << IsSecondBitField;
9689       return true;
9690     }
9691 
9692     if (IsFirstBitField && IsSecondBitField) {
9693       unsigned FirstBitWidthHash =
9694           ComputeODRHash(FirstField->getBitWidth());
9695       unsigned SecondBitWidthHash =
9696           ComputeODRHash(SecondField->getBitWidth());
9697       if (FirstBitWidthHash != SecondBitWidthHash) {
9698         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9699                          FirstField->getSourceRange(),
9700                          FieldDifferentWidthBitField)
9701             << FirstII << FirstField->getBitWidth()->getSourceRange();
9702         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9703                         SecondField->getSourceRange(),
9704                         FieldDifferentWidthBitField)
9705             << SecondII << SecondField->getBitWidth()->getSourceRange();
9706         return true;
9707       }
9708     }
9709 
9710     if (!PP.getLangOpts().CPlusPlus)
9711       return false;
9712 
9713     const bool IsFirstMutable = FirstField->isMutable();
9714     const bool IsSecondMutable = SecondField->isMutable();
9715     if (IsFirstMutable != IsSecondMutable) {
9716       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9717                        FirstField->getSourceRange(), FieldSingleMutable)
9718           << FirstII << IsFirstMutable;
9719       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9720                       SecondField->getSourceRange(), FieldSingleMutable)
9721           << SecondII << IsSecondMutable;
9722       return true;
9723     }
9724 
9725     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9726     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9727     if ((!FirstInitializer && SecondInitializer) ||
9728         (FirstInitializer && !SecondInitializer)) {
9729       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9730                        FirstField->getSourceRange(), FieldSingleInitializer)
9731           << FirstII << (FirstInitializer != nullptr);
9732       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9733                       SecondField->getSourceRange(), FieldSingleInitializer)
9734           << SecondII << (SecondInitializer != nullptr);
9735       return true;
9736     }
9737 
9738     if (FirstInitializer && SecondInitializer) {
9739       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9740       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9741       if (FirstInitHash != SecondInitHash) {
9742         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9743                          FirstField->getSourceRange(),
9744                          FieldDifferentInitializers)
9745             << FirstII << FirstInitializer->getSourceRange();
9746         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9747                         SecondField->getSourceRange(),
9748                         FieldDifferentInitializers)
9749             << SecondII << SecondInitializer->getSourceRange();
9750         return true;
9751       }
9752     }
9753 
9754     return false;
9755   };
9756 
9757   auto ODRDiagTypeDefOrAlias =
9758       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9759           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9760           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9761           bool IsTypeAlias) {
9762         auto FirstName = FirstTD->getDeclName();
9763         auto SecondName = SecondTD->getDeclName();
9764         if (FirstName != SecondName) {
9765           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9766                            FirstTD->getSourceRange(), TypedefName)
9767               << IsTypeAlias << FirstName;
9768           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9769                           SecondTD->getSourceRange(), TypedefName)
9770               << IsTypeAlias << SecondName;
9771           return true;
9772         }
9773 
9774         QualType FirstType = FirstTD->getUnderlyingType();
9775         QualType SecondType = SecondTD->getUnderlyingType();
9776         if (ComputeQualTypeODRHash(FirstType) !=
9777             ComputeQualTypeODRHash(SecondType)) {
9778           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9779                            FirstTD->getSourceRange(), TypedefType)
9780               << IsTypeAlias << FirstName << FirstType;
9781           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9782                           SecondTD->getSourceRange(), TypedefType)
9783               << IsTypeAlias << SecondName << SecondType;
9784           return true;
9785         }
9786 
9787         return false;
9788   };
9789 
9790   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9791                      &ComputeQualTypeODRHash, &ComputeODRHash,
9792                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9793                            StringRef SecondModule, VarDecl *FirstVD,
9794                            VarDecl *SecondVD) {
9795     auto FirstName = FirstVD->getDeclName();
9796     auto SecondName = SecondVD->getDeclName();
9797     if (FirstName != SecondName) {
9798       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9799                        FirstVD->getSourceRange(), VarName)
9800           << FirstName;
9801       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9802                       SecondVD->getSourceRange(), VarName)
9803           << SecondName;
9804       return true;
9805     }
9806 
9807     QualType FirstType = FirstVD->getType();
9808     QualType SecondType = SecondVD->getType();
9809     if (ComputeQualTypeODRHash(FirstType) !=
9810         ComputeQualTypeODRHash(SecondType)) {
9811       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9812                        FirstVD->getSourceRange(), VarType)
9813           << FirstName << FirstType;
9814       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9815                       SecondVD->getSourceRange(), VarType)
9816           << SecondName << SecondType;
9817       return true;
9818     }
9819 
9820     if (!PP.getLangOpts().CPlusPlus)
9821       return false;
9822 
9823     const Expr *FirstInit = FirstVD->getInit();
9824     const Expr *SecondInit = SecondVD->getInit();
9825     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9826       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9827                        FirstVD->getSourceRange(), VarSingleInitializer)
9828           << FirstName << (FirstInit == nullptr)
9829           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9830       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9831                       SecondVD->getSourceRange(), VarSingleInitializer)
9832           << SecondName << (SecondInit == nullptr)
9833           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9834       return true;
9835     }
9836 
9837     if (FirstInit && SecondInit &&
9838         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9839       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9840                        FirstVD->getSourceRange(), VarDifferentInitializer)
9841           << FirstName << FirstInit->getSourceRange();
9842       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9843                       SecondVD->getSourceRange(), VarDifferentInitializer)
9844           << SecondName << SecondInit->getSourceRange();
9845       return true;
9846     }
9847 
9848     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9849     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9850     if (FirstIsConstexpr != SecondIsConstexpr) {
9851       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9852                        FirstVD->getSourceRange(), VarConstexpr)
9853           << FirstName << FirstIsConstexpr;
9854       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9855                       SecondVD->getSourceRange(), VarConstexpr)
9856           << SecondName << SecondIsConstexpr;
9857       return true;
9858     }
9859     return false;
9860   };
9861 
9862   auto DifferenceSelector = [](Decl *D) {
9863     assert(D && "valid Decl required");
9864     switch (D->getKind()) {
9865     default:
9866       return Other;
9867     case Decl::AccessSpec:
9868       switch (D->getAccess()) {
9869       case AS_public:
9870         return PublicSpecifer;
9871       case AS_private:
9872         return PrivateSpecifer;
9873       case AS_protected:
9874         return ProtectedSpecifer;
9875       case AS_none:
9876         break;
9877       }
9878       llvm_unreachable("Invalid access specifier");
9879     case Decl::StaticAssert:
9880       return StaticAssert;
9881     case Decl::Field:
9882       return Field;
9883     case Decl::CXXMethod:
9884     case Decl::CXXConstructor:
9885     case Decl::CXXDestructor:
9886       return CXXMethod;
9887     case Decl::TypeAlias:
9888       return TypeAlias;
9889     case Decl::Typedef:
9890       return TypeDef;
9891     case Decl::Var:
9892       return Var;
9893     case Decl::Friend:
9894       return Friend;
9895     case Decl::FunctionTemplate:
9896       return FunctionTemplate;
9897     }
9898   };
9899 
9900   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9901   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9902                                                  RecordDecl *Record,
9903                                                  const DeclContext *DC) {
9904     for (auto *D : Record->decls()) {
9905       if (!ODRHash::isDeclToBeProcessed(D, DC))
9906         continue;
9907       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9908     }
9909   };
9910 
9911   struct DiffResult {
9912     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9913     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9914   };
9915 
9916   // If there is a diagnoseable difference, FirstDiffType and
9917   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9918   // filled in if not EndOfClass.
9919   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9920                                              DeclHashes &SecondHashes) {
9921     DiffResult DR;
9922     auto FirstIt = FirstHashes.begin();
9923     auto SecondIt = SecondHashes.begin();
9924     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9925       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9926           FirstIt->second == SecondIt->second) {
9927         ++FirstIt;
9928         ++SecondIt;
9929         continue;
9930       }
9931 
9932       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9933       DR.SecondDecl =
9934           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9935 
9936       DR.FirstDiffType =
9937           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9938       DR.SecondDiffType =
9939           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9940       return DR;
9941     }
9942     return DR;
9943   };
9944 
9945   // Use this to diagnose that an unexpected Decl was encountered
9946   // or no difference was detected. This causes a generic error
9947   // message to be emitted.
9948   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9949                                       StringRef FirstModule,
9950                                       NamedDecl *SecondRecord,
9951                                       StringRef SecondModule) {
9952     Diag(FirstRecord->getLocation(),
9953          diag::err_module_odr_violation_different_definitions)
9954         << FirstRecord << FirstModule.empty() << FirstModule;
9955 
9956     if (DR.FirstDecl) {
9957       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9958           << FirstRecord << DR.FirstDecl->getSourceRange();
9959     }
9960 
9961     Diag(SecondRecord->getLocation(),
9962          diag::note_module_odr_violation_different_definitions)
9963         << SecondModule;
9964 
9965     if (DR.SecondDecl) {
9966       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9967           << DR.SecondDecl->getSourceRange();
9968     }
9969   };
9970 
9971   auto DiagnoseODRMismatch =
9972       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9973              NamedDecl *SecondRecord, StringRef SecondModule) {
9974         SourceLocation FirstLoc;
9975         SourceRange FirstRange;
9976         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9977         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9978           FirstLoc = FirstTag->getBraceRange().getEnd();
9979         } else {
9980           FirstLoc = DR.FirstDecl->getLocation();
9981           FirstRange = DR.FirstDecl->getSourceRange();
9982         }
9983         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9984             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9985             << DR.FirstDiffType;
9986 
9987         SourceLocation SecondLoc;
9988         SourceRange SecondRange;
9989         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9990         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9991           SecondLoc = SecondTag->getBraceRange().getEnd();
9992         } else {
9993           SecondLoc = DR.SecondDecl->getLocation();
9994           SecondRange = DR.SecondDecl->getSourceRange();
9995         }
9996         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9997             << SecondModule << SecondRange << DR.SecondDiffType;
9998       };
9999 
10000   // Issue any pending ODR-failure diagnostics.
10001   for (auto &Merge : OdrMergeFailures) {
10002     // If we've already pointed out a specific problem with this class, don't
10003     // bother issuing a general "something's different" diagnostic.
10004     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10005       continue;
10006 
10007     bool Diagnosed = false;
10008     CXXRecordDecl *FirstRecord = Merge.first;
10009     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10010     for (auto &RecordPair : Merge.second) {
10011       CXXRecordDecl *SecondRecord = RecordPair.first;
10012       // Multiple different declarations got merged together; tell the user
10013       // where they came from.
10014       if (FirstRecord == SecondRecord)
10015         continue;
10016 
10017       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10018 
10019       auto *FirstDD = FirstRecord->DefinitionData;
10020       auto *SecondDD = RecordPair.second;
10021 
10022       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10023 
10024       // Diagnostics from DefinitionData are emitted here.
10025       if (FirstDD != SecondDD) {
10026         enum ODRDefinitionDataDifference {
10027           NumBases,
10028           NumVBases,
10029           BaseType,
10030           BaseVirtual,
10031           BaseAccess,
10032         };
10033         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10034                                  this](SourceLocation Loc, SourceRange Range,
10035                                        ODRDefinitionDataDifference DiffType) {
10036           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10037                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10038                  << DiffType;
10039         };
10040         auto ODRDiagBaseNote = [&SecondModule,
10041                                 this](SourceLocation Loc, SourceRange Range,
10042                                       ODRDefinitionDataDifference DiffType) {
10043           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10044                  << SecondModule << Range << DiffType;
10045         };
10046 
10047         unsigned FirstNumBases = FirstDD->NumBases;
10048         unsigned FirstNumVBases = FirstDD->NumVBases;
10049         unsigned SecondNumBases = SecondDD->NumBases;
10050         unsigned SecondNumVBases = SecondDD->NumVBases;
10051 
10052         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10053           unsigned NumBases = DD->NumBases;
10054           if (NumBases == 0) return SourceRange();
10055           auto bases = DD->bases();
10056           return SourceRange(bases[0].getBeginLoc(),
10057                              bases[NumBases - 1].getEndLoc());
10058         };
10059 
10060         if (FirstNumBases != SecondNumBases) {
10061           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10062                            NumBases)
10063               << FirstNumBases;
10064           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10065                           NumBases)
10066               << SecondNumBases;
10067           Diagnosed = true;
10068           break;
10069         }
10070 
10071         if (FirstNumVBases != SecondNumVBases) {
10072           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10073                            NumVBases)
10074               << FirstNumVBases;
10075           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10076                           NumVBases)
10077               << SecondNumVBases;
10078           Diagnosed = true;
10079           break;
10080         }
10081 
10082         auto FirstBases = FirstDD->bases();
10083         auto SecondBases = SecondDD->bases();
10084         unsigned i = 0;
10085         for (i = 0; i < FirstNumBases; ++i) {
10086           auto FirstBase = FirstBases[i];
10087           auto SecondBase = SecondBases[i];
10088           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10089               ComputeQualTypeODRHash(SecondBase.getType())) {
10090             ODRDiagBaseError(FirstRecord->getLocation(),
10091                              FirstBase.getSourceRange(), BaseType)
10092                 << (i + 1) << FirstBase.getType();
10093             ODRDiagBaseNote(SecondRecord->getLocation(),
10094                             SecondBase.getSourceRange(), BaseType)
10095                 << (i + 1) << SecondBase.getType();
10096             break;
10097           }
10098 
10099           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10100             ODRDiagBaseError(FirstRecord->getLocation(),
10101                              FirstBase.getSourceRange(), BaseVirtual)
10102                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10103             ODRDiagBaseNote(SecondRecord->getLocation(),
10104                             SecondBase.getSourceRange(), BaseVirtual)
10105                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10106             break;
10107           }
10108 
10109           if (FirstBase.getAccessSpecifierAsWritten() !=
10110               SecondBase.getAccessSpecifierAsWritten()) {
10111             ODRDiagBaseError(FirstRecord->getLocation(),
10112                              FirstBase.getSourceRange(), BaseAccess)
10113                 << (i + 1) << FirstBase.getType()
10114                 << (int)FirstBase.getAccessSpecifierAsWritten();
10115             ODRDiagBaseNote(SecondRecord->getLocation(),
10116                             SecondBase.getSourceRange(), BaseAccess)
10117                 << (i + 1) << SecondBase.getType()
10118                 << (int)SecondBase.getAccessSpecifierAsWritten();
10119             break;
10120           }
10121         }
10122 
10123         if (i != FirstNumBases) {
10124           Diagnosed = true;
10125           break;
10126         }
10127       }
10128 
10129       const ClassTemplateDecl *FirstTemplate =
10130           FirstRecord->getDescribedClassTemplate();
10131       const ClassTemplateDecl *SecondTemplate =
10132           SecondRecord->getDescribedClassTemplate();
10133 
10134       assert(!FirstTemplate == !SecondTemplate &&
10135              "Both pointers should be null or non-null");
10136 
10137       enum ODRTemplateDifference {
10138         ParamEmptyName,
10139         ParamName,
10140         ParamSingleDefaultArgument,
10141         ParamDifferentDefaultArgument,
10142       };
10143 
10144       if (FirstTemplate && SecondTemplate) {
10145         DeclHashes FirstTemplateHashes;
10146         DeclHashes SecondTemplateHashes;
10147 
10148         auto PopulateTemplateParameterHashs =
10149             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10150                                      const ClassTemplateDecl *TD) {
10151               for (auto *D : TD->getTemplateParameters()->asArray()) {
10152                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10153               }
10154             };
10155 
10156         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10157         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10158 
10159         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10160                "Number of template parameters should be equal.");
10161 
10162         auto FirstIt = FirstTemplateHashes.begin();
10163         auto FirstEnd = FirstTemplateHashes.end();
10164         auto SecondIt = SecondTemplateHashes.begin();
10165         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10166           if (FirstIt->second == SecondIt->second)
10167             continue;
10168 
10169           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10170                                           SourceLocation Loc, SourceRange Range,
10171                                           ODRTemplateDifference DiffType) {
10172             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10173                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10174                    << DiffType;
10175           };
10176           auto ODRDiagTemplateNote = [&SecondModule, this](
10177                                          SourceLocation Loc, SourceRange Range,
10178                                          ODRTemplateDifference DiffType) {
10179             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10180                    << SecondModule << Range << DiffType;
10181           };
10182 
10183           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10184           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10185 
10186           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10187                  "Parameter Decl's should be the same kind.");
10188 
10189           DeclarationName FirstName = FirstDecl->getDeclName();
10190           DeclarationName SecondName = SecondDecl->getDeclName();
10191 
10192           if (FirstName != SecondName) {
10193             const bool FirstNameEmpty =
10194                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10195             const bool SecondNameEmpty =
10196                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10197             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10198                    "Both template parameters cannot be unnamed.");
10199             ODRDiagTemplateError(FirstDecl->getLocation(),
10200                                  FirstDecl->getSourceRange(),
10201                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10202                 << FirstName;
10203             ODRDiagTemplateNote(SecondDecl->getLocation(),
10204                                 SecondDecl->getSourceRange(),
10205                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10206                 << SecondName;
10207             break;
10208           }
10209 
10210           switch (FirstDecl->getKind()) {
10211           default:
10212             llvm_unreachable("Invalid template parameter type.");
10213           case Decl::TemplateTypeParm: {
10214             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10215             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10216             const bool HasFirstDefaultArgument =
10217                 FirstParam->hasDefaultArgument() &&
10218                 !FirstParam->defaultArgumentWasInherited();
10219             const bool HasSecondDefaultArgument =
10220                 SecondParam->hasDefaultArgument() &&
10221                 !SecondParam->defaultArgumentWasInherited();
10222 
10223             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10224               ODRDiagTemplateError(FirstDecl->getLocation(),
10225                                    FirstDecl->getSourceRange(),
10226                                    ParamSingleDefaultArgument)
10227                   << HasFirstDefaultArgument;
10228               ODRDiagTemplateNote(SecondDecl->getLocation(),
10229                                   SecondDecl->getSourceRange(),
10230                                   ParamSingleDefaultArgument)
10231                   << HasSecondDefaultArgument;
10232               break;
10233             }
10234 
10235             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10236                    "Expecting default arguments.");
10237 
10238             ODRDiagTemplateError(FirstDecl->getLocation(),
10239                                  FirstDecl->getSourceRange(),
10240                                  ParamDifferentDefaultArgument);
10241             ODRDiagTemplateNote(SecondDecl->getLocation(),
10242                                 SecondDecl->getSourceRange(),
10243                                 ParamDifferentDefaultArgument);
10244 
10245             break;
10246           }
10247           case Decl::NonTypeTemplateParm: {
10248             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10249             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10250             const bool HasFirstDefaultArgument =
10251                 FirstParam->hasDefaultArgument() &&
10252                 !FirstParam->defaultArgumentWasInherited();
10253             const bool HasSecondDefaultArgument =
10254                 SecondParam->hasDefaultArgument() &&
10255                 !SecondParam->defaultArgumentWasInherited();
10256 
10257             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10258               ODRDiagTemplateError(FirstDecl->getLocation(),
10259                                    FirstDecl->getSourceRange(),
10260                                    ParamSingleDefaultArgument)
10261                   << HasFirstDefaultArgument;
10262               ODRDiagTemplateNote(SecondDecl->getLocation(),
10263                                   SecondDecl->getSourceRange(),
10264                                   ParamSingleDefaultArgument)
10265                   << HasSecondDefaultArgument;
10266               break;
10267             }
10268 
10269             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10270                    "Expecting default arguments.");
10271 
10272             ODRDiagTemplateError(FirstDecl->getLocation(),
10273                                  FirstDecl->getSourceRange(),
10274                                  ParamDifferentDefaultArgument);
10275             ODRDiagTemplateNote(SecondDecl->getLocation(),
10276                                 SecondDecl->getSourceRange(),
10277                                 ParamDifferentDefaultArgument);
10278 
10279             break;
10280           }
10281           case Decl::TemplateTemplateParm: {
10282             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10283             const auto *SecondParam =
10284                 cast<TemplateTemplateParmDecl>(SecondDecl);
10285             const bool HasFirstDefaultArgument =
10286                 FirstParam->hasDefaultArgument() &&
10287                 !FirstParam->defaultArgumentWasInherited();
10288             const bool HasSecondDefaultArgument =
10289                 SecondParam->hasDefaultArgument() &&
10290                 !SecondParam->defaultArgumentWasInherited();
10291 
10292             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10293               ODRDiagTemplateError(FirstDecl->getLocation(),
10294                                    FirstDecl->getSourceRange(),
10295                                    ParamSingleDefaultArgument)
10296                   << HasFirstDefaultArgument;
10297               ODRDiagTemplateNote(SecondDecl->getLocation(),
10298                                   SecondDecl->getSourceRange(),
10299                                   ParamSingleDefaultArgument)
10300                   << HasSecondDefaultArgument;
10301               break;
10302             }
10303 
10304             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10305                    "Expecting default arguments.");
10306 
10307             ODRDiagTemplateError(FirstDecl->getLocation(),
10308                                  FirstDecl->getSourceRange(),
10309                                  ParamDifferentDefaultArgument);
10310             ODRDiagTemplateNote(SecondDecl->getLocation(),
10311                                 SecondDecl->getSourceRange(),
10312                                 ParamDifferentDefaultArgument);
10313 
10314             break;
10315           }
10316           }
10317 
10318           break;
10319         }
10320 
10321         if (FirstIt != FirstEnd) {
10322           Diagnosed = true;
10323           break;
10324         }
10325       }
10326 
10327       DeclHashes FirstHashes;
10328       DeclHashes SecondHashes;
10329       const DeclContext *DC = FirstRecord;
10330       PopulateHashes(FirstHashes, FirstRecord, DC);
10331       PopulateHashes(SecondHashes, SecondRecord, DC);
10332 
10333       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10334       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10335       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10336       Decl *FirstDecl = DR.FirstDecl;
10337       Decl *SecondDecl = DR.SecondDecl;
10338 
10339       if (FirstDiffType == Other || SecondDiffType == Other) {
10340         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10341                               SecondModule);
10342         Diagnosed = true;
10343         break;
10344       }
10345 
10346       if (FirstDiffType != SecondDiffType) {
10347         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10348                             SecondModule);
10349         Diagnosed = true;
10350         break;
10351       }
10352 
10353       assert(FirstDiffType == SecondDiffType);
10354 
10355       switch (FirstDiffType) {
10356       case Other:
10357       case EndOfClass:
10358       case PublicSpecifer:
10359       case PrivateSpecifer:
10360       case ProtectedSpecifer:
10361         llvm_unreachable("Invalid diff type");
10362 
10363       case StaticAssert: {
10364         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10365         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10366 
10367         Expr *FirstExpr = FirstSA->getAssertExpr();
10368         Expr *SecondExpr = SecondSA->getAssertExpr();
10369         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10370         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10371         if (FirstODRHash != SecondODRHash) {
10372           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10373                            FirstExpr->getSourceRange(), StaticAssertCondition);
10374           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10375                           SecondExpr->getSourceRange(), StaticAssertCondition);
10376           Diagnosed = true;
10377           break;
10378         }
10379 
10380         StringLiteral *FirstStr = FirstSA->getMessage();
10381         StringLiteral *SecondStr = SecondSA->getMessage();
10382         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10383         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10384           SourceLocation FirstLoc, SecondLoc;
10385           SourceRange FirstRange, SecondRange;
10386           if (FirstStr) {
10387             FirstLoc = FirstStr->getBeginLoc();
10388             FirstRange = FirstStr->getSourceRange();
10389           } else {
10390             FirstLoc = FirstSA->getBeginLoc();
10391             FirstRange = FirstSA->getSourceRange();
10392           }
10393           if (SecondStr) {
10394             SecondLoc = SecondStr->getBeginLoc();
10395             SecondRange = SecondStr->getSourceRange();
10396           } else {
10397             SecondLoc = SecondSA->getBeginLoc();
10398             SecondRange = SecondSA->getSourceRange();
10399           }
10400           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10401                            StaticAssertOnlyMessage)
10402               << (FirstStr == nullptr);
10403           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10404                           StaticAssertOnlyMessage)
10405               << (SecondStr == nullptr);
10406           Diagnosed = true;
10407           break;
10408         }
10409 
10410         if (FirstStr && SecondStr &&
10411             FirstStr->getString() != SecondStr->getString()) {
10412           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10413                            FirstStr->getSourceRange(), StaticAssertMessage);
10414           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10415                           SecondStr->getSourceRange(), StaticAssertMessage);
10416           Diagnosed = true;
10417           break;
10418         }
10419         break;
10420       }
10421       case Field: {
10422         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10423                                  cast<FieldDecl>(FirstDecl),
10424                                  cast<FieldDecl>(SecondDecl));
10425         break;
10426       }
10427       case CXXMethod: {
10428         enum {
10429           DiagMethod,
10430           DiagConstructor,
10431           DiagDestructor,
10432         } FirstMethodType,
10433             SecondMethodType;
10434         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10435           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10436           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10437           return DiagMethod;
10438         };
10439         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10440         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10441         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10442         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10443         auto FirstName = FirstMethod->getDeclName();
10444         auto SecondName = SecondMethod->getDeclName();
10445         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10446           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10447                            FirstMethod->getSourceRange(), MethodName)
10448               << FirstMethodType << FirstName;
10449           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10450                           SecondMethod->getSourceRange(), MethodName)
10451               << SecondMethodType << SecondName;
10452 
10453           Diagnosed = true;
10454           break;
10455         }
10456 
10457         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10458         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10459         if (FirstDeleted != SecondDeleted) {
10460           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10461                            FirstMethod->getSourceRange(), MethodDeleted)
10462               << FirstMethodType << FirstName << FirstDeleted;
10463 
10464           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10465                           SecondMethod->getSourceRange(), MethodDeleted)
10466               << SecondMethodType << SecondName << SecondDeleted;
10467           Diagnosed = true;
10468           break;
10469         }
10470 
10471         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10472         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10473         if (FirstDefaulted != SecondDefaulted) {
10474           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10475                            FirstMethod->getSourceRange(), MethodDefaulted)
10476               << FirstMethodType << FirstName << FirstDefaulted;
10477 
10478           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10479                           SecondMethod->getSourceRange(), MethodDefaulted)
10480               << SecondMethodType << SecondName << SecondDefaulted;
10481           Diagnosed = true;
10482           break;
10483         }
10484 
10485         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10486         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10487         const bool FirstPure = FirstMethod->isPure();
10488         const bool SecondPure = SecondMethod->isPure();
10489         if ((FirstVirtual || SecondVirtual) &&
10490             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10491           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10492                            FirstMethod->getSourceRange(), MethodVirtual)
10493               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10494           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10495                           SecondMethod->getSourceRange(), MethodVirtual)
10496               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10497           Diagnosed = true;
10498           break;
10499         }
10500 
10501         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10502         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10503         // class needs to be checked instead.
10504         const auto FirstStorage = FirstMethod->getStorageClass();
10505         const auto SecondStorage = SecondMethod->getStorageClass();
10506         const bool FirstStatic = FirstStorage == SC_Static;
10507         const bool SecondStatic = SecondStorage == SC_Static;
10508         if (FirstStatic != SecondStatic) {
10509           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10510                            FirstMethod->getSourceRange(), MethodStatic)
10511               << FirstMethodType << FirstName << FirstStatic;
10512           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10513                           SecondMethod->getSourceRange(), MethodStatic)
10514               << SecondMethodType << SecondName << SecondStatic;
10515           Diagnosed = true;
10516           break;
10517         }
10518 
10519         const bool FirstVolatile = FirstMethod->isVolatile();
10520         const bool SecondVolatile = SecondMethod->isVolatile();
10521         if (FirstVolatile != SecondVolatile) {
10522           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10523                            FirstMethod->getSourceRange(), MethodVolatile)
10524               << FirstMethodType << FirstName << FirstVolatile;
10525           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10526                           SecondMethod->getSourceRange(), MethodVolatile)
10527               << SecondMethodType << SecondName << SecondVolatile;
10528           Diagnosed = true;
10529           break;
10530         }
10531 
10532         const bool FirstConst = FirstMethod->isConst();
10533         const bool SecondConst = SecondMethod->isConst();
10534         if (FirstConst != SecondConst) {
10535           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10536                            FirstMethod->getSourceRange(), MethodConst)
10537               << FirstMethodType << FirstName << FirstConst;
10538           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10539                           SecondMethod->getSourceRange(), MethodConst)
10540               << SecondMethodType << SecondName << SecondConst;
10541           Diagnosed = true;
10542           break;
10543         }
10544 
10545         const bool FirstInline = FirstMethod->isInlineSpecified();
10546         const bool SecondInline = SecondMethod->isInlineSpecified();
10547         if (FirstInline != SecondInline) {
10548           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10549                            FirstMethod->getSourceRange(), MethodInline)
10550               << FirstMethodType << FirstName << FirstInline;
10551           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10552                           SecondMethod->getSourceRange(), MethodInline)
10553               << SecondMethodType << SecondName << SecondInline;
10554           Diagnosed = true;
10555           break;
10556         }
10557 
10558         const unsigned FirstNumParameters = FirstMethod->param_size();
10559         const unsigned SecondNumParameters = SecondMethod->param_size();
10560         if (FirstNumParameters != SecondNumParameters) {
10561           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10562                            FirstMethod->getSourceRange(),
10563                            MethodNumberParameters)
10564               << FirstMethodType << FirstName << FirstNumParameters;
10565           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10566                           SecondMethod->getSourceRange(),
10567                           MethodNumberParameters)
10568               << SecondMethodType << SecondName << SecondNumParameters;
10569           Diagnosed = true;
10570           break;
10571         }
10572 
10573         // Need this status boolean to know when break out of the switch.
10574         bool ParameterMismatch = false;
10575         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10576           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10577           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10578 
10579           QualType FirstParamType = FirstParam->getType();
10580           QualType SecondParamType = SecondParam->getType();
10581           if (FirstParamType != SecondParamType &&
10582               ComputeQualTypeODRHash(FirstParamType) !=
10583                   ComputeQualTypeODRHash(SecondParamType)) {
10584             if (const DecayedType *ParamDecayedType =
10585                     FirstParamType->getAs<DecayedType>()) {
10586               ODRDiagDeclError(
10587                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10588                   FirstMethod->getSourceRange(), MethodParameterType)
10589                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10590                   << true << ParamDecayedType->getOriginalType();
10591             } else {
10592               ODRDiagDeclError(
10593                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10594                   FirstMethod->getSourceRange(), MethodParameterType)
10595                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10596                   << false;
10597             }
10598 
10599             if (const DecayedType *ParamDecayedType =
10600                     SecondParamType->getAs<DecayedType>()) {
10601               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10602                               SecondMethod->getSourceRange(),
10603                               MethodParameterType)
10604                   << SecondMethodType << SecondName << (I + 1)
10605                   << SecondParamType << true
10606                   << ParamDecayedType->getOriginalType();
10607             } else {
10608               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10609                               SecondMethod->getSourceRange(),
10610                               MethodParameterType)
10611                   << SecondMethodType << SecondName << (I + 1)
10612                   << SecondParamType << false;
10613             }
10614             ParameterMismatch = true;
10615             break;
10616           }
10617 
10618           DeclarationName FirstParamName = FirstParam->getDeclName();
10619           DeclarationName SecondParamName = SecondParam->getDeclName();
10620           if (FirstParamName != SecondParamName) {
10621             ODRDiagDeclError(FirstRecord, FirstModule,
10622                              FirstMethod->getLocation(),
10623                              FirstMethod->getSourceRange(), MethodParameterName)
10624                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10625             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10626                             SecondMethod->getSourceRange(), MethodParameterName)
10627                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10628             ParameterMismatch = true;
10629             break;
10630           }
10631 
10632           const Expr *FirstInit = FirstParam->getInit();
10633           const Expr *SecondInit = SecondParam->getInit();
10634           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10635             ODRDiagDeclError(FirstRecord, FirstModule,
10636                              FirstMethod->getLocation(),
10637                              FirstMethod->getSourceRange(),
10638                              MethodParameterSingleDefaultArgument)
10639                 << FirstMethodType << FirstName << (I + 1)
10640                 << (FirstInit == nullptr)
10641                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10642             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10643                             SecondMethod->getSourceRange(),
10644                             MethodParameterSingleDefaultArgument)
10645                 << SecondMethodType << SecondName << (I + 1)
10646                 << (SecondInit == nullptr)
10647                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10648             ParameterMismatch = true;
10649             break;
10650           }
10651 
10652           if (FirstInit && SecondInit &&
10653               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10654             ODRDiagDeclError(FirstRecord, FirstModule,
10655                              FirstMethod->getLocation(),
10656                              FirstMethod->getSourceRange(),
10657                              MethodParameterDifferentDefaultArgument)
10658                 << FirstMethodType << FirstName << (I + 1)
10659                 << FirstInit->getSourceRange();
10660             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10661                             SecondMethod->getSourceRange(),
10662                             MethodParameterDifferentDefaultArgument)
10663                 << SecondMethodType << SecondName << (I + 1)
10664                 << SecondInit->getSourceRange();
10665             ParameterMismatch = true;
10666             break;
10667 
10668           }
10669         }
10670 
10671         if (ParameterMismatch) {
10672           Diagnosed = true;
10673           break;
10674         }
10675 
10676         const auto *FirstTemplateArgs =
10677             FirstMethod->getTemplateSpecializationArgs();
10678         const auto *SecondTemplateArgs =
10679             SecondMethod->getTemplateSpecializationArgs();
10680 
10681         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10682             (!FirstTemplateArgs && SecondTemplateArgs)) {
10683           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10684                            FirstMethod->getSourceRange(),
10685                            MethodNoTemplateArguments)
10686               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10687           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10688                           SecondMethod->getSourceRange(),
10689                           MethodNoTemplateArguments)
10690               << SecondMethodType << SecondName
10691               << (SecondTemplateArgs != nullptr);
10692 
10693           Diagnosed = true;
10694           break;
10695         }
10696 
10697         if (FirstTemplateArgs && SecondTemplateArgs) {
10698           // Remove pack expansions from argument list.
10699           auto ExpandTemplateArgumentList =
10700               [](const TemplateArgumentList *TAL) {
10701                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10702                 for (const TemplateArgument &TA : TAL->asArray()) {
10703                   if (TA.getKind() != TemplateArgument::Pack) {
10704                     ExpandedList.push_back(&TA);
10705                     continue;
10706                   }
10707                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10708                     ExpandedList.push_back(&PackTA);
10709                   }
10710                 }
10711                 return ExpandedList;
10712               };
10713           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10714               ExpandTemplateArgumentList(FirstTemplateArgs);
10715           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10716               ExpandTemplateArgumentList(SecondTemplateArgs);
10717 
10718           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10719             ODRDiagDeclError(FirstRecord, FirstModule,
10720                              FirstMethod->getLocation(),
10721                              FirstMethod->getSourceRange(),
10722                              MethodDifferentNumberTemplateArguments)
10723                 << FirstMethodType << FirstName
10724                 << (unsigned)FirstExpandedList.size();
10725             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10726                             SecondMethod->getSourceRange(),
10727                             MethodDifferentNumberTemplateArguments)
10728                 << SecondMethodType << SecondName
10729                 << (unsigned)SecondExpandedList.size();
10730 
10731             Diagnosed = true;
10732             break;
10733           }
10734 
10735           bool TemplateArgumentMismatch = false;
10736           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10737             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10738                                    &SecondTA = *SecondExpandedList[i];
10739             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10740                 ComputeTemplateArgumentODRHash(SecondTA)) {
10741               continue;
10742             }
10743 
10744             ODRDiagDeclError(
10745                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10746                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10747                 << FirstMethodType << FirstName << FirstTA << i + 1;
10748             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10749                             SecondMethod->getSourceRange(),
10750                             MethodDifferentTemplateArgument)
10751                 << SecondMethodType << SecondName << SecondTA << i + 1;
10752 
10753             TemplateArgumentMismatch = true;
10754             break;
10755           }
10756 
10757           if (TemplateArgumentMismatch) {
10758             Diagnosed = true;
10759             break;
10760           }
10761         }
10762 
10763         // Compute the hash of the method as if it has no body.
10764         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10765           Hash.clear();
10766           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10767           return Hash.CalculateHash();
10768         };
10769 
10770         // Compare the hash generated to the hash stored.  A difference means
10771         // that a body was present in the original source.  Due to merging,
10772         // the stardard way of detecting a body will not work.
10773         const bool HasFirstBody =
10774             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10775         const bool HasSecondBody =
10776             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10777 
10778         if (HasFirstBody != HasSecondBody) {
10779           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10780                            FirstMethod->getSourceRange(), MethodSingleBody)
10781               << FirstMethodType << FirstName << HasFirstBody;
10782           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10783                           SecondMethod->getSourceRange(), MethodSingleBody)
10784               << SecondMethodType << SecondName << HasSecondBody;
10785           Diagnosed = true;
10786           break;
10787         }
10788 
10789         if (HasFirstBody && HasSecondBody) {
10790           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10791                            FirstMethod->getSourceRange(), MethodDifferentBody)
10792               << FirstMethodType << FirstName;
10793           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10794                           SecondMethod->getSourceRange(), MethodDifferentBody)
10795               << SecondMethodType << SecondName;
10796           Diagnosed = true;
10797           break;
10798         }
10799 
10800         break;
10801       }
10802       case TypeAlias:
10803       case TypeDef: {
10804         Diagnosed = ODRDiagTypeDefOrAlias(
10805             FirstRecord, FirstModule, SecondModule,
10806             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10807             FirstDiffType == TypeAlias);
10808         break;
10809       }
10810       case Var: {
10811         Diagnosed =
10812             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10813                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10814         break;
10815       }
10816       case Friend: {
10817         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10818         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10819 
10820         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10821         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10822 
10823         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10824         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10825 
10826         if (FirstND && SecondND) {
10827           ODRDiagDeclError(FirstRecord, FirstModule,
10828                            FirstFriend->getFriendLoc(),
10829                            FirstFriend->getSourceRange(), FriendFunction)
10830               << FirstND;
10831           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10832                           SecondFriend->getSourceRange(), FriendFunction)
10833               << SecondND;
10834 
10835           Diagnosed = true;
10836           break;
10837         }
10838 
10839         if (FirstTSI && SecondTSI) {
10840           QualType FirstFriendType = FirstTSI->getType();
10841           QualType SecondFriendType = SecondTSI->getType();
10842           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10843                  ComputeQualTypeODRHash(SecondFriendType));
10844           ODRDiagDeclError(FirstRecord, FirstModule,
10845                            FirstFriend->getFriendLoc(),
10846                            FirstFriend->getSourceRange(), FriendType)
10847               << FirstFriendType;
10848           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10849                           SecondFriend->getSourceRange(), FriendType)
10850               << SecondFriendType;
10851           Diagnosed = true;
10852           break;
10853         }
10854 
10855         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10856                          FirstFriend->getSourceRange(), FriendTypeFunction)
10857             << (FirstTSI == nullptr);
10858         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10859                         SecondFriend->getSourceRange(), FriendTypeFunction)
10860             << (SecondTSI == nullptr);
10861 
10862         Diagnosed = true;
10863         break;
10864       }
10865       case FunctionTemplate: {
10866         FunctionTemplateDecl *FirstTemplate =
10867             cast<FunctionTemplateDecl>(FirstDecl);
10868         FunctionTemplateDecl *SecondTemplate =
10869             cast<FunctionTemplateDecl>(SecondDecl);
10870 
10871         TemplateParameterList *FirstTPL =
10872             FirstTemplate->getTemplateParameters();
10873         TemplateParameterList *SecondTPL =
10874             SecondTemplate->getTemplateParameters();
10875 
10876         if (FirstTPL->size() != SecondTPL->size()) {
10877           ODRDiagDeclError(FirstRecord, FirstModule,
10878                            FirstTemplate->getLocation(),
10879                            FirstTemplate->getSourceRange(),
10880                            FunctionTemplateDifferentNumberParameters)
10881               << FirstTemplate << FirstTPL->size();
10882           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10883                           SecondTemplate->getSourceRange(),
10884                           FunctionTemplateDifferentNumberParameters)
10885               << SecondTemplate << SecondTPL->size();
10886 
10887           Diagnosed = true;
10888           break;
10889         }
10890 
10891         bool ParameterMismatch = false;
10892         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10893           NamedDecl *FirstParam = FirstTPL->getParam(i);
10894           NamedDecl *SecondParam = SecondTPL->getParam(i);
10895 
10896           if (FirstParam->getKind() != SecondParam->getKind()) {
10897             enum {
10898               TemplateTypeParameter,
10899               NonTypeTemplateParameter,
10900               TemplateTemplateParameter,
10901             };
10902             auto GetParamType = [](NamedDecl *D) {
10903               switch (D->getKind()) {
10904                 default:
10905                   llvm_unreachable("Unexpected template parameter type");
10906                 case Decl::TemplateTypeParm:
10907                   return TemplateTypeParameter;
10908                 case Decl::NonTypeTemplateParm:
10909                   return NonTypeTemplateParameter;
10910                 case Decl::TemplateTemplateParm:
10911                   return TemplateTemplateParameter;
10912               }
10913             };
10914 
10915             ODRDiagDeclError(FirstRecord, FirstModule,
10916                              FirstTemplate->getLocation(),
10917                              FirstTemplate->getSourceRange(),
10918                              FunctionTemplateParameterDifferentKind)
10919                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10920             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10921                             SecondTemplate->getSourceRange(),
10922                             FunctionTemplateParameterDifferentKind)
10923                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10924 
10925             ParameterMismatch = true;
10926             break;
10927           }
10928 
10929           if (FirstParam->getName() != SecondParam->getName()) {
10930             ODRDiagDeclError(
10931                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10932                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10933                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10934                 << FirstParam;
10935             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10936                             SecondTemplate->getSourceRange(),
10937                             FunctionTemplateParameterName)
10938                 << SecondTemplate << (i + 1)
10939                 << (bool)SecondParam->getIdentifier() << SecondParam;
10940             ParameterMismatch = true;
10941             break;
10942           }
10943 
10944           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10945               isa<TemplateTypeParmDecl>(SecondParam)) {
10946             TemplateTypeParmDecl *FirstTTPD =
10947                 cast<TemplateTypeParmDecl>(FirstParam);
10948             TemplateTypeParmDecl *SecondTTPD =
10949                 cast<TemplateTypeParmDecl>(SecondParam);
10950             bool HasFirstDefaultArgument =
10951                 FirstTTPD->hasDefaultArgument() &&
10952                 !FirstTTPD->defaultArgumentWasInherited();
10953             bool HasSecondDefaultArgument =
10954                 SecondTTPD->hasDefaultArgument() &&
10955                 !SecondTTPD->defaultArgumentWasInherited();
10956             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10957               ODRDiagDeclError(FirstRecord, FirstModule,
10958                                FirstTemplate->getLocation(),
10959                                FirstTemplate->getSourceRange(),
10960                                FunctionTemplateParameterSingleDefaultArgument)
10961                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10962               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10963                               SecondTemplate->getSourceRange(),
10964                               FunctionTemplateParameterSingleDefaultArgument)
10965                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10966               ParameterMismatch = true;
10967               break;
10968             }
10969 
10970             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10971               QualType FirstType = FirstTTPD->getDefaultArgument();
10972               QualType SecondType = SecondTTPD->getDefaultArgument();
10973               if (ComputeQualTypeODRHash(FirstType) !=
10974                   ComputeQualTypeODRHash(SecondType)) {
10975                 ODRDiagDeclError(
10976                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10977                     FirstTemplate->getSourceRange(),
10978                     FunctionTemplateParameterDifferentDefaultArgument)
10979                     << FirstTemplate << (i + 1) << FirstType;
10980                 ODRDiagDeclNote(
10981                     SecondModule, SecondTemplate->getLocation(),
10982                     SecondTemplate->getSourceRange(),
10983                     FunctionTemplateParameterDifferentDefaultArgument)
10984                     << SecondTemplate << (i + 1) << SecondType;
10985                 ParameterMismatch = true;
10986                 break;
10987               }
10988             }
10989 
10990             if (FirstTTPD->isParameterPack() !=
10991                 SecondTTPD->isParameterPack()) {
10992               ODRDiagDeclError(FirstRecord, FirstModule,
10993                                FirstTemplate->getLocation(),
10994                                FirstTemplate->getSourceRange(),
10995                                FunctionTemplatePackParameter)
10996                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10997               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10998                               SecondTemplate->getSourceRange(),
10999                               FunctionTemplatePackParameter)
11000                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11001               ParameterMismatch = true;
11002               break;
11003             }
11004           }
11005 
11006           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11007               isa<TemplateTemplateParmDecl>(SecondParam)) {
11008             TemplateTemplateParmDecl *FirstTTPD =
11009                 cast<TemplateTemplateParmDecl>(FirstParam);
11010             TemplateTemplateParmDecl *SecondTTPD =
11011                 cast<TemplateTemplateParmDecl>(SecondParam);
11012 
11013             TemplateParameterList *FirstTPL =
11014                 FirstTTPD->getTemplateParameters();
11015             TemplateParameterList *SecondTPL =
11016                 SecondTTPD->getTemplateParameters();
11017 
11018             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11019                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11020               ODRDiagDeclError(FirstRecord, FirstModule,
11021                                FirstTemplate->getLocation(),
11022                                FirstTemplate->getSourceRange(),
11023                                FunctionTemplateParameterDifferentType)
11024                   << FirstTemplate << (i + 1);
11025               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11026                               SecondTemplate->getSourceRange(),
11027                               FunctionTemplateParameterDifferentType)
11028                   << SecondTemplate << (i + 1);
11029               ParameterMismatch = true;
11030               break;
11031             }
11032 
11033             bool HasFirstDefaultArgument =
11034                 FirstTTPD->hasDefaultArgument() &&
11035                 !FirstTTPD->defaultArgumentWasInherited();
11036             bool HasSecondDefaultArgument =
11037                 SecondTTPD->hasDefaultArgument() &&
11038                 !SecondTTPD->defaultArgumentWasInherited();
11039             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11040               ODRDiagDeclError(FirstRecord, FirstModule,
11041                                FirstTemplate->getLocation(),
11042                                FirstTemplate->getSourceRange(),
11043                                FunctionTemplateParameterSingleDefaultArgument)
11044                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11045               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11046                               SecondTemplate->getSourceRange(),
11047                               FunctionTemplateParameterSingleDefaultArgument)
11048                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11049               ParameterMismatch = true;
11050               break;
11051             }
11052 
11053             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11054               TemplateArgument FirstTA =
11055                   FirstTTPD->getDefaultArgument().getArgument();
11056               TemplateArgument SecondTA =
11057                   SecondTTPD->getDefaultArgument().getArgument();
11058               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11059                   ComputeTemplateArgumentODRHash(SecondTA)) {
11060                 ODRDiagDeclError(
11061                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11062                     FirstTemplate->getSourceRange(),
11063                     FunctionTemplateParameterDifferentDefaultArgument)
11064                     << FirstTemplate << (i + 1) << FirstTA;
11065                 ODRDiagDeclNote(
11066                     SecondModule, SecondTemplate->getLocation(),
11067                     SecondTemplate->getSourceRange(),
11068                     FunctionTemplateParameterDifferentDefaultArgument)
11069                     << SecondTemplate << (i + 1) << SecondTA;
11070                 ParameterMismatch = true;
11071                 break;
11072               }
11073             }
11074 
11075             if (FirstTTPD->isParameterPack() !=
11076                 SecondTTPD->isParameterPack()) {
11077               ODRDiagDeclError(FirstRecord, FirstModule,
11078                                FirstTemplate->getLocation(),
11079                                FirstTemplate->getSourceRange(),
11080                                FunctionTemplatePackParameter)
11081                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11082               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11083                               SecondTemplate->getSourceRange(),
11084                               FunctionTemplatePackParameter)
11085                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11086               ParameterMismatch = true;
11087               break;
11088             }
11089           }
11090 
11091           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11092               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11093             NonTypeTemplateParmDecl *FirstNTTPD =
11094                 cast<NonTypeTemplateParmDecl>(FirstParam);
11095             NonTypeTemplateParmDecl *SecondNTTPD =
11096                 cast<NonTypeTemplateParmDecl>(SecondParam);
11097 
11098             QualType FirstType = FirstNTTPD->getType();
11099             QualType SecondType = SecondNTTPD->getType();
11100             if (ComputeQualTypeODRHash(FirstType) !=
11101                 ComputeQualTypeODRHash(SecondType)) {
11102               ODRDiagDeclError(FirstRecord, FirstModule,
11103                                FirstTemplate->getLocation(),
11104                                FirstTemplate->getSourceRange(),
11105                                FunctionTemplateParameterDifferentType)
11106                   << FirstTemplate << (i + 1);
11107               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11108                               SecondTemplate->getSourceRange(),
11109                               FunctionTemplateParameterDifferentType)
11110                   << SecondTemplate << (i + 1);
11111               ParameterMismatch = true;
11112               break;
11113             }
11114 
11115             bool HasFirstDefaultArgument =
11116                 FirstNTTPD->hasDefaultArgument() &&
11117                 !FirstNTTPD->defaultArgumentWasInherited();
11118             bool HasSecondDefaultArgument =
11119                 SecondNTTPD->hasDefaultArgument() &&
11120                 !SecondNTTPD->defaultArgumentWasInherited();
11121             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11122               ODRDiagDeclError(FirstRecord, FirstModule,
11123                                FirstTemplate->getLocation(),
11124                                FirstTemplate->getSourceRange(),
11125                                FunctionTemplateParameterSingleDefaultArgument)
11126                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11127               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11128                               SecondTemplate->getSourceRange(),
11129                               FunctionTemplateParameterSingleDefaultArgument)
11130                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11131               ParameterMismatch = true;
11132               break;
11133             }
11134 
11135             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11136               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11137               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11138               if (ComputeODRHash(FirstDefaultArgument) !=
11139                   ComputeODRHash(SecondDefaultArgument)) {
11140                 ODRDiagDeclError(
11141                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11142                     FirstTemplate->getSourceRange(),
11143                     FunctionTemplateParameterDifferentDefaultArgument)
11144                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11145                 ODRDiagDeclNote(
11146                     SecondModule, SecondTemplate->getLocation(),
11147                     SecondTemplate->getSourceRange(),
11148                     FunctionTemplateParameterDifferentDefaultArgument)
11149                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11150                 ParameterMismatch = true;
11151                 break;
11152               }
11153             }
11154 
11155             if (FirstNTTPD->isParameterPack() !=
11156                 SecondNTTPD->isParameterPack()) {
11157               ODRDiagDeclError(FirstRecord, FirstModule,
11158                                FirstTemplate->getLocation(),
11159                                FirstTemplate->getSourceRange(),
11160                                FunctionTemplatePackParameter)
11161                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11162               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11163                               SecondTemplate->getSourceRange(),
11164                               FunctionTemplatePackParameter)
11165                   << SecondTemplate << (i + 1)
11166                   << SecondNTTPD->isParameterPack();
11167               ParameterMismatch = true;
11168               break;
11169             }
11170           }
11171         }
11172 
11173         if (ParameterMismatch) {
11174           Diagnosed = true;
11175           break;
11176         }
11177 
11178         break;
11179       }
11180       }
11181 
11182       if (Diagnosed)
11183         continue;
11184 
11185       Diag(FirstDecl->getLocation(),
11186            diag::err_module_odr_violation_mismatch_decl_unknown)
11187           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11188           << FirstDecl->getSourceRange();
11189       Diag(SecondDecl->getLocation(),
11190            diag::note_module_odr_violation_mismatch_decl_unknown)
11191           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11192       Diagnosed = true;
11193     }
11194 
11195     if (!Diagnosed) {
11196       // All definitions are updates to the same declaration. This happens if a
11197       // module instantiates the declaration of a class template specialization
11198       // and two or more other modules instantiate its definition.
11199       //
11200       // FIXME: Indicate which modules had instantiations of this definition.
11201       // FIXME: How can this even happen?
11202       Diag(Merge.first->getLocation(),
11203            diag::err_module_odr_violation_different_instantiations)
11204         << Merge.first;
11205     }
11206   }
11207 
11208   // Issue ODR failures diagnostics for functions.
11209   for (auto &Merge : FunctionOdrMergeFailures) {
11210     enum ODRFunctionDifference {
11211       ReturnType,
11212       ParameterName,
11213       ParameterType,
11214       ParameterSingleDefaultArgument,
11215       ParameterDifferentDefaultArgument,
11216       FunctionBody,
11217     };
11218 
11219     FunctionDecl *FirstFunction = Merge.first;
11220     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11221 
11222     bool Diagnosed = false;
11223     for (auto &SecondFunction : Merge.second) {
11224 
11225       if (FirstFunction == SecondFunction)
11226         continue;
11227 
11228       std::string SecondModule =
11229           getOwningModuleNameForDiagnostic(SecondFunction);
11230 
11231       auto ODRDiagError = [FirstFunction, &FirstModule,
11232                            this](SourceLocation Loc, SourceRange Range,
11233                                  ODRFunctionDifference DiffType) {
11234         return Diag(Loc, diag::err_module_odr_violation_function)
11235                << FirstFunction << FirstModule.empty() << FirstModule << Range
11236                << DiffType;
11237       };
11238       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11239                                                SourceRange Range,
11240                                                ODRFunctionDifference DiffType) {
11241         return Diag(Loc, diag::note_module_odr_violation_function)
11242                << SecondModule << Range << DiffType;
11243       };
11244 
11245       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11246           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11247         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11248                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11249             << FirstFunction->getReturnType();
11250         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11251                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11252             << SecondFunction->getReturnType();
11253         Diagnosed = true;
11254         break;
11255       }
11256 
11257       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11258              "Merged functions with different number of parameters");
11259 
11260       auto ParamSize = FirstFunction->param_size();
11261       bool ParameterMismatch = false;
11262       for (unsigned I = 0; I < ParamSize; ++I) {
11263         auto *FirstParam = FirstFunction->getParamDecl(I);
11264         auto *SecondParam = SecondFunction->getParamDecl(I);
11265 
11266         assert(getContext().hasSameType(FirstParam->getType(),
11267                                       SecondParam->getType()) &&
11268                "Merged function has different parameter types.");
11269 
11270         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11271           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11272                        ParameterName)
11273               << I + 1 << FirstParam->getDeclName();
11274           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11275                       ParameterName)
11276               << I + 1 << SecondParam->getDeclName();
11277           ParameterMismatch = true;
11278           break;
11279         };
11280 
11281         QualType FirstParamType = FirstParam->getType();
11282         QualType SecondParamType = SecondParam->getType();
11283         if (FirstParamType != SecondParamType &&
11284             ComputeQualTypeODRHash(FirstParamType) !=
11285                 ComputeQualTypeODRHash(SecondParamType)) {
11286           if (const DecayedType *ParamDecayedType =
11287                   FirstParamType->getAs<DecayedType>()) {
11288             ODRDiagError(FirstParam->getLocation(),
11289                          FirstParam->getSourceRange(), ParameterType)
11290                 << (I + 1) << FirstParamType << true
11291                 << ParamDecayedType->getOriginalType();
11292           } else {
11293             ODRDiagError(FirstParam->getLocation(),
11294                          FirstParam->getSourceRange(), ParameterType)
11295                 << (I + 1) << FirstParamType << false;
11296           }
11297 
11298           if (const DecayedType *ParamDecayedType =
11299                   SecondParamType->getAs<DecayedType>()) {
11300             ODRDiagNote(SecondParam->getLocation(),
11301                         SecondParam->getSourceRange(), ParameterType)
11302                 << (I + 1) << SecondParamType << true
11303                 << ParamDecayedType->getOriginalType();
11304           } else {
11305             ODRDiagNote(SecondParam->getLocation(),
11306                         SecondParam->getSourceRange(), ParameterType)
11307                 << (I + 1) << SecondParamType << false;
11308           }
11309           ParameterMismatch = true;
11310           break;
11311         }
11312 
11313         const Expr *FirstInit = FirstParam->getInit();
11314         const Expr *SecondInit = SecondParam->getInit();
11315         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11316           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11317                        ParameterSingleDefaultArgument)
11318               << (I + 1) << (FirstInit == nullptr)
11319               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11320           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11321                       ParameterSingleDefaultArgument)
11322               << (I + 1) << (SecondInit == nullptr)
11323               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11324           ParameterMismatch = true;
11325           break;
11326         }
11327 
11328         if (FirstInit && SecondInit &&
11329             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11330           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11331                        ParameterDifferentDefaultArgument)
11332               << (I + 1) << FirstInit->getSourceRange();
11333           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11334                       ParameterDifferentDefaultArgument)
11335               << (I + 1) << SecondInit->getSourceRange();
11336           ParameterMismatch = true;
11337           break;
11338         }
11339 
11340         assert(ComputeSubDeclODRHash(FirstParam) ==
11341                    ComputeSubDeclODRHash(SecondParam) &&
11342                "Undiagnosed parameter difference.");
11343       }
11344 
11345       if (ParameterMismatch) {
11346         Diagnosed = true;
11347         break;
11348       }
11349 
11350       // If no error has been generated before now, assume the problem is in
11351       // the body and generate a message.
11352       ODRDiagError(FirstFunction->getLocation(),
11353                    FirstFunction->getSourceRange(), FunctionBody);
11354       ODRDiagNote(SecondFunction->getLocation(),
11355                   SecondFunction->getSourceRange(), FunctionBody);
11356       Diagnosed = true;
11357       break;
11358     }
11359     (void)Diagnosed;
11360     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11361   }
11362 
11363   // Issue ODR failures diagnostics for enums.
11364   for (auto &Merge : EnumOdrMergeFailures) {
11365     enum ODREnumDifference {
11366       SingleScopedEnum,
11367       EnumTagKeywordMismatch,
11368       SingleSpecifiedType,
11369       DifferentSpecifiedTypes,
11370       DifferentNumberEnumConstants,
11371       EnumConstantName,
11372       EnumConstantSingleInitilizer,
11373       EnumConstantDifferentInitilizer,
11374     };
11375 
11376     // If we've already pointed out a specific problem with this enum, don't
11377     // bother issuing a general "something's different" diagnostic.
11378     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11379       continue;
11380 
11381     EnumDecl *FirstEnum = Merge.first;
11382     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11383 
11384     using DeclHashes =
11385         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11386     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11387                               DeclHashes &Hashes, EnumDecl *Enum) {
11388       for (auto *D : Enum->decls()) {
11389         // Due to decl merging, the first EnumDecl is the parent of
11390         // Decls in both records.
11391         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11392           continue;
11393         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11394         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11395                             ComputeSubDeclODRHash(D));
11396       }
11397     };
11398     DeclHashes FirstHashes;
11399     PopulateHashes(FirstHashes, FirstEnum);
11400     bool Diagnosed = false;
11401     for (auto &SecondEnum : Merge.second) {
11402 
11403       if (FirstEnum == SecondEnum)
11404         continue;
11405 
11406       std::string SecondModule =
11407           getOwningModuleNameForDiagnostic(SecondEnum);
11408 
11409       auto ODRDiagError = [FirstEnum, &FirstModule,
11410                            this](SourceLocation Loc, SourceRange Range,
11411                                  ODREnumDifference DiffType) {
11412         return Diag(Loc, diag::err_module_odr_violation_enum)
11413                << FirstEnum << FirstModule.empty() << FirstModule << Range
11414                << DiffType;
11415       };
11416       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11417                                                SourceRange Range,
11418                                                ODREnumDifference DiffType) {
11419         return Diag(Loc, diag::note_module_odr_violation_enum)
11420                << SecondModule << Range << DiffType;
11421       };
11422 
11423       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11424         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11425                      SingleScopedEnum)
11426             << FirstEnum->isScoped();
11427         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11428                     SingleScopedEnum)
11429             << SecondEnum->isScoped();
11430         Diagnosed = true;
11431         continue;
11432       }
11433 
11434       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11435         if (FirstEnum->isScopedUsingClassTag() !=
11436             SecondEnum->isScopedUsingClassTag()) {
11437           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11438                        EnumTagKeywordMismatch)
11439               << FirstEnum->isScopedUsingClassTag();
11440           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11441                       EnumTagKeywordMismatch)
11442               << SecondEnum->isScopedUsingClassTag();
11443           Diagnosed = true;
11444           continue;
11445         }
11446       }
11447 
11448       QualType FirstUnderlyingType =
11449           FirstEnum->getIntegerTypeSourceInfo()
11450               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11451               : QualType();
11452       QualType SecondUnderlyingType =
11453           SecondEnum->getIntegerTypeSourceInfo()
11454               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11455               : QualType();
11456       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11457           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11458                        SingleSpecifiedType)
11459               << !FirstUnderlyingType.isNull();
11460           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11461                       SingleSpecifiedType)
11462               << !SecondUnderlyingType.isNull();
11463           Diagnosed = true;
11464           continue;
11465       }
11466 
11467       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11468         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11469             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11470           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11471                        DifferentSpecifiedTypes)
11472               << FirstUnderlyingType;
11473           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11474                       DifferentSpecifiedTypes)
11475               << SecondUnderlyingType;
11476           Diagnosed = true;
11477           continue;
11478         }
11479       }
11480 
11481       DeclHashes SecondHashes;
11482       PopulateHashes(SecondHashes, SecondEnum);
11483 
11484       if (FirstHashes.size() != SecondHashes.size()) {
11485         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11486                      DifferentNumberEnumConstants)
11487             << (int)FirstHashes.size();
11488         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11489                     DifferentNumberEnumConstants)
11490             << (int)SecondHashes.size();
11491         Diagnosed = true;
11492         continue;
11493       }
11494 
11495       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11496         if (FirstHashes[I].second == SecondHashes[I].second)
11497           continue;
11498         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11499         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11500 
11501         if (FirstEnumConstant->getDeclName() !=
11502             SecondEnumConstant->getDeclName()) {
11503 
11504           ODRDiagError(FirstEnumConstant->getLocation(),
11505                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11506               << I + 1 << FirstEnumConstant;
11507           ODRDiagNote(SecondEnumConstant->getLocation(),
11508                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11509               << I + 1 << SecondEnumConstant;
11510           Diagnosed = true;
11511           break;
11512         }
11513 
11514         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11515         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11516         if (!FirstInit && !SecondInit)
11517           continue;
11518 
11519         if (!FirstInit || !SecondInit) {
11520           ODRDiagError(FirstEnumConstant->getLocation(),
11521                        FirstEnumConstant->getSourceRange(),
11522                        EnumConstantSingleInitilizer)
11523               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11524           ODRDiagNote(SecondEnumConstant->getLocation(),
11525                       SecondEnumConstant->getSourceRange(),
11526                       EnumConstantSingleInitilizer)
11527               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11528           Diagnosed = true;
11529           break;
11530         }
11531 
11532         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11533           ODRDiagError(FirstEnumConstant->getLocation(),
11534                        FirstEnumConstant->getSourceRange(),
11535                        EnumConstantDifferentInitilizer)
11536               << I + 1 << FirstEnumConstant;
11537           ODRDiagNote(SecondEnumConstant->getLocation(),
11538                       SecondEnumConstant->getSourceRange(),
11539                       EnumConstantDifferentInitilizer)
11540               << I + 1 << SecondEnumConstant;
11541           Diagnosed = true;
11542           break;
11543         }
11544       }
11545     }
11546 
11547     (void)Diagnosed;
11548     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11549   }
11550 }
11551 
11552 void ASTReader::StartedDeserializing() {
11553   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11554     ReadTimer->startTimer();
11555 }
11556 
11557 void ASTReader::FinishedDeserializing() {
11558   assert(NumCurrentElementsDeserializing &&
11559          "FinishedDeserializing not paired with StartedDeserializing");
11560   if (NumCurrentElementsDeserializing == 1) {
11561     // We decrease NumCurrentElementsDeserializing only after pending actions
11562     // are finished, to avoid recursively re-calling finishPendingActions().
11563     finishPendingActions();
11564   }
11565   --NumCurrentElementsDeserializing;
11566 
11567   if (NumCurrentElementsDeserializing == 0) {
11568     // Propagate exception specification and deduced type updates along
11569     // redeclaration chains.
11570     //
11571     // We do this now rather than in finishPendingActions because we want to
11572     // be able to walk the complete redeclaration chains of the updated decls.
11573     while (!PendingExceptionSpecUpdates.empty() ||
11574            !PendingDeducedTypeUpdates.empty()) {
11575       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11576       PendingExceptionSpecUpdates.clear();
11577       for (auto Update : ESUpdates) {
11578         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11579         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11580         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11581         if (auto *Listener = getContext().getASTMutationListener())
11582           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11583         for (auto *Redecl : Update.second->redecls())
11584           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11585       }
11586 
11587       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11588       PendingDeducedTypeUpdates.clear();
11589       for (auto Update : DTUpdates) {
11590         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11591         // FIXME: If the return type is already deduced, check that it matches.
11592         getContext().adjustDeducedFunctionResultType(Update.first,
11593                                                      Update.second);
11594       }
11595     }
11596 
11597     if (ReadTimer)
11598       ReadTimer->stopTimer();
11599 
11600     diagnoseOdrViolations();
11601 
11602     // We are not in recursive loading, so it's safe to pass the "interesting"
11603     // decls to the consumer.
11604     if (Consumer)
11605       PassInterestingDeclsToConsumer();
11606   }
11607 }
11608 
11609 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11610   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11611     // Remove any fake results before adding any real ones.
11612     auto It = PendingFakeLookupResults.find(II);
11613     if (It != PendingFakeLookupResults.end()) {
11614       for (auto *ND : It->second)
11615         SemaObj->IdResolver.RemoveDecl(ND);
11616       // FIXME: this works around module+PCH performance issue.
11617       // Rather than erase the result from the map, which is O(n), just clear
11618       // the vector of NamedDecls.
11619       It->second.clear();
11620     }
11621   }
11622 
11623   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11624     SemaObj->TUScope->AddDecl(D);
11625   } else if (SemaObj->TUScope) {
11626     // Adding the decl to IdResolver may have failed because it was already in
11627     // (even though it was not added in scope). If it is already in, make sure
11628     // it gets in the scope as well.
11629     if (std::find(SemaObj->IdResolver.begin(Name),
11630                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11631       SemaObj->TUScope->AddDecl(D);
11632   }
11633 }
11634 
11635 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11636                      ASTContext *Context,
11637                      const PCHContainerReader &PCHContainerRdr,
11638                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11639                      StringRef isysroot,
11640                      DisableValidationForModuleKind DisableValidationKind,
11641                      bool AllowASTWithCompilerErrors,
11642                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11643                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11644                      std::unique_ptr<llvm::Timer> ReadTimer)
11645     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11646                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11647                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11648       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11649       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11650       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11651                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11652       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11653       DisableValidationKind(DisableValidationKind),
11654       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11655       AllowConfigurationMismatch(AllowConfigurationMismatch),
11656       ValidateSystemInputs(ValidateSystemInputs),
11657       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11658       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11659   SourceMgr.setExternalSLocEntrySource(this);
11660 
11661   for (const auto &Ext : Extensions) {
11662     auto BlockName = Ext->getExtensionMetadata().BlockName;
11663     auto Known = ModuleFileExtensions.find(BlockName);
11664     if (Known != ModuleFileExtensions.end()) {
11665       Diags.Report(diag::warn_duplicate_module_file_extension)
11666         << BlockName;
11667       continue;
11668     }
11669 
11670     ModuleFileExtensions.insert({BlockName, Ext});
11671   }
11672 }
11673 
11674 ASTReader::~ASTReader() {
11675   if (OwnsDeserializationListener)
11676     delete DeserializationListener;
11677 }
11678 
11679 IdentifierResolver &ASTReader::getIdResolver() {
11680   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11681 }
11682 
11683 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11684                                                unsigned AbbrevID) {
11685   Idx = 0;
11686   Record.clear();
11687   return Cursor.readRecord(AbbrevID, Record);
11688 }
11689 //===----------------------------------------------------------------------===//
11690 //// OMPClauseReader implementation
11691 ////===----------------------------------------------------------------------===//
11692 
11693 // This has to be in namespace clang because it's friended by all
11694 // of the OMP clauses.
11695 namespace clang {
11696 
11697 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11698   ASTRecordReader &Record;
11699   ASTContext &Context;
11700 
11701 public:
11702   OMPClauseReader(ASTRecordReader &Record)
11703       : Record(Record), Context(Record.getContext()) {}
11704 #define GEN_CLANG_CLAUSE_CLASS
11705 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11706 #include "llvm/Frontend/OpenMP/OMP.inc"
11707   OMPClause *readClause();
11708   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11709   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11710 };
11711 
11712 } // end namespace clang
11713 
11714 OMPClause *ASTRecordReader::readOMPClause() {
11715   return OMPClauseReader(*this).readClause();
11716 }
11717 
11718 OMPClause *OMPClauseReader::readClause() {
11719   OMPClause *C = nullptr;
11720   switch (llvm::omp::Clause(Record.readInt())) {
11721   case llvm::omp::OMPC_if:
11722     C = new (Context) OMPIfClause();
11723     break;
11724   case llvm::omp::OMPC_final:
11725     C = new (Context) OMPFinalClause();
11726     break;
11727   case llvm::omp::OMPC_num_threads:
11728     C = new (Context) OMPNumThreadsClause();
11729     break;
11730   case llvm::omp::OMPC_safelen:
11731     C = new (Context) OMPSafelenClause();
11732     break;
11733   case llvm::omp::OMPC_simdlen:
11734     C = new (Context) OMPSimdlenClause();
11735     break;
11736   case llvm::omp::OMPC_sizes: {
11737     unsigned NumSizes = Record.readInt();
11738     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11739     break;
11740   }
11741   case llvm::omp::OMPC_full:
11742     C = OMPFullClause::CreateEmpty(Context);
11743     break;
11744   case llvm::omp::OMPC_partial:
11745     C = OMPPartialClause::CreateEmpty(Context);
11746     break;
11747   case llvm::omp::OMPC_allocator:
11748     C = new (Context) OMPAllocatorClause();
11749     break;
11750   case llvm::omp::OMPC_collapse:
11751     C = new (Context) OMPCollapseClause();
11752     break;
11753   case llvm::omp::OMPC_default:
11754     C = new (Context) OMPDefaultClause();
11755     break;
11756   case llvm::omp::OMPC_proc_bind:
11757     C = new (Context) OMPProcBindClause();
11758     break;
11759   case llvm::omp::OMPC_schedule:
11760     C = new (Context) OMPScheduleClause();
11761     break;
11762   case llvm::omp::OMPC_ordered:
11763     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11764     break;
11765   case llvm::omp::OMPC_nowait:
11766     C = new (Context) OMPNowaitClause();
11767     break;
11768   case llvm::omp::OMPC_untied:
11769     C = new (Context) OMPUntiedClause();
11770     break;
11771   case llvm::omp::OMPC_mergeable:
11772     C = new (Context) OMPMergeableClause();
11773     break;
11774   case llvm::omp::OMPC_read:
11775     C = new (Context) OMPReadClause();
11776     break;
11777   case llvm::omp::OMPC_write:
11778     C = new (Context) OMPWriteClause();
11779     break;
11780   case llvm::omp::OMPC_update:
11781     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11782     break;
11783   case llvm::omp::OMPC_capture:
11784     C = new (Context) OMPCaptureClause();
11785     break;
11786   case llvm::omp::OMPC_compare:
11787     C = new (Context) OMPCompareClause();
11788     break;
11789   case llvm::omp::OMPC_seq_cst:
11790     C = new (Context) OMPSeqCstClause();
11791     break;
11792   case llvm::omp::OMPC_acq_rel:
11793     C = new (Context) OMPAcqRelClause();
11794     break;
11795   case llvm::omp::OMPC_acquire:
11796     C = new (Context) OMPAcquireClause();
11797     break;
11798   case llvm::omp::OMPC_release:
11799     C = new (Context) OMPReleaseClause();
11800     break;
11801   case llvm::omp::OMPC_relaxed:
11802     C = new (Context) OMPRelaxedClause();
11803     break;
11804   case llvm::omp::OMPC_threads:
11805     C = new (Context) OMPThreadsClause();
11806     break;
11807   case llvm::omp::OMPC_simd:
11808     C = new (Context) OMPSIMDClause();
11809     break;
11810   case llvm::omp::OMPC_nogroup:
11811     C = new (Context) OMPNogroupClause();
11812     break;
11813   case llvm::omp::OMPC_unified_address:
11814     C = new (Context) OMPUnifiedAddressClause();
11815     break;
11816   case llvm::omp::OMPC_unified_shared_memory:
11817     C = new (Context) OMPUnifiedSharedMemoryClause();
11818     break;
11819   case llvm::omp::OMPC_reverse_offload:
11820     C = new (Context) OMPReverseOffloadClause();
11821     break;
11822   case llvm::omp::OMPC_dynamic_allocators:
11823     C = new (Context) OMPDynamicAllocatorsClause();
11824     break;
11825   case llvm::omp::OMPC_atomic_default_mem_order:
11826     C = new (Context) OMPAtomicDefaultMemOrderClause();
11827     break;
11828  case llvm::omp::OMPC_private:
11829     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11830     break;
11831   case llvm::omp::OMPC_firstprivate:
11832     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11833     break;
11834   case llvm::omp::OMPC_lastprivate:
11835     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_shared:
11838     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_reduction: {
11841     unsigned N = Record.readInt();
11842     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11843     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11844     break;
11845   }
11846   case llvm::omp::OMPC_task_reduction:
11847     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11848     break;
11849   case llvm::omp::OMPC_in_reduction:
11850     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11851     break;
11852   case llvm::omp::OMPC_linear:
11853     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11854     break;
11855   case llvm::omp::OMPC_aligned:
11856     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11857     break;
11858   case llvm::omp::OMPC_copyin:
11859     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11860     break;
11861   case llvm::omp::OMPC_copyprivate:
11862     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11863     break;
11864   case llvm::omp::OMPC_flush:
11865     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11866     break;
11867   case llvm::omp::OMPC_depobj:
11868     C = OMPDepobjClause::CreateEmpty(Context);
11869     break;
11870   case llvm::omp::OMPC_depend: {
11871     unsigned NumVars = Record.readInt();
11872     unsigned NumLoops = Record.readInt();
11873     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11874     break;
11875   }
11876   case llvm::omp::OMPC_device:
11877     C = new (Context) OMPDeviceClause();
11878     break;
11879   case llvm::omp::OMPC_map: {
11880     OMPMappableExprListSizeTy Sizes;
11881     Sizes.NumVars = Record.readInt();
11882     Sizes.NumUniqueDeclarations = Record.readInt();
11883     Sizes.NumComponentLists = Record.readInt();
11884     Sizes.NumComponents = Record.readInt();
11885     C = OMPMapClause::CreateEmpty(Context, Sizes);
11886     break;
11887   }
11888   case llvm::omp::OMPC_num_teams:
11889     C = new (Context) OMPNumTeamsClause();
11890     break;
11891   case llvm::omp::OMPC_thread_limit:
11892     C = new (Context) OMPThreadLimitClause();
11893     break;
11894   case llvm::omp::OMPC_priority:
11895     C = new (Context) OMPPriorityClause();
11896     break;
11897   case llvm::omp::OMPC_grainsize:
11898     C = new (Context) OMPGrainsizeClause();
11899     break;
11900   case llvm::omp::OMPC_num_tasks:
11901     C = new (Context) OMPNumTasksClause();
11902     break;
11903   case llvm::omp::OMPC_hint:
11904     C = new (Context) OMPHintClause();
11905     break;
11906   case llvm::omp::OMPC_dist_schedule:
11907     C = new (Context) OMPDistScheduleClause();
11908     break;
11909   case llvm::omp::OMPC_defaultmap:
11910     C = new (Context) OMPDefaultmapClause();
11911     break;
11912   case llvm::omp::OMPC_to: {
11913     OMPMappableExprListSizeTy Sizes;
11914     Sizes.NumVars = Record.readInt();
11915     Sizes.NumUniqueDeclarations = Record.readInt();
11916     Sizes.NumComponentLists = Record.readInt();
11917     Sizes.NumComponents = Record.readInt();
11918     C = OMPToClause::CreateEmpty(Context, Sizes);
11919     break;
11920   }
11921   case llvm::omp::OMPC_from: {
11922     OMPMappableExprListSizeTy Sizes;
11923     Sizes.NumVars = Record.readInt();
11924     Sizes.NumUniqueDeclarations = Record.readInt();
11925     Sizes.NumComponentLists = Record.readInt();
11926     Sizes.NumComponents = Record.readInt();
11927     C = OMPFromClause::CreateEmpty(Context, Sizes);
11928     break;
11929   }
11930   case llvm::omp::OMPC_use_device_ptr: {
11931     OMPMappableExprListSizeTy Sizes;
11932     Sizes.NumVars = Record.readInt();
11933     Sizes.NumUniqueDeclarations = Record.readInt();
11934     Sizes.NumComponentLists = Record.readInt();
11935     Sizes.NumComponents = Record.readInt();
11936     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11937     break;
11938   }
11939   case llvm::omp::OMPC_use_device_addr: {
11940     OMPMappableExprListSizeTy Sizes;
11941     Sizes.NumVars = Record.readInt();
11942     Sizes.NumUniqueDeclarations = Record.readInt();
11943     Sizes.NumComponentLists = Record.readInt();
11944     Sizes.NumComponents = Record.readInt();
11945     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11946     break;
11947   }
11948   case llvm::omp::OMPC_is_device_ptr: {
11949     OMPMappableExprListSizeTy Sizes;
11950     Sizes.NumVars = Record.readInt();
11951     Sizes.NumUniqueDeclarations = Record.readInt();
11952     Sizes.NumComponentLists = Record.readInt();
11953     Sizes.NumComponents = Record.readInt();
11954     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11955     break;
11956   }
11957   case llvm::omp::OMPC_allocate:
11958     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11959     break;
11960   case llvm::omp::OMPC_nontemporal:
11961     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11962     break;
11963   case llvm::omp::OMPC_inclusive:
11964     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11965     break;
11966   case llvm::omp::OMPC_exclusive:
11967     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11968     break;
11969   case llvm::omp::OMPC_order:
11970     C = new (Context) OMPOrderClause();
11971     break;
11972   case llvm::omp::OMPC_init:
11973     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11974     break;
11975   case llvm::omp::OMPC_use:
11976     C = new (Context) OMPUseClause();
11977     break;
11978   case llvm::omp::OMPC_destroy:
11979     C = new (Context) OMPDestroyClause();
11980     break;
11981   case llvm::omp::OMPC_novariants:
11982     C = new (Context) OMPNovariantsClause();
11983     break;
11984   case llvm::omp::OMPC_nocontext:
11985     C = new (Context) OMPNocontextClause();
11986     break;
11987   case llvm::omp::OMPC_detach:
11988     C = new (Context) OMPDetachClause();
11989     break;
11990   case llvm::omp::OMPC_uses_allocators:
11991     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11992     break;
11993   case llvm::omp::OMPC_affinity:
11994     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11995     break;
11996   case llvm::omp::OMPC_filter:
11997     C = new (Context) OMPFilterClause();
11998     break;
11999   case llvm::omp::OMPC_bind:
12000     C = OMPBindClause::CreateEmpty(Context);
12001     break;
12002   case llvm::omp::OMPC_align:
12003     C = new (Context) OMPAlignClause();
12004     break;
12005 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
12006   case llvm::omp::Enum:                                                        \
12007     break;
12008 #include "llvm/Frontend/OpenMP/OMPKinds.def"
12009   default:
12010     break;
12011   }
12012   assert(C && "Unknown OMPClause type");
12013 
12014   Visit(C);
12015   C->setLocStart(Record.readSourceLocation());
12016   C->setLocEnd(Record.readSourceLocation());
12017 
12018   return C;
12019 }
12020 
12021 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12022   C->setPreInitStmt(Record.readSubStmt(),
12023                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12024 }
12025 
12026 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12027   VisitOMPClauseWithPreInit(C);
12028   C->setPostUpdateExpr(Record.readSubExpr());
12029 }
12030 
12031 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12032   VisitOMPClauseWithPreInit(C);
12033   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12034   C->setNameModifierLoc(Record.readSourceLocation());
12035   C->setColonLoc(Record.readSourceLocation());
12036   C->setCondition(Record.readSubExpr());
12037   C->setLParenLoc(Record.readSourceLocation());
12038 }
12039 
12040 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12041   VisitOMPClauseWithPreInit(C);
12042   C->setCondition(Record.readSubExpr());
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12047   VisitOMPClauseWithPreInit(C);
12048   C->setNumThreads(Record.readSubExpr());
12049   C->setLParenLoc(Record.readSourceLocation());
12050 }
12051 
12052 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12053   C->setSafelen(Record.readSubExpr());
12054   C->setLParenLoc(Record.readSourceLocation());
12055 }
12056 
12057 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12058   C->setSimdlen(Record.readSubExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12063   for (Expr *&E : C->getSizesRefs())
12064     E = Record.readSubExpr();
12065   C->setLParenLoc(Record.readSourceLocation());
12066 }
12067 
12068 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12069 
12070 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12071   C->setFactor(Record.readSubExpr());
12072   C->setLParenLoc(Record.readSourceLocation());
12073 }
12074 
12075 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12076   C->setAllocator(Record.readExpr());
12077   C->setLParenLoc(Record.readSourceLocation());
12078 }
12079 
12080 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12081   C->setNumForLoops(Record.readSubExpr());
12082   C->setLParenLoc(Record.readSourceLocation());
12083 }
12084 
12085 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12086   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12087   C->setLParenLoc(Record.readSourceLocation());
12088   C->setDefaultKindKwLoc(Record.readSourceLocation());
12089 }
12090 
12091 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12092   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12093   C->setLParenLoc(Record.readSourceLocation());
12094   C->setProcBindKindKwLoc(Record.readSourceLocation());
12095 }
12096 
12097 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12098   VisitOMPClauseWithPreInit(C);
12099   C->setScheduleKind(
12100        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12101   C->setFirstScheduleModifier(
12102       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12103   C->setSecondScheduleModifier(
12104       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12105   C->setChunkSize(Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12108   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12109   C->setScheduleKindLoc(Record.readSourceLocation());
12110   C->setCommaLoc(Record.readSourceLocation());
12111 }
12112 
12113 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12114   C->setNumForLoops(Record.readSubExpr());
12115   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12116     C->setLoopNumIterations(I, Record.readSubExpr());
12117   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12118     C->setLoopCounter(I, Record.readSubExpr());
12119   C->setLParenLoc(Record.readSourceLocation());
12120 }
12121 
12122 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12123   C->setEventHandler(Record.readSubExpr());
12124   C->setLParenLoc(Record.readSourceLocation());
12125 }
12126 
12127 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12128 
12129 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12130 
12131 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12132 
12133 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12134 
12135 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12136 
12137 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12138   if (C->isExtended()) {
12139     C->setLParenLoc(Record.readSourceLocation());
12140     C->setArgumentLoc(Record.readSourceLocation());
12141     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12142   }
12143 }
12144 
12145 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12146 
12147 void OMPClauseReader::VisitOMPCompareClause(OMPCompareClause *) {}
12148 
12149 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12150 
12151 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12152 
12153 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12154 
12155 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12156 
12157 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12158 
12159 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12160 
12161 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12162 
12163 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12164 
12165 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12166   unsigned NumVars = C->varlist_size();
12167   SmallVector<Expr *, 16> Vars;
12168   Vars.reserve(NumVars);
12169   for (unsigned I = 0; I != NumVars; ++I)
12170     Vars.push_back(Record.readSubExpr());
12171   C->setVarRefs(Vars);
12172   C->setIsTarget(Record.readBool());
12173   C->setIsTargetSync(Record.readBool());
12174   C->setLParenLoc(Record.readSourceLocation());
12175   C->setVarLoc(Record.readSourceLocation());
12176 }
12177 
12178 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12179   C->setInteropVar(Record.readSubExpr());
12180   C->setLParenLoc(Record.readSourceLocation());
12181   C->setVarLoc(Record.readSourceLocation());
12182 }
12183 
12184 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12185   C->setInteropVar(Record.readSubExpr());
12186   C->setLParenLoc(Record.readSourceLocation());
12187   C->setVarLoc(Record.readSourceLocation());
12188 }
12189 
12190 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12191   VisitOMPClauseWithPreInit(C);
12192   C->setCondition(Record.readSubExpr());
12193   C->setLParenLoc(Record.readSourceLocation());
12194 }
12195 
12196 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12197   VisitOMPClauseWithPreInit(C);
12198   C->setCondition(Record.readSubExpr());
12199   C->setLParenLoc(Record.readSourceLocation());
12200 }
12201 
12202 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12203 
12204 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12205     OMPUnifiedSharedMemoryClause *) {}
12206 
12207 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12208 
12209 void
12210 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12211 }
12212 
12213 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12214     OMPAtomicDefaultMemOrderClause *C) {
12215   C->setAtomicDefaultMemOrderKind(
12216       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12217   C->setLParenLoc(Record.readSourceLocation());
12218   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12219 }
12220 
12221 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12222   C->setLParenLoc(Record.readSourceLocation());
12223   unsigned NumVars = C->varlist_size();
12224   SmallVector<Expr *, 16> Vars;
12225   Vars.reserve(NumVars);
12226   for (unsigned i = 0; i != NumVars; ++i)
12227     Vars.push_back(Record.readSubExpr());
12228   C->setVarRefs(Vars);
12229   Vars.clear();
12230   for (unsigned i = 0; i != NumVars; ++i)
12231     Vars.push_back(Record.readSubExpr());
12232   C->setPrivateCopies(Vars);
12233 }
12234 
12235 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12236   VisitOMPClauseWithPreInit(C);
12237   C->setLParenLoc(Record.readSourceLocation());
12238   unsigned NumVars = C->varlist_size();
12239   SmallVector<Expr *, 16> Vars;
12240   Vars.reserve(NumVars);
12241   for (unsigned i = 0; i != NumVars; ++i)
12242     Vars.push_back(Record.readSubExpr());
12243   C->setVarRefs(Vars);
12244   Vars.clear();
12245   for (unsigned i = 0; i != NumVars; ++i)
12246     Vars.push_back(Record.readSubExpr());
12247   C->setPrivateCopies(Vars);
12248   Vars.clear();
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setInits(Vars);
12252 }
12253 
12254 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12255   VisitOMPClauseWithPostUpdate(C);
12256   C->setLParenLoc(Record.readSourceLocation());
12257   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12258   C->setKindLoc(Record.readSourceLocation());
12259   C->setColonLoc(Record.readSourceLocation());
12260   unsigned NumVars = C->varlist_size();
12261   SmallVector<Expr *, 16> Vars;
12262   Vars.reserve(NumVars);
12263   for (unsigned i = 0; i != NumVars; ++i)
12264     Vars.push_back(Record.readSubExpr());
12265   C->setVarRefs(Vars);
12266   Vars.clear();
12267   for (unsigned i = 0; i != NumVars; ++i)
12268     Vars.push_back(Record.readSubExpr());
12269   C->setPrivateCopies(Vars);
12270   Vars.clear();
12271   for (unsigned i = 0; i != NumVars; ++i)
12272     Vars.push_back(Record.readSubExpr());
12273   C->setSourceExprs(Vars);
12274   Vars.clear();
12275   for (unsigned i = 0; i != NumVars; ++i)
12276     Vars.push_back(Record.readSubExpr());
12277   C->setDestinationExprs(Vars);
12278   Vars.clear();
12279   for (unsigned i = 0; i != NumVars; ++i)
12280     Vars.push_back(Record.readSubExpr());
12281   C->setAssignmentOps(Vars);
12282 }
12283 
12284 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12285   C->setLParenLoc(Record.readSourceLocation());
12286   unsigned NumVars = C->varlist_size();
12287   SmallVector<Expr *, 16> Vars;
12288   Vars.reserve(NumVars);
12289   for (unsigned i = 0; i != NumVars; ++i)
12290     Vars.push_back(Record.readSubExpr());
12291   C->setVarRefs(Vars);
12292 }
12293 
12294 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12295   VisitOMPClauseWithPostUpdate(C);
12296   C->setLParenLoc(Record.readSourceLocation());
12297   C->setModifierLoc(Record.readSourceLocation());
12298   C->setColonLoc(Record.readSourceLocation());
12299   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12300   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12301   C->setQualifierLoc(NNSL);
12302   C->setNameInfo(DNI);
12303 
12304   unsigned NumVars = C->varlist_size();
12305   SmallVector<Expr *, 16> Vars;
12306   Vars.reserve(NumVars);
12307   for (unsigned i = 0; i != NumVars; ++i)
12308     Vars.push_back(Record.readSubExpr());
12309   C->setVarRefs(Vars);
12310   Vars.clear();
12311   for (unsigned i = 0; i != NumVars; ++i)
12312     Vars.push_back(Record.readSubExpr());
12313   C->setPrivates(Vars);
12314   Vars.clear();
12315   for (unsigned i = 0; i != NumVars; ++i)
12316     Vars.push_back(Record.readSubExpr());
12317   C->setLHSExprs(Vars);
12318   Vars.clear();
12319   for (unsigned i = 0; i != NumVars; ++i)
12320     Vars.push_back(Record.readSubExpr());
12321   C->setRHSExprs(Vars);
12322   Vars.clear();
12323   for (unsigned i = 0; i != NumVars; ++i)
12324     Vars.push_back(Record.readSubExpr());
12325   C->setReductionOps(Vars);
12326   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12327     Vars.clear();
12328     for (unsigned i = 0; i != NumVars; ++i)
12329       Vars.push_back(Record.readSubExpr());
12330     C->setInscanCopyOps(Vars);
12331     Vars.clear();
12332     for (unsigned i = 0; i != NumVars; ++i)
12333       Vars.push_back(Record.readSubExpr());
12334     C->setInscanCopyArrayTemps(Vars);
12335     Vars.clear();
12336     for (unsigned i = 0; i != NumVars; ++i)
12337       Vars.push_back(Record.readSubExpr());
12338     C->setInscanCopyArrayElems(Vars);
12339   }
12340 }
12341 
12342 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12343   VisitOMPClauseWithPostUpdate(C);
12344   C->setLParenLoc(Record.readSourceLocation());
12345   C->setColonLoc(Record.readSourceLocation());
12346   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12347   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12348   C->setQualifierLoc(NNSL);
12349   C->setNameInfo(DNI);
12350 
12351   unsigned NumVars = C->varlist_size();
12352   SmallVector<Expr *, 16> Vars;
12353   Vars.reserve(NumVars);
12354   for (unsigned I = 0; I != NumVars; ++I)
12355     Vars.push_back(Record.readSubExpr());
12356   C->setVarRefs(Vars);
12357   Vars.clear();
12358   for (unsigned I = 0; I != NumVars; ++I)
12359     Vars.push_back(Record.readSubExpr());
12360   C->setPrivates(Vars);
12361   Vars.clear();
12362   for (unsigned I = 0; I != NumVars; ++I)
12363     Vars.push_back(Record.readSubExpr());
12364   C->setLHSExprs(Vars);
12365   Vars.clear();
12366   for (unsigned I = 0; I != NumVars; ++I)
12367     Vars.push_back(Record.readSubExpr());
12368   C->setRHSExprs(Vars);
12369   Vars.clear();
12370   for (unsigned I = 0; I != NumVars; ++I)
12371     Vars.push_back(Record.readSubExpr());
12372   C->setReductionOps(Vars);
12373 }
12374 
12375 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12376   VisitOMPClauseWithPostUpdate(C);
12377   C->setLParenLoc(Record.readSourceLocation());
12378   C->setColonLoc(Record.readSourceLocation());
12379   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12380   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12381   C->setQualifierLoc(NNSL);
12382   C->setNameInfo(DNI);
12383 
12384   unsigned NumVars = C->varlist_size();
12385   SmallVector<Expr *, 16> Vars;
12386   Vars.reserve(NumVars);
12387   for (unsigned I = 0; I != NumVars; ++I)
12388     Vars.push_back(Record.readSubExpr());
12389   C->setVarRefs(Vars);
12390   Vars.clear();
12391   for (unsigned I = 0; I != NumVars; ++I)
12392     Vars.push_back(Record.readSubExpr());
12393   C->setPrivates(Vars);
12394   Vars.clear();
12395   for (unsigned I = 0; I != NumVars; ++I)
12396     Vars.push_back(Record.readSubExpr());
12397   C->setLHSExprs(Vars);
12398   Vars.clear();
12399   for (unsigned I = 0; I != NumVars; ++I)
12400     Vars.push_back(Record.readSubExpr());
12401   C->setRHSExprs(Vars);
12402   Vars.clear();
12403   for (unsigned I = 0; I != NumVars; ++I)
12404     Vars.push_back(Record.readSubExpr());
12405   C->setReductionOps(Vars);
12406   Vars.clear();
12407   for (unsigned I = 0; I != NumVars; ++I)
12408     Vars.push_back(Record.readSubExpr());
12409   C->setTaskgroupDescriptors(Vars);
12410 }
12411 
12412 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12413   VisitOMPClauseWithPostUpdate(C);
12414   C->setLParenLoc(Record.readSourceLocation());
12415   C->setColonLoc(Record.readSourceLocation());
12416   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12417   C->setModifierLoc(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   Vars.clear();
12425   for (unsigned i = 0; i != NumVars; ++i)
12426     Vars.push_back(Record.readSubExpr());
12427   C->setPrivates(Vars);
12428   Vars.clear();
12429   for (unsigned i = 0; i != NumVars; ++i)
12430     Vars.push_back(Record.readSubExpr());
12431   C->setInits(Vars);
12432   Vars.clear();
12433   for (unsigned i = 0; i != NumVars; ++i)
12434     Vars.push_back(Record.readSubExpr());
12435   C->setUpdates(Vars);
12436   Vars.clear();
12437   for (unsigned i = 0; i != NumVars; ++i)
12438     Vars.push_back(Record.readSubExpr());
12439   C->setFinals(Vars);
12440   C->setStep(Record.readSubExpr());
12441   C->setCalcStep(Record.readSubExpr());
12442   Vars.clear();
12443   for (unsigned I = 0; I != NumVars + 1; ++I)
12444     Vars.push_back(Record.readSubExpr());
12445   C->setUsedExprs(Vars);
12446 }
12447 
12448 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12449   C->setLParenLoc(Record.readSourceLocation());
12450   C->setColonLoc(Record.readSourceLocation());
12451   unsigned NumVars = C->varlist_size();
12452   SmallVector<Expr *, 16> Vars;
12453   Vars.reserve(NumVars);
12454   for (unsigned i = 0; i != NumVars; ++i)
12455     Vars.push_back(Record.readSubExpr());
12456   C->setVarRefs(Vars);
12457   C->setAlignment(Record.readSubExpr());
12458 }
12459 
12460 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12461   C->setLParenLoc(Record.readSourceLocation());
12462   unsigned NumVars = C->varlist_size();
12463   SmallVector<Expr *, 16> Exprs;
12464   Exprs.reserve(NumVars);
12465   for (unsigned i = 0; i != NumVars; ++i)
12466     Exprs.push_back(Record.readSubExpr());
12467   C->setVarRefs(Exprs);
12468   Exprs.clear();
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Exprs.push_back(Record.readSubExpr());
12471   C->setSourceExprs(Exprs);
12472   Exprs.clear();
12473   for (unsigned i = 0; i != NumVars; ++i)
12474     Exprs.push_back(Record.readSubExpr());
12475   C->setDestinationExprs(Exprs);
12476   Exprs.clear();
12477   for (unsigned i = 0; i != NumVars; ++i)
12478     Exprs.push_back(Record.readSubExpr());
12479   C->setAssignmentOps(Exprs);
12480 }
12481 
12482 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12483   C->setLParenLoc(Record.readSourceLocation());
12484   unsigned NumVars = C->varlist_size();
12485   SmallVector<Expr *, 16> Exprs;
12486   Exprs.reserve(NumVars);
12487   for (unsigned i = 0; i != NumVars; ++i)
12488     Exprs.push_back(Record.readSubExpr());
12489   C->setVarRefs(Exprs);
12490   Exprs.clear();
12491   for (unsigned i = 0; i != NumVars; ++i)
12492     Exprs.push_back(Record.readSubExpr());
12493   C->setSourceExprs(Exprs);
12494   Exprs.clear();
12495   for (unsigned i = 0; i != NumVars; ++i)
12496     Exprs.push_back(Record.readSubExpr());
12497   C->setDestinationExprs(Exprs);
12498   Exprs.clear();
12499   for (unsigned i = 0; i != NumVars; ++i)
12500     Exprs.push_back(Record.readSubExpr());
12501   C->setAssignmentOps(Exprs);
12502 }
12503 
12504 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12505   C->setLParenLoc(Record.readSourceLocation());
12506   unsigned NumVars = C->varlist_size();
12507   SmallVector<Expr *, 16> Vars;
12508   Vars.reserve(NumVars);
12509   for (unsigned i = 0; i != NumVars; ++i)
12510     Vars.push_back(Record.readSubExpr());
12511   C->setVarRefs(Vars);
12512 }
12513 
12514 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12515   C->setDepobj(Record.readSubExpr());
12516   C->setLParenLoc(Record.readSourceLocation());
12517 }
12518 
12519 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12520   C->setLParenLoc(Record.readSourceLocation());
12521   C->setModifier(Record.readSubExpr());
12522   C->setDependencyKind(
12523       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12524   C->setDependencyLoc(Record.readSourceLocation());
12525   C->setColonLoc(Record.readSourceLocation());
12526   unsigned NumVars = C->varlist_size();
12527   SmallVector<Expr *, 16> Vars;
12528   Vars.reserve(NumVars);
12529   for (unsigned I = 0; I != NumVars; ++I)
12530     Vars.push_back(Record.readSubExpr());
12531   C->setVarRefs(Vars);
12532   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12533     C->setLoopData(I, Record.readSubExpr());
12534 }
12535 
12536 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12537   VisitOMPClauseWithPreInit(C);
12538   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12539   C->setDevice(Record.readSubExpr());
12540   C->setModifierLoc(Record.readSourceLocation());
12541   C->setLParenLoc(Record.readSourceLocation());
12542 }
12543 
12544 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12545   C->setLParenLoc(Record.readSourceLocation());
12546   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12547     C->setMapTypeModifier(
12548         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12549     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12550   }
12551   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12552   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12553   C->setMapType(
12554      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12555   C->setMapLoc(Record.readSourceLocation());
12556   C->setColonLoc(Record.readSourceLocation());
12557   auto NumVars = C->varlist_size();
12558   auto UniqueDecls = C->getUniqueDeclarationsNum();
12559   auto TotalLists = C->getTotalComponentListNum();
12560   auto TotalComponents = C->getTotalComponentsNum();
12561 
12562   SmallVector<Expr *, 16> Vars;
12563   Vars.reserve(NumVars);
12564   for (unsigned i = 0; i != NumVars; ++i)
12565     Vars.push_back(Record.readExpr());
12566   C->setVarRefs(Vars);
12567 
12568   SmallVector<Expr *, 16> UDMappers;
12569   UDMappers.reserve(NumVars);
12570   for (unsigned I = 0; I < NumVars; ++I)
12571     UDMappers.push_back(Record.readExpr());
12572   C->setUDMapperRefs(UDMappers);
12573 
12574   SmallVector<ValueDecl *, 16> Decls;
12575   Decls.reserve(UniqueDecls);
12576   for (unsigned i = 0; i < UniqueDecls; ++i)
12577     Decls.push_back(Record.readDeclAs<ValueDecl>());
12578   C->setUniqueDecls(Decls);
12579 
12580   SmallVector<unsigned, 16> ListsPerDecl;
12581   ListsPerDecl.reserve(UniqueDecls);
12582   for (unsigned i = 0; i < UniqueDecls; ++i)
12583     ListsPerDecl.push_back(Record.readInt());
12584   C->setDeclNumLists(ListsPerDecl);
12585 
12586   SmallVector<unsigned, 32> ListSizes;
12587   ListSizes.reserve(TotalLists);
12588   for (unsigned i = 0; i < TotalLists; ++i)
12589     ListSizes.push_back(Record.readInt());
12590   C->setComponentListSizes(ListSizes);
12591 
12592   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12593   Components.reserve(TotalComponents);
12594   for (unsigned i = 0; i < TotalComponents; ++i) {
12595     Expr *AssociatedExprPr = Record.readExpr();
12596     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12597     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12598                             /*IsNonContiguous=*/false);
12599   }
12600   C->setComponents(Components, ListSizes);
12601 }
12602 
12603 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12604   C->setLParenLoc(Record.readSourceLocation());
12605   C->setColonLoc(Record.readSourceLocation());
12606   C->setAllocator(Record.readSubExpr());
12607   unsigned NumVars = C->varlist_size();
12608   SmallVector<Expr *, 16> Vars;
12609   Vars.reserve(NumVars);
12610   for (unsigned i = 0; i != NumVars; ++i)
12611     Vars.push_back(Record.readSubExpr());
12612   C->setVarRefs(Vars);
12613 }
12614 
12615 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12616   VisitOMPClauseWithPreInit(C);
12617   C->setNumTeams(Record.readSubExpr());
12618   C->setLParenLoc(Record.readSourceLocation());
12619 }
12620 
12621 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12622   VisitOMPClauseWithPreInit(C);
12623   C->setThreadLimit(Record.readSubExpr());
12624   C->setLParenLoc(Record.readSourceLocation());
12625 }
12626 
12627 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12628   VisitOMPClauseWithPreInit(C);
12629   C->setPriority(Record.readSubExpr());
12630   C->setLParenLoc(Record.readSourceLocation());
12631 }
12632 
12633 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12634   VisitOMPClauseWithPreInit(C);
12635   C->setGrainsize(Record.readSubExpr());
12636   C->setLParenLoc(Record.readSourceLocation());
12637 }
12638 
12639 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12640   VisitOMPClauseWithPreInit(C);
12641   C->setNumTasks(Record.readSubExpr());
12642   C->setLParenLoc(Record.readSourceLocation());
12643 }
12644 
12645 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12646   C->setHint(Record.readSubExpr());
12647   C->setLParenLoc(Record.readSourceLocation());
12648 }
12649 
12650 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12651   VisitOMPClauseWithPreInit(C);
12652   C->setDistScheduleKind(
12653       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12654   C->setChunkSize(Record.readSubExpr());
12655   C->setLParenLoc(Record.readSourceLocation());
12656   C->setDistScheduleKindLoc(Record.readSourceLocation());
12657   C->setCommaLoc(Record.readSourceLocation());
12658 }
12659 
12660 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12661   C->setDefaultmapKind(
12662        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12663   C->setDefaultmapModifier(
12664       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12665   C->setLParenLoc(Record.readSourceLocation());
12666   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12667   C->setDefaultmapKindLoc(Record.readSourceLocation());
12668 }
12669 
12670 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12671   C->setLParenLoc(Record.readSourceLocation());
12672   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12673     C->setMotionModifier(
12674         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12675     C->setMotionModifierLoc(I, Record.readSourceLocation());
12676   }
12677   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12678   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12679   C->setColonLoc(Record.readSourceLocation());
12680   auto NumVars = C->varlist_size();
12681   auto UniqueDecls = C->getUniqueDeclarationsNum();
12682   auto TotalLists = C->getTotalComponentListNum();
12683   auto TotalComponents = C->getTotalComponentsNum();
12684 
12685   SmallVector<Expr *, 16> Vars;
12686   Vars.reserve(NumVars);
12687   for (unsigned i = 0; i != NumVars; ++i)
12688     Vars.push_back(Record.readSubExpr());
12689   C->setVarRefs(Vars);
12690 
12691   SmallVector<Expr *, 16> UDMappers;
12692   UDMappers.reserve(NumVars);
12693   for (unsigned I = 0; I < NumVars; ++I)
12694     UDMappers.push_back(Record.readSubExpr());
12695   C->setUDMapperRefs(UDMappers);
12696 
12697   SmallVector<ValueDecl *, 16> Decls;
12698   Decls.reserve(UniqueDecls);
12699   for (unsigned i = 0; i < UniqueDecls; ++i)
12700     Decls.push_back(Record.readDeclAs<ValueDecl>());
12701   C->setUniqueDecls(Decls);
12702 
12703   SmallVector<unsigned, 16> ListsPerDecl;
12704   ListsPerDecl.reserve(UniqueDecls);
12705   for (unsigned i = 0; i < UniqueDecls; ++i)
12706     ListsPerDecl.push_back(Record.readInt());
12707   C->setDeclNumLists(ListsPerDecl);
12708 
12709   SmallVector<unsigned, 32> ListSizes;
12710   ListSizes.reserve(TotalLists);
12711   for (unsigned i = 0; i < TotalLists; ++i)
12712     ListSizes.push_back(Record.readInt());
12713   C->setComponentListSizes(ListSizes);
12714 
12715   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12716   Components.reserve(TotalComponents);
12717   for (unsigned i = 0; i < TotalComponents; ++i) {
12718     Expr *AssociatedExprPr = Record.readSubExpr();
12719     bool IsNonContiguous = Record.readBool();
12720     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12721     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12722   }
12723   C->setComponents(Components, ListSizes);
12724 }
12725 
12726 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12727   C->setLParenLoc(Record.readSourceLocation());
12728   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12729     C->setMotionModifier(
12730         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12731     C->setMotionModifierLoc(I, Record.readSourceLocation());
12732   }
12733   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12734   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12735   C->setColonLoc(Record.readSourceLocation());
12736   auto NumVars = C->varlist_size();
12737   auto UniqueDecls = C->getUniqueDeclarationsNum();
12738   auto TotalLists = C->getTotalComponentListNum();
12739   auto TotalComponents = C->getTotalComponentsNum();
12740 
12741   SmallVector<Expr *, 16> Vars;
12742   Vars.reserve(NumVars);
12743   for (unsigned i = 0; i != NumVars; ++i)
12744     Vars.push_back(Record.readSubExpr());
12745   C->setVarRefs(Vars);
12746 
12747   SmallVector<Expr *, 16> UDMappers;
12748   UDMappers.reserve(NumVars);
12749   for (unsigned I = 0; I < NumVars; ++I)
12750     UDMappers.push_back(Record.readSubExpr());
12751   C->setUDMapperRefs(UDMappers);
12752 
12753   SmallVector<ValueDecl *, 16> Decls;
12754   Decls.reserve(UniqueDecls);
12755   for (unsigned i = 0; i < UniqueDecls; ++i)
12756     Decls.push_back(Record.readDeclAs<ValueDecl>());
12757   C->setUniqueDecls(Decls);
12758 
12759   SmallVector<unsigned, 16> ListsPerDecl;
12760   ListsPerDecl.reserve(UniqueDecls);
12761   for (unsigned i = 0; i < UniqueDecls; ++i)
12762     ListsPerDecl.push_back(Record.readInt());
12763   C->setDeclNumLists(ListsPerDecl);
12764 
12765   SmallVector<unsigned, 32> ListSizes;
12766   ListSizes.reserve(TotalLists);
12767   for (unsigned i = 0; i < TotalLists; ++i)
12768     ListSizes.push_back(Record.readInt());
12769   C->setComponentListSizes(ListSizes);
12770 
12771   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12772   Components.reserve(TotalComponents);
12773   for (unsigned i = 0; i < TotalComponents; ++i) {
12774     Expr *AssociatedExprPr = Record.readSubExpr();
12775     bool IsNonContiguous = Record.readBool();
12776     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12777     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12778   }
12779   C->setComponents(Components, ListSizes);
12780 }
12781 
12782 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12783   C->setLParenLoc(Record.readSourceLocation());
12784   auto NumVars = C->varlist_size();
12785   auto UniqueDecls = C->getUniqueDeclarationsNum();
12786   auto TotalLists = C->getTotalComponentListNum();
12787   auto TotalComponents = C->getTotalComponentsNum();
12788 
12789   SmallVector<Expr *, 16> Vars;
12790   Vars.reserve(NumVars);
12791   for (unsigned i = 0; i != NumVars; ++i)
12792     Vars.push_back(Record.readSubExpr());
12793   C->setVarRefs(Vars);
12794   Vars.clear();
12795   for (unsigned i = 0; i != NumVars; ++i)
12796     Vars.push_back(Record.readSubExpr());
12797   C->setPrivateCopies(Vars);
12798   Vars.clear();
12799   for (unsigned i = 0; i != NumVars; ++i)
12800     Vars.push_back(Record.readSubExpr());
12801   C->setInits(Vars);
12802 
12803   SmallVector<ValueDecl *, 16> Decls;
12804   Decls.reserve(UniqueDecls);
12805   for (unsigned i = 0; i < UniqueDecls; ++i)
12806     Decls.push_back(Record.readDeclAs<ValueDecl>());
12807   C->setUniqueDecls(Decls);
12808 
12809   SmallVector<unsigned, 16> ListsPerDecl;
12810   ListsPerDecl.reserve(UniqueDecls);
12811   for (unsigned i = 0; i < UniqueDecls; ++i)
12812     ListsPerDecl.push_back(Record.readInt());
12813   C->setDeclNumLists(ListsPerDecl);
12814 
12815   SmallVector<unsigned, 32> ListSizes;
12816   ListSizes.reserve(TotalLists);
12817   for (unsigned i = 0; i < TotalLists; ++i)
12818     ListSizes.push_back(Record.readInt());
12819   C->setComponentListSizes(ListSizes);
12820 
12821   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12822   Components.reserve(TotalComponents);
12823   for (unsigned i = 0; i < TotalComponents; ++i) {
12824     auto *AssociatedExprPr = Record.readSubExpr();
12825     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12826     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12827                             /*IsNonContiguous=*/false);
12828   }
12829   C->setComponents(Components, ListSizes);
12830 }
12831 
12832 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12833   C->setLParenLoc(Record.readSourceLocation());
12834   auto NumVars = C->varlist_size();
12835   auto UniqueDecls = C->getUniqueDeclarationsNum();
12836   auto TotalLists = C->getTotalComponentListNum();
12837   auto TotalComponents = C->getTotalComponentsNum();
12838 
12839   SmallVector<Expr *, 16> Vars;
12840   Vars.reserve(NumVars);
12841   for (unsigned i = 0; i != NumVars; ++i)
12842     Vars.push_back(Record.readSubExpr());
12843   C->setVarRefs(Vars);
12844 
12845   SmallVector<ValueDecl *, 16> Decls;
12846   Decls.reserve(UniqueDecls);
12847   for (unsigned i = 0; i < UniqueDecls; ++i)
12848     Decls.push_back(Record.readDeclAs<ValueDecl>());
12849   C->setUniqueDecls(Decls);
12850 
12851   SmallVector<unsigned, 16> ListsPerDecl;
12852   ListsPerDecl.reserve(UniqueDecls);
12853   for (unsigned i = 0; i < UniqueDecls; ++i)
12854     ListsPerDecl.push_back(Record.readInt());
12855   C->setDeclNumLists(ListsPerDecl);
12856 
12857   SmallVector<unsigned, 32> ListSizes;
12858   ListSizes.reserve(TotalLists);
12859   for (unsigned i = 0; i < TotalLists; ++i)
12860     ListSizes.push_back(Record.readInt());
12861   C->setComponentListSizes(ListSizes);
12862 
12863   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12864   Components.reserve(TotalComponents);
12865   for (unsigned i = 0; i < TotalComponents; ++i) {
12866     Expr *AssociatedExpr = Record.readSubExpr();
12867     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12868     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12869                             /*IsNonContiguous*/ false);
12870   }
12871   C->setComponents(Components, ListSizes);
12872 }
12873 
12874 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12875   C->setLParenLoc(Record.readSourceLocation());
12876   auto NumVars = C->varlist_size();
12877   auto UniqueDecls = C->getUniqueDeclarationsNum();
12878   auto TotalLists = C->getTotalComponentListNum();
12879   auto TotalComponents = C->getTotalComponentsNum();
12880 
12881   SmallVector<Expr *, 16> Vars;
12882   Vars.reserve(NumVars);
12883   for (unsigned i = 0; i != NumVars; ++i)
12884     Vars.push_back(Record.readSubExpr());
12885   C->setVarRefs(Vars);
12886   Vars.clear();
12887 
12888   SmallVector<ValueDecl *, 16> Decls;
12889   Decls.reserve(UniqueDecls);
12890   for (unsigned i = 0; i < UniqueDecls; ++i)
12891     Decls.push_back(Record.readDeclAs<ValueDecl>());
12892   C->setUniqueDecls(Decls);
12893 
12894   SmallVector<unsigned, 16> ListsPerDecl;
12895   ListsPerDecl.reserve(UniqueDecls);
12896   for (unsigned i = 0; i < UniqueDecls; ++i)
12897     ListsPerDecl.push_back(Record.readInt());
12898   C->setDeclNumLists(ListsPerDecl);
12899 
12900   SmallVector<unsigned, 32> ListSizes;
12901   ListSizes.reserve(TotalLists);
12902   for (unsigned i = 0; i < TotalLists; ++i)
12903     ListSizes.push_back(Record.readInt());
12904   C->setComponentListSizes(ListSizes);
12905 
12906   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12907   Components.reserve(TotalComponents);
12908   for (unsigned i = 0; i < TotalComponents; ++i) {
12909     Expr *AssociatedExpr = Record.readSubExpr();
12910     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12911     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12912                             /*IsNonContiguous=*/false);
12913   }
12914   C->setComponents(Components, ListSizes);
12915 }
12916 
12917 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12918   C->setLParenLoc(Record.readSourceLocation());
12919   unsigned NumVars = C->varlist_size();
12920   SmallVector<Expr *, 16> Vars;
12921   Vars.reserve(NumVars);
12922   for (unsigned i = 0; i != NumVars; ++i)
12923     Vars.push_back(Record.readSubExpr());
12924   C->setVarRefs(Vars);
12925   Vars.clear();
12926   Vars.reserve(NumVars);
12927   for (unsigned i = 0; i != NumVars; ++i)
12928     Vars.push_back(Record.readSubExpr());
12929   C->setPrivateRefs(Vars);
12930 }
12931 
12932 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12933   C->setLParenLoc(Record.readSourceLocation());
12934   unsigned NumVars = C->varlist_size();
12935   SmallVector<Expr *, 16> Vars;
12936   Vars.reserve(NumVars);
12937   for (unsigned i = 0; i != NumVars; ++i)
12938     Vars.push_back(Record.readSubExpr());
12939   C->setVarRefs(Vars);
12940 }
12941 
12942 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12943   C->setLParenLoc(Record.readSourceLocation());
12944   unsigned NumVars = C->varlist_size();
12945   SmallVector<Expr *, 16> Vars;
12946   Vars.reserve(NumVars);
12947   for (unsigned i = 0; i != NumVars; ++i)
12948     Vars.push_back(Record.readSubExpr());
12949   C->setVarRefs(Vars);
12950 }
12951 
12952 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12953   C->setLParenLoc(Record.readSourceLocation());
12954   unsigned NumOfAllocators = C->getNumberOfAllocators();
12955   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12956   Data.reserve(NumOfAllocators);
12957   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12958     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12959     D.Allocator = Record.readSubExpr();
12960     D.AllocatorTraits = Record.readSubExpr();
12961     D.LParenLoc = Record.readSourceLocation();
12962     D.RParenLoc = Record.readSourceLocation();
12963   }
12964   C->setAllocatorsData(Data);
12965 }
12966 
12967 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12968   C->setLParenLoc(Record.readSourceLocation());
12969   C->setModifier(Record.readSubExpr());
12970   C->setColonLoc(Record.readSourceLocation());
12971   unsigned NumOfLocators = C->varlist_size();
12972   SmallVector<Expr *, 4> Locators;
12973   Locators.reserve(NumOfLocators);
12974   for (unsigned I = 0; I != NumOfLocators; ++I)
12975     Locators.push_back(Record.readSubExpr());
12976   C->setVarRefs(Locators);
12977 }
12978 
12979 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12980   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12981   C->setLParenLoc(Record.readSourceLocation());
12982   C->setKindKwLoc(Record.readSourceLocation());
12983 }
12984 
12985 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12986   VisitOMPClauseWithPreInit(C);
12987   C->setThreadID(Record.readSubExpr());
12988   C->setLParenLoc(Record.readSourceLocation());
12989 }
12990 
12991 void OMPClauseReader::VisitOMPBindClause(OMPBindClause *C) {
12992   C->setBindKind(Record.readEnum<OpenMPBindClauseKind>());
12993   C->setLParenLoc(Record.readSourceLocation());
12994   C->setBindKindLoc(Record.readSourceLocation());
12995 }
12996 
12997 void OMPClauseReader::VisitOMPAlignClause(OMPAlignClause *C) {
12998   C->setAlignment(Record.readExpr());
12999   C->setLParenLoc(Record.readSourceLocation());
13000 }
13001 
13002 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
13003   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
13004   TI.Sets.resize(readUInt32());
13005   for (auto &Set : TI.Sets) {
13006     Set.Kind = readEnum<llvm::omp::TraitSet>();
13007     Set.Selectors.resize(readUInt32());
13008     for (auto &Selector : Set.Selectors) {
13009       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
13010       Selector.ScoreOrCondition = nullptr;
13011       if (readBool())
13012         Selector.ScoreOrCondition = readExprRef();
13013       Selector.Properties.resize(readUInt32());
13014       for (auto &Property : Selector.Properties)
13015         Property.Kind = readEnum<llvm::omp::TraitProperty>();
13016     }
13017   }
13018   return &TI;
13019 }
13020 
13021 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13022   if (!Data)
13023     return;
13024   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13025     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13026     skipInts(3);
13027   }
13028   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13029   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13030     Clauses[I] = readOMPClause();
13031   Data->setClauses(Clauses);
13032   if (Data->hasAssociatedStmt())
13033     Data->setAssociatedStmt(readStmt());
13034   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13035     Data->getChildren()[I] = readStmt();
13036 }
13037