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/ASTStructuralEquivalence.h"
19 #include "clang/AST/ASTUnresolvedSet.h"
20 #include "clang/AST/AbstractTypeReader.h"
21 #include "clang/AST/Decl.h"
22 #include "clang/AST/DeclBase.h"
23 #include "clang/AST/DeclCXX.h"
24 #include "clang/AST/DeclFriend.h"
25 #include "clang/AST/DeclGroup.h"
26 #include "clang/AST/DeclObjC.h"
27 #include "clang/AST/DeclTemplate.h"
28 #include "clang/AST/DeclarationName.h"
29 #include "clang/AST/Expr.h"
30 #include "clang/AST/ExprCXX.h"
31 #include "clang/AST/ExternalASTSource.h"
32 #include "clang/AST/NestedNameSpecifier.h"
33 #include "clang/AST/ODRHash.h"
34 #include "clang/AST/OpenMPClause.h"
35 #include "clang/AST/RawCommentList.h"
36 #include "clang/AST/TemplateBase.h"
37 #include "clang/AST/TemplateName.h"
38 #include "clang/AST/Type.h"
39 #include "clang/AST/TypeLoc.h"
40 #include "clang/AST/TypeLocVisitor.h"
41 #include "clang/AST/UnresolvedSet.h"
42 #include "clang/Basic/CommentOptions.h"
43 #include "clang/Basic/Diagnostic.h"
44 #include "clang/Basic/DiagnosticError.h"
45 #include "clang/Basic/DiagnosticOptions.h"
46 #include "clang/Basic/DiagnosticSema.h"
47 #include "clang/Basic/ExceptionSpecificationType.h"
48 #include "clang/Basic/FileManager.h"
49 #include "clang/Basic/FileSystemOptions.h"
50 #include "clang/Basic/IdentifierTable.h"
51 #include "clang/Basic/LLVM.h"
52 #include "clang/Basic/LangOptions.h"
53 #include "clang/Basic/Module.h"
54 #include "clang/Basic/ObjCRuntime.h"
55 #include "clang/Basic/OpenMPKinds.h"
56 #include "clang/Basic/OperatorKinds.h"
57 #include "clang/Basic/PragmaKinds.h"
58 #include "clang/Basic/Sanitizers.h"
59 #include "clang/Basic/SourceLocation.h"
60 #include "clang/Basic/SourceManager.h"
61 #include "clang/Basic/SourceManagerInternals.h"
62 #include "clang/Basic/Specifiers.h"
63 #include "clang/Basic/TargetInfo.h"
64 #include "clang/Basic/TargetOptions.h"
65 #include "clang/Basic/TokenKinds.h"
66 #include "clang/Basic/Version.h"
67 #include "clang/Lex/HeaderSearch.h"
68 #include "clang/Lex/HeaderSearchOptions.h"
69 #include "clang/Lex/MacroInfo.h"
70 #include "clang/Lex/ModuleMap.h"
71 #include "clang/Lex/PreprocessingRecord.h"
72 #include "clang/Lex/Preprocessor.h"
73 #include "clang/Lex/PreprocessorOptions.h"
74 #include "clang/Lex/Token.h"
75 #include "clang/Sema/ObjCMethodList.h"
76 #include "clang/Sema/Scope.h"
77 #include "clang/Sema/Sema.h"
78 #include "clang/Sema/Weak.h"
79 #include "clang/Serialization/ASTBitCodes.h"
80 #include "clang/Serialization/ASTDeserializationListener.h"
81 #include "clang/Serialization/ASTRecordReader.h"
82 #include "clang/Serialization/ContinuousRangeMap.h"
83 #include "clang/Serialization/GlobalModuleIndex.h"
84 #include "clang/Serialization/InMemoryModuleCache.h"
85 #include "clang/Serialization/ModuleFile.h"
86 #include "clang/Serialization/ModuleFileExtension.h"
87 #include "clang/Serialization/ModuleManager.h"
88 #include "clang/Serialization/PCHContainerOperations.h"
89 #include "clang/Serialization/SerializationDiagnostic.h"
90 #include "llvm/ADT/APFloat.h"
91 #include "llvm/ADT/APInt.h"
92 #include "llvm/ADT/APSInt.h"
93 #include "llvm/ADT/ArrayRef.h"
94 #include "llvm/ADT/DenseMap.h"
95 #include "llvm/ADT/FloatingPointMode.h"
96 #include "llvm/ADT/FoldingSet.h"
97 #include "llvm/ADT/Hashing.h"
98 #include "llvm/ADT/IntrusiveRefCntPtr.h"
99 #include "llvm/ADT/None.h"
100 #include "llvm/ADT/Optional.h"
101 #include "llvm/ADT/STLExtras.h"
102 #include "llvm/ADT/ScopeExit.h"
103 #include "llvm/ADT/SmallPtrSet.h"
104 #include "llvm/ADT/SmallString.h"
105 #include "llvm/ADT/SmallVector.h"
106 #include "llvm/ADT/StringExtras.h"
107 #include "llvm/ADT/StringMap.h"
108 #include "llvm/ADT/StringRef.h"
109 #include "llvm/ADT/Triple.h"
110 #include "llvm/ADT/iterator_range.h"
111 #include "llvm/Bitstream/BitstreamReader.h"
112 #include "llvm/Support/Casting.h"
113 #include "llvm/Support/Compiler.h"
114 #include "llvm/Support/Compression.h"
115 #include "llvm/Support/DJB.h"
116 #include "llvm/Support/Endian.h"
117 #include "llvm/Support/Error.h"
118 #include "llvm/Support/ErrorHandling.h"
119 #include "llvm/Support/FileSystem.h"
120 #include "llvm/Support/LEB128.h"
121 #include "llvm/Support/MemoryBuffer.h"
122 #include "llvm/Support/Path.h"
123 #include "llvm/Support/SaveAndRestore.h"
124 #include "llvm/Support/Timer.h"
125 #include "llvm/Support/VersionTuple.h"
126 #include "llvm/Support/raw_ostream.h"
127 #include <algorithm>
128 #include <cassert>
129 #include <cstddef>
130 #include <cstdint>
131 #include <cstdio>
132 #include <ctime>
133 #include <iterator>
134 #include <limits>
135 #include <map>
136 #include <memory>
137 #include <string>
138 #include <system_error>
139 #include <tuple>
140 #include <utility>
141 #include <vector>
142 
143 using namespace clang;
144 using namespace clang::serialization;
145 using namespace clang::serialization::reader;
146 using llvm::BitstreamCursor;
147 
148 //===----------------------------------------------------------------------===//
149 // ChainedASTReaderListener implementation
150 //===----------------------------------------------------------------------===//
151 
152 bool
153 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
154   return First->ReadFullVersionInformation(FullVersion) ||
155          Second->ReadFullVersionInformation(FullVersion);
156 }
157 
158 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
159   First->ReadModuleName(ModuleName);
160   Second->ReadModuleName(ModuleName);
161 }
162 
163 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
164   First->ReadModuleMapFile(ModuleMapPath);
165   Second->ReadModuleMapFile(ModuleMapPath);
166 }
167 
168 bool
169 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
170                                               bool Complain,
171                                               bool AllowCompatibleDifferences) {
172   return First->ReadLanguageOptions(LangOpts, Complain,
173                                     AllowCompatibleDifferences) ||
174          Second->ReadLanguageOptions(LangOpts, Complain,
175                                      AllowCompatibleDifferences);
176 }
177 
178 bool ChainedASTReaderListener::ReadTargetOptions(
179     const TargetOptions &TargetOpts, bool Complain,
180     bool AllowCompatibleDifferences) {
181   return First->ReadTargetOptions(TargetOpts, Complain,
182                                   AllowCompatibleDifferences) ||
183          Second->ReadTargetOptions(TargetOpts, Complain,
184                                    AllowCompatibleDifferences);
185 }
186 
187 bool ChainedASTReaderListener::ReadDiagnosticOptions(
188     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
189   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
190          Second->ReadDiagnosticOptions(DiagOpts, Complain);
191 }
192 
193 bool
194 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
195                                                 bool Complain) {
196   return First->ReadFileSystemOptions(FSOpts, Complain) ||
197          Second->ReadFileSystemOptions(FSOpts, Complain);
198 }
199 
200 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
201     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
202     bool Complain) {
203   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
204                                         Complain) ||
205          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
206                                          Complain);
207 }
208 
209 bool ChainedASTReaderListener::ReadPreprocessorOptions(
210     const PreprocessorOptions &PPOpts, bool Complain,
211     std::string &SuggestedPredefines) {
212   return First->ReadPreprocessorOptions(PPOpts, Complain,
213                                         SuggestedPredefines) ||
214          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
215 }
216 
217 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
218                                            unsigned Value) {
219   First->ReadCounter(M, Value);
220   Second->ReadCounter(M, Value);
221 }
222 
223 bool ChainedASTReaderListener::needsInputFileVisitation() {
224   return First->needsInputFileVisitation() ||
225          Second->needsInputFileVisitation();
226 }
227 
228 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
229   return First->needsSystemInputFileVisitation() ||
230   Second->needsSystemInputFileVisitation();
231 }
232 
233 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
234                                                ModuleKind Kind) {
235   First->visitModuleFile(Filename, Kind);
236   Second->visitModuleFile(Filename, Kind);
237 }
238 
239 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
240                                               bool isSystem,
241                                               bool isOverridden,
242                                               bool isExplicitModule) {
243   bool Continue = false;
244   if (First->needsInputFileVisitation() &&
245       (!isSystem || First->needsSystemInputFileVisitation()))
246     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
247                                       isExplicitModule);
248   if (Second->needsInputFileVisitation() &&
249       (!isSystem || Second->needsSystemInputFileVisitation()))
250     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
251                                        isExplicitModule);
252   return Continue;
253 }
254 
255 void ChainedASTReaderListener::readModuleFileExtension(
256        const ModuleFileExtensionMetadata &Metadata) {
257   First->readModuleFileExtension(Metadata);
258   Second->readModuleFileExtension(Metadata);
259 }
260 
261 //===----------------------------------------------------------------------===//
262 // PCH validator implementation
263 //===----------------------------------------------------------------------===//
264 
265 ASTReaderListener::~ASTReaderListener() = default;
266 
267 /// Compare the given set of language options against an existing set of
268 /// language options.
269 ///
270 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
271 /// \param AllowCompatibleDifferences If true, differences between compatible
272 ///        language options will be permitted.
273 ///
274 /// \returns true if the languagae options mis-match, false otherwise.
275 static bool checkLanguageOptions(const LangOptions &LangOpts,
276                                  const LangOptions &ExistingLangOpts,
277                                  DiagnosticsEngine *Diags,
278                                  bool AllowCompatibleDifferences = true) {
279 #define LANGOPT(Name, Bits, Default, Description)                 \
280   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
281     if (Diags)                                                    \
282       Diags->Report(diag::err_pch_langopt_mismatch)               \
283         << Description << LangOpts.Name << ExistingLangOpts.Name; \
284     return true;                                                  \
285   }
286 
287 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
288   if (ExistingLangOpts.Name != LangOpts.Name) {           \
289     if (Diags)                                            \
290       Diags->Report(diag::err_pch_langopt_value_mismatch) \
291         << Description;                                   \
292     return true;                                          \
293   }
294 
295 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
296   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
297     if (Diags)                                                 \
298       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
299         << Description;                                        \
300     return true;                                               \
301   }
302 
303 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
304   if (!AllowCompatibleDifferences)                            \
305     LANGOPT(Name, Bits, Default, Description)
306 
307 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
308   if (!AllowCompatibleDifferences)                                 \
309     ENUM_LANGOPT(Name, Bits, Default, Description)
310 
311 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
312   if (!AllowCompatibleDifferences)                                 \
313     VALUE_LANGOPT(Name, Bits, Default, Description)
314 
315 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
316 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
317 #define BENIGN_VALUE_LANGOPT(Name, Bits, Default, Description)
318 #include "clang/Basic/LangOptions.def"
319 
320   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
321     if (Diags)
322       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
323     return true;
324   }
325 
326   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
327     if (Diags)
328       Diags->Report(diag::err_pch_langopt_value_mismatch)
329       << "target Objective-C runtime";
330     return true;
331   }
332 
333   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
334       LangOpts.CommentOpts.BlockCommandNames) {
335     if (Diags)
336       Diags->Report(diag::err_pch_langopt_value_mismatch)
337         << "block command names";
338     return true;
339   }
340 
341   // Sanitizer feature mismatches are treated as compatible differences. If
342   // compatible differences aren't allowed, we still only want to check for
343   // mismatches of non-modular sanitizers (the only ones which can affect AST
344   // generation).
345   if (!AllowCompatibleDifferences) {
346     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
347     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
348     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
349     ExistingSanitizers.clear(ModularSanitizers);
350     ImportedSanitizers.clear(ModularSanitizers);
351     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
352       const std::string Flag = "-fsanitize=";
353       if (Diags) {
354 #define SANITIZER(NAME, ID)                                                    \
355   {                                                                            \
356     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
357     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
358     if (InExistingModule != InImportedModule)                                  \
359       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
360           << InExistingModule << (Flag + NAME);                                \
361   }
362 #include "clang/Basic/Sanitizers.def"
363       }
364       return true;
365     }
366   }
367 
368   return false;
369 }
370 
371 /// Compare the given set of target options against an existing set of
372 /// target options.
373 ///
374 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
375 ///
376 /// \returns true if the target options mis-match, false otherwise.
377 static bool checkTargetOptions(const TargetOptions &TargetOpts,
378                                const TargetOptions &ExistingTargetOpts,
379                                DiagnosticsEngine *Diags,
380                                bool AllowCompatibleDifferences = true) {
381 #define CHECK_TARGET_OPT(Field, Name)                             \
382   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
383     if (Diags)                                                    \
384       Diags->Report(diag::err_pch_targetopt_mismatch)             \
385         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
386     return true;                                                  \
387   }
388 
389   // The triple and ABI must match exactly.
390   CHECK_TARGET_OPT(Triple, "target");
391   CHECK_TARGET_OPT(ABI, "target ABI");
392 
393   // We can tolerate different CPUs in many cases, notably when one CPU
394   // supports a strict superset of another. When allowing compatible
395   // differences skip this check.
396   if (!AllowCompatibleDifferences) {
397     CHECK_TARGET_OPT(CPU, "target CPU");
398     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
399   }
400 
401 #undef CHECK_TARGET_OPT
402 
403   // Compare feature sets.
404   SmallVector<StringRef, 4> ExistingFeatures(
405                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
406                                              ExistingTargetOpts.FeaturesAsWritten.end());
407   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
408                                          TargetOpts.FeaturesAsWritten.end());
409   llvm::sort(ExistingFeatures);
410   llvm::sort(ReadFeatures);
411 
412   // We compute the set difference in both directions explicitly so that we can
413   // diagnose the differences differently.
414   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
415   std::set_difference(
416       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
417       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
418   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
419                       ExistingFeatures.begin(), ExistingFeatures.end(),
420                       std::back_inserter(UnmatchedReadFeatures));
421 
422   // If we are allowing compatible differences and the read feature set is
423   // a strict subset of the existing feature set, there is nothing to diagnose.
424   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
425     return false;
426 
427   if (Diags) {
428     for (StringRef Feature : UnmatchedReadFeatures)
429       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
430           << /* is-existing-feature */ false << Feature;
431     for (StringRef Feature : UnmatchedExistingFeatures)
432       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
433           << /* is-existing-feature */ true << Feature;
434   }
435 
436   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
437 }
438 
439 bool
440 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
441                                   bool Complain,
442                                   bool AllowCompatibleDifferences) {
443   const LangOptions &ExistingLangOpts = PP.getLangOpts();
444   return checkLanguageOptions(LangOpts, ExistingLangOpts,
445                               Complain ? &Reader.Diags : nullptr,
446                               AllowCompatibleDifferences);
447 }
448 
449 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
450                                      bool Complain,
451                                      bool AllowCompatibleDifferences) {
452   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
453   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
454                             Complain ? &Reader.Diags : nullptr,
455                             AllowCompatibleDifferences);
456 }
457 
458 namespace {
459 
460 using MacroDefinitionsMap =
461     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
462 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
463 
464 } // namespace
465 
466 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
467                                          DiagnosticsEngine &Diags,
468                                          bool Complain) {
469   using Level = DiagnosticsEngine::Level;
470 
471   // Check current mappings for new -Werror mappings, and the stored mappings
472   // for cases that were explicitly mapped to *not* be errors that are now
473   // errors because of options like -Werror.
474   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
475 
476   for (DiagnosticsEngine *MappingSource : MappingSources) {
477     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
478       diag::kind DiagID = DiagIDMappingPair.first;
479       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
480       if (CurLevel < DiagnosticsEngine::Error)
481         continue; // not significant
482       Level StoredLevel =
483           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
484       if (StoredLevel < DiagnosticsEngine::Error) {
485         if (Complain)
486           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
487               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
488         return true;
489       }
490     }
491   }
492 
493   return false;
494 }
495 
496 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
497   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
498   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
499     return true;
500   return Ext >= diag::Severity::Error;
501 }
502 
503 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
504                                     DiagnosticsEngine &Diags,
505                                     bool IsSystem, bool Complain) {
506   // Top-level options
507   if (IsSystem) {
508     if (Diags.getSuppressSystemWarnings())
509       return false;
510     // If -Wsystem-headers was not enabled before, be conservative
511     if (StoredDiags.getSuppressSystemWarnings()) {
512       if (Complain)
513         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
514       return true;
515     }
516   }
517 
518   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
519     if (Complain)
520       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
521     return true;
522   }
523 
524   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
525       !StoredDiags.getEnableAllWarnings()) {
526     if (Complain)
527       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
528     return true;
529   }
530 
531   if (isExtHandlingFromDiagsError(Diags) &&
532       !isExtHandlingFromDiagsError(StoredDiags)) {
533     if (Complain)
534       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
535     return true;
536   }
537 
538   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
539 }
540 
541 /// Return the top import module if it is implicit, nullptr otherwise.
542 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
543                                           Preprocessor &PP) {
544   // If the original import came from a file explicitly generated by the user,
545   // don't check the diagnostic mappings.
546   // FIXME: currently this is approximated by checking whether this is not a
547   // module import of an implicitly-loaded module file.
548   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
549   // the transitive closure of its imports, since unrelated modules cannot be
550   // imported until after this module finishes validation.
551   ModuleFile *TopImport = &*ModuleMgr.rbegin();
552   while (!TopImport->ImportedBy.empty())
553     TopImport = TopImport->ImportedBy[0];
554   if (TopImport->Kind != MK_ImplicitModule)
555     return nullptr;
556 
557   StringRef ModuleName = TopImport->ModuleName;
558   assert(!ModuleName.empty() && "diagnostic options read before module name");
559 
560   Module *M =
561       PP.getHeaderSearchInfo().lookupModule(ModuleName, TopImport->ImportLoc);
562   assert(M && "missing module");
563   return M;
564 }
565 
566 bool PCHValidator::ReadDiagnosticOptions(
567     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
568   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
569   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
570   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
571       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
572   // This should never fail, because we would have processed these options
573   // before writing them to an ASTFile.
574   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
575 
576   ModuleManager &ModuleMgr = Reader.getModuleManager();
577   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
578 
579   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
580   if (!TopM)
581     return false;
582 
583   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
584   // contains the union of their flags.
585   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
586                                  Complain);
587 }
588 
589 /// Collect the macro definitions provided by the given preprocessor
590 /// options.
591 static void
592 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
593                         MacroDefinitionsMap &Macros,
594                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
595   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
596     StringRef Macro = PPOpts.Macros[I].first;
597     bool IsUndef = PPOpts.Macros[I].second;
598 
599     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
600     StringRef MacroName = MacroPair.first;
601     StringRef MacroBody = MacroPair.second;
602 
603     // For an #undef'd macro, we only care about the name.
604     if (IsUndef) {
605       if (MacroNames && !Macros.count(MacroName))
606         MacroNames->push_back(MacroName);
607 
608       Macros[MacroName] = std::make_pair("", true);
609       continue;
610     }
611 
612     // For a #define'd macro, figure out the actual definition.
613     if (MacroName.size() == Macro.size())
614       MacroBody = "1";
615     else {
616       // Note: GCC drops anything following an end-of-line character.
617       StringRef::size_type End = MacroBody.find_first_of("\n\r");
618       MacroBody = MacroBody.substr(0, End);
619     }
620 
621     if (MacroNames && !Macros.count(MacroName))
622       MacroNames->push_back(MacroName);
623     Macros[MacroName] = std::make_pair(MacroBody, false);
624   }
625 }
626 
627 /// Check the preprocessor options deserialized from the control block
628 /// against the preprocessor options in an existing preprocessor.
629 ///
630 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
631 /// \param Validate If true, validate preprocessor options. If false, allow
632 ///        macros defined by \p ExistingPPOpts to override those defined by
633 ///        \p PPOpts in SuggestedPredefines.
634 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
635                                      const PreprocessorOptions &ExistingPPOpts,
636                                      DiagnosticsEngine *Diags,
637                                      FileManager &FileMgr,
638                                      std::string &SuggestedPredefines,
639                                      const LangOptions &LangOpts,
640                                      bool Validate = true) {
641   // Check macro definitions.
642   MacroDefinitionsMap ASTFileMacros;
643   collectMacroDefinitions(PPOpts, ASTFileMacros);
644   MacroDefinitionsMap ExistingMacros;
645   SmallVector<StringRef, 4> ExistingMacroNames;
646   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
647 
648   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
649     // Dig out the macro definition in the existing preprocessor options.
650     StringRef MacroName = ExistingMacroNames[I];
651     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
652 
653     // Check whether we know anything about this macro name or not.
654     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
655         ASTFileMacros.find(MacroName);
656     if (!Validate || Known == ASTFileMacros.end()) {
657       // FIXME: Check whether this identifier was referenced anywhere in the
658       // AST file. If so, we should reject the AST file. Unfortunately, this
659       // information isn't in the control block. What shall we do about it?
660 
661       if (Existing.second) {
662         SuggestedPredefines += "#undef ";
663         SuggestedPredefines += MacroName.str();
664         SuggestedPredefines += '\n';
665       } else {
666         SuggestedPredefines += "#define ";
667         SuggestedPredefines += MacroName.str();
668         SuggestedPredefines += ' ';
669         SuggestedPredefines += Existing.first.str();
670         SuggestedPredefines += '\n';
671       }
672       continue;
673     }
674 
675     // If the macro was defined in one but undef'd in the other, we have a
676     // conflict.
677     if (Existing.second != Known->second.second) {
678       if (Diags) {
679         Diags->Report(diag::err_pch_macro_def_undef)
680           << MacroName << Known->second.second;
681       }
682       return true;
683     }
684 
685     // If the macro was #undef'd in both, or if the macro bodies are identical,
686     // it's fine.
687     if (Existing.second || Existing.first == Known->second.first)
688       continue;
689 
690     // The macro bodies differ; complain.
691     if (Diags) {
692       Diags->Report(diag::err_pch_macro_def_conflict)
693         << MacroName << Known->second.first << Existing.first;
694     }
695     return true;
696   }
697 
698   // Check whether we're using predefines.
699   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
700     if (Diags) {
701       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
702     }
703     return true;
704   }
705 
706   // Detailed record is important since it is used for the module cache hash.
707   if (LangOpts.Modules &&
708       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
709     if (Diags) {
710       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
711     }
712     return true;
713   }
714 
715   // Compute the #include and #include_macros lines we need.
716   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
717     StringRef File = ExistingPPOpts.Includes[I];
718 
719     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
720         !ExistingPPOpts.PCHThroughHeader.empty()) {
721       // In case the through header is an include, we must add all the includes
722       // to the predefines so the start point can be determined.
723       SuggestedPredefines += "#include \"";
724       SuggestedPredefines += File;
725       SuggestedPredefines += "\"\n";
726       continue;
727     }
728 
729     if (File == ExistingPPOpts.ImplicitPCHInclude)
730       continue;
731 
732     if (llvm::is_contained(PPOpts.Includes, File))
733       continue;
734 
735     SuggestedPredefines += "#include \"";
736     SuggestedPredefines += File;
737     SuggestedPredefines += "\"\n";
738   }
739 
740   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
741     StringRef File = ExistingPPOpts.MacroIncludes[I];
742     if (llvm::is_contained(PPOpts.MacroIncludes, File))
743       continue;
744 
745     SuggestedPredefines += "#__include_macros \"";
746     SuggestedPredefines += File;
747     SuggestedPredefines += "\"\n##\n";
748   }
749 
750   return false;
751 }
752 
753 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
754                                            bool Complain,
755                                            std::string &SuggestedPredefines) {
756   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
757 
758   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
759                                   Complain? &Reader.Diags : nullptr,
760                                   PP.getFileManager(),
761                                   SuggestedPredefines,
762                                   PP.getLangOpts());
763 }
764 
765 bool SimpleASTReaderListener::ReadPreprocessorOptions(
766                                   const PreprocessorOptions &PPOpts,
767                                   bool Complain,
768                                   std::string &SuggestedPredefines) {
769   return checkPreprocessorOptions(PPOpts,
770                                   PP.getPreprocessorOpts(),
771                                   nullptr,
772                                   PP.getFileManager(),
773                                   SuggestedPredefines,
774                                   PP.getLangOpts(),
775                                   false);
776 }
777 
778 /// Check the header search options deserialized from the control block
779 /// against the header search options in an existing preprocessor.
780 ///
781 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
782 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
783                                      StringRef SpecificModuleCachePath,
784                                      StringRef ExistingModuleCachePath,
785                                      DiagnosticsEngine *Diags,
786                                      const LangOptions &LangOpts,
787                                      const PreprocessorOptions &PPOpts) {
788   if (LangOpts.Modules) {
789     if (SpecificModuleCachePath != ExistingModuleCachePath &&
790         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
791       if (Diags)
792         Diags->Report(diag::err_pch_modulecache_mismatch)
793           << SpecificModuleCachePath << ExistingModuleCachePath;
794       return true;
795     }
796   }
797 
798   return false;
799 }
800 
801 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
802                                            StringRef SpecificModuleCachePath,
803                                            bool Complain) {
804   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
805                                   PP.getHeaderSearchInfo().getModuleCachePath(),
806                                   Complain ? &Reader.Diags : nullptr,
807                                   PP.getLangOpts(), PP.getPreprocessorOpts());
808 }
809 
810 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
811   PP.setCounterValue(Value);
812 }
813 
814 //===----------------------------------------------------------------------===//
815 // AST reader implementation
816 //===----------------------------------------------------------------------===//
817 
818 static uint64_t readULEB(const unsigned char *&P) {
819   unsigned Length = 0;
820   const char *Error = nullptr;
821 
822   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
823   if (Error)
824     llvm::report_fatal_error(Error);
825   P += Length;
826   return Val;
827 }
828 
829 /// Read ULEB-encoded key length and data length.
830 static std::pair<unsigned, unsigned>
831 readULEBKeyDataLength(const unsigned char *&P) {
832   unsigned KeyLen = readULEB(P);
833   if ((unsigned)KeyLen != KeyLen)
834     llvm::report_fatal_error("key too large");
835 
836   unsigned DataLen = readULEB(P);
837   if ((unsigned)DataLen != DataLen)
838     llvm::report_fatal_error("data too large");
839 
840   return std::make_pair(KeyLen, DataLen);
841 }
842 
843 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
844                                            bool TakeOwnership) {
845   DeserializationListener = Listener;
846   OwnsDeserializationListener = TakeOwnership;
847 }
848 
849 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
850   return serialization::ComputeHash(Sel);
851 }
852 
853 std::pair<unsigned, unsigned>
854 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
855   return readULEBKeyDataLength(d);
856 }
857 
858 ASTSelectorLookupTrait::internal_key_type
859 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
860   using namespace llvm::support;
861 
862   SelectorTable &SelTable = Reader.getContext().Selectors;
863   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
864   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
865       F, endian::readNext<uint32_t, little, unaligned>(d));
866   if (N == 0)
867     return SelTable.getNullarySelector(FirstII);
868   else if (N == 1)
869     return SelTable.getUnarySelector(FirstII);
870 
871   SmallVector<IdentifierInfo *, 16> Args;
872   Args.push_back(FirstII);
873   for (unsigned I = 1; I != N; ++I)
874     Args.push_back(Reader.getLocalIdentifier(
875         F, endian::readNext<uint32_t, little, unaligned>(d)));
876 
877   return SelTable.getSelector(N, Args.data());
878 }
879 
880 ASTSelectorLookupTrait::data_type
881 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
882                                  unsigned DataLen) {
883   using namespace llvm::support;
884 
885   data_type Result;
886 
887   Result.ID = Reader.getGlobalSelectorID(
888       F, endian::readNext<uint32_t, little, unaligned>(d));
889   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
890   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
891   Result.InstanceBits = FullInstanceBits & 0x3;
892   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
893   Result.FactoryBits = FullFactoryBits & 0x3;
894   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
895   unsigned NumInstanceMethods = FullInstanceBits >> 3;
896   unsigned NumFactoryMethods = FullFactoryBits >> 3;
897 
898   // Load instance methods
899   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
900     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
901             F, endian::readNext<uint32_t, little, unaligned>(d)))
902       Result.Instance.push_back(Method);
903   }
904 
905   // Load factory methods
906   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
907     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
908             F, endian::readNext<uint32_t, little, unaligned>(d)))
909       Result.Factory.push_back(Method);
910   }
911 
912   return Result;
913 }
914 
915 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
916   return llvm::djbHash(a);
917 }
918 
919 std::pair<unsigned, unsigned>
920 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
921   return readULEBKeyDataLength(d);
922 }
923 
924 ASTIdentifierLookupTraitBase::internal_key_type
925 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
926   assert(n >= 2 && d[n-1] == '\0');
927   return StringRef((const char*) d, n-1);
928 }
929 
930 /// Whether the given identifier is "interesting".
931 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
932                                     bool IsModule) {
933   return II.hadMacroDefinition() || II.isPoisoned() ||
934          (!IsModule && II.getObjCOrBuiltinID()) ||
935          II.hasRevertedTokenIDToIdentifier() ||
936          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
937           II.getFETokenInfo());
938 }
939 
940 static bool readBit(unsigned &Bits) {
941   bool Value = Bits & 0x1;
942   Bits >>= 1;
943   return Value;
944 }
945 
946 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
947   using namespace llvm::support;
948 
949   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
950   return Reader.getGlobalIdentifierID(F, RawID >> 1);
951 }
952 
953 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
954   if (!II.isFromAST()) {
955     II.setIsFromAST();
956     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
957     if (isInterestingIdentifier(Reader, II, IsModule))
958       II.setChangedSinceDeserialization();
959   }
960 }
961 
962 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
963                                                    const unsigned char* d,
964                                                    unsigned DataLen) {
965   using namespace llvm::support;
966 
967   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
968   bool IsInteresting = RawID & 0x01;
969 
970   // Wipe out the "is interesting" bit.
971   RawID = RawID >> 1;
972 
973   // Build the IdentifierInfo and link the identifier ID with it.
974   IdentifierInfo *II = KnownII;
975   if (!II) {
976     II = &Reader.getIdentifierTable().getOwn(k);
977     KnownII = II;
978   }
979   markIdentifierFromAST(Reader, *II);
980   Reader.markIdentifierUpToDate(II);
981 
982   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
983   if (!IsInteresting) {
984     // For uninteresting identifiers, there's nothing else to do. Just notify
985     // the reader that we've finished loading this identifier.
986     Reader.SetIdentifierInfo(ID, II);
987     return II;
988   }
989 
990   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
991   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
992   bool CPlusPlusOperatorKeyword = readBit(Bits);
993   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
994   bool Poisoned = readBit(Bits);
995   bool ExtensionToken = readBit(Bits);
996   bool HadMacroDefinition = readBit(Bits);
997 
998   assert(Bits == 0 && "Extra bits in the identifier?");
999   DataLen -= 8;
1000 
1001   // Set or check the various bits in the IdentifierInfo structure.
1002   // Token IDs are read-only.
1003   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1004     II->revertTokenIDToIdentifier();
1005   if (!F.isModule())
1006     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1007   assert(II->isExtensionToken() == ExtensionToken &&
1008          "Incorrect extension token flag");
1009   (void)ExtensionToken;
1010   if (Poisoned)
1011     II->setIsPoisoned(true);
1012   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1013          "Incorrect C++ operator keyword flag");
1014   (void)CPlusPlusOperatorKeyword;
1015 
1016   // If this identifier is a macro, deserialize the macro
1017   // definition.
1018   if (HadMacroDefinition) {
1019     uint32_t MacroDirectivesOffset =
1020         endian::readNext<uint32_t, little, unaligned>(d);
1021     DataLen -= 4;
1022 
1023     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1024   }
1025 
1026   Reader.SetIdentifierInfo(ID, II);
1027 
1028   // Read all of the declarations visible at global scope with this
1029   // name.
1030   if (DataLen > 0) {
1031     SmallVector<uint32_t, 4> DeclIDs;
1032     for (; DataLen > 0; DataLen -= 4)
1033       DeclIDs.push_back(Reader.getGlobalDeclID(
1034           F, endian::readNext<uint32_t, little, unaligned>(d)));
1035     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1036   }
1037 
1038   return II;
1039 }
1040 
1041 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1042     : Kind(Name.getNameKind()) {
1043   switch (Kind) {
1044   case DeclarationName::Identifier:
1045     Data = (uint64_t)Name.getAsIdentifierInfo();
1046     break;
1047   case DeclarationName::ObjCZeroArgSelector:
1048   case DeclarationName::ObjCOneArgSelector:
1049   case DeclarationName::ObjCMultiArgSelector:
1050     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1051     break;
1052   case DeclarationName::CXXOperatorName:
1053     Data = Name.getCXXOverloadedOperator();
1054     break;
1055   case DeclarationName::CXXLiteralOperatorName:
1056     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1057     break;
1058   case DeclarationName::CXXDeductionGuideName:
1059     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1060                ->getDeclName().getAsIdentifierInfo();
1061     break;
1062   case DeclarationName::CXXConstructorName:
1063   case DeclarationName::CXXDestructorName:
1064   case DeclarationName::CXXConversionFunctionName:
1065   case DeclarationName::CXXUsingDirective:
1066     Data = 0;
1067     break;
1068   }
1069 }
1070 
1071 unsigned DeclarationNameKey::getHash() const {
1072   llvm::FoldingSetNodeID ID;
1073   ID.AddInteger(Kind);
1074 
1075   switch (Kind) {
1076   case DeclarationName::Identifier:
1077   case DeclarationName::CXXLiteralOperatorName:
1078   case DeclarationName::CXXDeductionGuideName:
1079     ID.AddString(((IdentifierInfo*)Data)->getName());
1080     break;
1081   case DeclarationName::ObjCZeroArgSelector:
1082   case DeclarationName::ObjCOneArgSelector:
1083   case DeclarationName::ObjCMultiArgSelector:
1084     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1085     break;
1086   case DeclarationName::CXXOperatorName:
1087     ID.AddInteger((OverloadedOperatorKind)Data);
1088     break;
1089   case DeclarationName::CXXConstructorName:
1090   case DeclarationName::CXXDestructorName:
1091   case DeclarationName::CXXConversionFunctionName:
1092   case DeclarationName::CXXUsingDirective:
1093     break;
1094   }
1095 
1096   return ID.ComputeHash();
1097 }
1098 
1099 ModuleFile *
1100 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1101   using namespace llvm::support;
1102 
1103   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1104   return Reader.getLocalModuleFile(F, ModuleFileID);
1105 }
1106 
1107 std::pair<unsigned, unsigned>
1108 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1109   return readULEBKeyDataLength(d);
1110 }
1111 
1112 ASTDeclContextNameLookupTrait::internal_key_type
1113 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1114   using namespace llvm::support;
1115 
1116   auto Kind = (DeclarationName::NameKind)*d++;
1117   uint64_t Data;
1118   switch (Kind) {
1119   case DeclarationName::Identifier:
1120   case DeclarationName::CXXLiteralOperatorName:
1121   case DeclarationName::CXXDeductionGuideName:
1122     Data = (uint64_t)Reader.getLocalIdentifier(
1123         F, endian::readNext<uint32_t, little, unaligned>(d));
1124     break;
1125   case DeclarationName::ObjCZeroArgSelector:
1126   case DeclarationName::ObjCOneArgSelector:
1127   case DeclarationName::ObjCMultiArgSelector:
1128     Data =
1129         (uint64_t)Reader.getLocalSelector(
1130                              F, endian::readNext<uint32_t, little, unaligned>(
1131                                     d)).getAsOpaquePtr();
1132     break;
1133   case DeclarationName::CXXOperatorName:
1134     Data = *d++; // OverloadedOperatorKind
1135     break;
1136   case DeclarationName::CXXConstructorName:
1137   case DeclarationName::CXXDestructorName:
1138   case DeclarationName::CXXConversionFunctionName:
1139   case DeclarationName::CXXUsingDirective:
1140     Data = 0;
1141     break;
1142   }
1143 
1144   return DeclarationNameKey(Kind, Data);
1145 }
1146 
1147 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1148                                                  const unsigned char *d,
1149                                                  unsigned DataLen,
1150                                                  data_type_builder &Val) {
1151   using namespace llvm::support;
1152 
1153   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1154     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1155     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1156   }
1157 }
1158 
1159 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1160                                               BitstreamCursor &Cursor,
1161                                               uint64_t Offset,
1162                                               DeclContext *DC) {
1163   assert(Offset != 0);
1164 
1165   SavedStreamPosition SavedPosition(Cursor);
1166   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1167     Error(std::move(Err));
1168     return true;
1169   }
1170 
1171   RecordData Record;
1172   StringRef Blob;
1173   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1174   if (!MaybeCode) {
1175     Error(MaybeCode.takeError());
1176     return true;
1177   }
1178   unsigned Code = MaybeCode.get();
1179 
1180   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1181   if (!MaybeRecCode) {
1182     Error(MaybeRecCode.takeError());
1183     return true;
1184   }
1185   unsigned RecCode = MaybeRecCode.get();
1186   if (RecCode != DECL_CONTEXT_LEXICAL) {
1187     Error("Expected lexical block");
1188     return true;
1189   }
1190 
1191   assert(!isa<TranslationUnitDecl>(DC) &&
1192          "expected a TU_UPDATE_LEXICAL record for TU");
1193   // If we are handling a C++ class template instantiation, we can see multiple
1194   // lexical updates for the same record. It's important that we select only one
1195   // of them, so that field numbering works properly. Just pick the first one we
1196   // see.
1197   auto &Lex = LexicalDecls[DC];
1198   if (!Lex.first) {
1199     Lex = std::make_pair(
1200         &M, llvm::makeArrayRef(
1201                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1202                     Blob.data()),
1203                 Blob.size() / 4));
1204   }
1205   DC->setHasExternalLexicalStorage(true);
1206   return false;
1207 }
1208 
1209 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1210                                               BitstreamCursor &Cursor,
1211                                               uint64_t Offset,
1212                                               DeclID ID) {
1213   assert(Offset != 0);
1214 
1215   SavedStreamPosition SavedPosition(Cursor);
1216   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1217     Error(std::move(Err));
1218     return true;
1219   }
1220 
1221   RecordData Record;
1222   StringRef Blob;
1223   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1224   if (!MaybeCode) {
1225     Error(MaybeCode.takeError());
1226     return true;
1227   }
1228   unsigned Code = MaybeCode.get();
1229 
1230   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1231   if (!MaybeRecCode) {
1232     Error(MaybeRecCode.takeError());
1233     return true;
1234   }
1235   unsigned RecCode = MaybeRecCode.get();
1236   if (RecCode != DECL_CONTEXT_VISIBLE) {
1237     Error("Expected visible lookup table block");
1238     return true;
1239   }
1240 
1241   // We can't safely determine the primary context yet, so delay attaching the
1242   // lookup table until we're done with recursive deserialization.
1243   auto *Data = (const unsigned char*)Blob.data();
1244   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1245   return false;
1246 }
1247 
1248 void ASTReader::Error(StringRef Msg) const {
1249   Error(diag::err_fe_pch_malformed, Msg);
1250   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1251       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1252     Diag(diag::note_module_cache_path)
1253       << PP.getHeaderSearchInfo().getModuleCachePath();
1254   }
1255 }
1256 
1257 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1258                       StringRef Arg3) const {
1259   if (Diags.isDiagnosticInFlight())
1260     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1261   else
1262     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1263 }
1264 
1265 void ASTReader::Error(llvm::Error &&Err) const {
1266   llvm::Error RemainingErr =
1267       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1268         auto Diag = E.getDiagnostic().second;
1269 
1270         // Ideally we'd just emit it, but have to handle a possible in-flight
1271         // diagnostic. Note that the location is currently ignored as well.
1272         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1273         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1274         StringRef Arg1, Arg2, Arg3;
1275         switch (NumArgs) {
1276         case 3:
1277           Arg3 = Diag.getStringArg(2);
1278           LLVM_FALLTHROUGH;
1279         case 2:
1280           Arg2 = Diag.getStringArg(1);
1281           LLVM_FALLTHROUGH;
1282         case 1:
1283           Arg1 = Diag.getStringArg(0);
1284         }
1285         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1286       });
1287   if (RemainingErr)
1288     Error(toString(std::move(RemainingErr)));
1289 }
1290 
1291 //===----------------------------------------------------------------------===//
1292 // Source Manager Deserialization
1293 //===----------------------------------------------------------------------===//
1294 
1295 /// Read the line table in the source manager block.
1296 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1297   unsigned Idx = 0;
1298   LineTableInfo &LineTable = SourceMgr.getLineTable();
1299 
1300   // Parse the file names
1301   std::map<int, int> FileIDs;
1302   FileIDs[-1] = -1; // For unspecified filenames.
1303   for (unsigned I = 0; Record[Idx]; ++I) {
1304     // Extract the file name
1305     auto Filename = ReadPath(F, Record, Idx);
1306     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1307   }
1308   ++Idx;
1309 
1310   // Parse the line entries
1311   std::vector<LineEntry> Entries;
1312   while (Idx < Record.size()) {
1313     int FID = Record[Idx++];
1314     assert(FID >= 0 && "Serialized line entries for non-local file.");
1315     // Remap FileID from 1-based old view.
1316     FID += F.SLocEntryBaseID - 1;
1317 
1318     // Extract the line entries
1319     unsigned NumEntries = Record[Idx++];
1320     assert(NumEntries && "no line entries for file ID");
1321     Entries.clear();
1322     Entries.reserve(NumEntries);
1323     for (unsigned I = 0; I != NumEntries; ++I) {
1324       unsigned FileOffset = Record[Idx++];
1325       unsigned LineNo = Record[Idx++];
1326       int FilenameID = FileIDs[Record[Idx++]];
1327       SrcMgr::CharacteristicKind FileKind
1328         = (SrcMgr::CharacteristicKind)Record[Idx++];
1329       unsigned IncludeOffset = Record[Idx++];
1330       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1331                                        FileKind, IncludeOffset));
1332     }
1333     LineTable.AddEntry(FileID::get(FID), Entries);
1334   }
1335 }
1336 
1337 /// Read a source manager block
1338 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1339   using namespace SrcMgr;
1340 
1341   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1342 
1343   // Set the source-location entry cursor to the current position in
1344   // the stream. This cursor will be used to read the contents of the
1345   // source manager block initially, and then lazily read
1346   // source-location entries as needed.
1347   SLocEntryCursor = F.Stream;
1348 
1349   // The stream itself is going to skip over the source manager block.
1350   if (llvm::Error Err = F.Stream.SkipBlock())
1351     return Err;
1352 
1353   // Enter the source manager block.
1354   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1355     return Err;
1356   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1357 
1358   RecordData Record;
1359   while (true) {
1360     Expected<llvm::BitstreamEntry> MaybeE =
1361         SLocEntryCursor.advanceSkippingSubblocks();
1362     if (!MaybeE)
1363       return MaybeE.takeError();
1364     llvm::BitstreamEntry E = MaybeE.get();
1365 
1366     switch (E.Kind) {
1367     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1368     case llvm::BitstreamEntry::Error:
1369       return llvm::createStringError(std::errc::illegal_byte_sequence,
1370                                      "malformed block record in AST file");
1371     case llvm::BitstreamEntry::EndBlock:
1372       return llvm::Error::success();
1373     case llvm::BitstreamEntry::Record:
1374       // The interesting case.
1375       break;
1376     }
1377 
1378     // Read a record.
1379     Record.clear();
1380     StringRef Blob;
1381     Expected<unsigned> MaybeRecord =
1382         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1383     if (!MaybeRecord)
1384       return MaybeRecord.takeError();
1385     switch (MaybeRecord.get()) {
1386     default:  // Default behavior: ignore.
1387       break;
1388 
1389     case SM_SLOC_FILE_ENTRY:
1390     case SM_SLOC_BUFFER_ENTRY:
1391     case SM_SLOC_EXPANSION_ENTRY:
1392       // Once we hit one of the source location entries, we're done.
1393       return llvm::Error::success();
1394     }
1395   }
1396 }
1397 
1398 /// If a header file is not found at the path that we expect it to be
1399 /// and the PCH file was moved from its original location, try to resolve the
1400 /// file by assuming that header+PCH were moved together and the header is in
1401 /// the same place relative to the PCH.
1402 static std::string
1403 resolveFileRelativeToOriginalDir(const std::string &Filename,
1404                                  const std::string &OriginalDir,
1405                                  const std::string &CurrDir) {
1406   assert(OriginalDir != CurrDir &&
1407          "No point trying to resolve the file if the PCH dir didn't change");
1408 
1409   using namespace llvm::sys;
1410 
1411   SmallString<128> filePath(Filename);
1412   fs::make_absolute(filePath);
1413   assert(path::is_absolute(OriginalDir));
1414   SmallString<128> currPCHPath(CurrDir);
1415 
1416   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1417                        fileDirE = path::end(path::parent_path(filePath));
1418   path::const_iterator origDirI = path::begin(OriginalDir),
1419                        origDirE = path::end(OriginalDir);
1420   // Skip the common path components from filePath and OriginalDir.
1421   while (fileDirI != fileDirE && origDirI != origDirE &&
1422          *fileDirI == *origDirI) {
1423     ++fileDirI;
1424     ++origDirI;
1425   }
1426   for (; origDirI != origDirE; ++origDirI)
1427     path::append(currPCHPath, "..");
1428   path::append(currPCHPath, fileDirI, fileDirE);
1429   path::append(currPCHPath, path::filename(Filename));
1430   return std::string(currPCHPath.str());
1431 }
1432 
1433 bool ASTReader::ReadSLocEntry(int ID) {
1434   if (ID == 0)
1435     return false;
1436 
1437   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1438     Error("source location entry ID out-of-range for AST file");
1439     return true;
1440   }
1441 
1442   // Local helper to read the (possibly-compressed) buffer data following the
1443   // entry record.
1444   auto ReadBuffer = [this](
1445       BitstreamCursor &SLocEntryCursor,
1446       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1447     RecordData Record;
1448     StringRef Blob;
1449     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1450     if (!MaybeCode) {
1451       Error(MaybeCode.takeError());
1452       return nullptr;
1453     }
1454     unsigned Code = MaybeCode.get();
1455 
1456     Expected<unsigned> MaybeRecCode =
1457         SLocEntryCursor.readRecord(Code, Record, &Blob);
1458     if (!MaybeRecCode) {
1459       Error(MaybeRecCode.takeError());
1460       return nullptr;
1461     }
1462     unsigned RecCode = MaybeRecCode.get();
1463 
1464     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1465       if (!llvm::zlib::isAvailable()) {
1466         Error("zlib is not available");
1467         return nullptr;
1468       }
1469       SmallString<0> Uncompressed;
1470       if (llvm::Error E =
1471               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1472         Error("could not decompress embedded file contents: " +
1473               llvm::toString(std::move(E)));
1474         return nullptr;
1475       }
1476       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1477     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1478       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1479     } else {
1480       Error("AST record has invalid code");
1481       return nullptr;
1482     }
1483   };
1484 
1485   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1486   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1487           F->SLocEntryOffsetsBase +
1488           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1489     Error(std::move(Err));
1490     return true;
1491   }
1492 
1493   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1494   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1495 
1496   ++NumSLocEntriesRead;
1497   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1498   if (!MaybeEntry) {
1499     Error(MaybeEntry.takeError());
1500     return true;
1501   }
1502   llvm::BitstreamEntry Entry = MaybeEntry.get();
1503 
1504   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1505     Error("incorrectly-formatted source location entry in AST file");
1506     return true;
1507   }
1508 
1509   RecordData Record;
1510   StringRef Blob;
1511   Expected<unsigned> MaybeSLOC =
1512       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1513   if (!MaybeSLOC) {
1514     Error(MaybeSLOC.takeError());
1515     return true;
1516   }
1517   switch (MaybeSLOC.get()) {
1518   default:
1519     Error("incorrectly-formatted source location entry in AST file");
1520     return true;
1521 
1522   case SM_SLOC_FILE_ENTRY: {
1523     // We will detect whether a file changed and return 'Failure' for it, but
1524     // we will also try to fail gracefully by setting up the SLocEntry.
1525     unsigned InputID = Record[4];
1526     InputFile IF = getInputFile(*F, InputID);
1527     Optional<FileEntryRef> File = IF.getFile();
1528     bool OverriddenBuffer = IF.isOverridden();
1529 
1530     // Note that we only check if a File was returned. If it was out-of-date
1531     // we have complained but we will continue creating a FileID to recover
1532     // gracefully.
1533     if (!File)
1534       return true;
1535 
1536     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1537     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1538       // This is the module's main file.
1539       IncludeLoc = getImportLocation(F);
1540     }
1541     SrcMgr::CharacteristicKind
1542       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1543     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1544                                         BaseOffset + Record[0]);
1545     SrcMgr::FileInfo &FileInfo =
1546           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1547     FileInfo.NumCreatedFIDs = Record[5];
1548     if (Record[3])
1549       FileInfo.setHasLineDirectives();
1550 
1551     unsigned NumFileDecls = Record[7];
1552     if (NumFileDecls && ContextObj) {
1553       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1554       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1555       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1556                                                              NumFileDecls));
1557     }
1558 
1559     const SrcMgr::ContentCache &ContentCache =
1560         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1561     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1562         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1563         !ContentCache.getBufferIfLoaded()) {
1564       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1565       if (!Buffer)
1566         return true;
1567       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1568     }
1569 
1570     break;
1571   }
1572 
1573   case SM_SLOC_BUFFER_ENTRY: {
1574     const char *Name = Blob.data();
1575     unsigned Offset = Record[0];
1576     SrcMgr::CharacteristicKind
1577       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1578     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1579     if (IncludeLoc.isInvalid() && F->isModule()) {
1580       IncludeLoc = getImportLocation(F);
1581     }
1582 
1583     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1584     if (!Buffer)
1585       return true;
1586     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1587                            BaseOffset + Offset, IncludeLoc);
1588     break;
1589   }
1590 
1591   case SM_SLOC_EXPANSION_ENTRY: {
1592     LocSeq::State Seq;
1593     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1], Seq);
1594     SourceLocation ExpansionBegin = ReadSourceLocation(*F, Record[2], Seq);
1595     SourceLocation ExpansionEnd = ReadSourceLocation(*F, Record[3], Seq);
1596     SourceMgr.createExpansionLoc(SpellingLoc, ExpansionBegin, ExpansionEnd,
1597                                  Record[5], Record[4], ID,
1598                                  BaseOffset + Record[0]);
1599     break;
1600   }
1601   }
1602 
1603   return false;
1604 }
1605 
1606 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1607   if (ID == 0)
1608     return std::make_pair(SourceLocation(), "");
1609 
1610   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1611     Error("source location entry ID out-of-range for AST file");
1612     return std::make_pair(SourceLocation(), "");
1613   }
1614 
1615   // Find which module file this entry lands in.
1616   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1617   if (!M->isModule())
1618     return std::make_pair(SourceLocation(), "");
1619 
1620   // FIXME: Can we map this down to a particular submodule? That would be
1621   // ideal.
1622   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1623 }
1624 
1625 /// Find the location where the module F is imported.
1626 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1627   if (F->ImportLoc.isValid())
1628     return F->ImportLoc;
1629 
1630   // Otherwise we have a PCH. It's considered to be "imported" at the first
1631   // location of its includer.
1632   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1633     // Main file is the importer.
1634     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1635     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1636   }
1637   return F->ImportedBy[0]->FirstLoc;
1638 }
1639 
1640 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1641 /// the abbreviations that are at the top of the block and then leave the cursor
1642 /// pointing into the block.
1643 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1644                                         unsigned BlockID,
1645                                         uint64_t *StartOfBlockOffset) {
1646   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1647     return Err;
1648 
1649   if (StartOfBlockOffset)
1650     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1651 
1652   while (true) {
1653     uint64_t Offset = Cursor.GetCurrentBitNo();
1654     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1655     if (!MaybeCode)
1656       return MaybeCode.takeError();
1657     unsigned Code = MaybeCode.get();
1658 
1659     // We expect all abbrevs to be at the start of the block.
1660     if (Code != llvm::bitc::DEFINE_ABBREV) {
1661       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1662         return Err;
1663       return llvm::Error::success();
1664     }
1665     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1666       return Err;
1667   }
1668 }
1669 
1670 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1671                            unsigned &Idx) {
1672   Token Tok;
1673   Tok.startToken();
1674   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1675   Tok.setLength(Record[Idx++]);
1676   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1677     Tok.setIdentifierInfo(II);
1678   Tok.setKind((tok::TokenKind)Record[Idx++]);
1679   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1680   return Tok;
1681 }
1682 
1683 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1684   BitstreamCursor &Stream = F.MacroCursor;
1685 
1686   // Keep track of where we are in the stream, then jump back there
1687   // after reading this macro.
1688   SavedStreamPosition SavedPosition(Stream);
1689 
1690   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1691     // FIXME this drops errors on the floor.
1692     consumeError(std::move(Err));
1693     return nullptr;
1694   }
1695   RecordData Record;
1696   SmallVector<IdentifierInfo*, 16> MacroParams;
1697   MacroInfo *Macro = nullptr;
1698   llvm::MutableArrayRef<Token> MacroTokens;
1699 
1700   while (true) {
1701     // Advance to the next record, but if we get to the end of the block, don't
1702     // pop it (removing all the abbreviations from the cursor) since we want to
1703     // be able to reseek within the block and read entries.
1704     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1705     Expected<llvm::BitstreamEntry> MaybeEntry =
1706         Stream.advanceSkippingSubblocks(Flags);
1707     if (!MaybeEntry) {
1708       Error(MaybeEntry.takeError());
1709       return Macro;
1710     }
1711     llvm::BitstreamEntry Entry = MaybeEntry.get();
1712 
1713     switch (Entry.Kind) {
1714     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1715     case llvm::BitstreamEntry::Error:
1716       Error("malformed block record in AST file");
1717       return Macro;
1718     case llvm::BitstreamEntry::EndBlock:
1719       return Macro;
1720     case llvm::BitstreamEntry::Record:
1721       // The interesting case.
1722       break;
1723     }
1724 
1725     // Read a record.
1726     Record.clear();
1727     PreprocessorRecordTypes RecType;
1728     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1729       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1730     else {
1731       Error(MaybeRecType.takeError());
1732       return Macro;
1733     }
1734     switch (RecType) {
1735     case PP_MODULE_MACRO:
1736     case PP_MACRO_DIRECTIVE_HISTORY:
1737       return Macro;
1738 
1739     case PP_MACRO_OBJECT_LIKE:
1740     case PP_MACRO_FUNCTION_LIKE: {
1741       // If we already have a macro, that means that we've hit the end
1742       // of the definition of the macro we were looking for. We're
1743       // done.
1744       if (Macro)
1745         return Macro;
1746 
1747       unsigned NextIndex = 1; // Skip identifier ID.
1748       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1749       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1750       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1751       MI->setIsUsed(Record[NextIndex++]);
1752       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1753       MacroTokens = MI->allocateTokens(Record[NextIndex++],
1754                                        PP.getPreprocessorAllocator());
1755       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1756         // Decode function-like macro info.
1757         bool isC99VarArgs = Record[NextIndex++];
1758         bool isGNUVarArgs = Record[NextIndex++];
1759         bool hasCommaPasting = Record[NextIndex++];
1760         MacroParams.clear();
1761         unsigned NumArgs = Record[NextIndex++];
1762         for (unsigned i = 0; i != NumArgs; ++i)
1763           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1764 
1765         // Install function-like macro info.
1766         MI->setIsFunctionLike();
1767         if (isC99VarArgs) MI->setIsC99Varargs();
1768         if (isGNUVarArgs) MI->setIsGNUVarargs();
1769         if (hasCommaPasting) MI->setHasCommaPasting();
1770         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1771       }
1772 
1773       // Remember that we saw this macro last so that we add the tokens that
1774       // form its body to it.
1775       Macro = MI;
1776 
1777       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1778           Record[NextIndex]) {
1779         // We have a macro definition. Register the association
1780         PreprocessedEntityID
1781             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1782         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1783         PreprocessingRecord::PPEntityID PPID =
1784             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1785         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1786             PPRec.getPreprocessedEntity(PPID));
1787         if (PPDef)
1788           PPRec.RegisterMacroDefinition(Macro, PPDef);
1789       }
1790 
1791       ++NumMacrosRead;
1792       break;
1793     }
1794 
1795     case PP_TOKEN: {
1796       // If we see a TOKEN before a PP_MACRO_*, then the file is
1797       // erroneous, just pretend we didn't see this.
1798       if (!Macro) break;
1799       if (MacroTokens.empty()) {
1800         Error("unexpected number of macro tokens for a macro in AST file");
1801         return Macro;
1802       }
1803 
1804       unsigned Idx = 0;
1805       MacroTokens[0] = ReadToken(F, Record, Idx);
1806       MacroTokens = MacroTokens.drop_front();
1807       break;
1808     }
1809     }
1810   }
1811 }
1812 
1813 PreprocessedEntityID
1814 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1815                                          unsigned LocalID) const {
1816   if (!M.ModuleOffsetMap.empty())
1817     ReadModuleOffsetMap(M);
1818 
1819   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1820     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1821   assert(I != M.PreprocessedEntityRemap.end()
1822          && "Invalid index into preprocessed entity index remap");
1823 
1824   return LocalID + I->second;
1825 }
1826 
1827 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1828   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1829 }
1830 
1831 HeaderFileInfoTrait::internal_key_type
1832 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1833   internal_key_type ikey = {FE->getSize(),
1834                             M.HasTimestamps ? FE->getModificationTime() : 0,
1835                             FE->getName(), /*Imported*/ false};
1836   return ikey;
1837 }
1838 
1839 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1840   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1841     return false;
1842 
1843   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1844     return true;
1845 
1846   // Determine whether the actual files are equivalent.
1847   FileManager &FileMgr = Reader.getFileManager();
1848   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1849     if (!Key.Imported) {
1850       if (auto File = FileMgr.getFile(Key.Filename))
1851         return *File;
1852       return nullptr;
1853     }
1854 
1855     std::string Resolved = std::string(Key.Filename);
1856     Reader.ResolveImportedPath(M, Resolved);
1857     if (auto File = FileMgr.getFile(Resolved))
1858       return *File;
1859     return nullptr;
1860   };
1861 
1862   const FileEntry *FEA = GetFile(a);
1863   const FileEntry *FEB = GetFile(b);
1864   return FEA && FEA == FEB;
1865 }
1866 
1867 std::pair<unsigned, unsigned>
1868 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1869   return readULEBKeyDataLength(d);
1870 }
1871 
1872 HeaderFileInfoTrait::internal_key_type
1873 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1874   using namespace llvm::support;
1875 
1876   internal_key_type ikey;
1877   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1878   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1879   ikey.Filename = (const char *)d;
1880   ikey.Imported = true;
1881   return ikey;
1882 }
1883 
1884 HeaderFileInfoTrait::data_type
1885 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1886                               unsigned DataLen) {
1887   using namespace llvm::support;
1888 
1889   const unsigned char *End = d + DataLen;
1890   HeaderFileInfo HFI;
1891   unsigned Flags = *d++;
1892   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1893   HFI.isImport |= (Flags >> 5) & 0x01;
1894   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1895   HFI.DirInfo = (Flags >> 1) & 0x07;
1896   HFI.IndexHeaderMapHeader = Flags & 0x01;
1897   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1898       M, endian::readNext<uint32_t, little, unaligned>(d));
1899   if (unsigned FrameworkOffset =
1900           endian::readNext<uint32_t, little, unaligned>(d)) {
1901     // The framework offset is 1 greater than the actual offset,
1902     // since 0 is used as an indicator for "no framework name".
1903     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1904     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1905   }
1906 
1907   assert((End - d) % 4 == 0 &&
1908          "Wrong data length in HeaderFileInfo deserialization");
1909   while (d != End) {
1910     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1911     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1912     LocalSMID >>= 2;
1913 
1914     // This header is part of a module. Associate it with the module to enable
1915     // implicit module import.
1916     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1917     Module *Mod = Reader.getSubmodule(GlobalSMID);
1918     FileManager &FileMgr = Reader.getFileManager();
1919     ModuleMap &ModMap =
1920         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1921 
1922     std::string Filename = std::string(key.Filename);
1923     if (key.Imported)
1924       Reader.ResolveImportedPath(M, Filename);
1925     // FIXME: NameAsWritten
1926     Module::Header H = {std::string(key.Filename), "",
1927                         *FileMgr.getFile(Filename)};
1928     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1929     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1930   }
1931 
1932   // This HeaderFileInfo was externally loaded.
1933   HFI.External = true;
1934   HFI.IsValid = true;
1935   return HFI;
1936 }
1937 
1938 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1939                                 uint32_t MacroDirectivesOffset) {
1940   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1941   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1942 }
1943 
1944 void ASTReader::ReadDefinedMacros() {
1945   // Note that we are loading defined macros.
1946   Deserializing Macros(this);
1947 
1948   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1949     BitstreamCursor &MacroCursor = I.MacroCursor;
1950 
1951     // If there was no preprocessor block, skip this file.
1952     if (MacroCursor.getBitcodeBytes().empty())
1953       continue;
1954 
1955     BitstreamCursor Cursor = MacroCursor;
1956     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1957       Error(std::move(Err));
1958       return;
1959     }
1960 
1961     RecordData Record;
1962     while (true) {
1963       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1964       if (!MaybeE) {
1965         Error(MaybeE.takeError());
1966         return;
1967       }
1968       llvm::BitstreamEntry E = MaybeE.get();
1969 
1970       switch (E.Kind) {
1971       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1972       case llvm::BitstreamEntry::Error:
1973         Error("malformed block record in AST file");
1974         return;
1975       case llvm::BitstreamEntry::EndBlock:
1976         goto NextCursor;
1977 
1978       case llvm::BitstreamEntry::Record: {
1979         Record.clear();
1980         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1981         if (!MaybeRecord) {
1982           Error(MaybeRecord.takeError());
1983           return;
1984         }
1985         switch (MaybeRecord.get()) {
1986         default:  // Default behavior: ignore.
1987           break;
1988 
1989         case PP_MACRO_OBJECT_LIKE:
1990         case PP_MACRO_FUNCTION_LIKE: {
1991           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1992           if (II->isOutOfDate())
1993             updateOutOfDateIdentifier(*II);
1994           break;
1995         }
1996 
1997         case PP_TOKEN:
1998           // Ignore tokens.
1999           break;
2000         }
2001         break;
2002       }
2003       }
2004     }
2005     NextCursor:  ;
2006   }
2007 }
2008 
2009 namespace {
2010 
2011   /// Visitor class used to look up identifirs in an AST file.
2012   class IdentifierLookupVisitor {
2013     StringRef Name;
2014     unsigned NameHash;
2015     unsigned PriorGeneration;
2016     unsigned &NumIdentifierLookups;
2017     unsigned &NumIdentifierLookupHits;
2018     IdentifierInfo *Found = nullptr;
2019 
2020   public:
2021     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2022                             unsigned &NumIdentifierLookups,
2023                             unsigned &NumIdentifierLookupHits)
2024       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2025         PriorGeneration(PriorGeneration),
2026         NumIdentifierLookups(NumIdentifierLookups),
2027         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2028 
2029     bool operator()(ModuleFile &M) {
2030       // If we've already searched this module file, skip it now.
2031       if (M.Generation <= PriorGeneration)
2032         return true;
2033 
2034       ASTIdentifierLookupTable *IdTable
2035         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2036       if (!IdTable)
2037         return false;
2038 
2039       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2040                                      Found);
2041       ++NumIdentifierLookups;
2042       ASTIdentifierLookupTable::iterator Pos =
2043           IdTable->find_hashed(Name, NameHash, &Trait);
2044       if (Pos == IdTable->end())
2045         return false;
2046 
2047       // Dereferencing the iterator has the effect of building the
2048       // IdentifierInfo node and populating it with the various
2049       // declarations it needs.
2050       ++NumIdentifierLookupHits;
2051       Found = *Pos;
2052       return true;
2053     }
2054 
2055     // Retrieve the identifier info found within the module
2056     // files.
2057     IdentifierInfo *getIdentifierInfo() const { return Found; }
2058   };
2059 
2060 } // namespace
2061 
2062 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2063   // Note that we are loading an identifier.
2064   Deserializing AnIdentifier(this);
2065 
2066   unsigned PriorGeneration = 0;
2067   if (getContext().getLangOpts().Modules)
2068     PriorGeneration = IdentifierGeneration[&II];
2069 
2070   // If there is a global index, look there first to determine which modules
2071   // provably do not have any results for this identifier.
2072   GlobalModuleIndex::HitSet Hits;
2073   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2074   if (!loadGlobalIndex()) {
2075     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2076       HitsPtr = &Hits;
2077     }
2078   }
2079 
2080   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2081                                   NumIdentifierLookups,
2082                                   NumIdentifierLookupHits);
2083   ModuleMgr.visit(Visitor, HitsPtr);
2084   markIdentifierUpToDate(&II);
2085 }
2086 
2087 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2088   if (!II)
2089     return;
2090 
2091   II->setOutOfDate(false);
2092 
2093   // Update the generation for this identifier.
2094   if (getContext().getLangOpts().Modules)
2095     IdentifierGeneration[II] = getGeneration();
2096 }
2097 
2098 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2099                                     const PendingMacroInfo &PMInfo) {
2100   ModuleFile &M = *PMInfo.M;
2101 
2102   BitstreamCursor &Cursor = M.MacroCursor;
2103   SavedStreamPosition SavedPosition(Cursor);
2104   if (llvm::Error Err =
2105           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2106     Error(std::move(Err));
2107     return;
2108   }
2109 
2110   struct ModuleMacroRecord {
2111     SubmoduleID SubModID;
2112     MacroInfo *MI;
2113     SmallVector<SubmoduleID, 8> Overrides;
2114   };
2115   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2116 
2117   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2118   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2119   // macro histroy.
2120   RecordData Record;
2121   while (true) {
2122     Expected<llvm::BitstreamEntry> MaybeEntry =
2123         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2124     if (!MaybeEntry) {
2125       Error(MaybeEntry.takeError());
2126       return;
2127     }
2128     llvm::BitstreamEntry Entry = MaybeEntry.get();
2129 
2130     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2131       Error("malformed block record in AST file");
2132       return;
2133     }
2134 
2135     Record.clear();
2136     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2137     if (!MaybePP) {
2138       Error(MaybePP.takeError());
2139       return;
2140     }
2141     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2142     case PP_MACRO_DIRECTIVE_HISTORY:
2143       break;
2144 
2145     case PP_MODULE_MACRO: {
2146       ModuleMacros.push_back(ModuleMacroRecord());
2147       auto &Info = ModuleMacros.back();
2148       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2149       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2150       for (int I = 2, N = Record.size(); I != N; ++I)
2151         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2152       continue;
2153     }
2154 
2155     default:
2156       Error("malformed block record in AST file");
2157       return;
2158     }
2159 
2160     // We found the macro directive history; that's the last record
2161     // for this macro.
2162     break;
2163   }
2164 
2165   // Module macros are listed in reverse dependency order.
2166   {
2167     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2168     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2169     for (auto &MMR : ModuleMacros) {
2170       Overrides.clear();
2171       for (unsigned ModID : MMR.Overrides) {
2172         Module *Mod = getSubmodule(ModID);
2173         auto *Macro = PP.getModuleMacro(Mod, II);
2174         assert(Macro && "missing definition for overridden macro");
2175         Overrides.push_back(Macro);
2176       }
2177 
2178       bool Inserted = false;
2179       Module *Owner = getSubmodule(MMR.SubModID);
2180       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2181     }
2182   }
2183 
2184   // Don't read the directive history for a module; we don't have anywhere
2185   // to put it.
2186   if (M.isModule())
2187     return;
2188 
2189   // Deserialize the macro directives history in reverse source-order.
2190   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2191   unsigned Idx = 0, N = Record.size();
2192   while (Idx < N) {
2193     MacroDirective *MD = nullptr;
2194     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2195     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2196     switch (K) {
2197     case MacroDirective::MD_Define: {
2198       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2199       MD = PP.AllocateDefMacroDirective(MI, Loc);
2200       break;
2201     }
2202     case MacroDirective::MD_Undefine:
2203       MD = PP.AllocateUndefMacroDirective(Loc);
2204       break;
2205     case MacroDirective::MD_Visibility:
2206       bool isPublic = Record[Idx++];
2207       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2208       break;
2209     }
2210 
2211     if (!Latest)
2212       Latest = MD;
2213     if (Earliest)
2214       Earliest->setPrevious(MD);
2215     Earliest = MD;
2216   }
2217 
2218   if (Latest)
2219     PP.setLoadedMacroDirective(II, Earliest, Latest);
2220 }
2221 
2222 bool ASTReader::shouldDisableValidationForFile(
2223     const serialization::ModuleFile &M) const {
2224   if (DisableValidationKind == DisableValidationForModuleKind::None)
2225     return false;
2226 
2227   // If a PCH is loaded and validation is disabled for PCH then disable
2228   // validation for the PCH and the modules it loads.
2229   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2230 
2231   switch (K) {
2232   case MK_MainFile:
2233   case MK_Preamble:
2234   case MK_PCH:
2235     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2236   case MK_ImplicitModule:
2237   case MK_ExplicitModule:
2238   case MK_PrebuiltModule:
2239     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2240   }
2241 
2242   return false;
2243 }
2244 
2245 ASTReader::InputFileInfo
2246 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2247   // Go find this input file.
2248   BitstreamCursor &Cursor = F.InputFilesCursor;
2249   SavedStreamPosition SavedPosition(Cursor);
2250   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2251     // FIXME this drops errors on the floor.
2252     consumeError(std::move(Err));
2253   }
2254 
2255   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2256   if (!MaybeCode) {
2257     // FIXME this drops errors on the floor.
2258     consumeError(MaybeCode.takeError());
2259   }
2260   unsigned Code = MaybeCode.get();
2261   RecordData Record;
2262   StringRef Blob;
2263 
2264   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2265     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2266            "invalid record type for input file");
2267   else {
2268     // FIXME this drops errors on the floor.
2269     consumeError(Maybe.takeError());
2270   }
2271 
2272   assert(Record[0] == ID && "Bogus stored ID or offset");
2273   InputFileInfo R;
2274   R.StoredSize = static_cast<off_t>(Record[1]);
2275   R.StoredTime = static_cast<time_t>(Record[2]);
2276   R.Overridden = static_cast<bool>(Record[3]);
2277   R.Transient = static_cast<bool>(Record[4]);
2278   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2279   R.Filename = std::string(Blob);
2280   ResolveImportedPath(F, R.Filename);
2281 
2282   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2283   if (!MaybeEntry) // FIXME this drops errors on the floor.
2284     consumeError(MaybeEntry.takeError());
2285   llvm::BitstreamEntry Entry = MaybeEntry.get();
2286   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2287          "expected record type for input file hash");
2288 
2289   Record.clear();
2290   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2291     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2292            "invalid record type for input file hash");
2293   else {
2294     // FIXME this drops errors on the floor.
2295     consumeError(Maybe.takeError());
2296   }
2297   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2298                   static_cast<uint64_t>(Record[0]);
2299   return R;
2300 }
2301 
2302 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2303 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2304   // If this ID is bogus, just return an empty input file.
2305   if (ID == 0 || ID > F.InputFilesLoaded.size())
2306     return InputFile();
2307 
2308   // If we've already loaded this input file, return it.
2309   if (F.InputFilesLoaded[ID-1].getFile())
2310     return F.InputFilesLoaded[ID-1];
2311 
2312   if (F.InputFilesLoaded[ID-1].isNotFound())
2313     return InputFile();
2314 
2315   // Go find this input file.
2316   BitstreamCursor &Cursor = F.InputFilesCursor;
2317   SavedStreamPosition SavedPosition(Cursor);
2318   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2319     // FIXME this drops errors on the floor.
2320     consumeError(std::move(Err));
2321   }
2322 
2323   InputFileInfo FI = readInputFileInfo(F, ID);
2324   off_t StoredSize = FI.StoredSize;
2325   time_t StoredTime = FI.StoredTime;
2326   bool Overridden = FI.Overridden;
2327   bool Transient = FI.Transient;
2328   StringRef Filename = FI.Filename;
2329   uint64_t StoredContentHash = FI.ContentHash;
2330 
2331   OptionalFileEntryRefDegradesToFileEntryPtr File =
2332       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2333 
2334   // If we didn't find the file, resolve it relative to the
2335   // original directory from which this AST file was created.
2336   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2337       F.OriginalDir != F.BaseDirectory) {
2338     std::string Resolved = resolveFileRelativeToOriginalDir(
2339         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2340     if (!Resolved.empty())
2341       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2342   }
2343 
2344   // For an overridden file, create a virtual file with the stored
2345   // size/timestamp.
2346   if ((Overridden || Transient) && !File)
2347     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2348 
2349   if (!File) {
2350     if (Complain) {
2351       std::string ErrorStr = "could not find file '";
2352       ErrorStr += Filename;
2353       ErrorStr += "' referenced by AST file '";
2354       ErrorStr += F.FileName;
2355       ErrorStr += "'";
2356       Error(ErrorStr);
2357     }
2358     // Record that we didn't find the file.
2359     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2360     return InputFile();
2361   }
2362 
2363   // Check if there was a request to override the contents of the file
2364   // that was part of the precompiled header. Overriding such a file
2365   // can lead to problems when lexing using the source locations from the
2366   // PCH.
2367   SourceManager &SM = getSourceManager();
2368   // FIXME: Reject if the overrides are different.
2369   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2370     if (Complain)
2371       Error(diag::err_fe_pch_file_overridden, Filename);
2372 
2373     // After emitting the diagnostic, bypass the overriding file to recover
2374     // (this creates a separate FileEntry).
2375     File = SM.bypassFileContentsOverride(*File);
2376     if (!File) {
2377       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2378       return InputFile();
2379     }
2380   }
2381 
2382   struct Change {
2383     enum ModificationKind {
2384       Size,
2385       ModTime,
2386       Content,
2387       None,
2388     } Kind;
2389     llvm::Optional<int64_t> Old = llvm::None;
2390     llvm::Optional<int64_t> New = llvm::None;
2391   };
2392   auto HasInputFileChanged = [&]() {
2393     if (StoredSize != File->getSize())
2394       return Change{Change::Size, StoredSize, File->getSize()};
2395     if (!shouldDisableValidationForFile(F) && StoredTime &&
2396         StoredTime != File->getModificationTime()) {
2397       Change MTimeChange = {Change::ModTime, StoredTime,
2398                             File->getModificationTime()};
2399 
2400       // In case the modification time changes but not the content,
2401       // accept the cached file as legit.
2402       if (ValidateASTInputFilesContent &&
2403           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2404         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2405         if (!MemBuffOrError) {
2406           if (!Complain)
2407             return MTimeChange;
2408           std::string ErrorStr = "could not get buffer for file '";
2409           ErrorStr += File->getName();
2410           ErrorStr += "'";
2411           Error(ErrorStr);
2412           return MTimeChange;
2413         }
2414 
2415         // FIXME: hash_value is not guaranteed to be stable!
2416         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2417         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2418           return Change{Change::None};
2419 
2420         return Change{Change::Content};
2421       }
2422       return MTimeChange;
2423     }
2424     return Change{Change::None};
2425   };
2426 
2427   bool IsOutOfDate = false;
2428   auto FileChange = HasInputFileChanged();
2429   // For an overridden file, there is nothing to validate.
2430   if (!Overridden && FileChange.Kind != Change::None) {
2431     if (Complain && !Diags.isDiagnosticInFlight()) {
2432       // Build a list of the PCH imports that got us here (in reverse).
2433       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2434       while (!ImportStack.back()->ImportedBy.empty())
2435         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2436 
2437       // The top-level PCH is stale.
2438       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2439       Diag(diag::err_fe_ast_file_modified)
2440           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2441           << TopLevelPCHName << FileChange.Kind
2442           << (FileChange.Old && FileChange.New)
2443           << llvm::itostr(FileChange.Old.getValueOr(0))
2444           << llvm::itostr(FileChange.New.getValueOr(0));
2445 
2446       // Print the import stack.
2447       if (ImportStack.size() > 1) {
2448         Diag(diag::note_pch_required_by)
2449           << Filename << ImportStack[0]->FileName;
2450         for (unsigned I = 1; I < ImportStack.size(); ++I)
2451           Diag(diag::note_pch_required_by)
2452             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2453       }
2454 
2455       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2456     }
2457 
2458     IsOutOfDate = true;
2459   }
2460   // FIXME: If the file is overridden and we've already opened it,
2461   // issue an error (or split it into a separate FileEntry).
2462 
2463   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2464 
2465   // Note that we've loaded this input file.
2466   F.InputFilesLoaded[ID-1] = IF;
2467   return IF;
2468 }
2469 
2470 /// If we are loading a relocatable PCH or module file, and the filename
2471 /// is not an absolute path, add the system or module root to the beginning of
2472 /// the file name.
2473 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2474   // Resolve relative to the base directory, if we have one.
2475   if (!M.BaseDirectory.empty())
2476     return ResolveImportedPath(Filename, M.BaseDirectory);
2477 }
2478 
2479 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2480   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2481     return;
2482 
2483   SmallString<128> Buffer;
2484   llvm::sys::path::append(Buffer, Prefix, Filename);
2485   Filename.assign(Buffer.begin(), Buffer.end());
2486 }
2487 
2488 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2489   switch (ARR) {
2490   case ASTReader::Failure: return true;
2491   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2492   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2493   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2494   case ASTReader::ConfigurationMismatch:
2495     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2496   case ASTReader::HadErrors: return true;
2497   case ASTReader::Success: return false;
2498   }
2499 
2500   llvm_unreachable("unknown ASTReadResult");
2501 }
2502 
2503 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2504     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2505     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2506     std::string &SuggestedPredefines) {
2507   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2508     // FIXME this drops errors on the floor.
2509     consumeError(std::move(Err));
2510     return Failure;
2511   }
2512 
2513   // Read all of the records in the options block.
2514   RecordData Record;
2515   ASTReadResult Result = Success;
2516   while (true) {
2517     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2518     if (!MaybeEntry) {
2519       // FIXME this drops errors on the floor.
2520       consumeError(MaybeEntry.takeError());
2521       return Failure;
2522     }
2523     llvm::BitstreamEntry Entry = MaybeEntry.get();
2524 
2525     switch (Entry.Kind) {
2526     case llvm::BitstreamEntry::Error:
2527     case llvm::BitstreamEntry::SubBlock:
2528       return Failure;
2529 
2530     case llvm::BitstreamEntry::EndBlock:
2531       return Result;
2532 
2533     case llvm::BitstreamEntry::Record:
2534       // The interesting case.
2535       break;
2536     }
2537 
2538     // Read and process a record.
2539     Record.clear();
2540     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2541     if (!MaybeRecordType) {
2542       // FIXME this drops errors on the floor.
2543       consumeError(MaybeRecordType.takeError());
2544       return Failure;
2545     }
2546     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2547     case LANGUAGE_OPTIONS: {
2548       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2549       if (ParseLanguageOptions(Record, Complain, Listener,
2550                                AllowCompatibleConfigurationMismatch))
2551         Result = ConfigurationMismatch;
2552       break;
2553     }
2554 
2555     case TARGET_OPTIONS: {
2556       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2557       if (ParseTargetOptions(Record, Complain, Listener,
2558                              AllowCompatibleConfigurationMismatch))
2559         Result = ConfigurationMismatch;
2560       break;
2561     }
2562 
2563     case FILE_SYSTEM_OPTIONS: {
2564       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2565       if (!AllowCompatibleConfigurationMismatch &&
2566           ParseFileSystemOptions(Record, Complain, Listener))
2567         Result = ConfigurationMismatch;
2568       break;
2569     }
2570 
2571     case HEADER_SEARCH_OPTIONS: {
2572       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2573       if (!AllowCompatibleConfigurationMismatch &&
2574           ParseHeaderSearchOptions(Record, Complain, Listener))
2575         Result = ConfigurationMismatch;
2576       break;
2577     }
2578 
2579     case PREPROCESSOR_OPTIONS:
2580       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2581       if (!AllowCompatibleConfigurationMismatch &&
2582           ParsePreprocessorOptions(Record, Complain, Listener,
2583                                    SuggestedPredefines))
2584         Result = ConfigurationMismatch;
2585       break;
2586     }
2587   }
2588 }
2589 
2590 ASTReader::ASTReadResult
2591 ASTReader::ReadControlBlock(ModuleFile &F,
2592                             SmallVectorImpl<ImportedModule> &Loaded,
2593                             const ModuleFile *ImportedBy,
2594                             unsigned ClientLoadCapabilities) {
2595   BitstreamCursor &Stream = F.Stream;
2596 
2597   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2598     Error(std::move(Err));
2599     return Failure;
2600   }
2601 
2602   // Lambda to read the unhashed control block the first time it's called.
2603   //
2604   // For PCM files, the unhashed control block cannot be read until after the
2605   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2606   // need to look ahead before reading the IMPORTS record.  For consistency,
2607   // this block is always read somehow (see BitstreamEntry::EndBlock).
2608   bool HasReadUnhashedControlBlock = false;
2609   auto readUnhashedControlBlockOnce = [&]() {
2610     if (!HasReadUnhashedControlBlock) {
2611       HasReadUnhashedControlBlock = true;
2612       if (ASTReadResult Result =
2613               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2614         return Result;
2615     }
2616     return Success;
2617   };
2618 
2619   bool DisableValidation = shouldDisableValidationForFile(F);
2620 
2621   // Read all of the records and blocks in the control block.
2622   RecordData Record;
2623   unsigned NumInputs = 0;
2624   unsigned NumUserInputs = 0;
2625   StringRef BaseDirectoryAsWritten;
2626   while (true) {
2627     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2628     if (!MaybeEntry) {
2629       Error(MaybeEntry.takeError());
2630       return Failure;
2631     }
2632     llvm::BitstreamEntry Entry = MaybeEntry.get();
2633 
2634     switch (Entry.Kind) {
2635     case llvm::BitstreamEntry::Error:
2636       Error("malformed block record in AST file");
2637       return Failure;
2638     case llvm::BitstreamEntry::EndBlock: {
2639       // Validate the module before returning.  This call catches an AST with
2640       // no module name and no imports.
2641       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2642         return Result;
2643 
2644       // Validate input files.
2645       const HeaderSearchOptions &HSOpts =
2646           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2647 
2648       // All user input files reside at the index range [0, NumUserInputs), and
2649       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2650       // loaded module files, ignore missing inputs.
2651       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2652           F.Kind != MK_PrebuiltModule) {
2653         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2654 
2655         // If we are reading a module, we will create a verification timestamp,
2656         // so we verify all input files.  Otherwise, verify only user input
2657         // files.
2658 
2659         unsigned N = NumUserInputs;
2660         if (ValidateSystemInputs ||
2661             (HSOpts.ModulesValidateOncePerBuildSession &&
2662              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2663              F.Kind == MK_ImplicitModule))
2664           N = NumInputs;
2665 
2666         for (unsigned I = 0; I < N; ++I) {
2667           InputFile IF = getInputFile(F, I+1, Complain);
2668           if (!IF.getFile() || IF.isOutOfDate())
2669             return OutOfDate;
2670         }
2671       }
2672 
2673       if (Listener)
2674         Listener->visitModuleFile(F.FileName, F.Kind);
2675 
2676       if (Listener && Listener->needsInputFileVisitation()) {
2677         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2678                                                                 : NumUserInputs;
2679         for (unsigned I = 0; I < N; ++I) {
2680           bool IsSystem = I >= NumUserInputs;
2681           InputFileInfo FI = readInputFileInfo(F, I+1);
2682           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2683                                    F.Kind == MK_ExplicitModule ||
2684                                    F.Kind == MK_PrebuiltModule);
2685         }
2686       }
2687 
2688       return Success;
2689     }
2690 
2691     case llvm::BitstreamEntry::SubBlock:
2692       switch (Entry.ID) {
2693       case INPUT_FILES_BLOCK_ID:
2694         F.InputFilesCursor = Stream;
2695         if (llvm::Error Err = Stream.SkipBlock()) {
2696           Error(std::move(Err));
2697           return Failure;
2698         }
2699         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2700           Error("malformed block record in AST file");
2701           return Failure;
2702         }
2703         continue;
2704 
2705       case OPTIONS_BLOCK_ID:
2706         // If we're reading the first module for this group, check its options
2707         // are compatible with ours. For modules it imports, no further checking
2708         // is required, because we checked them when we built it.
2709         if (Listener && !ImportedBy) {
2710           // Should we allow the configuration of the module file to differ from
2711           // the configuration of the current translation unit in a compatible
2712           // way?
2713           //
2714           // FIXME: Allow this for files explicitly specified with -include-pch.
2715           bool AllowCompatibleConfigurationMismatch =
2716               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2717 
2718           ASTReadResult Result =
2719               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2720                                AllowCompatibleConfigurationMismatch, *Listener,
2721                                SuggestedPredefines);
2722           if (Result == Failure) {
2723             Error("malformed block record in AST file");
2724             return Result;
2725           }
2726 
2727           if (DisableValidation ||
2728               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2729             Result = Success;
2730 
2731           // If we can't load the module, exit early since we likely
2732           // will rebuild the module anyway. The stream may be in the
2733           // middle of a block.
2734           if (Result != Success)
2735             return Result;
2736         } else if (llvm::Error Err = Stream.SkipBlock()) {
2737           Error(std::move(Err));
2738           return Failure;
2739         }
2740         continue;
2741 
2742       default:
2743         if (llvm::Error Err = Stream.SkipBlock()) {
2744           Error(std::move(Err));
2745           return Failure;
2746         }
2747         continue;
2748       }
2749 
2750     case llvm::BitstreamEntry::Record:
2751       // The interesting case.
2752       break;
2753     }
2754 
2755     // Read and process a record.
2756     Record.clear();
2757     StringRef Blob;
2758     Expected<unsigned> MaybeRecordType =
2759         Stream.readRecord(Entry.ID, Record, &Blob);
2760     if (!MaybeRecordType) {
2761       Error(MaybeRecordType.takeError());
2762       return Failure;
2763     }
2764     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2765     case METADATA: {
2766       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2767         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2768           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2769                                         : diag::err_pch_version_too_new);
2770         return VersionMismatch;
2771       }
2772 
2773       bool hasErrors = Record[6];
2774       if (hasErrors && !DisableValidation) {
2775         // If requested by the caller and the module hasn't already been read
2776         // or compiled, mark modules on error as out-of-date.
2777         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2778             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2779           return OutOfDate;
2780 
2781         if (!AllowASTWithCompilerErrors) {
2782           Diag(diag::err_pch_with_compiler_errors);
2783           return HadErrors;
2784         }
2785       }
2786       if (hasErrors) {
2787         Diags.ErrorOccurred = true;
2788         Diags.UncompilableErrorOccurred = true;
2789         Diags.UnrecoverableErrorOccurred = true;
2790       }
2791 
2792       F.RelocatablePCH = Record[4];
2793       // Relative paths in a relocatable PCH are relative to our sysroot.
2794       if (F.RelocatablePCH)
2795         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2796 
2797       F.HasTimestamps = Record[5];
2798 
2799       const std::string &CurBranch = getClangFullRepositoryVersion();
2800       StringRef ASTBranch = Blob;
2801       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2802         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2803           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2804         return VersionMismatch;
2805       }
2806       break;
2807     }
2808 
2809     case IMPORTS: {
2810       // Validate the AST before processing any imports (otherwise, untangling
2811       // them can be error-prone and expensive).  A module will have a name and
2812       // will already have been validated, but this catches the PCH case.
2813       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2814         return Result;
2815 
2816       // Load each of the imported PCH files.
2817       unsigned Idx = 0, N = Record.size();
2818       while (Idx < N) {
2819         // Read information about the AST file.
2820         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2821         // The import location will be the local one for now; we will adjust
2822         // all import locations of module imports after the global source
2823         // location info are setup, in ReadAST.
2824         SourceLocation ImportLoc =
2825             ReadUntranslatedSourceLocation(Record[Idx++]);
2826         off_t StoredSize = (off_t)Record[Idx++];
2827         time_t StoredModTime = (time_t)Record[Idx++];
2828         auto FirstSignatureByte = Record.begin() + Idx;
2829         ASTFileSignature StoredSignature = ASTFileSignature::create(
2830             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2831         Idx += ASTFileSignature::size;
2832 
2833         std::string ImportedName = ReadString(Record, Idx);
2834         std::string ImportedFile;
2835 
2836         // For prebuilt and explicit modules first consult the file map for
2837         // an override. Note that here we don't search prebuilt module
2838         // directories, only the explicit name to file mappings. Also, we will
2839         // still verify the size/signature making sure it is essentially the
2840         // same file but perhaps in a different location.
2841         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2842           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2843             ImportedName, /*FileMapOnly*/ true);
2844 
2845         if (ImportedFile.empty())
2846           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2847           // ModuleCache as when writing.
2848           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2849         else
2850           SkipPath(Record, Idx);
2851 
2852         // If our client can't cope with us being out of date, we can't cope with
2853         // our dependency being missing.
2854         unsigned Capabilities = ClientLoadCapabilities;
2855         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2856           Capabilities &= ~ARR_Missing;
2857 
2858         // Load the AST file.
2859         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2860                                   Loaded, StoredSize, StoredModTime,
2861                                   StoredSignature, Capabilities);
2862 
2863         // If we diagnosed a problem, produce a backtrace.
2864         bool recompilingFinalized =
2865             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2866             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2867         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2868           Diag(diag::note_module_file_imported_by)
2869               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2870         if (recompilingFinalized)
2871           Diag(diag::note_module_file_conflict);
2872 
2873         switch (Result) {
2874         case Failure: return Failure;
2875           // If we have to ignore the dependency, we'll have to ignore this too.
2876         case Missing:
2877         case OutOfDate: return OutOfDate;
2878         case VersionMismatch: return VersionMismatch;
2879         case ConfigurationMismatch: return ConfigurationMismatch;
2880         case HadErrors: return HadErrors;
2881         case Success: break;
2882         }
2883       }
2884       break;
2885     }
2886 
2887     case ORIGINAL_FILE:
2888       F.OriginalSourceFileID = FileID::get(Record[0]);
2889       F.ActualOriginalSourceFileName = std::string(Blob);
2890       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2891       ResolveImportedPath(F, F.OriginalSourceFileName);
2892       break;
2893 
2894     case ORIGINAL_FILE_ID:
2895       F.OriginalSourceFileID = FileID::get(Record[0]);
2896       break;
2897 
2898     case ORIGINAL_PCH_DIR:
2899       F.OriginalDir = std::string(Blob);
2900       ResolveImportedPath(F, F.OriginalDir);
2901       break;
2902 
2903     case MODULE_NAME:
2904       F.ModuleName = std::string(Blob);
2905       Diag(diag::remark_module_import)
2906           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2907           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2908       if (Listener)
2909         Listener->ReadModuleName(F.ModuleName);
2910 
2911       // Validate the AST as soon as we have a name so we can exit early on
2912       // failure.
2913       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2914         return Result;
2915 
2916       break;
2917 
2918     case MODULE_DIRECTORY: {
2919       // Save the BaseDirectory as written in the PCM for computing the module
2920       // filename for the ModuleCache.
2921       BaseDirectoryAsWritten = Blob;
2922       assert(!F.ModuleName.empty() &&
2923              "MODULE_DIRECTORY found before MODULE_NAME");
2924       // If we've already loaded a module map file covering this module, we may
2925       // have a better path for it (relative to the current build).
2926       Module *M = PP.getHeaderSearchInfo().lookupModule(
2927           F.ModuleName, SourceLocation(), /*AllowSearch*/ true,
2928           /*AllowExtraModuleMapSearch*/ true);
2929       if (M && M->Directory) {
2930         // If we're implicitly loading a module, the base directory can't
2931         // change between the build and use.
2932         // Don't emit module relocation error if we have -fno-validate-pch
2933         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2934                   DisableValidationForModuleKind::Module) &&
2935             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2936           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2937           if (!BuildDir || *BuildDir != M->Directory) {
2938             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2939               Diag(diag::err_imported_module_relocated)
2940                   << F.ModuleName << Blob << M->Directory->getName();
2941             return OutOfDate;
2942           }
2943         }
2944         F.BaseDirectory = std::string(M->Directory->getName());
2945       } else {
2946         F.BaseDirectory = std::string(Blob);
2947       }
2948       break;
2949     }
2950 
2951     case MODULE_MAP_FILE:
2952       if (ASTReadResult Result =
2953               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2954         return Result;
2955       break;
2956 
2957     case INPUT_FILE_OFFSETS:
2958       NumInputs = Record[0];
2959       NumUserInputs = Record[1];
2960       F.InputFileOffsets =
2961           (const llvm::support::unaligned_uint64_t *)Blob.data();
2962       F.InputFilesLoaded.resize(NumInputs);
2963       F.NumUserInputFiles = NumUserInputs;
2964       break;
2965     }
2966   }
2967 }
2968 
2969 void ASTReader::readIncludedFiles(ModuleFile &F, StringRef Blob,
2970                                   Preprocessor &PP) {
2971   using namespace llvm::support;
2972 
2973   const unsigned char *D = (const unsigned char *)Blob.data();
2974   unsigned FileCount = endian::readNext<uint32_t, little, unaligned>(D);
2975 
2976   for (unsigned I = 0; I < FileCount; ++I) {
2977     size_t ID = endian::readNext<uint32_t, little, unaligned>(D);
2978     InputFileInfo IFI = readInputFileInfo(F, ID);
2979     if (llvm::ErrorOr<const FileEntry *> File =
2980             PP.getFileManager().getFile(IFI.Filename))
2981       PP.getIncludedFiles().insert(*File);
2982   }
2983 }
2984 
2985 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2986                                     unsigned ClientLoadCapabilities) {
2987   BitstreamCursor &Stream = F.Stream;
2988 
2989   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2990     return Err;
2991   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2992 
2993   // Read all of the records and blocks for the AST file.
2994   RecordData Record;
2995   while (true) {
2996     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2997     if (!MaybeEntry)
2998       return MaybeEntry.takeError();
2999     llvm::BitstreamEntry Entry = MaybeEntry.get();
3000 
3001     switch (Entry.Kind) {
3002     case llvm::BitstreamEntry::Error:
3003       return llvm::createStringError(
3004           std::errc::illegal_byte_sequence,
3005           "error at end of module block in AST file");
3006     case llvm::BitstreamEntry::EndBlock:
3007       // Outside of C++, we do not store a lookup map for the translation unit.
3008       // Instead, mark it as needing a lookup map to be built if this module
3009       // contains any declarations lexically within it (which it always does!).
3010       // This usually has no cost, since we very rarely need the lookup map for
3011       // the translation unit outside C++.
3012       if (ASTContext *Ctx = ContextObj) {
3013         DeclContext *DC = Ctx->getTranslationUnitDecl();
3014         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
3015           DC->setMustBuildLookupTable();
3016       }
3017 
3018       return llvm::Error::success();
3019     case llvm::BitstreamEntry::SubBlock:
3020       switch (Entry.ID) {
3021       case DECLTYPES_BLOCK_ID:
3022         // We lazily load the decls block, but we want to set up the
3023         // DeclsCursor cursor to point into it.  Clone our current bitcode
3024         // cursor to it, enter the block and read the abbrevs in that block.
3025         // With the main cursor, we just skip over it.
3026         F.DeclsCursor = Stream;
3027         if (llvm::Error Err = Stream.SkipBlock())
3028           return Err;
3029         if (llvm::Error Err = ReadBlockAbbrevs(
3030                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3031           return Err;
3032         break;
3033 
3034       case PREPROCESSOR_BLOCK_ID:
3035         F.MacroCursor = Stream;
3036         if (!PP.getExternalSource())
3037           PP.setExternalSource(this);
3038 
3039         if (llvm::Error Err = Stream.SkipBlock())
3040           return Err;
3041         if (llvm::Error Err =
3042                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3043           return Err;
3044         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3045         break;
3046 
3047       case PREPROCESSOR_DETAIL_BLOCK_ID:
3048         F.PreprocessorDetailCursor = Stream;
3049 
3050         if (llvm::Error Err = Stream.SkipBlock()) {
3051           return Err;
3052         }
3053         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3054                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3055           return Err;
3056         F.PreprocessorDetailStartOffset
3057         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3058 
3059         if (!PP.getPreprocessingRecord())
3060           PP.createPreprocessingRecord();
3061         if (!PP.getPreprocessingRecord()->getExternalSource())
3062           PP.getPreprocessingRecord()->SetExternalSource(*this);
3063         break;
3064 
3065       case SOURCE_MANAGER_BLOCK_ID:
3066         if (llvm::Error Err = ReadSourceManagerBlock(F))
3067           return Err;
3068         break;
3069 
3070       case SUBMODULE_BLOCK_ID:
3071         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3072           return Err;
3073         break;
3074 
3075       case COMMENTS_BLOCK_ID: {
3076         BitstreamCursor C = Stream;
3077 
3078         if (llvm::Error Err = Stream.SkipBlock())
3079           return Err;
3080         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3081           return Err;
3082         CommentsCursors.push_back(std::make_pair(C, &F));
3083         break;
3084       }
3085 
3086       default:
3087         if (llvm::Error Err = Stream.SkipBlock())
3088           return Err;
3089         break;
3090       }
3091       continue;
3092 
3093     case llvm::BitstreamEntry::Record:
3094       // The interesting case.
3095       break;
3096     }
3097 
3098     // Read and process a record.
3099     Record.clear();
3100     StringRef Blob;
3101     Expected<unsigned> MaybeRecordType =
3102         Stream.readRecord(Entry.ID, Record, &Blob);
3103     if (!MaybeRecordType)
3104       return MaybeRecordType.takeError();
3105     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3106 
3107     // If we're not loading an AST context, we don't care about most records.
3108     if (!ContextObj) {
3109       switch (RecordType) {
3110       case IDENTIFIER_TABLE:
3111       case IDENTIFIER_OFFSET:
3112       case INTERESTING_IDENTIFIERS:
3113       case STATISTICS:
3114       case PP_ASSUME_NONNULL_LOC:
3115       case PP_CONDITIONAL_STACK:
3116       case PP_COUNTER_VALUE:
3117       case SOURCE_LOCATION_OFFSETS:
3118       case MODULE_OFFSET_MAP:
3119       case SOURCE_MANAGER_LINE_TABLE:
3120       case SOURCE_LOCATION_PRELOADS:
3121       case PPD_ENTITIES_OFFSETS:
3122       case HEADER_SEARCH_TABLE:
3123       case IMPORTED_MODULES:
3124       case MACRO_OFFSET:
3125         break;
3126       default:
3127         continue;
3128       }
3129     }
3130 
3131     switch (RecordType) {
3132     default:  // Default behavior: ignore.
3133       break;
3134 
3135     case TYPE_OFFSET: {
3136       if (F.LocalNumTypes != 0)
3137         return llvm::createStringError(
3138             std::errc::illegal_byte_sequence,
3139             "duplicate TYPE_OFFSET record in AST file");
3140       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3141       F.LocalNumTypes = Record[0];
3142       unsigned LocalBaseTypeIndex = Record[1];
3143       F.BaseTypeIndex = getTotalNumTypes();
3144 
3145       if (F.LocalNumTypes > 0) {
3146         // Introduce the global -> local mapping for types within this module.
3147         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3148 
3149         // Introduce the local -> global mapping for types within this module.
3150         F.TypeRemap.insertOrReplace(
3151           std::make_pair(LocalBaseTypeIndex,
3152                          F.BaseTypeIndex - LocalBaseTypeIndex));
3153 
3154         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3155       }
3156       break;
3157     }
3158 
3159     case DECL_OFFSET: {
3160       if (F.LocalNumDecls != 0)
3161         return llvm::createStringError(
3162             std::errc::illegal_byte_sequence,
3163             "duplicate DECL_OFFSET record in AST file");
3164       F.DeclOffsets = (const DeclOffset *)Blob.data();
3165       F.LocalNumDecls = Record[0];
3166       unsigned LocalBaseDeclID = Record[1];
3167       F.BaseDeclID = getTotalNumDecls();
3168 
3169       if (F.LocalNumDecls > 0) {
3170         // Introduce the global -> local mapping for declarations within this
3171         // module.
3172         GlobalDeclMap.insert(
3173           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3174 
3175         // Introduce the local -> global mapping for declarations within this
3176         // module.
3177         F.DeclRemap.insertOrReplace(
3178           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3179 
3180         // Introduce the global -> local mapping for declarations within this
3181         // module.
3182         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3183 
3184         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3185       }
3186       break;
3187     }
3188 
3189     case TU_UPDATE_LEXICAL: {
3190       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3191       LexicalContents Contents(
3192           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3193               Blob.data()),
3194           static_cast<unsigned int>(Blob.size() / 4));
3195       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3196       TU->setHasExternalLexicalStorage(true);
3197       break;
3198     }
3199 
3200     case UPDATE_VISIBLE: {
3201       unsigned Idx = 0;
3202       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3203       auto *Data = (const unsigned char*)Blob.data();
3204       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3205       // If we've already loaded the decl, perform the updates when we finish
3206       // loading this block.
3207       if (Decl *D = GetExistingDecl(ID))
3208         PendingUpdateRecords.push_back(
3209             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3210       break;
3211     }
3212 
3213     case IDENTIFIER_TABLE:
3214       F.IdentifierTableData =
3215           reinterpret_cast<const unsigned char *>(Blob.data());
3216       if (Record[0]) {
3217         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3218             F.IdentifierTableData + Record[0],
3219             F.IdentifierTableData + sizeof(uint32_t),
3220             F.IdentifierTableData,
3221             ASTIdentifierLookupTrait(*this, F));
3222 
3223         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3224       }
3225       break;
3226 
3227     case IDENTIFIER_OFFSET: {
3228       if (F.LocalNumIdentifiers != 0)
3229         return llvm::createStringError(
3230             std::errc::illegal_byte_sequence,
3231             "duplicate IDENTIFIER_OFFSET record in AST file");
3232       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3233       F.LocalNumIdentifiers = Record[0];
3234       unsigned LocalBaseIdentifierID = Record[1];
3235       F.BaseIdentifierID = getTotalNumIdentifiers();
3236 
3237       if (F.LocalNumIdentifiers > 0) {
3238         // Introduce the global -> local mapping for identifiers within this
3239         // module.
3240         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3241                                                   &F));
3242 
3243         // Introduce the local -> global mapping for identifiers within this
3244         // module.
3245         F.IdentifierRemap.insertOrReplace(
3246           std::make_pair(LocalBaseIdentifierID,
3247                          F.BaseIdentifierID - LocalBaseIdentifierID));
3248 
3249         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3250                                  + F.LocalNumIdentifiers);
3251       }
3252       break;
3253     }
3254 
3255     case INTERESTING_IDENTIFIERS:
3256       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3257       break;
3258 
3259     case EAGERLY_DESERIALIZED_DECLS:
3260       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3261       // about "interesting" decls (for instance, if we're building a module).
3262       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3263         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3264       break;
3265 
3266     case MODULAR_CODEGEN_DECLS:
3267       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3268       // them (ie: if we're not codegenerating this module).
3269       if (F.Kind == MK_MainFile ||
3270           getContext().getLangOpts().BuildingPCHWithObjectFile)
3271         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3272           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3273       break;
3274 
3275     case SPECIAL_TYPES:
3276       if (SpecialTypes.empty()) {
3277         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3278           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3279         break;
3280       }
3281 
3282       if (SpecialTypes.size() != Record.size())
3283         return llvm::createStringError(std::errc::illegal_byte_sequence,
3284                                        "invalid special-types record");
3285 
3286       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3287         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3288         if (!SpecialTypes[I])
3289           SpecialTypes[I] = ID;
3290         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3291         // merge step?
3292       }
3293       break;
3294 
3295     case STATISTICS:
3296       TotalNumStatements += Record[0];
3297       TotalNumMacros += Record[1];
3298       TotalLexicalDeclContexts += Record[2];
3299       TotalVisibleDeclContexts += Record[3];
3300       break;
3301 
3302     case UNUSED_FILESCOPED_DECLS:
3303       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3304         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3305       break;
3306 
3307     case DELEGATING_CTORS:
3308       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3309         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3310       break;
3311 
3312     case WEAK_UNDECLARED_IDENTIFIERS:
3313       if (Record.size() % 3 != 0)
3314         return llvm::createStringError(std::errc::illegal_byte_sequence,
3315                                        "invalid weak identifiers record");
3316 
3317       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3318       // files. This isn't the way to do it :)
3319       WeakUndeclaredIdentifiers.clear();
3320 
3321       // Translate the weak, undeclared identifiers into global IDs.
3322       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3323         WeakUndeclaredIdentifiers.push_back(
3324           getGlobalIdentifierID(F, Record[I++]));
3325         WeakUndeclaredIdentifiers.push_back(
3326           getGlobalIdentifierID(F, Record[I++]));
3327         WeakUndeclaredIdentifiers.push_back(
3328             ReadSourceLocation(F, Record, I).getRawEncoding());
3329       }
3330       break;
3331 
3332     case SELECTOR_OFFSETS: {
3333       F.SelectorOffsets = (const uint32_t *)Blob.data();
3334       F.LocalNumSelectors = Record[0];
3335       unsigned LocalBaseSelectorID = Record[1];
3336       F.BaseSelectorID = getTotalNumSelectors();
3337 
3338       if (F.LocalNumSelectors > 0) {
3339         // Introduce the global -> local mapping for selectors within this
3340         // module.
3341         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3342 
3343         // Introduce the local -> global mapping for selectors within this
3344         // module.
3345         F.SelectorRemap.insertOrReplace(
3346           std::make_pair(LocalBaseSelectorID,
3347                          F.BaseSelectorID - LocalBaseSelectorID));
3348 
3349         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3350       }
3351       break;
3352     }
3353 
3354     case METHOD_POOL:
3355       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3356       if (Record[0])
3357         F.SelectorLookupTable
3358           = ASTSelectorLookupTable::Create(
3359                         F.SelectorLookupTableData + Record[0],
3360                         F.SelectorLookupTableData,
3361                         ASTSelectorLookupTrait(*this, F));
3362       TotalNumMethodPoolEntries += Record[1];
3363       break;
3364 
3365     case REFERENCED_SELECTOR_POOL:
3366       if (!Record.empty()) {
3367         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3368           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3369                                                                 Record[Idx++]));
3370           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3371                                               getRawEncoding());
3372         }
3373       }
3374       break;
3375 
3376     case PP_ASSUME_NONNULL_LOC: {
3377       unsigned Idx = 0;
3378       if (!Record.empty())
3379         PP.setPreambleRecordedPragmaAssumeNonNullLoc(
3380             ReadSourceLocation(F, Record, Idx));
3381       break;
3382     }
3383 
3384     case PP_CONDITIONAL_STACK:
3385       if (!Record.empty()) {
3386         unsigned Idx = 0, End = Record.size() - 1;
3387         bool ReachedEOFWhileSkipping = Record[Idx++];
3388         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3389         if (ReachedEOFWhileSkipping) {
3390           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3391           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3392           bool FoundNonSkipPortion = Record[Idx++];
3393           bool FoundElse = Record[Idx++];
3394           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3395           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3396                            FoundElse, ElseLoc);
3397         }
3398         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3399         while (Idx < End) {
3400           auto Loc = ReadSourceLocation(F, Record, Idx);
3401           bool WasSkipping = Record[Idx++];
3402           bool FoundNonSkip = Record[Idx++];
3403           bool FoundElse = Record[Idx++];
3404           ConditionalStack.push_back(
3405               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3406         }
3407         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3408       }
3409       break;
3410 
3411     case PP_COUNTER_VALUE:
3412       if (!Record.empty() && Listener)
3413         Listener->ReadCounter(F, Record[0]);
3414       break;
3415 
3416     case FILE_SORTED_DECLS:
3417       F.FileSortedDecls = (const DeclID *)Blob.data();
3418       F.NumFileSortedDecls = Record[0];
3419       break;
3420 
3421     case SOURCE_LOCATION_OFFSETS: {
3422       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3423       F.LocalNumSLocEntries = Record[0];
3424       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3425       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3426       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3427           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3428                                               SLocSpaceSize);
3429       if (!F.SLocEntryBaseID)
3430         return llvm::createStringError(std::errc::invalid_argument,
3431                                        "ran out of source locations");
3432       // Make our entry in the range map. BaseID is negative and growing, so
3433       // we invert it. Because we invert it, though, we need the other end of
3434       // the range.
3435       unsigned RangeStart =
3436           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3437       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3438       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3439 
3440       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3441       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3442       GlobalSLocOffsetMap.insert(
3443           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3444                            - SLocSpaceSize,&F));
3445 
3446       // Initialize the remapping table.
3447       // Invalid stays invalid.
3448       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3449       // This module. Base was 2 when being compiled.
3450       F.SLocRemap.insertOrReplace(std::make_pair(
3451           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3452 
3453       TotalNumSLocEntries += F.LocalNumSLocEntries;
3454       break;
3455     }
3456 
3457     case MODULE_OFFSET_MAP:
3458       F.ModuleOffsetMap = Blob;
3459       break;
3460 
3461     case SOURCE_MANAGER_LINE_TABLE:
3462       ParseLineTable(F, Record);
3463       break;
3464 
3465     case SOURCE_LOCATION_PRELOADS: {
3466       // Need to transform from the local view (1-based IDs) to the global view,
3467       // which is based off F.SLocEntryBaseID.
3468       if (!F.PreloadSLocEntries.empty())
3469         return llvm::createStringError(
3470             std::errc::illegal_byte_sequence,
3471             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3472 
3473       F.PreloadSLocEntries.swap(Record);
3474       break;
3475     }
3476 
3477     case EXT_VECTOR_DECLS:
3478       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3479         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3480       break;
3481 
3482     case VTABLE_USES:
3483       if (Record.size() % 3 != 0)
3484         return llvm::createStringError(std::errc::illegal_byte_sequence,
3485                                        "Invalid VTABLE_USES record");
3486 
3487       // Later tables overwrite earlier ones.
3488       // FIXME: Modules will have some trouble with this. This is clearly not
3489       // the right way to do this.
3490       VTableUses.clear();
3491 
3492       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3493         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3494         VTableUses.push_back(
3495           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3496         VTableUses.push_back(Record[Idx++]);
3497       }
3498       break;
3499 
3500     case PENDING_IMPLICIT_INSTANTIATIONS:
3501       if (PendingInstantiations.size() % 2 != 0)
3502         return llvm::createStringError(
3503             std::errc::illegal_byte_sequence,
3504             "Invalid existing PendingInstantiations");
3505 
3506       if (Record.size() % 2 != 0)
3507         return llvm::createStringError(
3508             std::errc::illegal_byte_sequence,
3509             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3510 
3511       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3512         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3513         PendingInstantiations.push_back(
3514           ReadSourceLocation(F, Record, I).getRawEncoding());
3515       }
3516       break;
3517 
3518     case SEMA_DECL_REFS:
3519       if (Record.size() != 3)
3520         return llvm::createStringError(std::errc::illegal_byte_sequence,
3521                                        "Invalid SEMA_DECL_REFS block");
3522       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3523         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3524       break;
3525 
3526     case PPD_ENTITIES_OFFSETS: {
3527       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3528       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3529       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3530 
3531       unsigned LocalBasePreprocessedEntityID = Record[0];
3532 
3533       unsigned StartingID;
3534       if (!PP.getPreprocessingRecord())
3535         PP.createPreprocessingRecord();
3536       if (!PP.getPreprocessingRecord()->getExternalSource())
3537         PP.getPreprocessingRecord()->SetExternalSource(*this);
3538       StartingID
3539         = PP.getPreprocessingRecord()
3540             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3541       F.BasePreprocessedEntityID = StartingID;
3542 
3543       if (F.NumPreprocessedEntities > 0) {
3544         // Introduce the global -> local mapping for preprocessed entities in
3545         // this module.
3546         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3547 
3548         // Introduce the local -> global mapping for preprocessed entities in
3549         // this module.
3550         F.PreprocessedEntityRemap.insertOrReplace(
3551           std::make_pair(LocalBasePreprocessedEntityID,
3552             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3553       }
3554 
3555       break;
3556     }
3557 
3558     case PPD_SKIPPED_RANGES: {
3559       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3560       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3561       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3562 
3563       if (!PP.getPreprocessingRecord())
3564         PP.createPreprocessingRecord();
3565       if (!PP.getPreprocessingRecord()->getExternalSource())
3566         PP.getPreprocessingRecord()->SetExternalSource(*this);
3567       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3568           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3569 
3570       if (F.NumPreprocessedSkippedRanges > 0)
3571         GlobalSkippedRangeMap.insert(
3572             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3573       break;
3574     }
3575 
3576     case DECL_UPDATE_OFFSETS:
3577       if (Record.size() % 2 != 0)
3578         return llvm::createStringError(
3579             std::errc::illegal_byte_sequence,
3580             "invalid DECL_UPDATE_OFFSETS block in AST file");
3581       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3582         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3583         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3584 
3585         // If we've already loaded the decl, perform the updates when we finish
3586         // loading this block.
3587         if (Decl *D = GetExistingDecl(ID))
3588           PendingUpdateRecords.push_back(
3589               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3590       }
3591       break;
3592 
3593     case OBJC_CATEGORIES_MAP:
3594       if (F.LocalNumObjCCategoriesInMap != 0)
3595         return llvm::createStringError(
3596             std::errc::illegal_byte_sequence,
3597             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3598 
3599       F.LocalNumObjCCategoriesInMap = Record[0];
3600       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3601       break;
3602 
3603     case OBJC_CATEGORIES:
3604       F.ObjCCategories.swap(Record);
3605       break;
3606 
3607     case CUDA_SPECIAL_DECL_REFS:
3608       // Later tables overwrite earlier ones.
3609       // FIXME: Modules will have trouble with this.
3610       CUDASpecialDeclRefs.clear();
3611       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3612         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3613       break;
3614 
3615     case HEADER_SEARCH_TABLE:
3616       F.HeaderFileInfoTableData = Blob.data();
3617       F.LocalNumHeaderFileInfos = Record[1];
3618       if (Record[0]) {
3619         F.HeaderFileInfoTable
3620           = HeaderFileInfoLookupTable::Create(
3621                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3622                    (const unsigned char *)F.HeaderFileInfoTableData,
3623                    HeaderFileInfoTrait(*this, F,
3624                                        &PP.getHeaderSearchInfo(),
3625                                        Blob.data() + Record[2]));
3626 
3627         PP.getHeaderSearchInfo().SetExternalSource(this);
3628         if (!PP.getHeaderSearchInfo().getExternalLookup())
3629           PP.getHeaderSearchInfo().SetExternalLookup(this);
3630       }
3631       break;
3632 
3633     case FP_PRAGMA_OPTIONS:
3634       // Later tables overwrite earlier ones.
3635       FPPragmaOptions.swap(Record);
3636       break;
3637 
3638     case OPENCL_EXTENSIONS:
3639       for (unsigned I = 0, E = Record.size(); I != E; ) {
3640         auto Name = ReadString(Record, I);
3641         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3642         OptInfo.Supported = Record[I++] != 0;
3643         OptInfo.Enabled = Record[I++] != 0;
3644         OptInfo.WithPragma = Record[I++] != 0;
3645         OptInfo.Avail = Record[I++];
3646         OptInfo.Core = Record[I++];
3647         OptInfo.Opt = Record[I++];
3648       }
3649       break;
3650 
3651     case TENTATIVE_DEFINITIONS:
3652       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3653         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3654       break;
3655 
3656     case KNOWN_NAMESPACES:
3657       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3658         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3659       break;
3660 
3661     case UNDEFINED_BUT_USED:
3662       if (UndefinedButUsed.size() % 2 != 0)
3663         return llvm::createStringError(std::errc::illegal_byte_sequence,
3664                                        "Invalid existing UndefinedButUsed");
3665 
3666       if (Record.size() % 2 != 0)
3667         return llvm::createStringError(std::errc::illegal_byte_sequence,
3668                                        "invalid undefined-but-used record");
3669       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3670         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3671         UndefinedButUsed.push_back(
3672             ReadSourceLocation(F, Record, I).getRawEncoding());
3673       }
3674       break;
3675 
3676     case DELETE_EXPRS_TO_ANALYZE:
3677       for (unsigned I = 0, N = Record.size(); I != N;) {
3678         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3679         const uint64_t Count = Record[I++];
3680         DelayedDeleteExprs.push_back(Count);
3681         for (uint64_t C = 0; C < Count; ++C) {
3682           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3683           bool IsArrayForm = Record[I++] == 1;
3684           DelayedDeleteExprs.push_back(IsArrayForm);
3685         }
3686       }
3687       break;
3688 
3689     case IMPORTED_MODULES:
3690       if (!F.isModule()) {
3691         // If we aren't loading a module (which has its own exports), make
3692         // all of the imported modules visible.
3693         // FIXME: Deal with macros-only imports.
3694         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3695           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3696           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3697           if (GlobalID) {
3698             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3699             if (DeserializationListener)
3700               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3701           }
3702         }
3703       }
3704       break;
3705 
3706     case MACRO_OFFSET: {
3707       if (F.LocalNumMacros != 0)
3708         return llvm::createStringError(
3709             std::errc::illegal_byte_sequence,
3710             "duplicate MACRO_OFFSET record in AST file");
3711       F.MacroOffsets = (const uint32_t *)Blob.data();
3712       F.LocalNumMacros = Record[0];
3713       unsigned LocalBaseMacroID = Record[1];
3714       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3715       F.BaseMacroID = getTotalNumMacros();
3716 
3717       if (F.LocalNumMacros > 0) {
3718         // Introduce the global -> local mapping for macros within this module.
3719         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3720 
3721         // Introduce the local -> global mapping for macros within this module.
3722         F.MacroRemap.insertOrReplace(
3723           std::make_pair(LocalBaseMacroID,
3724                          F.BaseMacroID - LocalBaseMacroID));
3725 
3726         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3727       }
3728       break;
3729     }
3730 
3731     case PP_INCLUDED_FILES:
3732       readIncludedFiles(F, Blob, PP);
3733       break;
3734 
3735     case LATE_PARSED_TEMPLATE:
3736       LateParsedTemplates.emplace_back(
3737           std::piecewise_construct, std::forward_as_tuple(&F),
3738           std::forward_as_tuple(Record.begin(), Record.end()));
3739       break;
3740 
3741     case OPTIMIZE_PRAGMA_OPTIONS:
3742       if (Record.size() != 1)
3743         return llvm::createStringError(std::errc::illegal_byte_sequence,
3744                                        "invalid pragma optimize record");
3745       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3746       break;
3747 
3748     case MSSTRUCT_PRAGMA_OPTIONS:
3749       if (Record.size() != 1)
3750         return llvm::createStringError(std::errc::illegal_byte_sequence,
3751                                        "invalid pragma ms_struct record");
3752       PragmaMSStructState = Record[0];
3753       break;
3754 
3755     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3756       if (Record.size() != 2)
3757         return llvm::createStringError(
3758             std::errc::illegal_byte_sequence,
3759             "invalid pragma pointers to members record");
3760       PragmaMSPointersToMembersState = Record[0];
3761       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3762       break;
3763 
3764     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3765       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3766         UnusedLocalTypedefNameCandidates.push_back(
3767             getGlobalDeclID(F, Record[I]));
3768       break;
3769 
3770     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3771       if (Record.size() != 1)
3772         return llvm::createStringError(std::errc::illegal_byte_sequence,
3773                                        "invalid cuda pragma options record");
3774       ForceCUDAHostDeviceDepth = Record[0];
3775       break;
3776 
3777     case ALIGN_PACK_PRAGMA_OPTIONS: {
3778       if (Record.size() < 3)
3779         return llvm::createStringError(std::errc::illegal_byte_sequence,
3780                                        "invalid pragma pack record");
3781       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3782       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3783       unsigned NumStackEntries = Record[2];
3784       unsigned Idx = 3;
3785       // Reset the stack when importing a new module.
3786       PragmaAlignPackStack.clear();
3787       for (unsigned I = 0; I < NumStackEntries; ++I) {
3788         PragmaAlignPackStackEntry Entry;
3789         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3790         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3791         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3792         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3793         Entry.SlotLabel = PragmaAlignPackStrings.back();
3794         PragmaAlignPackStack.push_back(Entry);
3795       }
3796       break;
3797     }
3798 
3799     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3800       if (Record.size() < 3)
3801         return llvm::createStringError(std::errc::illegal_byte_sequence,
3802                                        "invalid pragma float control record");
3803       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3804       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3805       unsigned NumStackEntries = Record[2];
3806       unsigned Idx = 3;
3807       // Reset the stack when importing a new module.
3808       FpPragmaStack.clear();
3809       for (unsigned I = 0; I < NumStackEntries; ++I) {
3810         FpPragmaStackEntry Entry;
3811         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3812         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3813         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3814         FpPragmaStrings.push_back(ReadString(Record, Idx));
3815         Entry.SlotLabel = FpPragmaStrings.back();
3816         FpPragmaStack.push_back(Entry);
3817       }
3818       break;
3819     }
3820 
3821     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3822       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3823         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3824       break;
3825     }
3826   }
3827 }
3828 
3829 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3830   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3831 
3832   // Additional remapping information.
3833   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3834   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3835   F.ModuleOffsetMap = StringRef();
3836 
3837   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3838   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3839     F.SLocRemap.insert(std::make_pair(0U, 0));
3840     F.SLocRemap.insert(std::make_pair(2U, 1));
3841   }
3842 
3843   // Continuous range maps we may be updating in our module.
3844   using SLocRemapBuilder =
3845       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3846                          2>::Builder;
3847   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3848   SLocRemapBuilder SLocRemap(F.SLocRemap);
3849   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3850   RemapBuilder MacroRemap(F.MacroRemap);
3851   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3852   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3853   RemapBuilder SelectorRemap(F.SelectorRemap);
3854   RemapBuilder DeclRemap(F.DeclRemap);
3855   RemapBuilder TypeRemap(F.TypeRemap);
3856 
3857   while (Data < DataEnd) {
3858     // FIXME: Looking up dependency modules by filename is horrible. Let's
3859     // start fixing this with prebuilt, explicit and implicit modules and see
3860     // how it goes...
3861     using namespace llvm::support;
3862     ModuleKind Kind = static_cast<ModuleKind>(
3863       endian::readNext<uint8_t, little, unaligned>(Data));
3864     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3865     StringRef Name = StringRef((const char*)Data, Len);
3866     Data += Len;
3867     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3868                               Kind == MK_ImplicitModule
3869                           ? ModuleMgr.lookupByModuleName(Name)
3870                           : ModuleMgr.lookupByFileName(Name));
3871     if (!OM) {
3872       std::string Msg =
3873           "SourceLocation remap refers to unknown module, cannot find ";
3874       Msg.append(std::string(Name));
3875       Error(Msg);
3876       return;
3877     }
3878 
3879     SourceLocation::UIntTy SLocOffset =
3880         endian::readNext<uint32_t, little, unaligned>(Data);
3881     uint32_t IdentifierIDOffset =
3882         endian::readNext<uint32_t, little, unaligned>(Data);
3883     uint32_t MacroIDOffset =
3884         endian::readNext<uint32_t, little, unaligned>(Data);
3885     uint32_t PreprocessedEntityIDOffset =
3886         endian::readNext<uint32_t, little, unaligned>(Data);
3887     uint32_t SubmoduleIDOffset =
3888         endian::readNext<uint32_t, little, unaligned>(Data);
3889     uint32_t SelectorIDOffset =
3890         endian::readNext<uint32_t, little, unaligned>(Data);
3891     uint32_t DeclIDOffset =
3892         endian::readNext<uint32_t, little, unaligned>(Data);
3893     uint32_t TypeIndexOffset =
3894         endian::readNext<uint32_t, little, unaligned>(Data);
3895 
3896     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3897                          RemapBuilder &Remap) {
3898       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3899       if (Offset != None)
3900         Remap.insert(std::make_pair(Offset,
3901                                     static_cast<int>(BaseOffset - Offset)));
3902     };
3903 
3904     constexpr SourceLocation::UIntTy SLocNone =
3905         std::numeric_limits<SourceLocation::UIntTy>::max();
3906     if (SLocOffset != SLocNone)
3907       SLocRemap.insert(std::make_pair(
3908           SLocOffset, static_cast<SourceLocation::IntTy>(
3909                           OM->SLocEntryBaseOffset - SLocOffset)));
3910 
3911     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3912     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3913     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3914               PreprocessedEntityRemap);
3915     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3916     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3917     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3918     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3919 
3920     // Global -> local mappings.
3921     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3922   }
3923 }
3924 
3925 ASTReader::ASTReadResult
3926 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3927                                   const ModuleFile *ImportedBy,
3928                                   unsigned ClientLoadCapabilities) {
3929   unsigned Idx = 0;
3930   F.ModuleMapPath = ReadPath(F, Record, Idx);
3931 
3932   // Try to resolve ModuleName in the current header search context and
3933   // verify that it is found in the same module map file as we saved. If the
3934   // top-level AST file is a main file, skip this check because there is no
3935   // usable header search context.
3936   assert(!F.ModuleName.empty() &&
3937          "MODULE_NAME should come before MODULE_MAP_FILE");
3938   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3939     // An implicitly-loaded module file should have its module listed in some
3940     // module map file that we've already loaded.
3941     Module *M =
3942         PP.getHeaderSearchInfo().lookupModule(F.ModuleName, F.ImportLoc);
3943     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3944     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3945     // Don't emit module relocation error if we have -fno-validate-pch
3946     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3947               DisableValidationForModuleKind::Module) &&
3948         !ModMap) {
3949       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3950         if (auto ASTFE = M ? M->getASTFile() : None) {
3951           // This module was defined by an imported (explicit) module.
3952           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3953                                                << ASTFE->getName();
3954         } else {
3955           // This module was built with a different module map.
3956           Diag(diag::err_imported_module_not_found)
3957               << F.ModuleName << F.FileName
3958               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3959               << !ImportedBy;
3960           // In case it was imported by a PCH, there's a chance the user is
3961           // just missing to include the search path to the directory containing
3962           // the modulemap.
3963           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3964             Diag(diag::note_imported_by_pch_module_not_found)
3965                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3966         }
3967       }
3968       return OutOfDate;
3969     }
3970 
3971     assert(M && M->Name == F.ModuleName && "found module with different name");
3972 
3973     // Check the primary module map file.
3974     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3975     if (!StoredModMap || *StoredModMap != ModMap) {
3976       assert(ModMap && "found module is missing module map file");
3977       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3978              "top-level import should be verified");
3979       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3980       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3981         Diag(diag::err_imported_module_modmap_changed)
3982             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3983             << ModMap->getName() << F.ModuleMapPath << NotImported;
3984       return OutOfDate;
3985     }
3986 
3987     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3988     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3989       // FIXME: we should use input files rather than storing names.
3990       std::string Filename = ReadPath(F, Record, Idx);
3991       auto SF = FileMgr.getFile(Filename, false, false);
3992       if (!SF) {
3993         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3994           Error("could not find file '" + Filename +"' referenced by AST file");
3995         return OutOfDate;
3996       }
3997       AdditionalStoredMaps.insert(*SF);
3998     }
3999 
4000     // Check any additional module map files (e.g. module.private.modulemap)
4001     // that are not in the pcm.
4002     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
4003       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
4004         // Remove files that match
4005         // Note: SmallPtrSet::erase is really remove
4006         if (!AdditionalStoredMaps.erase(ModMap)) {
4007           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4008             Diag(diag::err_module_different_modmap)
4009               << F.ModuleName << /*new*/0 << ModMap->getName();
4010           return OutOfDate;
4011         }
4012       }
4013     }
4014 
4015     // Check any additional module map files that are in the pcm, but not
4016     // found in header search. Cases that match are already removed.
4017     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4018       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4019         Diag(diag::err_module_different_modmap)
4020           << F.ModuleName << /*not new*/1 << ModMap->getName();
4021       return OutOfDate;
4022     }
4023   }
4024 
4025   if (Listener)
4026     Listener->ReadModuleMapFile(F.ModuleMapPath);
4027   return Success;
4028 }
4029 
4030 /// Move the given method to the back of the global list of methods.
4031 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4032   // Find the entry for this selector in the method pool.
4033   Sema::GlobalMethodPool::iterator Known
4034     = S.MethodPool.find(Method->getSelector());
4035   if (Known == S.MethodPool.end())
4036     return;
4037 
4038   // Retrieve the appropriate method list.
4039   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4040                                                     : Known->second.second;
4041   bool Found = false;
4042   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4043     if (!Found) {
4044       if (List->getMethod() == Method) {
4045         Found = true;
4046       } else {
4047         // Keep searching.
4048         continue;
4049       }
4050     }
4051 
4052     if (List->getNext())
4053       List->setMethod(List->getNext()->getMethod());
4054     else
4055       List->setMethod(Method);
4056   }
4057 }
4058 
4059 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4060   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4061   for (Decl *D : Names) {
4062     bool wasHidden = !D->isUnconditionallyVisible();
4063     D->setVisibleDespiteOwningModule();
4064 
4065     if (wasHidden && SemaObj) {
4066       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4067         moveMethodToBackOfGlobalList(*SemaObj, Method);
4068       }
4069     }
4070   }
4071 }
4072 
4073 void ASTReader::makeModuleVisible(Module *Mod,
4074                                   Module::NameVisibilityKind NameVisibility,
4075                                   SourceLocation ImportLoc) {
4076   llvm::SmallPtrSet<Module *, 4> Visited;
4077   SmallVector<Module *, 4> Stack;
4078   Stack.push_back(Mod);
4079   while (!Stack.empty()) {
4080     Mod = Stack.pop_back_val();
4081 
4082     if (NameVisibility <= Mod->NameVisibility) {
4083       // This module already has this level of visibility (or greater), so
4084       // there is nothing more to do.
4085       continue;
4086     }
4087 
4088     if (Mod->isUnimportable()) {
4089       // Modules that aren't importable cannot be made visible.
4090       continue;
4091     }
4092 
4093     // Update the module's name visibility.
4094     Mod->NameVisibility = NameVisibility;
4095 
4096     // If we've already deserialized any names from this module,
4097     // mark them as visible.
4098     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4099     if (Hidden != HiddenNamesMap.end()) {
4100       auto HiddenNames = std::move(*Hidden);
4101       HiddenNamesMap.erase(Hidden);
4102       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4103       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4104              "making names visible added hidden names");
4105     }
4106 
4107     // Push any exported modules onto the stack to be marked as visible.
4108     SmallVector<Module *, 16> Exports;
4109     Mod->getExportedModules(Exports);
4110     for (SmallVectorImpl<Module *>::iterator
4111            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4112       Module *Exported = *I;
4113       if (Visited.insert(Exported).second)
4114         Stack.push_back(Exported);
4115     }
4116   }
4117 }
4118 
4119 /// We've merged the definition \p MergedDef into the existing definition
4120 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4121 /// visible.
4122 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4123                                           NamedDecl *MergedDef) {
4124   if (!Def->isUnconditionallyVisible()) {
4125     // If MergedDef is visible or becomes visible, make the definition visible.
4126     if (MergedDef->isUnconditionallyVisible())
4127       Def->setVisibleDespiteOwningModule();
4128     else {
4129       getContext().mergeDefinitionIntoModule(
4130           Def, MergedDef->getImportedOwningModule(),
4131           /*NotifyListeners*/ false);
4132       PendingMergedDefinitionsToDeduplicate.insert(Def);
4133     }
4134   }
4135 }
4136 
4137 bool ASTReader::loadGlobalIndex() {
4138   if (GlobalIndex)
4139     return false;
4140 
4141   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4142       !PP.getLangOpts().Modules)
4143     return true;
4144 
4145   // Try to load the global index.
4146   TriedLoadingGlobalIndex = true;
4147   StringRef ModuleCachePath
4148     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4149   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4150       GlobalModuleIndex::readIndex(ModuleCachePath);
4151   if (llvm::Error Err = std::move(Result.second)) {
4152     assert(!Result.first);
4153     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4154     return true;
4155   }
4156 
4157   GlobalIndex.reset(Result.first);
4158   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4159   return false;
4160 }
4161 
4162 bool ASTReader::isGlobalIndexUnavailable() const {
4163   return PP.getLangOpts().Modules && UseGlobalIndex &&
4164          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4165 }
4166 
4167 static void updateModuleTimestamp(ModuleFile &MF) {
4168   // Overwrite the timestamp file contents so that file's mtime changes.
4169   std::string TimestampFilename = MF.getTimestampFilename();
4170   std::error_code EC;
4171   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4172                           llvm::sys::fs::OF_TextWithCRLF);
4173   if (EC)
4174     return;
4175   OS << "Timestamp file\n";
4176   OS.close();
4177   OS.clear_error(); // Avoid triggering a fatal error.
4178 }
4179 
4180 /// Given a cursor at the start of an AST file, scan ahead and drop the
4181 /// cursor into the start of the given block ID, returning false on success and
4182 /// true on failure.
4183 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4184   while (true) {
4185     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4186     if (!MaybeEntry) {
4187       // FIXME this drops errors on the floor.
4188       consumeError(MaybeEntry.takeError());
4189       return true;
4190     }
4191     llvm::BitstreamEntry Entry = MaybeEntry.get();
4192 
4193     switch (Entry.Kind) {
4194     case llvm::BitstreamEntry::Error:
4195     case llvm::BitstreamEntry::EndBlock:
4196       return true;
4197 
4198     case llvm::BitstreamEntry::Record:
4199       // Ignore top-level records.
4200       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4201         break;
4202       else {
4203         // FIXME this drops errors on the floor.
4204         consumeError(Skipped.takeError());
4205         return true;
4206       }
4207 
4208     case llvm::BitstreamEntry::SubBlock:
4209       if (Entry.ID == BlockID) {
4210         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4211           // FIXME this drops the error on the floor.
4212           consumeError(std::move(Err));
4213           return true;
4214         }
4215         // Found it!
4216         return false;
4217       }
4218 
4219       if (llvm::Error Err = Cursor.SkipBlock()) {
4220         // FIXME this drops the error on the floor.
4221         consumeError(std::move(Err));
4222         return true;
4223       }
4224     }
4225   }
4226 }
4227 
4228 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4229                                             ModuleKind Type,
4230                                             SourceLocation ImportLoc,
4231                                             unsigned ClientLoadCapabilities,
4232                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4233   llvm::SaveAndRestore<SourceLocation>
4234     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4235   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4236       CurrentDeserializingModuleKind, Type);
4237 
4238   // Defer any pending actions until we get to the end of reading the AST file.
4239   Deserializing AnASTFile(this);
4240 
4241   // Bump the generation number.
4242   unsigned PreviousGeneration = 0;
4243   if (ContextObj)
4244     PreviousGeneration = incrementGeneration(*ContextObj);
4245 
4246   unsigned NumModules = ModuleMgr.size();
4247   SmallVector<ImportedModule, 4> Loaded;
4248   if (ASTReadResult ReadResult =
4249           ReadASTCore(FileName, Type, ImportLoc,
4250                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4251                       ClientLoadCapabilities)) {
4252     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4253                             PP.getLangOpts().Modules
4254                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4255                                 : nullptr);
4256 
4257     // If we find that any modules are unusable, the global index is going
4258     // to be out-of-date. Just remove it.
4259     GlobalIndex.reset();
4260     ModuleMgr.setGlobalIndex(nullptr);
4261     return ReadResult;
4262   }
4263 
4264   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4265   // remove modules from this point. Various fields are updated during reading
4266   // the AST block and removing the modules would result in dangling pointers.
4267   // They are generally only incidentally dereferenced, ie. a binary search
4268   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4269   // be dereferenced but it wouldn't actually be used.
4270 
4271   // Load the AST blocks of all of the modules that we loaded. We can still
4272   // hit errors parsing the ASTs at this point.
4273   for (ImportedModule &M : Loaded) {
4274     ModuleFile &F = *M.Mod;
4275 
4276     // Read the AST block.
4277     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4278       Error(std::move(Err));
4279       return Failure;
4280     }
4281 
4282     // The AST block should always have a definition for the main module.
4283     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4284       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4285       return Failure;
4286     }
4287 
4288     // Read the extension blocks.
4289     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4290       if (llvm::Error Err = ReadExtensionBlock(F)) {
4291         Error(std::move(Err));
4292         return Failure;
4293       }
4294     }
4295 
4296     // Once read, set the ModuleFile bit base offset and update the size in
4297     // bits of all files we've seen.
4298     F.GlobalBitOffset = TotalModulesSizeInBits;
4299     TotalModulesSizeInBits += F.SizeInBits;
4300     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4301   }
4302 
4303   // Preload source locations and interesting indentifiers.
4304   for (ImportedModule &M : Loaded) {
4305     ModuleFile &F = *M.Mod;
4306 
4307     // Preload SLocEntries.
4308     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4309       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4310       // Load it through the SourceManager and don't call ReadSLocEntry()
4311       // directly because the entry may have already been loaded in which case
4312       // calling ReadSLocEntry() directly would trigger an assertion in
4313       // SourceManager.
4314       SourceMgr.getLoadedSLocEntryByID(Index);
4315     }
4316 
4317     // Map the original source file ID into the ID space of the current
4318     // compilation.
4319     if (F.OriginalSourceFileID.isValid()) {
4320       F.OriginalSourceFileID = FileID::get(
4321           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4322     }
4323 
4324     // Preload all the pending interesting identifiers by marking them out of
4325     // date.
4326     for (auto Offset : F.PreloadIdentifierOffsets) {
4327       const unsigned char *Data = F.IdentifierTableData + Offset;
4328 
4329       ASTIdentifierLookupTrait Trait(*this, F);
4330       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4331       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4332       auto &II = PP.getIdentifierTable().getOwn(Key);
4333       II.setOutOfDate(true);
4334 
4335       // Mark this identifier as being from an AST file so that we can track
4336       // whether we need to serialize it.
4337       markIdentifierFromAST(*this, II);
4338 
4339       // Associate the ID with the identifier so that the writer can reuse it.
4340       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4341       SetIdentifierInfo(ID, &II);
4342     }
4343   }
4344 
4345   // Setup the import locations and notify the module manager that we've
4346   // committed to these module files.
4347   for (ImportedModule &M : Loaded) {
4348     ModuleFile &F = *M.Mod;
4349 
4350     ModuleMgr.moduleFileAccepted(&F);
4351 
4352     // Set the import location.
4353     F.DirectImportLoc = ImportLoc;
4354     // FIXME: We assume that locations from PCH / preamble do not need
4355     // any translation.
4356     if (!M.ImportedBy)
4357       F.ImportLoc = M.ImportLoc;
4358     else
4359       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4360   }
4361 
4362   if (!PP.getLangOpts().CPlusPlus ||
4363       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4364        Type != MK_PrebuiltModule)) {
4365     // Mark all of the identifiers in the identifier table as being out of date,
4366     // so that various accessors know to check the loaded modules when the
4367     // identifier is used.
4368     //
4369     // For C++ modules, we don't need information on many identifiers (just
4370     // those that provide macros or are poisoned), so we mark all of
4371     // the interesting ones via PreloadIdentifierOffsets.
4372     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4373                                 IdEnd = PP.getIdentifierTable().end();
4374          Id != IdEnd; ++Id)
4375       Id->second->setOutOfDate(true);
4376   }
4377   // Mark selectors as out of date.
4378   for (auto Sel : SelectorGeneration)
4379     SelectorOutOfDate[Sel.first] = true;
4380 
4381   // Resolve any unresolved module exports.
4382   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4383     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4384     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4385     Module *ResolvedMod = getSubmodule(GlobalID);
4386 
4387     switch (Unresolved.Kind) {
4388     case UnresolvedModuleRef::Conflict:
4389       if (ResolvedMod) {
4390         Module::Conflict Conflict;
4391         Conflict.Other = ResolvedMod;
4392         Conflict.Message = Unresolved.String.str();
4393         Unresolved.Mod->Conflicts.push_back(Conflict);
4394       }
4395       continue;
4396 
4397     case UnresolvedModuleRef::Import:
4398       if (ResolvedMod)
4399         Unresolved.Mod->Imports.insert(ResolvedMod);
4400       continue;
4401 
4402     case UnresolvedModuleRef::Export:
4403       if (ResolvedMod || Unresolved.IsWildcard)
4404         Unresolved.Mod->Exports.push_back(
4405           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4406       continue;
4407     }
4408   }
4409   UnresolvedModuleRefs.clear();
4410 
4411   if (Imported)
4412     Imported->append(ImportedModules.begin(),
4413                      ImportedModules.end());
4414 
4415   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4416   // Might be unnecessary as use declarations are only used to build the
4417   // module itself.
4418 
4419   if (ContextObj)
4420     InitializeContext();
4421 
4422   if (SemaObj)
4423     UpdateSema();
4424 
4425   if (DeserializationListener)
4426     DeserializationListener->ReaderInitialized(this);
4427 
4428   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4429   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4430     // If this AST file is a precompiled preamble, then set the
4431     // preamble file ID of the source manager to the file source file
4432     // from which the preamble was built.
4433     if (Type == MK_Preamble) {
4434       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4435     } else if (Type == MK_MainFile) {
4436       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4437     }
4438   }
4439 
4440   // For any Objective-C class definitions we have already loaded, make sure
4441   // that we load any additional categories.
4442   if (ContextObj) {
4443     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4444       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4445                          ObjCClassesLoaded[I],
4446                          PreviousGeneration);
4447     }
4448   }
4449 
4450   if (PP.getHeaderSearchInfo()
4451           .getHeaderSearchOpts()
4452           .ModulesValidateOncePerBuildSession) {
4453     // Now we are certain that the module and all modules it depends on are
4454     // up to date.  Create or update timestamp files for modules that are
4455     // located in the module cache (not for PCH files that could be anywhere
4456     // in the filesystem).
4457     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4458       ImportedModule &M = Loaded[I];
4459       if (M.Mod->Kind == MK_ImplicitModule) {
4460         updateModuleTimestamp(*M.Mod);
4461       }
4462     }
4463   }
4464 
4465   return Success;
4466 }
4467 
4468 static ASTFileSignature readASTFileSignature(StringRef PCH);
4469 
4470 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4471 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4472   // FIXME checking magic headers is done in other places such as
4473   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4474   // always done the same. Unify it all with a helper.
4475   if (!Stream.canSkipToPos(4))
4476     return llvm::createStringError(std::errc::illegal_byte_sequence,
4477                                    "file too small to contain AST file magic");
4478   for (unsigned C : {'C', 'P', 'C', 'H'})
4479     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4480       if (Res.get() != C)
4481         return llvm::createStringError(
4482             std::errc::illegal_byte_sequence,
4483             "file doesn't start with AST file magic");
4484     } else
4485       return Res.takeError();
4486   return llvm::Error::success();
4487 }
4488 
4489 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4490   switch (Kind) {
4491   case MK_PCH:
4492     return 0; // PCH
4493   case MK_ImplicitModule:
4494   case MK_ExplicitModule:
4495   case MK_PrebuiltModule:
4496     return 1; // module
4497   case MK_MainFile:
4498   case MK_Preamble:
4499     return 2; // main source file
4500   }
4501   llvm_unreachable("unknown module kind");
4502 }
4503 
4504 ASTReader::ASTReadResult
4505 ASTReader::ReadASTCore(StringRef FileName,
4506                        ModuleKind Type,
4507                        SourceLocation ImportLoc,
4508                        ModuleFile *ImportedBy,
4509                        SmallVectorImpl<ImportedModule> &Loaded,
4510                        off_t ExpectedSize, time_t ExpectedModTime,
4511                        ASTFileSignature ExpectedSignature,
4512                        unsigned ClientLoadCapabilities) {
4513   ModuleFile *M;
4514   std::string ErrorStr;
4515   ModuleManager::AddModuleResult AddResult
4516     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4517                           getGeneration(), ExpectedSize, ExpectedModTime,
4518                           ExpectedSignature, readASTFileSignature,
4519                           M, ErrorStr);
4520 
4521   switch (AddResult) {
4522   case ModuleManager::AlreadyLoaded:
4523     Diag(diag::remark_module_import)
4524         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4525         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4526     return Success;
4527 
4528   case ModuleManager::NewlyLoaded:
4529     // Load module file below.
4530     break;
4531 
4532   case ModuleManager::Missing:
4533     // The module file was missing; if the client can handle that, return
4534     // it.
4535     if (ClientLoadCapabilities & ARR_Missing)
4536       return Missing;
4537 
4538     // Otherwise, return an error.
4539     Diag(diag::err_ast_file_not_found)
4540         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4541         << ErrorStr;
4542     return Failure;
4543 
4544   case ModuleManager::OutOfDate:
4545     // We couldn't load the module file because it is out-of-date. If the
4546     // client can handle out-of-date, return it.
4547     if (ClientLoadCapabilities & ARR_OutOfDate)
4548       return OutOfDate;
4549 
4550     // Otherwise, return an error.
4551     Diag(diag::err_ast_file_out_of_date)
4552         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4553         << ErrorStr;
4554     return Failure;
4555   }
4556 
4557   assert(M && "Missing module file");
4558 
4559   bool ShouldFinalizePCM = false;
4560   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4561     auto &MC = getModuleManager().getModuleCache();
4562     if (ShouldFinalizePCM)
4563       MC.finalizePCM(FileName);
4564     else
4565       MC.tryToDropPCM(FileName);
4566   });
4567   ModuleFile &F = *M;
4568   BitstreamCursor &Stream = F.Stream;
4569   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4570   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4571 
4572   // Sniff for the signature.
4573   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4574     Diag(diag::err_ast_file_invalid)
4575         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4576     return Failure;
4577   }
4578 
4579   // This is used for compatibility with older PCH formats.
4580   bool HaveReadControlBlock = false;
4581   while (true) {
4582     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4583     if (!MaybeEntry) {
4584       Error(MaybeEntry.takeError());
4585       return Failure;
4586     }
4587     llvm::BitstreamEntry Entry = MaybeEntry.get();
4588 
4589     switch (Entry.Kind) {
4590     case llvm::BitstreamEntry::Error:
4591     case llvm::BitstreamEntry::Record:
4592     case llvm::BitstreamEntry::EndBlock:
4593       Error("invalid record at top-level of AST file");
4594       return Failure;
4595 
4596     case llvm::BitstreamEntry::SubBlock:
4597       break;
4598     }
4599 
4600     switch (Entry.ID) {
4601     case CONTROL_BLOCK_ID:
4602       HaveReadControlBlock = true;
4603       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4604       case Success:
4605         // Check that we didn't try to load a non-module AST file as a module.
4606         //
4607         // FIXME: Should we also perform the converse check? Loading a module as
4608         // a PCH file sort of works, but it's a bit wonky.
4609         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4610              Type == MK_PrebuiltModule) &&
4611             F.ModuleName.empty()) {
4612           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4613           if (Result != OutOfDate ||
4614               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4615             Diag(diag::err_module_file_not_module) << FileName;
4616           return Result;
4617         }
4618         break;
4619 
4620       case Failure: return Failure;
4621       case Missing: return Missing;
4622       case OutOfDate: return OutOfDate;
4623       case VersionMismatch: return VersionMismatch;
4624       case ConfigurationMismatch: return ConfigurationMismatch;
4625       case HadErrors: return HadErrors;
4626       }
4627       break;
4628 
4629     case AST_BLOCK_ID:
4630       if (!HaveReadControlBlock) {
4631         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4632           Diag(diag::err_pch_version_too_old);
4633         return VersionMismatch;
4634       }
4635 
4636       // Record that we've loaded this module.
4637       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4638       ShouldFinalizePCM = true;
4639       return Success;
4640 
4641     case UNHASHED_CONTROL_BLOCK_ID:
4642       // This block is handled using look-ahead during ReadControlBlock.  We
4643       // shouldn't get here!
4644       Error("malformed block record in AST file");
4645       return Failure;
4646 
4647     default:
4648       if (llvm::Error Err = Stream.SkipBlock()) {
4649         Error(std::move(Err));
4650         return Failure;
4651       }
4652       break;
4653     }
4654   }
4655 
4656   llvm_unreachable("unexpected break; expected return");
4657 }
4658 
4659 ASTReader::ASTReadResult
4660 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4661                                     unsigned ClientLoadCapabilities) {
4662   const HeaderSearchOptions &HSOpts =
4663       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4664   bool AllowCompatibleConfigurationMismatch =
4665       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4666   bool DisableValidation = shouldDisableValidationForFile(F);
4667 
4668   ASTReadResult Result = readUnhashedControlBlockImpl(
4669       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4670       Listener.get(),
4671       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4672 
4673   // If F was directly imported by another module, it's implicitly validated by
4674   // the importing module.
4675   if (DisableValidation || WasImportedBy ||
4676       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4677     return Success;
4678 
4679   if (Result == Failure) {
4680     Error("malformed block record in AST file");
4681     return Failure;
4682   }
4683 
4684   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4685     // If this module has already been finalized in the ModuleCache, we're stuck
4686     // with it; we can only load a single version of each module.
4687     //
4688     // This can happen when a module is imported in two contexts: in one, as a
4689     // user module; in another, as a system module (due to an import from
4690     // another module marked with the [system] flag).  It usually indicates a
4691     // bug in the module map: this module should also be marked with [system].
4692     //
4693     // If -Wno-system-headers (the default), and the first import is as a
4694     // system module, then validation will fail during the as-user import,
4695     // since -Werror flags won't have been validated.  However, it's reasonable
4696     // to treat this consistently as a system module.
4697     //
4698     // If -Wsystem-headers, the PCM on disk was built with
4699     // -Wno-system-headers, and the first import is as a user module, then
4700     // validation will fail during the as-system import since the PCM on disk
4701     // doesn't guarantee that -Werror was respected.  However, the -Werror
4702     // flags were checked during the initial as-user import.
4703     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4704       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4705       return Success;
4706     }
4707   }
4708 
4709   return Result;
4710 }
4711 
4712 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4713     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4714     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4715     bool ValidateDiagnosticOptions) {
4716   // Initialize a stream.
4717   BitstreamCursor Stream(StreamData);
4718 
4719   // Sniff for the signature.
4720   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4721     // FIXME this drops the error on the floor.
4722     consumeError(std::move(Err));
4723     return Failure;
4724   }
4725 
4726   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4727   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4728     return Failure;
4729 
4730   // Read all of the records in the options block.
4731   RecordData Record;
4732   ASTReadResult Result = Success;
4733   while (true) {
4734     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4735     if (!MaybeEntry) {
4736       // FIXME this drops the error on the floor.
4737       consumeError(MaybeEntry.takeError());
4738       return Failure;
4739     }
4740     llvm::BitstreamEntry Entry = MaybeEntry.get();
4741 
4742     switch (Entry.Kind) {
4743     case llvm::BitstreamEntry::Error:
4744     case llvm::BitstreamEntry::SubBlock:
4745       return Failure;
4746 
4747     case llvm::BitstreamEntry::EndBlock:
4748       return Result;
4749 
4750     case llvm::BitstreamEntry::Record:
4751       // The interesting case.
4752       break;
4753     }
4754 
4755     // Read and process a record.
4756     Record.clear();
4757     StringRef Blob;
4758     Expected<unsigned> MaybeRecordType =
4759         Stream.readRecord(Entry.ID, Record, &Blob);
4760     if (!MaybeRecordType) {
4761       // FIXME this drops the error.
4762       return Failure;
4763     }
4764     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4765     case SIGNATURE:
4766       if (F)
4767         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4768       break;
4769     case AST_BLOCK_HASH:
4770       if (F)
4771         F->ASTBlockHash =
4772             ASTFileSignature::create(Record.begin(), Record.end());
4773       break;
4774     case DIAGNOSTIC_OPTIONS: {
4775       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4776       if (Listener && ValidateDiagnosticOptions &&
4777           !AllowCompatibleConfigurationMismatch &&
4778           ParseDiagnosticOptions(Record, Complain, *Listener))
4779         Result = OutOfDate; // Don't return early.  Read the signature.
4780       break;
4781     }
4782     case DIAG_PRAGMA_MAPPINGS:
4783       if (!F)
4784         break;
4785       if (F->PragmaDiagMappings.empty())
4786         F->PragmaDiagMappings.swap(Record);
4787       else
4788         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4789                                      Record.begin(), Record.end());
4790       break;
4791     case HEADER_SEARCH_ENTRY_USAGE:
4792       if (!F)
4793         break;
4794       unsigned Count = Record[0];
4795       const char *Byte = Blob.data();
4796       F->SearchPathUsage = llvm::BitVector(Count, false);
4797       for (unsigned I = 0; I < Count; ++Byte)
4798         for (unsigned Bit = 0; Bit < 8 && I < Count; ++Bit, ++I)
4799           if (*Byte & (1 << Bit))
4800             F->SearchPathUsage[I] = true;
4801       break;
4802     }
4803   }
4804 }
4805 
4806 /// Parse a record and blob containing module file extension metadata.
4807 static bool parseModuleFileExtensionMetadata(
4808               const SmallVectorImpl<uint64_t> &Record,
4809               StringRef Blob,
4810               ModuleFileExtensionMetadata &Metadata) {
4811   if (Record.size() < 4) return true;
4812 
4813   Metadata.MajorVersion = Record[0];
4814   Metadata.MinorVersion = Record[1];
4815 
4816   unsigned BlockNameLen = Record[2];
4817   unsigned UserInfoLen = Record[3];
4818 
4819   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4820 
4821   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4822   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4823                                   Blob.data() + BlockNameLen + UserInfoLen);
4824   return false;
4825 }
4826 
4827 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4828   BitstreamCursor &Stream = F.Stream;
4829 
4830   RecordData Record;
4831   while (true) {
4832     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4833     if (!MaybeEntry)
4834       return MaybeEntry.takeError();
4835     llvm::BitstreamEntry Entry = MaybeEntry.get();
4836 
4837     switch (Entry.Kind) {
4838     case llvm::BitstreamEntry::SubBlock:
4839       if (llvm::Error Err = Stream.SkipBlock())
4840         return Err;
4841       continue;
4842     case llvm::BitstreamEntry::EndBlock:
4843       return llvm::Error::success();
4844     case llvm::BitstreamEntry::Error:
4845       return llvm::createStringError(std::errc::illegal_byte_sequence,
4846                                      "malformed block record in AST file");
4847     case llvm::BitstreamEntry::Record:
4848       break;
4849     }
4850 
4851     Record.clear();
4852     StringRef Blob;
4853     Expected<unsigned> MaybeRecCode =
4854         Stream.readRecord(Entry.ID, Record, &Blob);
4855     if (!MaybeRecCode)
4856       return MaybeRecCode.takeError();
4857     switch (MaybeRecCode.get()) {
4858     case EXTENSION_METADATA: {
4859       ModuleFileExtensionMetadata Metadata;
4860       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4861         return llvm::createStringError(
4862             std::errc::illegal_byte_sequence,
4863             "malformed EXTENSION_METADATA in AST file");
4864 
4865       // Find a module file extension with this block name.
4866       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4867       if (Known == ModuleFileExtensions.end()) break;
4868 
4869       // Form a reader.
4870       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4871                                                              F, Stream)) {
4872         F.ExtensionReaders.push_back(std::move(Reader));
4873       }
4874 
4875       break;
4876     }
4877     }
4878   }
4879 
4880   return llvm::Error::success();
4881 }
4882 
4883 void ASTReader::InitializeContext() {
4884   assert(ContextObj && "no context to initialize");
4885   ASTContext &Context = *ContextObj;
4886 
4887   // If there's a listener, notify them that we "read" the translation unit.
4888   if (DeserializationListener)
4889     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4890                                       Context.getTranslationUnitDecl());
4891 
4892   // FIXME: Find a better way to deal with collisions between these
4893   // built-in types. Right now, we just ignore the problem.
4894 
4895   // Load the special types.
4896   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4897     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4898       if (!Context.CFConstantStringTypeDecl)
4899         Context.setCFConstantStringType(GetType(String));
4900     }
4901 
4902     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4903       QualType FileType = GetType(File);
4904       if (FileType.isNull()) {
4905         Error("FILE type is NULL");
4906         return;
4907       }
4908 
4909       if (!Context.FILEDecl) {
4910         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4911           Context.setFILEDecl(Typedef->getDecl());
4912         else {
4913           const TagType *Tag = FileType->getAs<TagType>();
4914           if (!Tag) {
4915             Error("Invalid FILE type in AST file");
4916             return;
4917           }
4918           Context.setFILEDecl(Tag->getDecl());
4919         }
4920       }
4921     }
4922 
4923     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4924       QualType Jmp_bufType = GetType(Jmp_buf);
4925       if (Jmp_bufType.isNull()) {
4926         Error("jmp_buf type is NULL");
4927         return;
4928       }
4929 
4930       if (!Context.jmp_bufDecl) {
4931         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4932           Context.setjmp_bufDecl(Typedef->getDecl());
4933         else {
4934           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4935           if (!Tag) {
4936             Error("Invalid jmp_buf type in AST file");
4937             return;
4938           }
4939           Context.setjmp_bufDecl(Tag->getDecl());
4940         }
4941       }
4942     }
4943 
4944     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4945       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4946       if (Sigjmp_bufType.isNull()) {
4947         Error("sigjmp_buf type is NULL");
4948         return;
4949       }
4950 
4951       if (!Context.sigjmp_bufDecl) {
4952         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4953           Context.setsigjmp_bufDecl(Typedef->getDecl());
4954         else {
4955           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4956           assert(Tag && "Invalid sigjmp_buf type in AST file");
4957           Context.setsigjmp_bufDecl(Tag->getDecl());
4958         }
4959       }
4960     }
4961 
4962     if (unsigned ObjCIdRedef
4963           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4964       if (Context.ObjCIdRedefinitionType.isNull())
4965         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4966     }
4967 
4968     if (unsigned ObjCClassRedef
4969           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4970       if (Context.ObjCClassRedefinitionType.isNull())
4971         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4972     }
4973 
4974     if (unsigned ObjCSelRedef
4975           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4976       if (Context.ObjCSelRedefinitionType.isNull())
4977         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4978     }
4979 
4980     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4981       QualType Ucontext_tType = GetType(Ucontext_t);
4982       if (Ucontext_tType.isNull()) {
4983         Error("ucontext_t type is NULL");
4984         return;
4985       }
4986 
4987       if (!Context.ucontext_tDecl) {
4988         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4989           Context.setucontext_tDecl(Typedef->getDecl());
4990         else {
4991           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4992           assert(Tag && "Invalid ucontext_t type in AST file");
4993           Context.setucontext_tDecl(Tag->getDecl());
4994         }
4995       }
4996     }
4997   }
4998 
4999   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
5000 
5001   // If there were any CUDA special declarations, deserialize them.
5002   if (!CUDASpecialDeclRefs.empty()) {
5003     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
5004     Context.setcudaConfigureCallDecl(
5005                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
5006   }
5007 
5008   // Re-export any modules that were imported by a non-module AST file.
5009   // FIXME: This does not make macro-only imports visible again.
5010   for (auto &Import : ImportedModules) {
5011     if (Module *Imported = getSubmodule(Import.ID)) {
5012       makeModuleVisible(Imported, Module::AllVisible,
5013                         /*ImportLoc=*/Import.ImportLoc);
5014       if (Import.ImportLoc.isValid())
5015         PP.makeModuleVisible(Imported, Import.ImportLoc);
5016       // This updates visibility for Preprocessor only. For Sema, which can be
5017       // nullptr here, we do the same later, in UpdateSema().
5018     }
5019   }
5020 }
5021 
5022 void ASTReader::finalizeForWriting() {
5023   // Nothing to do for now.
5024 }
5025 
5026 /// Reads and return the signature record from \p PCH's control block, or
5027 /// else returns 0.
5028 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5029   BitstreamCursor Stream(PCH);
5030   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5031     // FIXME this drops the error on the floor.
5032     consumeError(std::move(Err));
5033     return ASTFileSignature();
5034   }
5035 
5036   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5037   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5038     return ASTFileSignature();
5039 
5040   // Scan for SIGNATURE inside the diagnostic options block.
5041   ASTReader::RecordData Record;
5042   while (true) {
5043     Expected<llvm::BitstreamEntry> MaybeEntry =
5044         Stream.advanceSkippingSubblocks();
5045     if (!MaybeEntry) {
5046       // FIXME this drops the error on the floor.
5047       consumeError(MaybeEntry.takeError());
5048       return ASTFileSignature();
5049     }
5050     llvm::BitstreamEntry Entry = MaybeEntry.get();
5051 
5052     if (Entry.Kind != llvm::BitstreamEntry::Record)
5053       return ASTFileSignature();
5054 
5055     Record.clear();
5056     StringRef Blob;
5057     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5058     if (!MaybeRecord) {
5059       // FIXME this drops the error on the floor.
5060       consumeError(MaybeRecord.takeError());
5061       return ASTFileSignature();
5062     }
5063     if (SIGNATURE == MaybeRecord.get())
5064       return ASTFileSignature::create(Record.begin(),
5065                                       Record.begin() + ASTFileSignature::size);
5066   }
5067 }
5068 
5069 /// Retrieve the name of the original source file name
5070 /// directly from the AST file, without actually loading the AST
5071 /// file.
5072 std::string ASTReader::getOriginalSourceFile(
5073     const std::string &ASTFileName, FileManager &FileMgr,
5074     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5075   // Open the AST file.
5076   auto Buffer = FileMgr.getBufferForFile(ASTFileName, /*IsVolatile=*/false,
5077                                          /*RequiresNullTerminator=*/false);
5078   if (!Buffer) {
5079     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5080         << ASTFileName << Buffer.getError().message();
5081     return std::string();
5082   }
5083 
5084   // Initialize the stream
5085   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5086 
5087   // Sniff for the signature.
5088   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5089     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5090     return std::string();
5091   }
5092 
5093   // Scan for the CONTROL_BLOCK_ID block.
5094   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5095     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5096     return std::string();
5097   }
5098 
5099   // Scan for ORIGINAL_FILE inside the control block.
5100   RecordData Record;
5101   while (true) {
5102     Expected<llvm::BitstreamEntry> MaybeEntry =
5103         Stream.advanceSkippingSubblocks();
5104     if (!MaybeEntry) {
5105       // FIXME this drops errors on the floor.
5106       consumeError(MaybeEntry.takeError());
5107       return std::string();
5108     }
5109     llvm::BitstreamEntry Entry = MaybeEntry.get();
5110 
5111     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5112       return std::string();
5113 
5114     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5115       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5116       return std::string();
5117     }
5118 
5119     Record.clear();
5120     StringRef Blob;
5121     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5122     if (!MaybeRecord) {
5123       // FIXME this drops the errors on the floor.
5124       consumeError(MaybeRecord.takeError());
5125       return std::string();
5126     }
5127     if (ORIGINAL_FILE == MaybeRecord.get())
5128       return Blob.str();
5129   }
5130 }
5131 
5132 namespace {
5133 
5134   class SimplePCHValidator : public ASTReaderListener {
5135     const LangOptions &ExistingLangOpts;
5136     const TargetOptions &ExistingTargetOpts;
5137     const PreprocessorOptions &ExistingPPOpts;
5138     std::string ExistingModuleCachePath;
5139     FileManager &FileMgr;
5140 
5141   public:
5142     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5143                        const TargetOptions &ExistingTargetOpts,
5144                        const PreprocessorOptions &ExistingPPOpts,
5145                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5146         : ExistingLangOpts(ExistingLangOpts),
5147           ExistingTargetOpts(ExistingTargetOpts),
5148           ExistingPPOpts(ExistingPPOpts),
5149           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5150 
5151     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5152                              bool AllowCompatibleDifferences) override {
5153       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5154                                   AllowCompatibleDifferences);
5155     }
5156 
5157     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5158                            bool AllowCompatibleDifferences) override {
5159       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5160                                 AllowCompatibleDifferences);
5161     }
5162 
5163     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5164                                  StringRef SpecificModuleCachePath,
5165                                  bool Complain) override {
5166       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5167                                       ExistingModuleCachePath, nullptr,
5168                                       ExistingLangOpts, ExistingPPOpts);
5169     }
5170 
5171     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5172                                  bool Complain,
5173                                  std::string &SuggestedPredefines) override {
5174       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5175                                       SuggestedPredefines, ExistingLangOpts);
5176     }
5177   };
5178 
5179 } // namespace
5180 
5181 bool ASTReader::readASTFileControlBlock(
5182     StringRef Filename, FileManager &FileMgr,
5183     const PCHContainerReader &PCHContainerRdr,
5184     bool FindModuleFileExtensions,
5185     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5186   // Open the AST file.
5187   // FIXME: This allows use of the VFS; we do not allow use of the
5188   // VFS when actually loading a module.
5189   auto Buffer = FileMgr.getBufferForFile(Filename);
5190   if (!Buffer) {
5191     return true;
5192   }
5193 
5194   // Initialize the stream
5195   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5196   BitstreamCursor Stream(Bytes);
5197 
5198   // Sniff for the signature.
5199   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5200     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5201     return true;
5202   }
5203 
5204   // Scan for the CONTROL_BLOCK_ID block.
5205   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5206     return true;
5207 
5208   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5209   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5210   bool NeedsImports = Listener.needsImportVisitation();
5211   BitstreamCursor InputFilesCursor;
5212 
5213   RecordData Record;
5214   std::string ModuleDir;
5215   bool DoneWithControlBlock = false;
5216   while (!DoneWithControlBlock) {
5217     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5218     if (!MaybeEntry) {
5219       // FIXME this drops the error on the floor.
5220       consumeError(MaybeEntry.takeError());
5221       return true;
5222     }
5223     llvm::BitstreamEntry Entry = MaybeEntry.get();
5224 
5225     switch (Entry.Kind) {
5226     case llvm::BitstreamEntry::SubBlock: {
5227       switch (Entry.ID) {
5228       case OPTIONS_BLOCK_ID: {
5229         std::string IgnoredSuggestedPredefines;
5230         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5231                              /*AllowCompatibleConfigurationMismatch*/ false,
5232                              Listener, IgnoredSuggestedPredefines) != Success)
5233           return true;
5234         break;
5235       }
5236 
5237       case INPUT_FILES_BLOCK_ID:
5238         InputFilesCursor = Stream;
5239         if (llvm::Error Err = Stream.SkipBlock()) {
5240           // FIXME this drops the error on the floor.
5241           consumeError(std::move(Err));
5242           return true;
5243         }
5244         if (NeedsInputFiles &&
5245             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5246           return true;
5247         break;
5248 
5249       default:
5250         if (llvm::Error Err = Stream.SkipBlock()) {
5251           // FIXME this drops the error on the floor.
5252           consumeError(std::move(Err));
5253           return true;
5254         }
5255         break;
5256       }
5257 
5258       continue;
5259     }
5260 
5261     case llvm::BitstreamEntry::EndBlock:
5262       DoneWithControlBlock = true;
5263       break;
5264 
5265     case llvm::BitstreamEntry::Error:
5266       return true;
5267 
5268     case llvm::BitstreamEntry::Record:
5269       break;
5270     }
5271 
5272     if (DoneWithControlBlock) break;
5273 
5274     Record.clear();
5275     StringRef Blob;
5276     Expected<unsigned> MaybeRecCode =
5277         Stream.readRecord(Entry.ID, Record, &Blob);
5278     if (!MaybeRecCode) {
5279       // FIXME this drops the error.
5280       return Failure;
5281     }
5282     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5283     case METADATA:
5284       if (Record[0] != VERSION_MAJOR)
5285         return true;
5286       if (Listener.ReadFullVersionInformation(Blob))
5287         return true;
5288       break;
5289     case MODULE_NAME:
5290       Listener.ReadModuleName(Blob);
5291       break;
5292     case MODULE_DIRECTORY:
5293       ModuleDir = std::string(Blob);
5294       break;
5295     case MODULE_MAP_FILE: {
5296       unsigned Idx = 0;
5297       auto Path = ReadString(Record, Idx);
5298       ResolveImportedPath(Path, ModuleDir);
5299       Listener.ReadModuleMapFile(Path);
5300       break;
5301     }
5302     case INPUT_FILE_OFFSETS: {
5303       if (!NeedsInputFiles)
5304         break;
5305 
5306       unsigned NumInputFiles = Record[0];
5307       unsigned NumUserFiles = Record[1];
5308       const llvm::support::unaligned_uint64_t *InputFileOffs =
5309           (const llvm::support::unaligned_uint64_t *)Blob.data();
5310       for (unsigned I = 0; I != NumInputFiles; ++I) {
5311         // Go find this input file.
5312         bool isSystemFile = I >= NumUserFiles;
5313 
5314         if (isSystemFile && !NeedsSystemInputFiles)
5315           break; // the rest are system input files
5316 
5317         BitstreamCursor &Cursor = InputFilesCursor;
5318         SavedStreamPosition SavedPosition(Cursor);
5319         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5320           // FIXME this drops errors on the floor.
5321           consumeError(std::move(Err));
5322         }
5323 
5324         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5325         if (!MaybeCode) {
5326           // FIXME this drops errors on the floor.
5327           consumeError(MaybeCode.takeError());
5328         }
5329         unsigned Code = MaybeCode.get();
5330 
5331         RecordData Record;
5332         StringRef Blob;
5333         bool shouldContinue = false;
5334         Expected<unsigned> MaybeRecordType =
5335             Cursor.readRecord(Code, Record, &Blob);
5336         if (!MaybeRecordType) {
5337           // FIXME this drops errors on the floor.
5338           consumeError(MaybeRecordType.takeError());
5339         }
5340         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5341         case INPUT_FILE_HASH:
5342           break;
5343         case INPUT_FILE:
5344           bool Overridden = static_cast<bool>(Record[3]);
5345           std::string Filename = std::string(Blob);
5346           ResolveImportedPath(Filename, ModuleDir);
5347           shouldContinue = Listener.visitInputFile(
5348               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5349           break;
5350         }
5351         if (!shouldContinue)
5352           break;
5353       }
5354       break;
5355     }
5356 
5357     case IMPORTS: {
5358       if (!NeedsImports)
5359         break;
5360 
5361       unsigned Idx = 0, N = Record.size();
5362       while (Idx < N) {
5363         // Read information about the AST file.
5364         Idx +=
5365             1 + 1 + 1 + 1 +
5366             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5367         std::string ModuleName = ReadString(Record, Idx);
5368         std::string Filename = ReadString(Record, Idx);
5369         ResolveImportedPath(Filename, ModuleDir);
5370         Listener.visitImport(ModuleName, Filename);
5371       }
5372       break;
5373     }
5374 
5375     default:
5376       // No other validation to perform.
5377       break;
5378     }
5379   }
5380 
5381   // Look for module file extension blocks, if requested.
5382   if (FindModuleFileExtensions) {
5383     BitstreamCursor SavedStream = Stream;
5384     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5385       bool DoneWithExtensionBlock = false;
5386       while (!DoneWithExtensionBlock) {
5387         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5388         if (!MaybeEntry) {
5389           // FIXME this drops the error.
5390           return true;
5391         }
5392         llvm::BitstreamEntry Entry = MaybeEntry.get();
5393 
5394         switch (Entry.Kind) {
5395         case llvm::BitstreamEntry::SubBlock:
5396           if (llvm::Error Err = Stream.SkipBlock()) {
5397             // FIXME this drops the error on the floor.
5398             consumeError(std::move(Err));
5399             return true;
5400           }
5401           continue;
5402 
5403         case llvm::BitstreamEntry::EndBlock:
5404           DoneWithExtensionBlock = true;
5405           continue;
5406 
5407         case llvm::BitstreamEntry::Error:
5408           return true;
5409 
5410         case llvm::BitstreamEntry::Record:
5411           break;
5412         }
5413 
5414        Record.clear();
5415        StringRef Blob;
5416        Expected<unsigned> MaybeRecCode =
5417            Stream.readRecord(Entry.ID, Record, &Blob);
5418        if (!MaybeRecCode) {
5419          // FIXME this drops the error.
5420          return true;
5421        }
5422        switch (MaybeRecCode.get()) {
5423        case EXTENSION_METADATA: {
5424          ModuleFileExtensionMetadata Metadata;
5425          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5426            return true;
5427 
5428          Listener.readModuleFileExtension(Metadata);
5429          break;
5430        }
5431        }
5432       }
5433     }
5434     Stream = SavedStream;
5435   }
5436 
5437   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5438   if (readUnhashedControlBlockImpl(
5439           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5440           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5441           ValidateDiagnosticOptions) != Success)
5442     return true;
5443 
5444   return false;
5445 }
5446 
5447 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5448                                     const PCHContainerReader &PCHContainerRdr,
5449                                     const LangOptions &LangOpts,
5450                                     const TargetOptions &TargetOpts,
5451                                     const PreprocessorOptions &PPOpts,
5452                                     StringRef ExistingModuleCachePath) {
5453   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5454                                ExistingModuleCachePath, FileMgr);
5455   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5456                                   /*FindModuleFileExtensions=*/false,
5457                                   validator,
5458                                   /*ValidateDiagnosticOptions=*/true);
5459 }
5460 
5461 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5462                                           unsigned ClientLoadCapabilities) {
5463   // Enter the submodule block.
5464   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5465     return Err;
5466 
5467   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5468   bool First = true;
5469   Module *CurrentModule = nullptr;
5470   RecordData Record;
5471   while (true) {
5472     Expected<llvm::BitstreamEntry> MaybeEntry =
5473         F.Stream.advanceSkippingSubblocks();
5474     if (!MaybeEntry)
5475       return MaybeEntry.takeError();
5476     llvm::BitstreamEntry Entry = MaybeEntry.get();
5477 
5478     switch (Entry.Kind) {
5479     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5480     case llvm::BitstreamEntry::Error:
5481       return llvm::createStringError(std::errc::illegal_byte_sequence,
5482                                      "malformed block record in AST file");
5483     case llvm::BitstreamEntry::EndBlock:
5484       return llvm::Error::success();
5485     case llvm::BitstreamEntry::Record:
5486       // The interesting case.
5487       break;
5488     }
5489 
5490     // Read a record.
5491     StringRef Blob;
5492     Record.clear();
5493     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5494     if (!MaybeKind)
5495       return MaybeKind.takeError();
5496     unsigned Kind = MaybeKind.get();
5497 
5498     if ((Kind == SUBMODULE_METADATA) != First)
5499       return llvm::createStringError(
5500           std::errc::illegal_byte_sequence,
5501           "submodule metadata record should be at beginning of block");
5502     First = false;
5503 
5504     // Submodule information is only valid if we have a current module.
5505     // FIXME: Should we error on these cases?
5506     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5507         Kind != SUBMODULE_DEFINITION)
5508       continue;
5509 
5510     switch (Kind) {
5511     default:  // Default behavior: ignore.
5512       break;
5513 
5514     case SUBMODULE_DEFINITION: {
5515       if (Record.size() < 12)
5516         return llvm::createStringError(std::errc::illegal_byte_sequence,
5517                                        "malformed module definition");
5518 
5519       StringRef Name = Blob;
5520       unsigned Idx = 0;
5521       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5522       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5523       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5524       bool IsFramework = Record[Idx++];
5525       bool IsExplicit = Record[Idx++];
5526       bool IsSystem = Record[Idx++];
5527       bool IsExternC = Record[Idx++];
5528       bool InferSubmodules = Record[Idx++];
5529       bool InferExplicitSubmodules = Record[Idx++];
5530       bool InferExportWildcard = Record[Idx++];
5531       bool ConfigMacrosExhaustive = Record[Idx++];
5532       bool ModuleMapIsPrivate = Record[Idx++];
5533 
5534       Module *ParentModule = nullptr;
5535       if (Parent)
5536         ParentModule = getSubmodule(Parent);
5537 
5538       // Retrieve this (sub)module from the module map, creating it if
5539       // necessary.
5540       CurrentModule =
5541           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5542               .first;
5543 
5544       // FIXME: set the definition loc for CurrentModule, or call
5545       // ModMap.setInferredModuleAllowedBy()
5546 
5547       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5548       if (GlobalIndex >= SubmodulesLoaded.size() ||
5549           SubmodulesLoaded[GlobalIndex])
5550         return llvm::createStringError(std::errc::invalid_argument,
5551                                        "too many submodules");
5552 
5553       if (!ParentModule) {
5554         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5555           // Don't emit module relocation error if we have -fno-validate-pch
5556           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5557                     DisableValidationForModuleKind::Module) &&
5558               CurFile != F.File) {
5559             auto ConflictError =
5560                 PartialDiagnostic(diag::err_module_file_conflict,
5561                                   ContextObj->DiagAllocator)
5562                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5563                 << F.File->getName();
5564             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5565           }
5566         }
5567 
5568         F.DidReadTopLevelSubmodule = true;
5569         CurrentModule->setASTFile(F.File);
5570         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5571       }
5572 
5573       CurrentModule->Kind = Kind;
5574       CurrentModule->Signature = F.Signature;
5575       CurrentModule->IsFromModuleFile = true;
5576       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5577       CurrentModule->IsExternC = IsExternC;
5578       CurrentModule->InferSubmodules = InferSubmodules;
5579       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5580       CurrentModule->InferExportWildcard = InferExportWildcard;
5581       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5582       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5583       if (DeserializationListener)
5584         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5585 
5586       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5587 
5588       // Clear out data that will be replaced by what is in the module file.
5589       CurrentModule->LinkLibraries.clear();
5590       CurrentModule->ConfigMacros.clear();
5591       CurrentModule->UnresolvedConflicts.clear();
5592       CurrentModule->Conflicts.clear();
5593 
5594       // The module is available unless it's missing a requirement; relevant
5595       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5596       // Missing headers that were present when the module was built do not
5597       // make it unavailable -- if we got this far, this must be an explicitly
5598       // imported module file.
5599       CurrentModule->Requirements.clear();
5600       CurrentModule->MissingHeaders.clear();
5601       CurrentModule->IsUnimportable =
5602           ParentModule && ParentModule->IsUnimportable;
5603       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5604       break;
5605     }
5606 
5607     case SUBMODULE_UMBRELLA_HEADER: {
5608       // FIXME: This doesn't work for framework modules as `Filename` is the
5609       //        name as written in the module file and does not include
5610       //        `Headers/`, so this path will never exist.
5611       std::string Filename = std::string(Blob);
5612       ResolveImportedPath(F, Filename);
5613       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5614         if (!CurrentModule->getUmbrellaHeader()) {
5615           // FIXME: NameAsWritten
5616           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5617         }
5618         // Note that it's too late at this point to return out of date if the
5619         // name from the PCM doesn't match up with the one in the module map,
5620         // but also quite unlikely since we will have already checked the
5621         // modification time and size of the module map file itself.
5622       }
5623       break;
5624     }
5625 
5626     case SUBMODULE_HEADER:
5627     case SUBMODULE_EXCLUDED_HEADER:
5628     case SUBMODULE_PRIVATE_HEADER:
5629       // We lazily associate headers with their modules via the HeaderInfo table.
5630       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5631       // of complete filenames or remove it entirely.
5632       break;
5633 
5634     case SUBMODULE_TEXTUAL_HEADER:
5635     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5636       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5637       // them here.
5638       break;
5639 
5640     case SUBMODULE_TOPHEADER: {
5641       std::string HeaderName(Blob);
5642       ResolveImportedPath(F, HeaderName);
5643       CurrentModule->addTopHeaderFilename(HeaderName);
5644       break;
5645     }
5646 
5647     case SUBMODULE_UMBRELLA_DIR: {
5648       // See comments in SUBMODULE_UMBRELLA_HEADER
5649       std::string Dirname = std::string(Blob);
5650       ResolveImportedPath(F, Dirname);
5651       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5652         if (!CurrentModule->getUmbrellaDir()) {
5653           // FIXME: NameAsWritten
5654           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5655         }
5656       }
5657       break;
5658     }
5659 
5660     case SUBMODULE_METADATA: {
5661       F.BaseSubmoduleID = getTotalNumSubmodules();
5662       F.LocalNumSubmodules = Record[0];
5663       unsigned LocalBaseSubmoduleID = Record[1];
5664       if (F.LocalNumSubmodules > 0) {
5665         // Introduce the global -> local mapping for submodules within this
5666         // module.
5667         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5668 
5669         // Introduce the local -> global mapping for submodules within this
5670         // module.
5671         F.SubmoduleRemap.insertOrReplace(
5672           std::make_pair(LocalBaseSubmoduleID,
5673                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5674 
5675         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5676       }
5677       break;
5678     }
5679 
5680     case SUBMODULE_IMPORTS:
5681       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5682         UnresolvedModuleRef Unresolved;
5683         Unresolved.File = &F;
5684         Unresolved.Mod = CurrentModule;
5685         Unresolved.ID = Record[Idx];
5686         Unresolved.Kind = UnresolvedModuleRef::Import;
5687         Unresolved.IsWildcard = false;
5688         UnresolvedModuleRefs.push_back(Unresolved);
5689       }
5690       break;
5691 
5692     case SUBMODULE_EXPORTS:
5693       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5694         UnresolvedModuleRef Unresolved;
5695         Unresolved.File = &F;
5696         Unresolved.Mod = CurrentModule;
5697         Unresolved.ID = Record[Idx];
5698         Unresolved.Kind = UnresolvedModuleRef::Export;
5699         Unresolved.IsWildcard = Record[Idx + 1];
5700         UnresolvedModuleRefs.push_back(Unresolved);
5701       }
5702 
5703       // Once we've loaded the set of exports, there's no reason to keep
5704       // the parsed, unresolved exports around.
5705       CurrentModule->UnresolvedExports.clear();
5706       break;
5707 
5708     case SUBMODULE_REQUIRES:
5709       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5710                                     PP.getTargetInfo());
5711       break;
5712 
5713     case SUBMODULE_LINK_LIBRARY:
5714       ModMap.resolveLinkAsDependencies(CurrentModule);
5715       CurrentModule->LinkLibraries.push_back(
5716           Module::LinkLibrary(std::string(Blob), Record[0]));
5717       break;
5718 
5719     case SUBMODULE_CONFIG_MACRO:
5720       CurrentModule->ConfigMacros.push_back(Blob.str());
5721       break;
5722 
5723     case SUBMODULE_CONFLICT: {
5724       UnresolvedModuleRef Unresolved;
5725       Unresolved.File = &F;
5726       Unresolved.Mod = CurrentModule;
5727       Unresolved.ID = Record[0];
5728       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5729       Unresolved.IsWildcard = false;
5730       Unresolved.String = Blob;
5731       UnresolvedModuleRefs.push_back(Unresolved);
5732       break;
5733     }
5734 
5735     case SUBMODULE_INITIALIZERS: {
5736       if (!ContextObj)
5737         break;
5738       SmallVector<uint32_t, 16> Inits;
5739       for (auto &ID : Record)
5740         Inits.push_back(getGlobalDeclID(F, ID));
5741       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5742       break;
5743     }
5744 
5745     case SUBMODULE_EXPORT_AS:
5746       CurrentModule->ExportAsModule = Blob.str();
5747       ModMap.addLinkAsDependency(CurrentModule);
5748       break;
5749     }
5750   }
5751 }
5752 
5753 /// Parse the record that corresponds to a LangOptions data
5754 /// structure.
5755 ///
5756 /// This routine parses the language options from the AST file and then gives
5757 /// them to the AST listener if one is set.
5758 ///
5759 /// \returns true if the listener deems the file unacceptable, false otherwise.
5760 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5761                                      bool Complain,
5762                                      ASTReaderListener &Listener,
5763                                      bool AllowCompatibleDifferences) {
5764   LangOptions LangOpts;
5765   unsigned Idx = 0;
5766 #define LANGOPT(Name, Bits, Default, Description) \
5767   LangOpts.Name = Record[Idx++];
5768 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5769   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5770 #include "clang/Basic/LangOptions.def"
5771 #define SANITIZER(NAME, ID)                                                    \
5772   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5773 #include "clang/Basic/Sanitizers.def"
5774 
5775   for (unsigned N = Record[Idx++]; N; --N)
5776     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5777 
5778   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5779   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5780   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5781 
5782   LangOpts.CurrentModule = ReadString(Record, Idx);
5783 
5784   // Comment options.
5785   for (unsigned N = Record[Idx++]; N; --N) {
5786     LangOpts.CommentOpts.BlockCommandNames.push_back(
5787       ReadString(Record, Idx));
5788   }
5789   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5790 
5791   // OpenMP offloading options.
5792   for (unsigned N = Record[Idx++]; N; --N) {
5793     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5794   }
5795 
5796   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5797 
5798   return Listener.ReadLanguageOptions(LangOpts, Complain,
5799                                       AllowCompatibleDifferences);
5800 }
5801 
5802 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5803                                    ASTReaderListener &Listener,
5804                                    bool AllowCompatibleDifferences) {
5805   unsigned Idx = 0;
5806   TargetOptions TargetOpts;
5807   TargetOpts.Triple = ReadString(Record, Idx);
5808   TargetOpts.CPU = ReadString(Record, Idx);
5809   TargetOpts.TuneCPU = ReadString(Record, Idx);
5810   TargetOpts.ABI = ReadString(Record, Idx);
5811   for (unsigned N = Record[Idx++]; N; --N) {
5812     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5813   }
5814   for (unsigned N = Record[Idx++]; N; --N) {
5815     TargetOpts.Features.push_back(ReadString(Record, Idx));
5816   }
5817 
5818   return Listener.ReadTargetOptions(TargetOpts, Complain,
5819                                     AllowCompatibleDifferences);
5820 }
5821 
5822 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5823                                        ASTReaderListener &Listener) {
5824   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5825   unsigned Idx = 0;
5826 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5827 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5828   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5829 #include "clang/Basic/DiagnosticOptions.def"
5830 
5831   for (unsigned N = Record[Idx++]; N; --N)
5832     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5833   for (unsigned N = Record[Idx++]; N; --N)
5834     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5835 
5836   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5837 }
5838 
5839 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5840                                        ASTReaderListener &Listener) {
5841   FileSystemOptions FSOpts;
5842   unsigned Idx = 0;
5843   FSOpts.WorkingDir = ReadString(Record, Idx);
5844   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5845 }
5846 
5847 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5848                                          bool Complain,
5849                                          ASTReaderListener &Listener) {
5850   HeaderSearchOptions HSOpts;
5851   unsigned Idx = 0;
5852   HSOpts.Sysroot = ReadString(Record, Idx);
5853 
5854   // Include entries.
5855   for (unsigned N = Record[Idx++]; N; --N) {
5856     std::string Path = ReadString(Record, Idx);
5857     frontend::IncludeDirGroup Group
5858       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5859     bool IsFramework = Record[Idx++];
5860     bool IgnoreSysRoot = Record[Idx++];
5861     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5862                                     IgnoreSysRoot);
5863   }
5864 
5865   // System header prefixes.
5866   for (unsigned N = Record[Idx++]; N; --N) {
5867     std::string Prefix = ReadString(Record, Idx);
5868     bool IsSystemHeader = Record[Idx++];
5869     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5870   }
5871 
5872   HSOpts.ResourceDir = ReadString(Record, Idx);
5873   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5874   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5875   HSOpts.DisableModuleHash = Record[Idx++];
5876   HSOpts.ImplicitModuleMaps = Record[Idx++];
5877   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5878   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5879   HSOpts.UseBuiltinIncludes = Record[Idx++];
5880   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5881   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5882   HSOpts.UseLibcxx = Record[Idx++];
5883   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5884 
5885   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5886                                           Complain);
5887 }
5888 
5889 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5890                                          bool Complain,
5891                                          ASTReaderListener &Listener,
5892                                          std::string &SuggestedPredefines) {
5893   PreprocessorOptions PPOpts;
5894   unsigned Idx = 0;
5895 
5896   // Macro definitions/undefs
5897   for (unsigned N = Record[Idx++]; N; --N) {
5898     std::string Macro = ReadString(Record, Idx);
5899     bool IsUndef = Record[Idx++];
5900     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5901   }
5902 
5903   // Includes
5904   for (unsigned N = Record[Idx++]; N; --N) {
5905     PPOpts.Includes.push_back(ReadString(Record, Idx));
5906   }
5907 
5908   // Macro Includes
5909   for (unsigned N = Record[Idx++]; N; --N) {
5910     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5911   }
5912 
5913   PPOpts.UsePredefines = Record[Idx++];
5914   PPOpts.DetailedRecord = Record[Idx++];
5915   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5916   PPOpts.ObjCXXARCStandardLibrary =
5917     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5918   SuggestedPredefines.clear();
5919   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5920                                           SuggestedPredefines);
5921 }
5922 
5923 std::pair<ModuleFile *, unsigned>
5924 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5925   GlobalPreprocessedEntityMapType::iterator
5926   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5927   assert(I != GlobalPreprocessedEntityMap.end() &&
5928          "Corrupted global preprocessed entity map");
5929   ModuleFile *M = I->second;
5930   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5931   return std::make_pair(M, LocalIndex);
5932 }
5933 
5934 llvm::iterator_range<PreprocessingRecord::iterator>
5935 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5936   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5937     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5938                                              Mod.NumPreprocessedEntities);
5939 
5940   return llvm::make_range(PreprocessingRecord::iterator(),
5941                           PreprocessingRecord::iterator());
5942 }
5943 
5944 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5945                                         unsigned int ClientLoadCapabilities) {
5946   return ClientLoadCapabilities & ARR_OutOfDate &&
5947          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5948 }
5949 
5950 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5951 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5952   return llvm::make_range(
5953       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5954       ModuleDeclIterator(this, &Mod,
5955                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5956 }
5957 
5958 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5959   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5960   assert(I != GlobalSkippedRangeMap.end() &&
5961     "Corrupted global skipped range map");
5962   ModuleFile *M = I->second;
5963   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5964   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5965   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5966   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5967                     TranslateSourceLocation(*M, RawRange.getEnd()));
5968   assert(Range.isValid());
5969   return Range;
5970 }
5971 
5972 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5973   PreprocessedEntityID PPID = Index+1;
5974   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5975   ModuleFile &M = *PPInfo.first;
5976   unsigned LocalIndex = PPInfo.second;
5977   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5978 
5979   if (!PP.getPreprocessingRecord()) {
5980     Error("no preprocessing record");
5981     return nullptr;
5982   }
5983 
5984   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5985   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5986           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5987     Error(std::move(Err));
5988     return nullptr;
5989   }
5990 
5991   Expected<llvm::BitstreamEntry> MaybeEntry =
5992       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5993   if (!MaybeEntry) {
5994     Error(MaybeEntry.takeError());
5995     return nullptr;
5996   }
5997   llvm::BitstreamEntry Entry = MaybeEntry.get();
5998 
5999   if (Entry.Kind != llvm::BitstreamEntry::Record)
6000     return nullptr;
6001 
6002   // Read the record.
6003   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
6004                     TranslateSourceLocation(M, PPOffs.getEnd()));
6005   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
6006   StringRef Blob;
6007   RecordData Record;
6008   Expected<unsigned> MaybeRecType =
6009       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
6010   if (!MaybeRecType) {
6011     Error(MaybeRecType.takeError());
6012     return nullptr;
6013   }
6014   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
6015   case PPD_MACRO_EXPANSION: {
6016     bool isBuiltin = Record[0];
6017     IdentifierInfo *Name = nullptr;
6018     MacroDefinitionRecord *Def = nullptr;
6019     if (isBuiltin)
6020       Name = getLocalIdentifier(M, Record[1]);
6021     else {
6022       PreprocessedEntityID GlobalID =
6023           getGlobalPreprocessedEntityID(M, Record[1]);
6024       Def = cast<MacroDefinitionRecord>(
6025           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
6026     }
6027 
6028     MacroExpansion *ME;
6029     if (isBuiltin)
6030       ME = new (PPRec) MacroExpansion(Name, Range);
6031     else
6032       ME = new (PPRec) MacroExpansion(Def, Range);
6033 
6034     return ME;
6035   }
6036 
6037   case PPD_MACRO_DEFINITION: {
6038     // Decode the identifier info and then check again; if the macro is
6039     // still defined and associated with the identifier,
6040     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6041     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6042 
6043     if (DeserializationListener)
6044       DeserializationListener->MacroDefinitionRead(PPID, MD);
6045 
6046     return MD;
6047   }
6048 
6049   case PPD_INCLUSION_DIRECTIVE: {
6050     const char *FullFileNameStart = Blob.data() + Record[0];
6051     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6052     Optional<FileEntryRef> File;
6053     if (!FullFileName.empty())
6054       File = PP.getFileManager().getOptionalFileRef(FullFileName);
6055 
6056     // FIXME: Stable encoding
6057     InclusionDirective::InclusionKind Kind
6058       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6059     InclusionDirective *ID
6060       = new (PPRec) InclusionDirective(PPRec, Kind,
6061                                        StringRef(Blob.data(), Record[0]),
6062                                        Record[1], Record[3],
6063                                        File,
6064                                        Range);
6065     return ID;
6066   }
6067   }
6068 
6069   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6070 }
6071 
6072 /// Find the next module that contains entities and return the ID
6073 /// of the first entry.
6074 ///
6075 /// \param SLocMapI points at a chunk of a module that contains no
6076 /// preprocessed entities or the entities it contains are not the ones we are
6077 /// looking for.
6078 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6079                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6080   ++SLocMapI;
6081   for (GlobalSLocOffsetMapType::const_iterator
6082          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6083     ModuleFile &M = *SLocMapI->second;
6084     if (M.NumPreprocessedEntities)
6085       return M.BasePreprocessedEntityID;
6086   }
6087 
6088   return getTotalNumPreprocessedEntities();
6089 }
6090 
6091 namespace {
6092 
6093 struct PPEntityComp {
6094   const ASTReader &Reader;
6095   ModuleFile &M;
6096 
6097   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6098 
6099   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6100     SourceLocation LHS = getLoc(L);
6101     SourceLocation RHS = getLoc(R);
6102     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6103   }
6104 
6105   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6106     SourceLocation LHS = getLoc(L);
6107     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6108   }
6109 
6110   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6111     SourceLocation RHS = getLoc(R);
6112     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6113   }
6114 
6115   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6116     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6117   }
6118 };
6119 
6120 } // namespace
6121 
6122 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6123                                                        bool EndsAfter) const {
6124   if (SourceMgr.isLocalSourceLocation(Loc))
6125     return getTotalNumPreprocessedEntities();
6126 
6127   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6128       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6129   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6130          "Corrupted global sloc offset map");
6131 
6132   if (SLocMapI->second->NumPreprocessedEntities == 0)
6133     return findNextPreprocessedEntity(SLocMapI);
6134 
6135   ModuleFile &M = *SLocMapI->second;
6136 
6137   using pp_iterator = const PPEntityOffset *;
6138 
6139   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6140   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6141 
6142   size_t Count = M.NumPreprocessedEntities;
6143   size_t Half;
6144   pp_iterator First = pp_begin;
6145   pp_iterator PPI;
6146 
6147   if (EndsAfter) {
6148     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6149                            PPEntityComp(*this, M));
6150   } else {
6151     // Do a binary search manually instead of using std::lower_bound because
6152     // The end locations of entities may be unordered (when a macro expansion
6153     // is inside another macro argument), but for this case it is not important
6154     // whether we get the first macro expansion or its containing macro.
6155     while (Count > 0) {
6156       Half = Count / 2;
6157       PPI = First;
6158       std::advance(PPI, Half);
6159       if (SourceMgr.isBeforeInTranslationUnit(
6160               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6161         First = PPI;
6162         ++First;
6163         Count = Count - Half - 1;
6164       } else
6165         Count = Half;
6166     }
6167   }
6168 
6169   if (PPI == pp_end)
6170     return findNextPreprocessedEntity(SLocMapI);
6171 
6172   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6173 }
6174 
6175 /// Returns a pair of [Begin, End) indices of preallocated
6176 /// preprocessed entities that \arg Range encompasses.
6177 std::pair<unsigned, unsigned>
6178     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6179   if (Range.isInvalid())
6180     return std::make_pair(0,0);
6181   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6182 
6183   PreprocessedEntityID BeginID =
6184       findPreprocessedEntity(Range.getBegin(), false);
6185   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6186   return std::make_pair(BeginID, EndID);
6187 }
6188 
6189 /// Optionally returns true or false if the preallocated preprocessed
6190 /// entity with index \arg Index came from file \arg FID.
6191 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6192                                                              FileID FID) {
6193   if (FID.isInvalid())
6194     return false;
6195 
6196   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6197   ModuleFile &M = *PPInfo.first;
6198   unsigned LocalIndex = PPInfo.second;
6199   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6200 
6201   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6202   if (Loc.isInvalid())
6203     return false;
6204 
6205   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6206     return true;
6207   else
6208     return false;
6209 }
6210 
6211 namespace {
6212 
6213   /// Visitor used to search for information about a header file.
6214   class HeaderFileInfoVisitor {
6215     const FileEntry *FE;
6216     Optional<HeaderFileInfo> HFI;
6217 
6218   public:
6219     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6220 
6221     bool operator()(ModuleFile &M) {
6222       HeaderFileInfoLookupTable *Table
6223         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6224       if (!Table)
6225         return false;
6226 
6227       // Look in the on-disk hash table for an entry for this file name.
6228       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6229       if (Pos == Table->end())
6230         return false;
6231 
6232       HFI = *Pos;
6233       return true;
6234     }
6235 
6236     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6237   };
6238 
6239 } // namespace
6240 
6241 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6242   HeaderFileInfoVisitor Visitor(FE);
6243   ModuleMgr.visit(Visitor);
6244   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6245     return *HFI;
6246 
6247   return HeaderFileInfo();
6248 }
6249 
6250 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6251   using DiagState = DiagnosticsEngine::DiagState;
6252   SmallVector<DiagState *, 32> DiagStates;
6253 
6254   for (ModuleFile &F : ModuleMgr) {
6255     unsigned Idx = 0;
6256     auto &Record = F.PragmaDiagMappings;
6257     if (Record.empty())
6258       continue;
6259 
6260     DiagStates.clear();
6261 
6262     auto ReadDiagState =
6263         [&](const DiagState &BasedOn, SourceLocation Loc,
6264             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6265       unsigned BackrefID = Record[Idx++];
6266       if (BackrefID != 0)
6267         return DiagStates[BackrefID - 1];
6268 
6269       // A new DiagState was created here.
6270       Diag.DiagStates.push_back(BasedOn);
6271       DiagState *NewState = &Diag.DiagStates.back();
6272       DiagStates.push_back(NewState);
6273       unsigned Size = Record[Idx++];
6274       assert(Idx + Size * 2 <= Record.size() &&
6275              "Invalid data, not enough diag/map pairs");
6276       while (Size--) {
6277         unsigned DiagID = Record[Idx++];
6278         DiagnosticMapping NewMapping =
6279             DiagnosticMapping::deserialize(Record[Idx++]);
6280         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6281           continue;
6282 
6283         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6284 
6285         // If this mapping was specified as a warning but the severity was
6286         // upgraded due to diagnostic settings, simulate the current diagnostic
6287         // settings (and use a warning).
6288         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6289           NewMapping.setSeverity(diag::Severity::Warning);
6290           NewMapping.setUpgradedFromWarning(false);
6291         }
6292 
6293         Mapping = NewMapping;
6294       }
6295       return NewState;
6296     };
6297 
6298     // Read the first state.
6299     DiagState *FirstState;
6300     if (F.Kind == MK_ImplicitModule) {
6301       // Implicitly-built modules are reused with different diagnostic
6302       // settings.  Use the initial diagnostic state from Diag to simulate this
6303       // compilation's diagnostic settings.
6304       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6305       DiagStates.push_back(FirstState);
6306 
6307       // Skip the initial diagnostic state from the serialized module.
6308       assert(Record[1] == 0 &&
6309              "Invalid data, unexpected backref in initial state");
6310       Idx = 3 + Record[2] * 2;
6311       assert(Idx < Record.size() &&
6312              "Invalid data, not enough state change pairs in initial state");
6313     } else if (F.isModule()) {
6314       // For an explicit module, preserve the flags from the module build
6315       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6316       // -Wblah flags.
6317       unsigned Flags = Record[Idx++];
6318       DiagState Initial;
6319       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6320       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6321       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6322       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6323       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6324       Initial.ExtBehavior = (diag::Severity)Flags;
6325       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6326 
6327       assert(F.OriginalSourceFileID.isValid());
6328 
6329       // Set up the root buffer of the module to start with the initial
6330       // diagnostic state of the module itself, to cover files that contain no
6331       // explicit transitions (for which we did not serialize anything).
6332       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6333           .StateTransitions.push_back({FirstState, 0});
6334     } else {
6335       // For prefix ASTs, start with whatever the user configured on the
6336       // command line.
6337       Idx++; // Skip flags.
6338       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6339                                  SourceLocation(), false);
6340     }
6341 
6342     // Read the state transitions.
6343     unsigned NumLocations = Record[Idx++];
6344     while (NumLocations--) {
6345       assert(Idx < Record.size() &&
6346              "Invalid data, missing pragma diagnostic states");
6347       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6348       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6349       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6350       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6351       unsigned Transitions = Record[Idx++];
6352 
6353       // Note that we don't need to set up Parent/ParentOffset here, because
6354       // we won't be changing the diagnostic state within imported FileIDs
6355       // (other than perhaps appending to the main source file, which has no
6356       // parent).
6357       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6358       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6359       for (unsigned I = 0; I != Transitions; ++I) {
6360         unsigned Offset = Record[Idx++];
6361         auto *State =
6362             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6363         F.StateTransitions.push_back({State, Offset});
6364       }
6365     }
6366 
6367     // Read the final state.
6368     assert(Idx < Record.size() &&
6369            "Invalid data, missing final pragma diagnostic state");
6370     SourceLocation CurStateLoc =
6371         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6372     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6373 
6374     if (!F.isModule()) {
6375       Diag.DiagStatesByLoc.CurDiagState = CurState;
6376       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6377 
6378       // Preserve the property that the imaginary root file describes the
6379       // current state.
6380       FileID NullFile;
6381       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6382       if (T.empty())
6383         T.push_back({CurState, 0});
6384       else
6385         T[0].State = CurState;
6386     }
6387 
6388     // Don't try to read these mappings again.
6389     Record.clear();
6390   }
6391 }
6392 
6393 /// Get the correct cursor and offset for loading a type.
6394 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6395   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6396   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6397   ModuleFile *M = I->second;
6398   return RecordLocation(
6399       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6400              M->DeclsBlockStartOffset);
6401 }
6402 
6403 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6404   switch (code) {
6405 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6406   case TYPE_##CODE_ID: return Type::CLASS_ID;
6407 #include "clang/Serialization/TypeBitCodes.def"
6408   default: return llvm::None;
6409   }
6410 }
6411 
6412 /// Read and return the type with the given index..
6413 ///
6414 /// The index is the type ID, shifted and minus the number of predefs. This
6415 /// routine actually reads the record corresponding to the type at the given
6416 /// location. It is a helper routine for GetType, which deals with reading type
6417 /// IDs.
6418 QualType ASTReader::readTypeRecord(unsigned Index) {
6419   assert(ContextObj && "reading type with no AST context");
6420   ASTContext &Context = *ContextObj;
6421   RecordLocation Loc = TypeCursorForIndex(Index);
6422   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6423 
6424   // Keep track of where we are in the stream, then jump back there
6425   // after reading this type.
6426   SavedStreamPosition SavedPosition(DeclsCursor);
6427 
6428   ReadingKindTracker ReadingKind(Read_Type, *this);
6429 
6430   // Note that we are loading a type record.
6431   Deserializing AType(this);
6432 
6433   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6434     Error(std::move(Err));
6435     return QualType();
6436   }
6437   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6438   if (!RawCode) {
6439     Error(RawCode.takeError());
6440     return QualType();
6441   }
6442 
6443   ASTRecordReader Record(*this, *Loc.F);
6444   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6445   if (!Code) {
6446     Error(Code.takeError());
6447     return QualType();
6448   }
6449   if (Code.get() == TYPE_EXT_QUAL) {
6450     QualType baseType = Record.readQualType();
6451     Qualifiers quals = Record.readQualifiers();
6452     return Context.getQualifiedType(baseType, quals);
6453   }
6454 
6455   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6456   if (!maybeClass) {
6457     Error("Unexpected code for type");
6458     return QualType();
6459   }
6460 
6461   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6462   return TypeReader.read(*maybeClass);
6463 }
6464 
6465 namespace clang {
6466 
6467 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6468   using LocSeq = SourceLocationSequence;
6469 
6470   ASTRecordReader &Reader;
6471   LocSeq *Seq;
6472 
6473   SourceLocation readSourceLocation() { return Reader.readSourceLocation(Seq); }
6474   SourceRange readSourceRange() { return Reader.readSourceRange(Seq); }
6475 
6476   TypeSourceInfo *GetTypeSourceInfo() {
6477     return Reader.readTypeSourceInfo();
6478   }
6479 
6480   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6481     return Reader.readNestedNameSpecifierLoc();
6482   }
6483 
6484   Attr *ReadAttr() {
6485     return Reader.readAttr();
6486   }
6487 
6488 public:
6489   TypeLocReader(ASTRecordReader &Reader, LocSeq *Seq)
6490       : Reader(Reader), Seq(Seq) {}
6491 
6492   // We want compile-time assurance that we've enumerated all of
6493   // these, so unfortunately we have to declare them first, then
6494   // define them out-of-line.
6495 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6496 #define TYPELOC(CLASS, PARENT) \
6497   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6498 #include "clang/AST/TypeLocNodes.def"
6499 
6500   void VisitFunctionTypeLoc(FunctionTypeLoc);
6501   void VisitArrayTypeLoc(ArrayTypeLoc);
6502 };
6503 
6504 } // namespace clang
6505 
6506 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6507   // nothing to do
6508 }
6509 
6510 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6511   TL.setBuiltinLoc(readSourceLocation());
6512   if (TL.needsExtraLocalData()) {
6513     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6514     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6515     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6516     TL.setModeAttr(Reader.readInt());
6517   }
6518 }
6519 
6520 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6521   TL.setNameLoc(readSourceLocation());
6522 }
6523 
6524 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6525   TL.setStarLoc(readSourceLocation());
6526 }
6527 
6528 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6529   // nothing to do
6530 }
6531 
6532 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6533   // nothing to do
6534 }
6535 
6536 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6537   TL.setExpansionLoc(readSourceLocation());
6538 }
6539 
6540 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6541   TL.setCaretLoc(readSourceLocation());
6542 }
6543 
6544 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6545   TL.setAmpLoc(readSourceLocation());
6546 }
6547 
6548 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6549   TL.setAmpAmpLoc(readSourceLocation());
6550 }
6551 
6552 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6553   TL.setStarLoc(readSourceLocation());
6554   TL.setClassTInfo(GetTypeSourceInfo());
6555 }
6556 
6557 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6558   TL.setLBracketLoc(readSourceLocation());
6559   TL.setRBracketLoc(readSourceLocation());
6560   if (Reader.readBool())
6561     TL.setSizeExpr(Reader.readExpr());
6562   else
6563     TL.setSizeExpr(nullptr);
6564 }
6565 
6566 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6567   VisitArrayTypeLoc(TL);
6568 }
6569 
6570 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6571   VisitArrayTypeLoc(TL);
6572 }
6573 
6574 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6575   VisitArrayTypeLoc(TL);
6576 }
6577 
6578 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6579                                             DependentSizedArrayTypeLoc TL) {
6580   VisitArrayTypeLoc(TL);
6581 }
6582 
6583 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6584     DependentAddressSpaceTypeLoc TL) {
6585 
6586     TL.setAttrNameLoc(readSourceLocation());
6587     TL.setAttrOperandParensRange(readSourceRange());
6588     TL.setAttrExprOperand(Reader.readExpr());
6589 }
6590 
6591 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6592                                         DependentSizedExtVectorTypeLoc TL) {
6593   TL.setNameLoc(readSourceLocation());
6594 }
6595 
6596 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6597   TL.setNameLoc(readSourceLocation());
6598 }
6599 
6600 void TypeLocReader::VisitDependentVectorTypeLoc(
6601     DependentVectorTypeLoc TL) {
6602   TL.setNameLoc(readSourceLocation());
6603 }
6604 
6605 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6606   TL.setNameLoc(readSourceLocation());
6607 }
6608 
6609 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6610   TL.setAttrNameLoc(readSourceLocation());
6611   TL.setAttrOperandParensRange(readSourceRange());
6612   TL.setAttrRowOperand(Reader.readExpr());
6613   TL.setAttrColumnOperand(Reader.readExpr());
6614 }
6615 
6616 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6617     DependentSizedMatrixTypeLoc TL) {
6618   TL.setAttrNameLoc(readSourceLocation());
6619   TL.setAttrOperandParensRange(readSourceRange());
6620   TL.setAttrRowOperand(Reader.readExpr());
6621   TL.setAttrColumnOperand(Reader.readExpr());
6622 }
6623 
6624 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6625   TL.setLocalRangeBegin(readSourceLocation());
6626   TL.setLParenLoc(readSourceLocation());
6627   TL.setRParenLoc(readSourceLocation());
6628   TL.setExceptionSpecRange(readSourceRange());
6629   TL.setLocalRangeEnd(readSourceLocation());
6630   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6631     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6632   }
6633 }
6634 
6635 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6636   VisitFunctionTypeLoc(TL);
6637 }
6638 
6639 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6640   VisitFunctionTypeLoc(TL);
6641 }
6642 
6643 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6644   TL.setNameLoc(readSourceLocation());
6645 }
6646 
6647 void TypeLocReader::VisitUsingTypeLoc(UsingTypeLoc TL) {
6648   TL.setNameLoc(readSourceLocation());
6649 }
6650 
6651 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6652   TL.setNameLoc(readSourceLocation());
6653 }
6654 
6655 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6656   TL.setTypeofLoc(readSourceLocation());
6657   TL.setLParenLoc(readSourceLocation());
6658   TL.setRParenLoc(readSourceLocation());
6659 }
6660 
6661 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6662   TL.setTypeofLoc(readSourceLocation());
6663   TL.setLParenLoc(readSourceLocation());
6664   TL.setRParenLoc(readSourceLocation());
6665   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6666 }
6667 
6668 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6669   TL.setDecltypeLoc(readSourceLocation());
6670   TL.setRParenLoc(readSourceLocation());
6671 }
6672 
6673 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6674   TL.setKWLoc(readSourceLocation());
6675   TL.setLParenLoc(readSourceLocation());
6676   TL.setRParenLoc(readSourceLocation());
6677   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6678 }
6679 
6680 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6681   TL.setNameLoc(readSourceLocation());
6682   if (Reader.readBool()) {
6683     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6684     TL.setTemplateKWLoc(readSourceLocation());
6685     TL.setConceptNameLoc(readSourceLocation());
6686     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6687     TL.setLAngleLoc(readSourceLocation());
6688     TL.setRAngleLoc(readSourceLocation());
6689     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6690       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6691                               TL.getTypePtr()->getArg(i).getKind()));
6692   }
6693   if (Reader.readBool())
6694     TL.setRParenLoc(readSourceLocation());
6695 }
6696 
6697 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6698     DeducedTemplateSpecializationTypeLoc TL) {
6699   TL.setTemplateNameLoc(readSourceLocation());
6700 }
6701 
6702 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6703   TL.setNameLoc(readSourceLocation());
6704 }
6705 
6706 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6707   TL.setNameLoc(readSourceLocation());
6708 }
6709 
6710 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6711   TL.setAttr(ReadAttr());
6712 }
6713 
6714 void TypeLocReader::VisitBTFTagAttributedTypeLoc(BTFTagAttributedTypeLoc TL) {
6715   // Nothing to do.
6716 }
6717 
6718 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6719   TL.setNameLoc(readSourceLocation());
6720 }
6721 
6722 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6723                                             SubstTemplateTypeParmTypeLoc TL) {
6724   TL.setNameLoc(readSourceLocation());
6725 }
6726 
6727 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6728                                           SubstTemplateTypeParmPackTypeLoc TL) {
6729   TL.setNameLoc(readSourceLocation());
6730 }
6731 
6732 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6733                                            TemplateSpecializationTypeLoc TL) {
6734   TL.setTemplateKeywordLoc(readSourceLocation());
6735   TL.setTemplateNameLoc(readSourceLocation());
6736   TL.setLAngleLoc(readSourceLocation());
6737   TL.setRAngleLoc(readSourceLocation());
6738   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6739     TL.setArgLocInfo(
6740         i,
6741         Reader.readTemplateArgumentLocInfo(
6742           TL.getTypePtr()->getArg(i).getKind()));
6743 }
6744 
6745 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6746   TL.setLParenLoc(readSourceLocation());
6747   TL.setRParenLoc(readSourceLocation());
6748 }
6749 
6750 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6751   TL.setElaboratedKeywordLoc(readSourceLocation());
6752   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6753 }
6754 
6755 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6756   TL.setNameLoc(readSourceLocation());
6757 }
6758 
6759 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6760   TL.setElaboratedKeywordLoc(readSourceLocation());
6761   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6762   TL.setNameLoc(readSourceLocation());
6763 }
6764 
6765 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6766        DependentTemplateSpecializationTypeLoc TL) {
6767   TL.setElaboratedKeywordLoc(readSourceLocation());
6768   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6769   TL.setTemplateKeywordLoc(readSourceLocation());
6770   TL.setTemplateNameLoc(readSourceLocation());
6771   TL.setLAngleLoc(readSourceLocation());
6772   TL.setRAngleLoc(readSourceLocation());
6773   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6774     TL.setArgLocInfo(
6775         I,
6776         Reader.readTemplateArgumentLocInfo(
6777             TL.getTypePtr()->getArg(I).getKind()));
6778 }
6779 
6780 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6781   TL.setEllipsisLoc(readSourceLocation());
6782 }
6783 
6784 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6785   TL.setNameLoc(readSourceLocation());
6786 }
6787 
6788 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6789   if (TL.getNumProtocols()) {
6790     TL.setProtocolLAngleLoc(readSourceLocation());
6791     TL.setProtocolRAngleLoc(readSourceLocation());
6792   }
6793   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6794     TL.setProtocolLoc(i, readSourceLocation());
6795 }
6796 
6797 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6798   TL.setHasBaseTypeAsWritten(Reader.readBool());
6799   TL.setTypeArgsLAngleLoc(readSourceLocation());
6800   TL.setTypeArgsRAngleLoc(readSourceLocation());
6801   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6802     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6803   TL.setProtocolLAngleLoc(readSourceLocation());
6804   TL.setProtocolRAngleLoc(readSourceLocation());
6805   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6806     TL.setProtocolLoc(i, readSourceLocation());
6807 }
6808 
6809 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6810   TL.setStarLoc(readSourceLocation());
6811 }
6812 
6813 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6814   TL.setKWLoc(readSourceLocation());
6815   TL.setLParenLoc(readSourceLocation());
6816   TL.setRParenLoc(readSourceLocation());
6817 }
6818 
6819 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6820   TL.setKWLoc(readSourceLocation());
6821 }
6822 
6823 void TypeLocReader::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
6824   TL.setNameLoc(readSourceLocation());
6825 }
6826 void TypeLocReader::VisitDependentBitIntTypeLoc(
6827     clang::DependentBitIntTypeLoc TL) {
6828   TL.setNameLoc(readSourceLocation());
6829 }
6830 
6831 void ASTRecordReader::readTypeLoc(TypeLoc TL, LocSeq *ParentSeq) {
6832   LocSeq::State Seq(ParentSeq);
6833   TypeLocReader TLR(*this, Seq);
6834   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6835     TLR.Visit(TL);
6836 }
6837 
6838 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6839   QualType InfoTy = readType();
6840   if (InfoTy.isNull())
6841     return nullptr;
6842 
6843   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6844   readTypeLoc(TInfo->getTypeLoc());
6845   return TInfo;
6846 }
6847 
6848 QualType ASTReader::GetType(TypeID ID) {
6849   assert(ContextObj && "reading type with no AST context");
6850   ASTContext &Context = *ContextObj;
6851 
6852   unsigned FastQuals = ID & Qualifiers::FastMask;
6853   unsigned Index = ID >> Qualifiers::FastWidth;
6854 
6855   if (Index < NUM_PREDEF_TYPE_IDS) {
6856     QualType T;
6857     switch ((PredefinedTypeIDs)Index) {
6858     case PREDEF_TYPE_NULL_ID:
6859       return QualType();
6860     case PREDEF_TYPE_VOID_ID:
6861       T = Context.VoidTy;
6862       break;
6863     case PREDEF_TYPE_BOOL_ID:
6864       T = Context.BoolTy;
6865       break;
6866     case PREDEF_TYPE_CHAR_U_ID:
6867     case PREDEF_TYPE_CHAR_S_ID:
6868       // FIXME: Check that the signedness of CharTy is correct!
6869       T = Context.CharTy;
6870       break;
6871     case PREDEF_TYPE_UCHAR_ID:
6872       T = Context.UnsignedCharTy;
6873       break;
6874     case PREDEF_TYPE_USHORT_ID:
6875       T = Context.UnsignedShortTy;
6876       break;
6877     case PREDEF_TYPE_UINT_ID:
6878       T = Context.UnsignedIntTy;
6879       break;
6880     case PREDEF_TYPE_ULONG_ID:
6881       T = Context.UnsignedLongTy;
6882       break;
6883     case PREDEF_TYPE_ULONGLONG_ID:
6884       T = Context.UnsignedLongLongTy;
6885       break;
6886     case PREDEF_TYPE_UINT128_ID:
6887       T = Context.UnsignedInt128Ty;
6888       break;
6889     case PREDEF_TYPE_SCHAR_ID:
6890       T = Context.SignedCharTy;
6891       break;
6892     case PREDEF_TYPE_WCHAR_ID:
6893       T = Context.WCharTy;
6894       break;
6895     case PREDEF_TYPE_SHORT_ID:
6896       T = Context.ShortTy;
6897       break;
6898     case PREDEF_TYPE_INT_ID:
6899       T = Context.IntTy;
6900       break;
6901     case PREDEF_TYPE_LONG_ID:
6902       T = Context.LongTy;
6903       break;
6904     case PREDEF_TYPE_LONGLONG_ID:
6905       T = Context.LongLongTy;
6906       break;
6907     case PREDEF_TYPE_INT128_ID:
6908       T = Context.Int128Ty;
6909       break;
6910     case PREDEF_TYPE_BFLOAT16_ID:
6911       T = Context.BFloat16Ty;
6912       break;
6913     case PREDEF_TYPE_HALF_ID:
6914       T = Context.HalfTy;
6915       break;
6916     case PREDEF_TYPE_FLOAT_ID:
6917       T = Context.FloatTy;
6918       break;
6919     case PREDEF_TYPE_DOUBLE_ID:
6920       T = Context.DoubleTy;
6921       break;
6922     case PREDEF_TYPE_LONGDOUBLE_ID:
6923       T = Context.LongDoubleTy;
6924       break;
6925     case PREDEF_TYPE_SHORT_ACCUM_ID:
6926       T = Context.ShortAccumTy;
6927       break;
6928     case PREDEF_TYPE_ACCUM_ID:
6929       T = Context.AccumTy;
6930       break;
6931     case PREDEF_TYPE_LONG_ACCUM_ID:
6932       T = Context.LongAccumTy;
6933       break;
6934     case PREDEF_TYPE_USHORT_ACCUM_ID:
6935       T = Context.UnsignedShortAccumTy;
6936       break;
6937     case PREDEF_TYPE_UACCUM_ID:
6938       T = Context.UnsignedAccumTy;
6939       break;
6940     case PREDEF_TYPE_ULONG_ACCUM_ID:
6941       T = Context.UnsignedLongAccumTy;
6942       break;
6943     case PREDEF_TYPE_SHORT_FRACT_ID:
6944       T = Context.ShortFractTy;
6945       break;
6946     case PREDEF_TYPE_FRACT_ID:
6947       T = Context.FractTy;
6948       break;
6949     case PREDEF_TYPE_LONG_FRACT_ID:
6950       T = Context.LongFractTy;
6951       break;
6952     case PREDEF_TYPE_USHORT_FRACT_ID:
6953       T = Context.UnsignedShortFractTy;
6954       break;
6955     case PREDEF_TYPE_UFRACT_ID:
6956       T = Context.UnsignedFractTy;
6957       break;
6958     case PREDEF_TYPE_ULONG_FRACT_ID:
6959       T = Context.UnsignedLongFractTy;
6960       break;
6961     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6962       T = Context.SatShortAccumTy;
6963       break;
6964     case PREDEF_TYPE_SAT_ACCUM_ID:
6965       T = Context.SatAccumTy;
6966       break;
6967     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6968       T = Context.SatLongAccumTy;
6969       break;
6970     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6971       T = Context.SatUnsignedShortAccumTy;
6972       break;
6973     case PREDEF_TYPE_SAT_UACCUM_ID:
6974       T = Context.SatUnsignedAccumTy;
6975       break;
6976     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6977       T = Context.SatUnsignedLongAccumTy;
6978       break;
6979     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6980       T = Context.SatShortFractTy;
6981       break;
6982     case PREDEF_TYPE_SAT_FRACT_ID:
6983       T = Context.SatFractTy;
6984       break;
6985     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6986       T = Context.SatLongFractTy;
6987       break;
6988     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6989       T = Context.SatUnsignedShortFractTy;
6990       break;
6991     case PREDEF_TYPE_SAT_UFRACT_ID:
6992       T = Context.SatUnsignedFractTy;
6993       break;
6994     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6995       T = Context.SatUnsignedLongFractTy;
6996       break;
6997     case PREDEF_TYPE_FLOAT16_ID:
6998       T = Context.Float16Ty;
6999       break;
7000     case PREDEF_TYPE_FLOAT128_ID:
7001       T = Context.Float128Ty;
7002       break;
7003     case PREDEF_TYPE_IBM128_ID:
7004       T = Context.Ibm128Ty;
7005       break;
7006     case PREDEF_TYPE_OVERLOAD_ID:
7007       T = Context.OverloadTy;
7008       break;
7009     case PREDEF_TYPE_BOUND_MEMBER:
7010       T = Context.BoundMemberTy;
7011       break;
7012     case PREDEF_TYPE_PSEUDO_OBJECT:
7013       T = Context.PseudoObjectTy;
7014       break;
7015     case PREDEF_TYPE_DEPENDENT_ID:
7016       T = Context.DependentTy;
7017       break;
7018     case PREDEF_TYPE_UNKNOWN_ANY:
7019       T = Context.UnknownAnyTy;
7020       break;
7021     case PREDEF_TYPE_NULLPTR_ID:
7022       T = Context.NullPtrTy;
7023       break;
7024     case PREDEF_TYPE_CHAR8_ID:
7025       T = Context.Char8Ty;
7026       break;
7027     case PREDEF_TYPE_CHAR16_ID:
7028       T = Context.Char16Ty;
7029       break;
7030     case PREDEF_TYPE_CHAR32_ID:
7031       T = Context.Char32Ty;
7032       break;
7033     case PREDEF_TYPE_OBJC_ID:
7034       T = Context.ObjCBuiltinIdTy;
7035       break;
7036     case PREDEF_TYPE_OBJC_CLASS:
7037       T = Context.ObjCBuiltinClassTy;
7038       break;
7039     case PREDEF_TYPE_OBJC_SEL:
7040       T = Context.ObjCBuiltinSelTy;
7041       break;
7042 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7043     case PREDEF_TYPE_##Id##_ID: \
7044       T = Context.SingletonId; \
7045       break;
7046 #include "clang/Basic/OpenCLImageTypes.def"
7047 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7048     case PREDEF_TYPE_##Id##_ID: \
7049       T = Context.Id##Ty; \
7050       break;
7051 #include "clang/Basic/OpenCLExtensionTypes.def"
7052     case PREDEF_TYPE_SAMPLER_ID:
7053       T = Context.OCLSamplerTy;
7054       break;
7055     case PREDEF_TYPE_EVENT_ID:
7056       T = Context.OCLEventTy;
7057       break;
7058     case PREDEF_TYPE_CLK_EVENT_ID:
7059       T = Context.OCLClkEventTy;
7060       break;
7061     case PREDEF_TYPE_QUEUE_ID:
7062       T = Context.OCLQueueTy;
7063       break;
7064     case PREDEF_TYPE_RESERVE_ID_ID:
7065       T = Context.OCLReserveIDTy;
7066       break;
7067     case PREDEF_TYPE_AUTO_DEDUCT:
7068       T = Context.getAutoDeductType();
7069       break;
7070     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7071       T = Context.getAutoRRefDeductType();
7072       break;
7073     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7074       T = Context.ARCUnbridgedCastTy;
7075       break;
7076     case PREDEF_TYPE_BUILTIN_FN:
7077       T = Context.BuiltinFnTy;
7078       break;
7079     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7080       T = Context.IncompleteMatrixIdxTy;
7081       break;
7082     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7083       T = Context.OMPArraySectionTy;
7084       break;
7085     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7086       T = Context.OMPArraySectionTy;
7087       break;
7088     case PREDEF_TYPE_OMP_ITERATOR:
7089       T = Context.OMPIteratorTy;
7090       break;
7091 #define SVE_TYPE(Name, Id, SingletonId) \
7092     case PREDEF_TYPE_##Id##_ID: \
7093       T = Context.SingletonId; \
7094       break;
7095 #include "clang/Basic/AArch64SVEACLETypes.def"
7096 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7097     case PREDEF_TYPE_##Id##_ID: \
7098       T = Context.Id##Ty; \
7099       break;
7100 #include "clang/Basic/PPCTypes.def"
7101 #define RVV_TYPE(Name, Id, SingletonId) \
7102     case PREDEF_TYPE_##Id##_ID: \
7103       T = Context.SingletonId; \
7104       break;
7105 #include "clang/Basic/RISCVVTypes.def"
7106     }
7107 
7108     assert(!T.isNull() && "Unknown predefined type");
7109     return T.withFastQualifiers(FastQuals);
7110   }
7111 
7112   Index -= NUM_PREDEF_TYPE_IDS;
7113   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7114   if (TypesLoaded[Index].isNull()) {
7115     TypesLoaded[Index] = readTypeRecord(Index);
7116     if (TypesLoaded[Index].isNull())
7117       return QualType();
7118 
7119     TypesLoaded[Index]->setFromAST();
7120     if (DeserializationListener)
7121       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7122                                         TypesLoaded[Index]);
7123   }
7124 
7125   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7126 }
7127 
7128 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7129   return GetType(getGlobalTypeID(F, LocalID));
7130 }
7131 
7132 serialization::TypeID
7133 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7134   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7135   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7136 
7137   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7138     return LocalID;
7139 
7140   if (!F.ModuleOffsetMap.empty())
7141     ReadModuleOffsetMap(F);
7142 
7143   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7144     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7145   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7146 
7147   unsigned GlobalIndex = LocalIndex + I->second;
7148   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7149 }
7150 
7151 TemplateArgumentLocInfo
7152 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7153   switch (Kind) {
7154   case TemplateArgument::Expression:
7155     return readExpr();
7156   case TemplateArgument::Type:
7157     return readTypeSourceInfo();
7158   case TemplateArgument::Template: {
7159     NestedNameSpecifierLoc QualifierLoc =
7160       readNestedNameSpecifierLoc();
7161     SourceLocation TemplateNameLoc = readSourceLocation();
7162     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7163                                    TemplateNameLoc, SourceLocation());
7164   }
7165   case TemplateArgument::TemplateExpansion: {
7166     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7167     SourceLocation TemplateNameLoc = readSourceLocation();
7168     SourceLocation EllipsisLoc = readSourceLocation();
7169     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7170                                    TemplateNameLoc, EllipsisLoc);
7171   }
7172   case TemplateArgument::Null:
7173   case TemplateArgument::Integral:
7174   case TemplateArgument::Declaration:
7175   case TemplateArgument::NullPtr:
7176   case TemplateArgument::Pack:
7177     // FIXME: Is this right?
7178     return TemplateArgumentLocInfo();
7179   }
7180   llvm_unreachable("unexpected template argument loc");
7181 }
7182 
7183 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7184   TemplateArgument Arg = readTemplateArgument();
7185 
7186   if (Arg.getKind() == TemplateArgument::Expression) {
7187     if (readBool()) // bool InfoHasSameExpr.
7188       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7189   }
7190   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7191 }
7192 
7193 const ASTTemplateArgumentListInfo *
7194 ASTRecordReader::readASTTemplateArgumentListInfo() {
7195   SourceLocation LAngleLoc = readSourceLocation();
7196   SourceLocation RAngleLoc = readSourceLocation();
7197   unsigned NumArgsAsWritten = readInt();
7198   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7199   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7200     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7201   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7202 }
7203 
7204 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7205   return GetDecl(ID);
7206 }
7207 
7208 void ASTReader::CompleteRedeclChain(const Decl *D) {
7209   if (NumCurrentElementsDeserializing) {
7210     // We arrange to not care about the complete redeclaration chain while we're
7211     // deserializing. Just remember that the AST has marked this one as complete
7212     // but that it's not actually complete yet, so we know we still need to
7213     // complete it later.
7214     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7215     return;
7216   }
7217 
7218   if (!D->getDeclContext()) {
7219     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7220     return;
7221   }
7222 
7223   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7224 
7225   // If this is a named declaration, complete it by looking it up
7226   // within its context.
7227   //
7228   // FIXME: Merging a function definition should merge
7229   // all mergeable entities within it.
7230   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7231       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7232     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7233       if (!getContext().getLangOpts().CPlusPlus &&
7234           isa<TranslationUnitDecl>(DC)) {
7235         // Outside of C++, we don't have a lookup table for the TU, so update
7236         // the identifier instead. (For C++ modules, we don't store decls
7237         // in the serialized identifier table, so we do the lookup in the TU.)
7238         auto *II = Name.getAsIdentifierInfo();
7239         assert(II && "non-identifier name in C?");
7240         if (II->isOutOfDate())
7241           updateOutOfDateIdentifier(*II);
7242       } else
7243         DC->lookup(Name);
7244     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7245       // Find all declarations of this kind from the relevant context.
7246       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7247         auto *DC = cast<DeclContext>(DCDecl);
7248         SmallVector<Decl*, 8> Decls;
7249         FindExternalLexicalDecls(
7250             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7251       }
7252     }
7253   }
7254 
7255   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7256     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7257   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7258     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7259   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7260     if (auto *Template = FD->getPrimaryTemplate())
7261       Template->LoadLazySpecializations();
7262   }
7263 }
7264 
7265 CXXCtorInitializer **
7266 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7267   RecordLocation Loc = getLocalBitOffset(Offset);
7268   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7269   SavedStreamPosition SavedPosition(Cursor);
7270   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7271     Error(std::move(Err));
7272     return nullptr;
7273   }
7274   ReadingKindTracker ReadingKind(Read_Decl, *this);
7275 
7276   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7277   if (!MaybeCode) {
7278     Error(MaybeCode.takeError());
7279     return nullptr;
7280   }
7281   unsigned Code = MaybeCode.get();
7282 
7283   ASTRecordReader Record(*this, *Loc.F);
7284   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7285   if (!MaybeRecCode) {
7286     Error(MaybeRecCode.takeError());
7287     return nullptr;
7288   }
7289   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7290     Error("malformed AST file: missing C++ ctor initializers");
7291     return nullptr;
7292   }
7293 
7294   return Record.readCXXCtorInitializers();
7295 }
7296 
7297 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7298   assert(ContextObj && "reading base specifiers with no AST context");
7299   ASTContext &Context = *ContextObj;
7300 
7301   RecordLocation Loc = getLocalBitOffset(Offset);
7302   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7303   SavedStreamPosition SavedPosition(Cursor);
7304   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7305     Error(std::move(Err));
7306     return nullptr;
7307   }
7308   ReadingKindTracker ReadingKind(Read_Decl, *this);
7309 
7310   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7311   if (!MaybeCode) {
7312     Error(MaybeCode.takeError());
7313     return nullptr;
7314   }
7315   unsigned Code = MaybeCode.get();
7316 
7317   ASTRecordReader Record(*this, *Loc.F);
7318   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7319   if (!MaybeRecCode) {
7320     Error(MaybeCode.takeError());
7321     return nullptr;
7322   }
7323   unsigned RecCode = MaybeRecCode.get();
7324 
7325   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7326     Error("malformed AST file: missing C++ base specifiers");
7327     return nullptr;
7328   }
7329 
7330   unsigned NumBases = Record.readInt();
7331   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7332   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7333   for (unsigned I = 0; I != NumBases; ++I)
7334     Bases[I] = Record.readCXXBaseSpecifier();
7335   return Bases;
7336 }
7337 
7338 serialization::DeclID
7339 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7340   if (LocalID < NUM_PREDEF_DECL_IDS)
7341     return LocalID;
7342 
7343   if (!F.ModuleOffsetMap.empty())
7344     ReadModuleOffsetMap(F);
7345 
7346   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7347     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7348   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7349 
7350   return LocalID + I->second;
7351 }
7352 
7353 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7354                                    ModuleFile &M) const {
7355   // Predefined decls aren't from any module.
7356   if (ID < NUM_PREDEF_DECL_IDS)
7357     return false;
7358 
7359   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7360          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7361 }
7362 
7363 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7364   if (!D->isFromASTFile())
7365     return nullptr;
7366   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7367   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7368   return I->second;
7369 }
7370 
7371 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7372   if (ID < NUM_PREDEF_DECL_IDS)
7373     return SourceLocation();
7374 
7375   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7376 
7377   if (Index > DeclsLoaded.size()) {
7378     Error("declaration ID out-of-range for AST file");
7379     return SourceLocation();
7380   }
7381 
7382   if (Decl *D = DeclsLoaded[Index])
7383     return D->getLocation();
7384 
7385   SourceLocation Loc;
7386   DeclCursorForID(ID, Loc);
7387   return Loc;
7388 }
7389 
7390 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7391   switch (ID) {
7392   case PREDEF_DECL_NULL_ID:
7393     return nullptr;
7394 
7395   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7396     return Context.getTranslationUnitDecl();
7397 
7398   case PREDEF_DECL_OBJC_ID_ID:
7399     return Context.getObjCIdDecl();
7400 
7401   case PREDEF_DECL_OBJC_SEL_ID:
7402     return Context.getObjCSelDecl();
7403 
7404   case PREDEF_DECL_OBJC_CLASS_ID:
7405     return Context.getObjCClassDecl();
7406 
7407   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7408     return Context.getObjCProtocolDecl();
7409 
7410   case PREDEF_DECL_INT_128_ID:
7411     return Context.getInt128Decl();
7412 
7413   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7414     return Context.getUInt128Decl();
7415 
7416   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7417     return Context.getObjCInstanceTypeDecl();
7418 
7419   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7420     return Context.getBuiltinVaListDecl();
7421 
7422   case PREDEF_DECL_VA_LIST_TAG:
7423     return Context.getVaListTagDecl();
7424 
7425   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7426     return Context.getBuiltinMSVaListDecl();
7427 
7428   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7429     return Context.getMSGuidTagDecl();
7430 
7431   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7432     return Context.getExternCContextDecl();
7433 
7434   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7435     return Context.getMakeIntegerSeqDecl();
7436 
7437   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7438     return Context.getCFConstantStringDecl();
7439 
7440   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7441     return Context.getCFConstantStringTagDecl();
7442 
7443   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7444     return Context.getTypePackElementDecl();
7445   }
7446   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7447 }
7448 
7449 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7450   assert(ContextObj && "reading decl with no AST context");
7451   if (ID < NUM_PREDEF_DECL_IDS) {
7452     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7453     if (D) {
7454       // Track that we have merged the declaration with ID \p ID into the
7455       // pre-existing predefined declaration \p D.
7456       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7457       if (Merged.empty())
7458         Merged.push_back(ID);
7459     }
7460     return D;
7461   }
7462 
7463   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7464 
7465   if (Index >= DeclsLoaded.size()) {
7466     assert(0 && "declaration ID out-of-range for AST file");
7467     Error("declaration ID out-of-range for AST file");
7468     return nullptr;
7469   }
7470 
7471   return DeclsLoaded[Index];
7472 }
7473 
7474 Decl *ASTReader::GetDecl(DeclID ID) {
7475   if (ID < NUM_PREDEF_DECL_IDS)
7476     return GetExistingDecl(ID);
7477 
7478   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7479 
7480   if (Index >= DeclsLoaded.size()) {
7481     assert(0 && "declaration ID out-of-range for AST file");
7482     Error("declaration ID out-of-range for AST file");
7483     return nullptr;
7484   }
7485 
7486   if (!DeclsLoaded[Index]) {
7487     ReadDeclRecord(ID);
7488     if (DeserializationListener)
7489       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7490   }
7491 
7492   return DeclsLoaded[Index];
7493 }
7494 
7495 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7496                                                   DeclID GlobalID) {
7497   if (GlobalID < NUM_PREDEF_DECL_IDS)
7498     return GlobalID;
7499 
7500   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7501   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7502   ModuleFile *Owner = I->second;
7503 
7504   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7505     = M.GlobalToLocalDeclIDs.find(Owner);
7506   if (Pos == M.GlobalToLocalDeclIDs.end())
7507     return 0;
7508 
7509   return GlobalID - Owner->BaseDeclID + Pos->second;
7510 }
7511 
7512 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7513                                             const RecordData &Record,
7514                                             unsigned &Idx) {
7515   if (Idx >= Record.size()) {
7516     Error("Corrupted AST file");
7517     return 0;
7518   }
7519 
7520   return getGlobalDeclID(F, Record[Idx++]);
7521 }
7522 
7523 /// Resolve the offset of a statement into a statement.
7524 ///
7525 /// This operation will read a new statement from the external
7526 /// source each time it is called, and is meant to be used via a
7527 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7528 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7529   // Switch case IDs are per Decl.
7530   ClearSwitchCaseIDs();
7531 
7532   // Offset here is a global offset across the entire chain.
7533   RecordLocation Loc = getLocalBitOffset(Offset);
7534   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7535     Error(std::move(Err));
7536     return nullptr;
7537   }
7538   assert(NumCurrentElementsDeserializing == 0 &&
7539          "should not be called while already deserializing");
7540   Deserializing D(this);
7541   return ReadStmtFromStream(*Loc.F);
7542 }
7543 
7544 void ASTReader::FindExternalLexicalDecls(
7545     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7546     SmallVectorImpl<Decl *> &Decls) {
7547   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7548 
7549   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7550     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7551     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7552       auto K = (Decl::Kind)+LexicalDecls[I];
7553       if (!IsKindWeWant(K))
7554         continue;
7555 
7556       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7557 
7558       // Don't add predefined declarations to the lexical context more
7559       // than once.
7560       if (ID < NUM_PREDEF_DECL_IDS) {
7561         if (PredefsVisited[ID])
7562           continue;
7563 
7564         PredefsVisited[ID] = true;
7565       }
7566 
7567       if (Decl *D = GetLocalDecl(*M, ID)) {
7568         assert(D->getKind() == K && "wrong kind for lexical decl");
7569         if (!DC->isDeclInLexicalTraversal(D))
7570           Decls.push_back(D);
7571       }
7572     }
7573   };
7574 
7575   if (isa<TranslationUnitDecl>(DC)) {
7576     for (auto Lexical : TULexicalDecls)
7577       Visit(Lexical.first, Lexical.second);
7578   } else {
7579     auto I = LexicalDecls.find(DC);
7580     if (I != LexicalDecls.end())
7581       Visit(I->second.first, I->second.second);
7582   }
7583 
7584   ++NumLexicalDeclContextsRead;
7585 }
7586 
7587 namespace {
7588 
7589 class DeclIDComp {
7590   ASTReader &Reader;
7591   ModuleFile &Mod;
7592 
7593 public:
7594   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7595 
7596   bool operator()(LocalDeclID L, LocalDeclID R) const {
7597     SourceLocation LHS = getLocation(L);
7598     SourceLocation RHS = getLocation(R);
7599     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7600   }
7601 
7602   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7603     SourceLocation RHS = getLocation(R);
7604     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7605   }
7606 
7607   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7608     SourceLocation LHS = getLocation(L);
7609     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7610   }
7611 
7612   SourceLocation getLocation(LocalDeclID ID) const {
7613     return Reader.getSourceManager().getFileLoc(
7614             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7615   }
7616 };
7617 
7618 } // namespace
7619 
7620 void ASTReader::FindFileRegionDecls(FileID File,
7621                                     unsigned Offset, unsigned Length,
7622                                     SmallVectorImpl<Decl *> &Decls) {
7623   SourceManager &SM = getSourceManager();
7624 
7625   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7626   if (I == FileDeclIDs.end())
7627     return;
7628 
7629   FileDeclsInfo &DInfo = I->second;
7630   if (DInfo.Decls.empty())
7631     return;
7632 
7633   SourceLocation
7634     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7635   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7636 
7637   DeclIDComp DIDComp(*this, *DInfo.Mod);
7638   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7639       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7640   if (BeginIt != DInfo.Decls.begin())
7641     --BeginIt;
7642 
7643   // If we are pointing at a top-level decl inside an objc container, we need
7644   // to backtrack until we find it otherwise we will fail to report that the
7645   // region overlaps with an objc container.
7646   while (BeginIt != DInfo.Decls.begin() &&
7647          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7648              ->isTopLevelDeclInObjCContainer())
7649     --BeginIt;
7650 
7651   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7652       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7653   if (EndIt != DInfo.Decls.end())
7654     ++EndIt;
7655 
7656   for (ArrayRef<serialization::LocalDeclID>::iterator
7657          DIt = BeginIt; DIt != EndIt; ++DIt)
7658     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7659 }
7660 
7661 bool
7662 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7663                                           DeclarationName Name) {
7664   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7665          "DeclContext has no visible decls in storage");
7666   if (!Name)
7667     return false;
7668 
7669   auto It = Lookups.find(DC);
7670   if (It == Lookups.end())
7671     return false;
7672 
7673   Deserializing LookupResults(this);
7674 
7675   // Load the list of declarations.
7676   SmallVector<NamedDecl *, 64> Decls;
7677   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7678   for (DeclID ID : It->second.Table.find(Name)) {
7679     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7680     if (ND->getDeclName() == Name && Found.insert(ND).second)
7681       Decls.push_back(ND);
7682   }
7683 
7684   ++NumVisibleDeclContextsRead;
7685   SetExternalVisibleDeclsForName(DC, Name, Decls);
7686   return !Decls.empty();
7687 }
7688 
7689 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7690   if (!DC->hasExternalVisibleStorage())
7691     return;
7692 
7693   auto It = Lookups.find(DC);
7694   assert(It != Lookups.end() &&
7695          "have external visible storage but no lookup tables");
7696 
7697   DeclsMap Decls;
7698 
7699   for (DeclID ID : It->second.Table.findAll()) {
7700     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7701     Decls[ND->getDeclName()].push_back(ND);
7702   }
7703 
7704   ++NumVisibleDeclContextsRead;
7705 
7706   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7707     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7708   }
7709   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7710 }
7711 
7712 const serialization::reader::DeclContextLookupTable *
7713 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7714   auto I = Lookups.find(Primary);
7715   return I == Lookups.end() ? nullptr : &I->second;
7716 }
7717 
7718 /// Under non-PCH compilation the consumer receives the objc methods
7719 /// before receiving the implementation, and codegen depends on this.
7720 /// We simulate this by deserializing and passing to consumer the methods of the
7721 /// implementation before passing the deserialized implementation decl.
7722 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7723                                        ASTConsumer *Consumer) {
7724   assert(ImplD && Consumer);
7725 
7726   for (auto *I : ImplD->methods())
7727     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7728 
7729   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7730 }
7731 
7732 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7733   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7734     PassObjCImplDeclToConsumer(ImplD, Consumer);
7735   else
7736     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7737 }
7738 
7739 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7740   this->Consumer = Consumer;
7741 
7742   if (Consumer)
7743     PassInterestingDeclsToConsumer();
7744 
7745   if (DeserializationListener)
7746     DeserializationListener->ReaderInitialized(this);
7747 }
7748 
7749 void ASTReader::PrintStats() {
7750   std::fprintf(stderr, "*** AST File Statistics:\n");
7751 
7752   unsigned NumTypesLoaded =
7753       TypesLoaded.size() - llvm::count(TypesLoaded, QualType());
7754   unsigned NumDeclsLoaded =
7755       DeclsLoaded.size() - llvm::count(DeclsLoaded, (Decl *)nullptr);
7756   unsigned NumIdentifiersLoaded =
7757       IdentifiersLoaded.size() -
7758       llvm::count(IdentifiersLoaded, (IdentifierInfo *)nullptr);
7759   unsigned NumMacrosLoaded =
7760       MacrosLoaded.size() - llvm::count(MacrosLoaded, (MacroInfo *)nullptr);
7761   unsigned NumSelectorsLoaded =
7762       SelectorsLoaded.size() - llvm::count(SelectorsLoaded, Selector());
7763 
7764   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7765     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7766                  NumSLocEntriesRead, TotalNumSLocEntries,
7767                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7768   if (!TypesLoaded.empty())
7769     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7770                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7771                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7772   if (!DeclsLoaded.empty())
7773     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7774                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7775                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7776   if (!IdentifiersLoaded.empty())
7777     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7778                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7779                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7780   if (!MacrosLoaded.empty())
7781     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7782                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7783                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7784   if (!SelectorsLoaded.empty())
7785     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7786                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7787                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7788   if (TotalNumStatements)
7789     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7790                  NumStatementsRead, TotalNumStatements,
7791                  ((float)NumStatementsRead/TotalNumStatements * 100));
7792   if (TotalNumMacros)
7793     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7794                  NumMacrosRead, TotalNumMacros,
7795                  ((float)NumMacrosRead/TotalNumMacros * 100));
7796   if (TotalLexicalDeclContexts)
7797     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7798                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7799                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7800                   * 100));
7801   if (TotalVisibleDeclContexts)
7802     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7803                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7804                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7805                   * 100));
7806   if (TotalNumMethodPoolEntries)
7807     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7808                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7809                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7810                   * 100));
7811   if (NumMethodPoolLookups)
7812     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7813                  NumMethodPoolHits, NumMethodPoolLookups,
7814                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7815   if (NumMethodPoolTableLookups)
7816     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7817                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7818                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7819                   * 100.0));
7820   if (NumIdentifierLookupHits)
7821     std::fprintf(stderr,
7822                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7823                  NumIdentifierLookupHits, NumIdentifierLookups,
7824                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7825 
7826   if (GlobalIndex) {
7827     std::fprintf(stderr, "\n");
7828     GlobalIndex->printStats();
7829   }
7830 
7831   std::fprintf(stderr, "\n");
7832   dump();
7833   std::fprintf(stderr, "\n");
7834 }
7835 
7836 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7837 LLVM_DUMP_METHOD static void
7838 dumpModuleIDMap(StringRef Name,
7839                 const ContinuousRangeMap<Key, ModuleFile *,
7840                                          InitialCapacity> &Map) {
7841   if (Map.begin() == Map.end())
7842     return;
7843 
7844   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7845 
7846   llvm::errs() << Name << ":\n";
7847   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7848        I != IEnd; ++I) {
7849     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7850       << "\n";
7851   }
7852 }
7853 
7854 LLVM_DUMP_METHOD void ASTReader::dump() {
7855   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7856   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7857   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7858   dumpModuleIDMap("Global type map", GlobalTypeMap);
7859   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7860   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7861   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7862   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7863   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7864   dumpModuleIDMap("Global preprocessed entity map",
7865                   GlobalPreprocessedEntityMap);
7866 
7867   llvm::errs() << "\n*** PCH/Modules Loaded:";
7868   for (ModuleFile &M : ModuleMgr)
7869     M.dump();
7870 }
7871 
7872 /// Return the amount of memory used by memory buffers, breaking down
7873 /// by heap-backed versus mmap'ed memory.
7874 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7875   for (ModuleFile &I : ModuleMgr) {
7876     if (llvm::MemoryBuffer *buf = I.Buffer) {
7877       size_t bytes = buf->getBufferSize();
7878       switch (buf->getBufferKind()) {
7879         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7880           sizes.malloc_bytes += bytes;
7881           break;
7882         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7883           sizes.mmap_bytes += bytes;
7884           break;
7885       }
7886     }
7887   }
7888 }
7889 
7890 void ASTReader::InitializeSema(Sema &S) {
7891   SemaObj = &S;
7892   S.addExternalSource(this);
7893 
7894   // Makes sure any declarations that were deserialized "too early"
7895   // still get added to the identifier's declaration chains.
7896   for (uint64_t ID : PreloadedDeclIDs) {
7897     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7898     pushExternalDeclIntoScope(D, D->getDeclName());
7899   }
7900   PreloadedDeclIDs.clear();
7901 
7902   // FIXME: What happens if these are changed by a module import?
7903   if (!FPPragmaOptions.empty()) {
7904     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7905     FPOptionsOverride NewOverrides =
7906         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7907     SemaObj->CurFPFeatures =
7908         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7909   }
7910 
7911   SemaObj->OpenCLFeatures = OpenCLExtensions;
7912 
7913   UpdateSema();
7914 }
7915 
7916 void ASTReader::UpdateSema() {
7917   assert(SemaObj && "no Sema to update");
7918 
7919   // Load the offsets of the declarations that Sema references.
7920   // They will be lazily deserialized when needed.
7921   if (!SemaDeclRefs.empty()) {
7922     assert(SemaDeclRefs.size() % 3 == 0);
7923     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7924       if (!SemaObj->StdNamespace)
7925         SemaObj->StdNamespace = SemaDeclRefs[I];
7926       if (!SemaObj->StdBadAlloc)
7927         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7928       if (!SemaObj->StdAlignValT)
7929         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7930     }
7931     SemaDeclRefs.clear();
7932   }
7933 
7934   // Update the state of pragmas. Use the same API as if we had encountered the
7935   // pragma in the source.
7936   if(OptimizeOffPragmaLocation.isValid())
7937     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7938   if (PragmaMSStructState != -1)
7939     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7940   if (PointersToMembersPragmaLocation.isValid()) {
7941     SemaObj->ActOnPragmaMSPointersToMembers(
7942         (LangOptions::PragmaMSPointersToMembersKind)
7943             PragmaMSPointersToMembersState,
7944         PointersToMembersPragmaLocation);
7945   }
7946   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7947 
7948   if (PragmaAlignPackCurrentValue) {
7949     // The bottom of the stack might have a default value. It must be adjusted
7950     // to the current value to ensure that the packing state is preserved after
7951     // popping entries that were included/imported from a PCH/module.
7952     bool DropFirst = false;
7953     if (!PragmaAlignPackStack.empty() &&
7954         PragmaAlignPackStack.front().Location.isInvalid()) {
7955       assert(PragmaAlignPackStack.front().Value ==
7956                  SemaObj->AlignPackStack.DefaultValue &&
7957              "Expected a default alignment value");
7958       SemaObj->AlignPackStack.Stack.emplace_back(
7959           PragmaAlignPackStack.front().SlotLabel,
7960           SemaObj->AlignPackStack.CurrentValue,
7961           SemaObj->AlignPackStack.CurrentPragmaLocation,
7962           PragmaAlignPackStack.front().PushLocation);
7963       DropFirst = true;
7964     }
7965     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7966                                  .drop_front(DropFirst ? 1 : 0)) {
7967       SemaObj->AlignPackStack.Stack.emplace_back(
7968           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7969     }
7970     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7971       assert(*PragmaAlignPackCurrentValue ==
7972                  SemaObj->AlignPackStack.DefaultValue &&
7973              "Expected a default align and pack value");
7974       // Keep the current values.
7975     } else {
7976       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7977       SemaObj->AlignPackStack.CurrentPragmaLocation =
7978           PragmaAlignPackCurrentLocation;
7979     }
7980   }
7981   if (FpPragmaCurrentValue) {
7982     // The bottom of the stack might have a default value. It must be adjusted
7983     // to the current value to ensure that fp-pragma state is preserved after
7984     // popping entries that were included/imported from a PCH/module.
7985     bool DropFirst = false;
7986     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7987       assert(FpPragmaStack.front().Value ==
7988                  SemaObj->FpPragmaStack.DefaultValue &&
7989              "Expected a default pragma float_control value");
7990       SemaObj->FpPragmaStack.Stack.emplace_back(
7991           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7992           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7993           FpPragmaStack.front().PushLocation);
7994       DropFirst = true;
7995     }
7996     for (const auto &Entry :
7997          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7998       SemaObj->FpPragmaStack.Stack.emplace_back(
7999           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
8000     if (FpPragmaCurrentLocation.isInvalid()) {
8001       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
8002              "Expected a default pragma float_control value");
8003       // Keep the current values.
8004     } else {
8005       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
8006       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
8007     }
8008   }
8009 
8010   // For non-modular AST files, restore visiblity of modules.
8011   for (auto &Import : ImportedModules) {
8012     if (Import.ImportLoc.isInvalid())
8013       continue;
8014     if (Module *Imported = getSubmodule(Import.ID)) {
8015       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
8016     }
8017   }
8018 }
8019 
8020 IdentifierInfo *ASTReader::get(StringRef Name) {
8021   // Note that we are loading an identifier.
8022   Deserializing AnIdentifier(this);
8023 
8024   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8025                                   NumIdentifierLookups,
8026                                   NumIdentifierLookupHits);
8027 
8028   // We don't need to do identifier table lookups in C++ modules (we preload
8029   // all interesting declarations, and don't need to use the scope for name
8030   // lookups). Perform the lookup in PCH files, though, since we don't build
8031   // a complete initial identifier table if we're carrying on from a PCH.
8032   if (PP.getLangOpts().CPlusPlus) {
8033     for (auto F : ModuleMgr.pch_modules())
8034       if (Visitor(*F))
8035         break;
8036   } else {
8037     // If there is a global index, look there first to determine which modules
8038     // provably do not have any results for this identifier.
8039     GlobalModuleIndex::HitSet Hits;
8040     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8041     if (!loadGlobalIndex()) {
8042       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8043         HitsPtr = &Hits;
8044       }
8045     }
8046 
8047     ModuleMgr.visit(Visitor, HitsPtr);
8048   }
8049 
8050   IdentifierInfo *II = Visitor.getIdentifierInfo();
8051   markIdentifierUpToDate(II);
8052   return II;
8053 }
8054 
8055 namespace clang {
8056 
8057   /// An identifier-lookup iterator that enumerates all of the
8058   /// identifiers stored within a set of AST files.
8059   class ASTIdentifierIterator : public IdentifierIterator {
8060     /// The AST reader whose identifiers are being enumerated.
8061     const ASTReader &Reader;
8062 
8063     /// The current index into the chain of AST files stored in
8064     /// the AST reader.
8065     unsigned Index;
8066 
8067     /// The current position within the identifier lookup table
8068     /// of the current AST file.
8069     ASTIdentifierLookupTable::key_iterator Current;
8070 
8071     /// The end position within the identifier lookup table of
8072     /// the current AST file.
8073     ASTIdentifierLookupTable::key_iterator End;
8074 
8075     /// Whether to skip any modules in the ASTReader.
8076     bool SkipModules;
8077 
8078   public:
8079     explicit ASTIdentifierIterator(const ASTReader &Reader,
8080                                    bool SkipModules = false);
8081 
8082     StringRef Next() override;
8083   };
8084 
8085 } // namespace clang
8086 
8087 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8088                                              bool SkipModules)
8089     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8090 }
8091 
8092 StringRef ASTIdentifierIterator::Next() {
8093   while (Current == End) {
8094     // If we have exhausted all of our AST files, we're done.
8095     if (Index == 0)
8096       return StringRef();
8097 
8098     --Index;
8099     ModuleFile &F = Reader.ModuleMgr[Index];
8100     if (SkipModules && F.isModule())
8101       continue;
8102 
8103     ASTIdentifierLookupTable *IdTable =
8104         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8105     Current = IdTable->key_begin();
8106     End = IdTable->key_end();
8107   }
8108 
8109   // We have any identifiers remaining in the current AST file; return
8110   // the next one.
8111   StringRef Result = *Current;
8112   ++Current;
8113   return Result;
8114 }
8115 
8116 namespace {
8117 
8118 /// A utility for appending two IdentifierIterators.
8119 class ChainedIdentifierIterator : public IdentifierIterator {
8120   std::unique_ptr<IdentifierIterator> Current;
8121   std::unique_ptr<IdentifierIterator> Queued;
8122 
8123 public:
8124   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8125                             std::unique_ptr<IdentifierIterator> Second)
8126       : Current(std::move(First)), Queued(std::move(Second)) {}
8127 
8128   StringRef Next() override {
8129     if (!Current)
8130       return StringRef();
8131 
8132     StringRef result = Current->Next();
8133     if (!result.empty())
8134       return result;
8135 
8136     // Try the queued iterator, which may itself be empty.
8137     Current.reset();
8138     std::swap(Current, Queued);
8139     return Next();
8140   }
8141 };
8142 
8143 } // namespace
8144 
8145 IdentifierIterator *ASTReader::getIdentifiers() {
8146   if (!loadGlobalIndex()) {
8147     std::unique_ptr<IdentifierIterator> ReaderIter(
8148         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8149     std::unique_ptr<IdentifierIterator> ModulesIter(
8150         GlobalIndex->createIdentifierIterator());
8151     return new ChainedIdentifierIterator(std::move(ReaderIter),
8152                                          std::move(ModulesIter));
8153   }
8154 
8155   return new ASTIdentifierIterator(*this);
8156 }
8157 
8158 namespace clang {
8159 namespace serialization {
8160 
8161   class ReadMethodPoolVisitor {
8162     ASTReader &Reader;
8163     Selector Sel;
8164     unsigned PriorGeneration;
8165     unsigned InstanceBits = 0;
8166     unsigned FactoryBits = 0;
8167     bool InstanceHasMoreThanOneDecl = false;
8168     bool FactoryHasMoreThanOneDecl = false;
8169     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8170     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8171 
8172   public:
8173     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8174                           unsigned PriorGeneration)
8175         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8176 
8177     bool operator()(ModuleFile &M) {
8178       if (!M.SelectorLookupTable)
8179         return false;
8180 
8181       // If we've already searched this module file, skip it now.
8182       if (M.Generation <= PriorGeneration)
8183         return true;
8184 
8185       ++Reader.NumMethodPoolTableLookups;
8186       ASTSelectorLookupTable *PoolTable
8187         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8188       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8189       if (Pos == PoolTable->end())
8190         return false;
8191 
8192       ++Reader.NumMethodPoolTableHits;
8193       ++Reader.NumSelectorsRead;
8194       // FIXME: Not quite happy with the statistics here. We probably should
8195       // disable this tracking when called via LoadSelector.
8196       // Also, should entries without methods count as misses?
8197       ++Reader.NumMethodPoolEntriesRead;
8198       ASTSelectorLookupTrait::data_type Data = *Pos;
8199       if (Reader.DeserializationListener)
8200         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8201 
8202       // Append methods in the reverse order, so that later we can process them
8203       // in the order they appear in the source code by iterating through
8204       // the vector in the reverse order.
8205       InstanceMethods.append(Data.Instance.rbegin(), Data.Instance.rend());
8206       FactoryMethods.append(Data.Factory.rbegin(), Data.Factory.rend());
8207       InstanceBits = Data.InstanceBits;
8208       FactoryBits = Data.FactoryBits;
8209       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8210       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8211       return false;
8212     }
8213 
8214     /// Retrieve the instance methods found by this visitor.
8215     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8216       return InstanceMethods;
8217     }
8218 
8219     /// Retrieve the instance methods found by this visitor.
8220     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8221       return FactoryMethods;
8222     }
8223 
8224     unsigned getInstanceBits() const { return InstanceBits; }
8225     unsigned getFactoryBits() const { return FactoryBits; }
8226 
8227     bool instanceHasMoreThanOneDecl() const {
8228       return InstanceHasMoreThanOneDecl;
8229     }
8230 
8231     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8232   };
8233 
8234 } // namespace serialization
8235 } // namespace clang
8236 
8237 /// Add the given set of methods to the method list.
8238 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8239                              ObjCMethodList &List) {
8240   for (auto I = Methods.rbegin(), E = Methods.rend(); I != E; ++I)
8241     S.addMethodToGlobalList(&List, *I);
8242 }
8243 
8244 void ASTReader::ReadMethodPool(Selector Sel) {
8245   // Get the selector generation and update it to the current generation.
8246   unsigned &Generation = SelectorGeneration[Sel];
8247   unsigned PriorGeneration = Generation;
8248   Generation = getGeneration();
8249   SelectorOutOfDate[Sel] = false;
8250 
8251   // Search for methods defined with this selector.
8252   ++NumMethodPoolLookups;
8253   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8254   ModuleMgr.visit(Visitor);
8255 
8256   if (Visitor.getInstanceMethods().empty() &&
8257       Visitor.getFactoryMethods().empty())
8258     return;
8259 
8260   ++NumMethodPoolHits;
8261 
8262   if (!getSema())
8263     return;
8264 
8265   Sema &S = *getSema();
8266   Sema::GlobalMethodPool::iterator Pos =
8267       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8268           .first;
8269 
8270   Pos->second.first.setBits(Visitor.getInstanceBits());
8271   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8272   Pos->second.second.setBits(Visitor.getFactoryBits());
8273   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8274 
8275   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8276   // when building a module we keep every method individually and may need to
8277   // update hasMoreThanOneDecl as we add the methods.
8278   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8279   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8280 }
8281 
8282 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8283   if (SelectorOutOfDate[Sel])
8284     ReadMethodPool(Sel);
8285 }
8286 
8287 void ASTReader::ReadKnownNamespaces(
8288                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8289   Namespaces.clear();
8290 
8291   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8292     if (NamespaceDecl *Namespace
8293                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8294       Namespaces.push_back(Namespace);
8295   }
8296 }
8297 
8298 void ASTReader::ReadUndefinedButUsed(
8299     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8300   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8301     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8302     SourceLocation Loc =
8303         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8304     Undefined.insert(std::make_pair(D, Loc));
8305   }
8306 }
8307 
8308 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8309     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8310                                                      Exprs) {
8311   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8312     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8313     uint64_t Count = DelayedDeleteExprs[Idx++];
8314     for (uint64_t C = 0; C < Count; ++C) {
8315       SourceLocation DeleteLoc =
8316           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8317       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8318       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8319     }
8320   }
8321 }
8322 
8323 void ASTReader::ReadTentativeDefinitions(
8324                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8325   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8326     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8327     if (Var)
8328       TentativeDefs.push_back(Var);
8329   }
8330   TentativeDefinitions.clear();
8331 }
8332 
8333 void ASTReader::ReadUnusedFileScopedDecls(
8334                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8335   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8336     DeclaratorDecl *D
8337       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8338     if (D)
8339       Decls.push_back(D);
8340   }
8341   UnusedFileScopedDecls.clear();
8342 }
8343 
8344 void ASTReader::ReadDelegatingConstructors(
8345                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8346   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8347     CXXConstructorDecl *D
8348       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8349     if (D)
8350       Decls.push_back(D);
8351   }
8352   DelegatingCtorDecls.clear();
8353 }
8354 
8355 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8356   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8357     TypedefNameDecl *D
8358       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8359     if (D)
8360       Decls.push_back(D);
8361   }
8362   ExtVectorDecls.clear();
8363 }
8364 
8365 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8366     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8367   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8368        ++I) {
8369     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8370         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8371     if (D)
8372       Decls.insert(D);
8373   }
8374   UnusedLocalTypedefNameCandidates.clear();
8375 }
8376 
8377 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8378     llvm::SmallSetVector<Decl *, 4> &Decls) {
8379   for (auto I : DeclsToCheckForDeferredDiags) {
8380     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8381     if (D)
8382       Decls.insert(D);
8383   }
8384   DeclsToCheckForDeferredDiags.clear();
8385 }
8386 
8387 void ASTReader::ReadReferencedSelectors(
8388        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8389   if (ReferencedSelectorsData.empty())
8390     return;
8391 
8392   // If there are @selector references added them to its pool. This is for
8393   // implementation of -Wselector.
8394   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8395   unsigned I = 0;
8396   while (I < DataSize) {
8397     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8398     SourceLocation SelLoc
8399       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8400     Sels.push_back(std::make_pair(Sel, SelLoc));
8401   }
8402   ReferencedSelectorsData.clear();
8403 }
8404 
8405 void ASTReader::ReadWeakUndeclaredIdentifiers(
8406        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8407   if (WeakUndeclaredIdentifiers.empty())
8408     return;
8409 
8410   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8411     IdentifierInfo *WeakId
8412       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8413     IdentifierInfo *AliasId
8414       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8415     SourceLocation Loc =
8416         SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8417     WeakInfo WI(AliasId, Loc);
8418     WeakIDs.push_back(std::make_pair(WeakId, WI));
8419   }
8420   WeakUndeclaredIdentifiers.clear();
8421 }
8422 
8423 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8424   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8425     ExternalVTableUse VT;
8426     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8427     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8428     VT.DefinitionRequired = VTableUses[Idx++];
8429     VTables.push_back(VT);
8430   }
8431 
8432   VTableUses.clear();
8433 }
8434 
8435 void ASTReader::ReadPendingInstantiations(
8436        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8437   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8438     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8439     SourceLocation Loc
8440       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8441 
8442     Pending.push_back(std::make_pair(D, Loc));
8443   }
8444   PendingInstantiations.clear();
8445 }
8446 
8447 void ASTReader::ReadLateParsedTemplates(
8448     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8449         &LPTMap) {
8450   for (auto &LPT : LateParsedTemplates) {
8451     ModuleFile *FMod = LPT.first;
8452     RecordDataImpl &LateParsed = LPT.second;
8453     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8454          /* In loop */) {
8455       FunctionDecl *FD =
8456           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8457 
8458       auto LT = std::make_unique<LateParsedTemplate>();
8459       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8460 
8461       ModuleFile *F = getOwningModuleFile(LT->D);
8462       assert(F && "No module");
8463 
8464       unsigned TokN = LateParsed[Idx++];
8465       LT->Toks.reserve(TokN);
8466       for (unsigned T = 0; T < TokN; ++T)
8467         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8468 
8469       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8470     }
8471   }
8472 
8473   LateParsedTemplates.clear();
8474 }
8475 
8476 void ASTReader::LoadSelector(Selector Sel) {
8477   // It would be complicated to avoid reading the methods anyway. So don't.
8478   ReadMethodPool(Sel);
8479 }
8480 
8481 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8482   assert(ID && "Non-zero identifier ID required");
8483   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8484   IdentifiersLoaded[ID - 1] = II;
8485   if (DeserializationListener)
8486     DeserializationListener->IdentifierRead(ID, II);
8487 }
8488 
8489 /// Set the globally-visible declarations associated with the given
8490 /// identifier.
8491 ///
8492 /// If the AST reader is currently in a state where the given declaration IDs
8493 /// cannot safely be resolved, they are queued until it is safe to resolve
8494 /// them.
8495 ///
8496 /// \param II an IdentifierInfo that refers to one or more globally-visible
8497 /// declarations.
8498 ///
8499 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8500 /// visible at global scope.
8501 ///
8502 /// \param Decls if non-null, this vector will be populated with the set of
8503 /// deserialized declarations. These declarations will not be pushed into
8504 /// scope.
8505 void
8506 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8507                               const SmallVectorImpl<uint32_t> &DeclIDs,
8508                                    SmallVectorImpl<Decl *> *Decls) {
8509   if (NumCurrentElementsDeserializing && !Decls) {
8510     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8511     return;
8512   }
8513 
8514   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8515     if (!SemaObj) {
8516       // Queue this declaration so that it will be added to the
8517       // translation unit scope and identifier's declaration chain
8518       // once a Sema object is known.
8519       PreloadedDeclIDs.push_back(DeclIDs[I]);
8520       continue;
8521     }
8522 
8523     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8524 
8525     // If we're simply supposed to record the declarations, do so now.
8526     if (Decls) {
8527       Decls->push_back(D);
8528       continue;
8529     }
8530 
8531     // Introduce this declaration into the translation-unit scope
8532     // and add it to the declaration chain for this identifier, so
8533     // that (unqualified) name lookup will find it.
8534     pushExternalDeclIntoScope(D, II);
8535   }
8536 }
8537 
8538 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8539   if (ID == 0)
8540     return nullptr;
8541 
8542   if (IdentifiersLoaded.empty()) {
8543     Error("no identifier table in AST file");
8544     return nullptr;
8545   }
8546 
8547   ID -= 1;
8548   if (!IdentifiersLoaded[ID]) {
8549     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8550     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8551     ModuleFile *M = I->second;
8552     unsigned Index = ID - M->BaseIdentifierID;
8553     const unsigned char *Data =
8554         M->IdentifierTableData + M->IdentifierOffsets[Index];
8555 
8556     ASTIdentifierLookupTrait Trait(*this, *M);
8557     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8558     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8559     auto &II = PP.getIdentifierTable().get(Key);
8560     IdentifiersLoaded[ID] = &II;
8561     markIdentifierFromAST(*this,  II);
8562     if (DeserializationListener)
8563       DeserializationListener->IdentifierRead(ID + 1, &II);
8564   }
8565 
8566   return IdentifiersLoaded[ID];
8567 }
8568 
8569 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8570   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8571 }
8572 
8573 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8574   if (LocalID < NUM_PREDEF_IDENT_IDS)
8575     return LocalID;
8576 
8577   if (!M.ModuleOffsetMap.empty())
8578     ReadModuleOffsetMap(M);
8579 
8580   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8581     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8582   assert(I != M.IdentifierRemap.end()
8583          && "Invalid index into identifier index remap");
8584 
8585   return LocalID + I->second;
8586 }
8587 
8588 MacroInfo *ASTReader::getMacro(MacroID ID) {
8589   if (ID == 0)
8590     return nullptr;
8591 
8592   if (MacrosLoaded.empty()) {
8593     Error("no macro table in AST file");
8594     return nullptr;
8595   }
8596 
8597   ID -= NUM_PREDEF_MACRO_IDS;
8598   if (!MacrosLoaded[ID]) {
8599     GlobalMacroMapType::iterator I
8600       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8601     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8602     ModuleFile *M = I->second;
8603     unsigned Index = ID - M->BaseMacroID;
8604     MacrosLoaded[ID] =
8605         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8606 
8607     if (DeserializationListener)
8608       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8609                                          MacrosLoaded[ID]);
8610   }
8611 
8612   return MacrosLoaded[ID];
8613 }
8614 
8615 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8616   if (LocalID < NUM_PREDEF_MACRO_IDS)
8617     return LocalID;
8618 
8619   if (!M.ModuleOffsetMap.empty())
8620     ReadModuleOffsetMap(M);
8621 
8622   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8623     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8624   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8625 
8626   return LocalID + I->second;
8627 }
8628 
8629 serialization::SubmoduleID
8630 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8631   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8632     return LocalID;
8633 
8634   if (!M.ModuleOffsetMap.empty())
8635     ReadModuleOffsetMap(M);
8636 
8637   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8638     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8639   assert(I != M.SubmoduleRemap.end()
8640          && "Invalid index into submodule index remap");
8641 
8642   return LocalID + I->second;
8643 }
8644 
8645 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8646   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8647     assert(GlobalID == 0 && "Unhandled global submodule ID");
8648     return nullptr;
8649   }
8650 
8651   if (GlobalID > SubmodulesLoaded.size()) {
8652     Error("submodule ID out of range in AST file");
8653     return nullptr;
8654   }
8655 
8656   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8657 }
8658 
8659 Module *ASTReader::getModule(unsigned ID) {
8660   return getSubmodule(ID);
8661 }
8662 
8663 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8664   if (ID & 1) {
8665     // It's a module, look it up by submodule ID.
8666     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8667     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8668   } else {
8669     // It's a prefix (preamble, PCH, ...). Look it up by index.
8670     unsigned IndexFromEnd = ID >> 1;
8671     assert(IndexFromEnd && "got reference to unknown module file");
8672     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8673   }
8674 }
8675 
8676 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8677   if (!F)
8678     return 1;
8679 
8680   // For a file representing a module, use the submodule ID of the top-level
8681   // module as the file ID. For any other kind of file, the number of such
8682   // files loaded beforehand will be the same on reload.
8683   // FIXME: Is this true even if we have an explicit module file and a PCH?
8684   if (F->isModule())
8685     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8686 
8687   auto PCHModules = getModuleManager().pch_modules();
8688   auto I = llvm::find(PCHModules, F);
8689   assert(I != PCHModules.end() && "emitting reference to unknown file");
8690   return (I - PCHModules.end()) << 1;
8691 }
8692 
8693 llvm::Optional<ASTSourceDescriptor>
8694 ASTReader::getSourceDescriptor(unsigned ID) {
8695   if (Module *M = getSubmodule(ID))
8696     return ASTSourceDescriptor(*M);
8697 
8698   // If there is only a single PCH, return it instead.
8699   // Chained PCH are not supported.
8700   const auto &PCHChain = ModuleMgr.pch_modules();
8701   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8702     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8703     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8704     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8705     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8706                                MF.Signature);
8707   }
8708   return None;
8709 }
8710 
8711 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8712   auto I = DefinitionSource.find(FD);
8713   if (I == DefinitionSource.end())
8714     return EK_ReplyHazy;
8715   return I->second ? EK_Never : EK_Always;
8716 }
8717 
8718 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8719   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8720 }
8721 
8722 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8723   if (ID == 0)
8724     return Selector();
8725 
8726   if (ID > SelectorsLoaded.size()) {
8727     Error("selector ID out of range in AST file");
8728     return Selector();
8729   }
8730 
8731   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8732     // Load this selector from the selector table.
8733     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8734     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8735     ModuleFile &M = *I->second;
8736     ASTSelectorLookupTrait Trait(*this, M);
8737     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8738     SelectorsLoaded[ID - 1] =
8739       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8740     if (DeserializationListener)
8741       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8742   }
8743 
8744   return SelectorsLoaded[ID - 1];
8745 }
8746 
8747 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8748   return DecodeSelector(ID);
8749 }
8750 
8751 uint32_t ASTReader::GetNumExternalSelectors() {
8752   // ID 0 (the null selector) is considered an external selector.
8753   return getTotalNumSelectors() + 1;
8754 }
8755 
8756 serialization::SelectorID
8757 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8758   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8759     return LocalID;
8760 
8761   if (!M.ModuleOffsetMap.empty())
8762     ReadModuleOffsetMap(M);
8763 
8764   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8765     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8766   assert(I != M.SelectorRemap.end()
8767          && "Invalid index into selector index remap");
8768 
8769   return LocalID + I->second;
8770 }
8771 
8772 DeclarationNameLoc
8773 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8774   switch (Name.getNameKind()) {
8775   case DeclarationName::CXXConstructorName:
8776   case DeclarationName::CXXDestructorName:
8777   case DeclarationName::CXXConversionFunctionName:
8778     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8779 
8780   case DeclarationName::CXXOperatorName:
8781     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8782 
8783   case DeclarationName::CXXLiteralOperatorName:
8784     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8785         readSourceLocation());
8786 
8787   case DeclarationName::Identifier:
8788   case DeclarationName::ObjCZeroArgSelector:
8789   case DeclarationName::ObjCOneArgSelector:
8790   case DeclarationName::ObjCMultiArgSelector:
8791   case DeclarationName::CXXUsingDirective:
8792   case DeclarationName::CXXDeductionGuideName:
8793     break;
8794   }
8795   return DeclarationNameLoc();
8796 }
8797 
8798 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8799   DeclarationNameInfo NameInfo;
8800   NameInfo.setName(readDeclarationName());
8801   NameInfo.setLoc(readSourceLocation());
8802   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8803   return NameInfo;
8804 }
8805 
8806 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8807   Info.QualifierLoc = readNestedNameSpecifierLoc();
8808   unsigned NumTPLists = readInt();
8809   Info.NumTemplParamLists = NumTPLists;
8810   if (NumTPLists) {
8811     Info.TemplParamLists =
8812         new (getContext()) TemplateParameterList *[NumTPLists];
8813     for (unsigned i = 0; i != NumTPLists; ++i)
8814       Info.TemplParamLists[i] = readTemplateParameterList();
8815   }
8816 }
8817 
8818 TemplateParameterList *
8819 ASTRecordReader::readTemplateParameterList() {
8820   SourceLocation TemplateLoc = readSourceLocation();
8821   SourceLocation LAngleLoc = readSourceLocation();
8822   SourceLocation RAngleLoc = readSourceLocation();
8823 
8824   unsigned NumParams = readInt();
8825   SmallVector<NamedDecl *, 16> Params;
8826   Params.reserve(NumParams);
8827   while (NumParams--)
8828     Params.push_back(readDeclAs<NamedDecl>());
8829 
8830   bool HasRequiresClause = readBool();
8831   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8832 
8833   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8834       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8835   return TemplateParams;
8836 }
8837 
8838 void ASTRecordReader::readTemplateArgumentList(
8839                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8840                         bool Canonicalize) {
8841   unsigned NumTemplateArgs = readInt();
8842   TemplArgs.reserve(NumTemplateArgs);
8843   while (NumTemplateArgs--)
8844     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8845 }
8846 
8847 /// Read a UnresolvedSet structure.
8848 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8849   unsigned NumDecls = readInt();
8850   Set.reserve(getContext(), NumDecls);
8851   while (NumDecls--) {
8852     DeclID ID = readDeclID();
8853     AccessSpecifier AS = (AccessSpecifier) readInt();
8854     Set.addLazyDecl(getContext(), ID, AS);
8855   }
8856 }
8857 
8858 CXXBaseSpecifier
8859 ASTRecordReader::readCXXBaseSpecifier() {
8860   bool isVirtual = readBool();
8861   bool isBaseOfClass = readBool();
8862   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8863   bool inheritConstructors = readBool();
8864   TypeSourceInfo *TInfo = readTypeSourceInfo();
8865   SourceRange Range = readSourceRange();
8866   SourceLocation EllipsisLoc = readSourceLocation();
8867   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8868                           EllipsisLoc);
8869   Result.setInheritConstructors(inheritConstructors);
8870   return Result;
8871 }
8872 
8873 CXXCtorInitializer **
8874 ASTRecordReader::readCXXCtorInitializers() {
8875   ASTContext &Context = getContext();
8876   unsigned NumInitializers = readInt();
8877   assert(NumInitializers && "wrote ctor initializers but have no inits");
8878   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8879   for (unsigned i = 0; i != NumInitializers; ++i) {
8880     TypeSourceInfo *TInfo = nullptr;
8881     bool IsBaseVirtual = false;
8882     FieldDecl *Member = nullptr;
8883     IndirectFieldDecl *IndirectMember = nullptr;
8884 
8885     CtorInitializerType Type = (CtorInitializerType) readInt();
8886     switch (Type) {
8887     case CTOR_INITIALIZER_BASE:
8888       TInfo = readTypeSourceInfo();
8889       IsBaseVirtual = readBool();
8890       break;
8891 
8892     case CTOR_INITIALIZER_DELEGATING:
8893       TInfo = readTypeSourceInfo();
8894       break;
8895 
8896      case CTOR_INITIALIZER_MEMBER:
8897       Member = readDeclAs<FieldDecl>();
8898       break;
8899 
8900      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8901       IndirectMember = readDeclAs<IndirectFieldDecl>();
8902       break;
8903     }
8904 
8905     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8906     Expr *Init = readExpr();
8907     SourceLocation LParenLoc = readSourceLocation();
8908     SourceLocation RParenLoc = readSourceLocation();
8909 
8910     CXXCtorInitializer *BOMInit;
8911     if (Type == CTOR_INITIALIZER_BASE)
8912       BOMInit = new (Context)
8913           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8914                              RParenLoc, MemberOrEllipsisLoc);
8915     else if (Type == CTOR_INITIALIZER_DELEGATING)
8916       BOMInit = new (Context)
8917           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8918     else if (Member)
8919       BOMInit = new (Context)
8920           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8921                              Init, RParenLoc);
8922     else
8923       BOMInit = new (Context)
8924           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8925                              LParenLoc, Init, RParenLoc);
8926 
8927     if (/*IsWritten*/readBool()) {
8928       unsigned SourceOrder = readInt();
8929       BOMInit->setSourceOrder(SourceOrder);
8930     }
8931 
8932     CtorInitializers[i] = BOMInit;
8933   }
8934 
8935   return CtorInitializers;
8936 }
8937 
8938 NestedNameSpecifierLoc
8939 ASTRecordReader::readNestedNameSpecifierLoc() {
8940   ASTContext &Context = getContext();
8941   unsigned N = readInt();
8942   NestedNameSpecifierLocBuilder Builder;
8943   for (unsigned I = 0; I != N; ++I) {
8944     auto Kind = readNestedNameSpecifierKind();
8945     switch (Kind) {
8946     case NestedNameSpecifier::Identifier: {
8947       IdentifierInfo *II = readIdentifier();
8948       SourceRange Range = readSourceRange();
8949       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8950       break;
8951     }
8952 
8953     case NestedNameSpecifier::Namespace: {
8954       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8955       SourceRange Range = readSourceRange();
8956       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8957       break;
8958     }
8959 
8960     case NestedNameSpecifier::NamespaceAlias: {
8961       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8962       SourceRange Range = readSourceRange();
8963       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8964       break;
8965     }
8966 
8967     case NestedNameSpecifier::TypeSpec:
8968     case NestedNameSpecifier::TypeSpecWithTemplate: {
8969       bool Template = readBool();
8970       TypeSourceInfo *T = readTypeSourceInfo();
8971       if (!T)
8972         return NestedNameSpecifierLoc();
8973       SourceLocation ColonColonLoc = readSourceLocation();
8974 
8975       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8976       Builder.Extend(Context,
8977                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8978                      T->getTypeLoc(), ColonColonLoc);
8979       break;
8980     }
8981 
8982     case NestedNameSpecifier::Global: {
8983       SourceLocation ColonColonLoc = readSourceLocation();
8984       Builder.MakeGlobal(Context, ColonColonLoc);
8985       break;
8986     }
8987 
8988     case NestedNameSpecifier::Super: {
8989       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8990       SourceRange Range = readSourceRange();
8991       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8992       break;
8993     }
8994     }
8995   }
8996 
8997   return Builder.getWithLocInContext(Context);
8998 }
8999 
9000 SourceRange ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
9001                                        unsigned &Idx, LocSeq *Seq) {
9002   SourceLocation beg = ReadSourceLocation(F, Record, Idx, Seq);
9003   SourceLocation end = ReadSourceLocation(F, Record, Idx, Seq);
9004   return SourceRange(beg, end);
9005 }
9006 
9007 /// Read a floating-point value
9008 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
9009   return llvm::APFloat(Sem, readAPInt());
9010 }
9011 
9012 // Read a string
9013 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
9014   unsigned Len = Record[Idx++];
9015   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9016   Idx += Len;
9017   return Result;
9018 }
9019 
9020 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9021                                 unsigned &Idx) {
9022   std::string Filename = ReadString(Record, Idx);
9023   ResolveImportedPath(F, Filename);
9024   return Filename;
9025 }
9026 
9027 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9028                                 const RecordData &Record, unsigned &Idx) {
9029   std::string Filename = ReadString(Record, Idx);
9030   if (!BaseDirectory.empty())
9031     ResolveImportedPath(Filename, BaseDirectory);
9032   return Filename;
9033 }
9034 
9035 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9036                                          unsigned &Idx) {
9037   unsigned Major = Record[Idx++];
9038   unsigned Minor = Record[Idx++];
9039   unsigned Subminor = Record[Idx++];
9040   if (Minor == 0)
9041     return VersionTuple(Major);
9042   if (Subminor == 0)
9043     return VersionTuple(Major, Minor - 1);
9044   return VersionTuple(Major, Minor - 1, Subminor - 1);
9045 }
9046 
9047 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9048                                           const RecordData &Record,
9049                                           unsigned &Idx) {
9050   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9051   return CXXTemporary::Create(getContext(), Decl);
9052 }
9053 
9054 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9055   return Diag(CurrentImportLoc, DiagID);
9056 }
9057 
9058 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9059   return Diags.Report(Loc, DiagID);
9060 }
9061 
9062 /// Retrieve the identifier table associated with the
9063 /// preprocessor.
9064 IdentifierTable &ASTReader::getIdentifierTable() {
9065   return PP.getIdentifierTable();
9066 }
9067 
9068 /// Record that the given ID maps to the given switch-case
9069 /// statement.
9070 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9071   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9072          "Already have a SwitchCase with this ID");
9073   (*CurrSwitchCaseStmts)[ID] = SC;
9074 }
9075 
9076 /// Retrieve the switch-case statement with the given ID.
9077 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9078   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9079   return (*CurrSwitchCaseStmts)[ID];
9080 }
9081 
9082 void ASTReader::ClearSwitchCaseIDs() {
9083   CurrSwitchCaseStmts->clear();
9084 }
9085 
9086 void ASTReader::ReadComments() {
9087   ASTContext &Context = getContext();
9088   std::vector<RawComment *> Comments;
9089   for (SmallVectorImpl<std::pair<BitstreamCursor,
9090                                  serialization::ModuleFile *>>::iterator
9091        I = CommentsCursors.begin(),
9092        E = CommentsCursors.end();
9093        I != E; ++I) {
9094     Comments.clear();
9095     BitstreamCursor &Cursor = I->first;
9096     serialization::ModuleFile &F = *I->second;
9097     SavedStreamPosition SavedPosition(Cursor);
9098 
9099     RecordData Record;
9100     while (true) {
9101       Expected<llvm::BitstreamEntry> MaybeEntry =
9102           Cursor.advanceSkippingSubblocks(
9103               BitstreamCursor::AF_DontPopBlockAtEnd);
9104       if (!MaybeEntry) {
9105         Error(MaybeEntry.takeError());
9106         return;
9107       }
9108       llvm::BitstreamEntry Entry = MaybeEntry.get();
9109 
9110       switch (Entry.Kind) {
9111       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9112       case llvm::BitstreamEntry::Error:
9113         Error("malformed block record in AST file");
9114         return;
9115       case llvm::BitstreamEntry::EndBlock:
9116         goto NextCursor;
9117       case llvm::BitstreamEntry::Record:
9118         // The interesting case.
9119         break;
9120       }
9121 
9122       // Read a record.
9123       Record.clear();
9124       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9125       if (!MaybeComment) {
9126         Error(MaybeComment.takeError());
9127         return;
9128       }
9129       switch ((CommentRecordTypes)MaybeComment.get()) {
9130       case COMMENTS_RAW_COMMENT: {
9131         unsigned Idx = 0;
9132         SourceRange SR = ReadSourceRange(F, Record, Idx);
9133         RawComment::CommentKind Kind =
9134             (RawComment::CommentKind) Record[Idx++];
9135         bool IsTrailingComment = Record[Idx++];
9136         bool IsAlmostTrailingComment = Record[Idx++];
9137         Comments.push_back(new (Context) RawComment(
9138             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9139         break;
9140       }
9141       }
9142     }
9143   NextCursor:
9144     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9145         FileToOffsetToComment;
9146     for (RawComment *C : Comments) {
9147       SourceLocation CommentLoc = C->getBeginLoc();
9148       if (CommentLoc.isValid()) {
9149         std::pair<FileID, unsigned> Loc =
9150             SourceMgr.getDecomposedLoc(CommentLoc);
9151         if (Loc.first.isValid())
9152           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9153       }
9154     }
9155   }
9156 }
9157 
9158 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9159                                 bool IncludeSystem, bool Complain,
9160                     llvm::function_ref<void(const serialization::InputFile &IF,
9161                                             bool isSystem)> Visitor) {
9162   unsigned NumUserInputs = MF.NumUserInputFiles;
9163   unsigned NumInputs = MF.InputFilesLoaded.size();
9164   assert(NumUserInputs <= NumInputs);
9165   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9166   for (unsigned I = 0; I < N; ++I) {
9167     bool IsSystem = I >= NumUserInputs;
9168     InputFile IF = getInputFile(MF, I+1, Complain);
9169     Visitor(IF, IsSystem);
9170   }
9171 }
9172 
9173 void ASTReader::visitTopLevelModuleMaps(
9174     serialization::ModuleFile &MF,
9175     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9176   unsigned NumInputs = MF.InputFilesLoaded.size();
9177   for (unsigned I = 0; I < NumInputs; ++I) {
9178     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9179     if (IFI.TopLevelModuleMap)
9180       // FIXME: This unnecessarily re-reads the InputFileInfo.
9181       if (auto FE = getInputFile(MF, I + 1).getFile())
9182         Visitor(FE);
9183   }
9184 }
9185 
9186 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9187   // If we know the owning module, use it.
9188   if (Module *M = D->getImportedOwningModule())
9189     return M->getFullModuleName();
9190 
9191   // Otherwise, use the name of the top-level module the decl is within.
9192   if (ModuleFile *M = getOwningModuleFile(D))
9193     return M->ModuleName;
9194 
9195   // Not from a module.
9196   return {};
9197 }
9198 
9199 void ASTReader::finishPendingActions() {
9200   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9201          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9202          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9203          !PendingUpdateRecords.empty() ||
9204          !PendingObjCExtensionIvarRedeclarations.empty()) {
9205     // If any identifiers with corresponding top-level declarations have
9206     // been loaded, load those declarations now.
9207     using TopLevelDeclsMap =
9208         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9209     TopLevelDeclsMap TopLevelDecls;
9210 
9211     while (!PendingIdentifierInfos.empty()) {
9212       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9213       SmallVector<uint32_t, 4> DeclIDs =
9214           std::move(PendingIdentifierInfos.back().second);
9215       PendingIdentifierInfos.pop_back();
9216 
9217       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9218     }
9219 
9220     // Load each function type that we deferred loading because it was a
9221     // deduced type that might refer to a local type declared within itself.
9222     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9223       auto *FD = PendingFunctionTypes[I].first;
9224       FD->setType(GetType(PendingFunctionTypes[I].second));
9225 
9226       // If we gave a function a deduced return type, remember that we need to
9227       // propagate that along the redeclaration chain.
9228       auto *DT = FD->getReturnType()->getContainedDeducedType();
9229       if (DT && DT->isDeduced())
9230         PendingDeducedTypeUpdates.insert(
9231             {FD->getCanonicalDecl(), FD->getReturnType()});
9232     }
9233     PendingFunctionTypes.clear();
9234 
9235     // For each decl chain that we wanted to complete while deserializing, mark
9236     // it as "still needs to be completed".
9237     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9238       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9239     }
9240     PendingIncompleteDeclChains.clear();
9241 
9242     // Load pending declaration chains.
9243     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9244       loadPendingDeclChain(PendingDeclChains[I].first,
9245                            PendingDeclChains[I].second);
9246     PendingDeclChains.clear();
9247 
9248     // Make the most recent of the top-level declarations visible.
9249     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9250            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9251       IdentifierInfo *II = TLD->first;
9252       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9253         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9254       }
9255     }
9256 
9257     // Load any pending macro definitions.
9258     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9259       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9260       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9261       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9262       // Initialize the macro history from chained-PCHs ahead of module imports.
9263       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9264            ++IDIdx) {
9265         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9266         if (!Info.M->isModule())
9267           resolvePendingMacro(II, Info);
9268       }
9269       // Handle module imports.
9270       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9271            ++IDIdx) {
9272         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9273         if (Info.M->isModule())
9274           resolvePendingMacro(II, Info);
9275       }
9276     }
9277     PendingMacroIDs.clear();
9278 
9279     // Wire up the DeclContexts for Decls that we delayed setting until
9280     // recursive loading is completed.
9281     while (!PendingDeclContextInfos.empty()) {
9282       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9283       PendingDeclContextInfos.pop_front();
9284       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9285       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9286       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9287     }
9288 
9289     // Perform any pending declaration updates.
9290     while (!PendingUpdateRecords.empty()) {
9291       auto Update = PendingUpdateRecords.pop_back_val();
9292       ReadingKindTracker ReadingKind(Read_Decl, *this);
9293       loadDeclUpdateRecords(Update);
9294     }
9295 
9296     while (!PendingObjCExtensionIvarRedeclarations.empty()) {
9297       auto ExtensionsPair = PendingObjCExtensionIvarRedeclarations.back().first;
9298       auto DuplicateIvars =
9299           PendingObjCExtensionIvarRedeclarations.back().second;
9300       llvm::DenseSet<std::pair<Decl *, Decl *>> NonEquivalentDecls;
9301       StructuralEquivalenceContext Ctx(
9302           ExtensionsPair.first->getASTContext(),
9303           ExtensionsPair.second->getASTContext(), NonEquivalentDecls,
9304           StructuralEquivalenceKind::Default, /*StrictTypeSpelling =*/false,
9305           /*Complain =*/false,
9306           /*ErrorOnTagTypeMismatch =*/true);
9307       if (Ctx.IsEquivalent(ExtensionsPair.first, ExtensionsPair.second)) {
9308         // Merge redeclared ivars with their predecessors.
9309         for (auto IvarPair : DuplicateIvars) {
9310           ObjCIvarDecl *Ivar = IvarPair.first, *PrevIvar = IvarPair.second;
9311           // Change semantic DeclContext but keep the lexical one.
9312           Ivar->setDeclContextsImpl(PrevIvar->getDeclContext(),
9313                                     Ivar->getLexicalDeclContext(),
9314                                     getContext());
9315           getContext().setPrimaryMergedDecl(Ivar, PrevIvar->getCanonicalDecl());
9316         }
9317         // Invalidate duplicate extension and the cached ivar list.
9318         ExtensionsPair.first->setInvalidDecl();
9319         ExtensionsPair.second->getClassInterface()
9320             ->getDefinition()
9321             ->setIvarList(nullptr);
9322       } else {
9323         for (auto IvarPair : DuplicateIvars) {
9324           Diag(IvarPair.first->getLocation(),
9325                diag::err_duplicate_ivar_declaration)
9326               << IvarPair.first->getIdentifier();
9327           Diag(IvarPair.second->getLocation(), diag::note_previous_definition);
9328         }
9329       }
9330       PendingObjCExtensionIvarRedeclarations.pop_back();
9331     }
9332   }
9333 
9334   // At this point, all update records for loaded decls are in place, so any
9335   // fake class definitions should have become real.
9336   assert(PendingFakeDefinitionData.empty() &&
9337          "faked up a class definition but never saw the real one");
9338 
9339   // If we deserialized any C++ or Objective-C class definitions, any
9340   // Objective-C protocol definitions, or any redeclarable templates, make sure
9341   // that all redeclarations point to the definitions. Note that this can only
9342   // happen now, after the redeclaration chains have been fully wired.
9343   for (Decl *D : PendingDefinitions) {
9344     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9345       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9346         // Make sure that the TagType points at the definition.
9347         const_cast<TagType*>(TagT)->decl = TD;
9348       }
9349 
9350       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9351         for (auto *R = getMostRecentExistingDecl(RD); R;
9352              R = R->getPreviousDecl()) {
9353           assert((R == D) ==
9354                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9355                  "declaration thinks it's the definition but it isn't");
9356           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9357         }
9358       }
9359 
9360       continue;
9361     }
9362 
9363     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9364       // Make sure that the ObjCInterfaceType points at the definition.
9365       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9366         ->Decl = ID;
9367 
9368       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9369         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9370 
9371       continue;
9372     }
9373 
9374     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9375       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9376         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9377 
9378       continue;
9379     }
9380 
9381     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9382     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9383       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9384   }
9385   PendingDefinitions.clear();
9386 
9387   // Load the bodies of any functions or methods we've encountered. We do
9388   // this now (delayed) so that we can be sure that the declaration chains
9389   // have been fully wired up (hasBody relies on this).
9390   // FIXME: We shouldn't require complete redeclaration chains here.
9391   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9392                                PBEnd = PendingBodies.end();
9393        PB != PBEnd; ++PB) {
9394     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9395       // For a function defined inline within a class template, force the
9396       // canonical definition to be the one inside the canonical definition of
9397       // the template. This ensures that we instantiate from a correct view
9398       // of the template.
9399       //
9400       // Sadly we can't do this more generally: we can't be sure that all
9401       // copies of an arbitrary class definition will have the same members
9402       // defined (eg, some member functions may not be instantiated, and some
9403       // special members may or may not have been implicitly defined).
9404       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9405         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9406           continue;
9407 
9408       // FIXME: Check for =delete/=default?
9409       // FIXME: Complain about ODR violations here?
9410       const FunctionDecl *Defn = nullptr;
9411       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9412         FD->setLazyBody(PB->second);
9413       } else {
9414         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9415         mergeDefinitionVisibility(NonConstDefn, FD);
9416 
9417         if (!FD->isLateTemplateParsed() &&
9418             !NonConstDefn->isLateTemplateParsed() &&
9419             FD->getODRHash() != NonConstDefn->getODRHash()) {
9420           if (!isa<CXXMethodDecl>(FD)) {
9421             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9422           } else if (FD->getLexicalParent()->isFileContext() &&
9423                      NonConstDefn->getLexicalParent()->isFileContext()) {
9424             // Only diagnose out-of-line method definitions.  If they are
9425             // in class definitions, then an error will be generated when
9426             // processing the class bodies.
9427             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9428           }
9429         }
9430       }
9431       continue;
9432     }
9433 
9434     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9435     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9436       MD->setLazyBody(PB->second);
9437   }
9438   PendingBodies.clear();
9439 
9440   // Do some cleanup.
9441   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9442     getContext().deduplicateMergedDefinitonsFor(ND);
9443   PendingMergedDefinitionsToDeduplicate.clear();
9444 }
9445 
9446 void ASTReader::diagnoseOdrViolations() {
9447   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9448       PendingFunctionOdrMergeFailures.empty() &&
9449       PendingEnumOdrMergeFailures.empty())
9450     return;
9451 
9452   // Trigger the import of the full definition of each class that had any
9453   // odr-merging problems, so we can produce better diagnostics for them.
9454   // These updates may in turn find and diagnose some ODR failures, so take
9455   // ownership of the set first.
9456   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9457   PendingOdrMergeFailures.clear();
9458   for (auto &Merge : OdrMergeFailures) {
9459     Merge.first->buildLookup();
9460     Merge.first->decls_begin();
9461     Merge.first->bases_begin();
9462     Merge.first->vbases_begin();
9463     for (auto &RecordPair : Merge.second) {
9464       auto *RD = RecordPair.first;
9465       RD->decls_begin();
9466       RD->bases_begin();
9467       RD->vbases_begin();
9468     }
9469   }
9470 
9471   // Trigger the import of functions.
9472   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9473   PendingFunctionOdrMergeFailures.clear();
9474   for (auto &Merge : FunctionOdrMergeFailures) {
9475     Merge.first->buildLookup();
9476     Merge.first->decls_begin();
9477     Merge.first->getBody();
9478     for (auto &FD : Merge.second) {
9479       FD->buildLookup();
9480       FD->decls_begin();
9481       FD->getBody();
9482     }
9483   }
9484 
9485   // Trigger the import of enums.
9486   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9487   PendingEnumOdrMergeFailures.clear();
9488   for (auto &Merge : EnumOdrMergeFailures) {
9489     Merge.first->decls_begin();
9490     for (auto &Enum : Merge.second) {
9491       Enum->decls_begin();
9492     }
9493   }
9494 
9495   // For each declaration from a merged context, check that the canonical
9496   // definition of that context also contains a declaration of the same
9497   // entity.
9498   //
9499   // Caution: this loop does things that might invalidate iterators into
9500   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9501   while (!PendingOdrMergeChecks.empty()) {
9502     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9503 
9504     // FIXME: Skip over implicit declarations for now. This matters for things
9505     // like implicitly-declared special member functions. This isn't entirely
9506     // correct; we can end up with multiple unmerged declarations of the same
9507     // implicit entity.
9508     if (D->isImplicit())
9509       continue;
9510 
9511     DeclContext *CanonDef = D->getDeclContext();
9512 
9513     bool Found = false;
9514     const Decl *DCanon = D->getCanonicalDecl();
9515 
9516     for (auto RI : D->redecls()) {
9517       if (RI->getLexicalDeclContext() == CanonDef) {
9518         Found = true;
9519         break;
9520       }
9521     }
9522     if (Found)
9523       continue;
9524 
9525     // Quick check failed, time to do the slow thing. Note, we can't just
9526     // look up the name of D in CanonDef here, because the member that is
9527     // in CanonDef might not be found by name lookup (it might have been
9528     // replaced by a more recent declaration in the lookup table), and we
9529     // can't necessarily find it in the redeclaration chain because it might
9530     // be merely mergeable, not redeclarable.
9531     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9532     for (auto *CanonMember : CanonDef->decls()) {
9533       if (CanonMember->getCanonicalDecl() == DCanon) {
9534         // This can happen if the declaration is merely mergeable and not
9535         // actually redeclarable (we looked for redeclarations earlier).
9536         //
9537         // FIXME: We should be able to detect this more efficiently, without
9538         // pulling in all of the members of CanonDef.
9539         Found = true;
9540         break;
9541       }
9542       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9543         if (ND->getDeclName() == D->getDeclName())
9544           Candidates.push_back(ND);
9545     }
9546 
9547     if (!Found) {
9548       // The AST doesn't like TagDecls becoming invalid after they've been
9549       // completed. We only really need to mark FieldDecls as invalid here.
9550       if (!isa<TagDecl>(D))
9551         D->setInvalidDecl();
9552 
9553       // Ensure we don't accidentally recursively enter deserialization while
9554       // we're producing our diagnostic.
9555       Deserializing RecursionGuard(this);
9556 
9557       std::string CanonDefModule =
9558           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9559       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9560         << D << getOwningModuleNameForDiagnostic(D)
9561         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9562 
9563       if (Candidates.empty())
9564         Diag(cast<Decl>(CanonDef)->getLocation(),
9565              diag::note_module_odr_violation_no_possible_decls) << D;
9566       else {
9567         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9568           Diag(Candidates[I]->getLocation(),
9569                diag::note_module_odr_violation_possible_decl)
9570             << Candidates[I];
9571       }
9572 
9573       DiagnosedOdrMergeFailures.insert(CanonDef);
9574     }
9575   }
9576 
9577   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9578       EnumOdrMergeFailures.empty())
9579     return;
9580 
9581   // Ensure we don't accidentally recursively enter deserialization while
9582   // we're producing our diagnostics.
9583   Deserializing RecursionGuard(this);
9584 
9585   // Common code for hashing helpers.
9586   ODRHash Hash;
9587   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9588     Hash.clear();
9589     Hash.AddQualType(Ty);
9590     return Hash.CalculateHash();
9591   };
9592 
9593   auto ComputeODRHash = [&Hash](const Stmt *S) {
9594     assert(S);
9595     Hash.clear();
9596     Hash.AddStmt(S);
9597     return Hash.CalculateHash();
9598   };
9599 
9600   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9601     assert(D);
9602     Hash.clear();
9603     Hash.AddSubDecl(D);
9604     return Hash.CalculateHash();
9605   };
9606 
9607   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9608     Hash.clear();
9609     Hash.AddTemplateArgument(TA);
9610     return Hash.CalculateHash();
9611   };
9612 
9613   auto ComputeTemplateParameterListODRHash =
9614       [&Hash](const TemplateParameterList *TPL) {
9615         assert(TPL);
9616         Hash.clear();
9617         Hash.AddTemplateParameterList(TPL);
9618         return Hash.CalculateHash();
9619       };
9620 
9621   // Used with err_module_odr_violation_mismatch_decl and
9622   // note_module_odr_violation_mismatch_decl
9623   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9624   enum ODRMismatchDecl {
9625     EndOfClass,
9626     PublicSpecifer,
9627     PrivateSpecifer,
9628     ProtectedSpecifer,
9629     StaticAssert,
9630     Field,
9631     CXXMethod,
9632     TypeAlias,
9633     TypeDef,
9634     Var,
9635     Friend,
9636     FunctionTemplate,
9637     Other
9638   };
9639 
9640   // Used with err_module_odr_violation_mismatch_decl_diff and
9641   // note_module_odr_violation_mismatch_decl_diff
9642   enum ODRMismatchDeclDifference {
9643     StaticAssertCondition,
9644     StaticAssertMessage,
9645     StaticAssertOnlyMessage,
9646     FieldName,
9647     FieldTypeName,
9648     FieldSingleBitField,
9649     FieldDifferentWidthBitField,
9650     FieldSingleMutable,
9651     FieldSingleInitializer,
9652     FieldDifferentInitializers,
9653     MethodName,
9654     MethodDeleted,
9655     MethodDefaulted,
9656     MethodVirtual,
9657     MethodStatic,
9658     MethodVolatile,
9659     MethodConst,
9660     MethodInline,
9661     MethodNumberParameters,
9662     MethodParameterType,
9663     MethodParameterName,
9664     MethodParameterSingleDefaultArgument,
9665     MethodParameterDifferentDefaultArgument,
9666     MethodNoTemplateArguments,
9667     MethodDifferentNumberTemplateArguments,
9668     MethodDifferentTemplateArgument,
9669     MethodSingleBody,
9670     MethodDifferentBody,
9671     TypedefName,
9672     TypedefType,
9673     VarName,
9674     VarType,
9675     VarSingleInitializer,
9676     VarDifferentInitializer,
9677     VarConstexpr,
9678     FriendTypeFunction,
9679     FriendType,
9680     FriendFunction,
9681     FunctionTemplateDifferentNumberParameters,
9682     FunctionTemplateParameterDifferentKind,
9683     FunctionTemplateParameterName,
9684     FunctionTemplateParameterSingleDefaultArgument,
9685     FunctionTemplateParameterDifferentDefaultArgument,
9686     FunctionTemplateParameterDifferentType,
9687     FunctionTemplatePackParameter,
9688   };
9689 
9690   // These lambdas have the common portions of the ODR diagnostics.  This
9691   // has the same return as Diag(), so addition parameters can be passed
9692   // in with operator<<
9693   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9694                                  SourceLocation Loc, SourceRange Range,
9695                                  ODRMismatchDeclDifference DiffType) {
9696     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9697            << FirstRecord << FirstModule.empty() << FirstModule << Range
9698            << DiffType;
9699   };
9700   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9701                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9702     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9703            << SecondModule << Range << DiffType;
9704   };
9705 
9706   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9707                        &ComputeQualTypeODRHash, &ComputeODRHash](
9708                           NamedDecl *FirstRecord, StringRef FirstModule,
9709                           StringRef SecondModule, FieldDecl *FirstField,
9710                           FieldDecl *SecondField) {
9711     IdentifierInfo *FirstII = FirstField->getIdentifier();
9712     IdentifierInfo *SecondII = SecondField->getIdentifier();
9713     if (FirstII->getName() != SecondII->getName()) {
9714       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9715                        FirstField->getSourceRange(), FieldName)
9716           << FirstII;
9717       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9718                       SecondField->getSourceRange(), FieldName)
9719           << SecondII;
9720 
9721       return true;
9722     }
9723 
9724     assert(getContext().hasSameType(FirstField->getType(),
9725                                     SecondField->getType()));
9726 
9727     QualType FirstType = FirstField->getType();
9728     QualType SecondType = SecondField->getType();
9729     if (ComputeQualTypeODRHash(FirstType) !=
9730         ComputeQualTypeODRHash(SecondType)) {
9731       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9732                        FirstField->getSourceRange(), FieldTypeName)
9733           << FirstII << FirstType;
9734       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9735                       SecondField->getSourceRange(), FieldTypeName)
9736           << SecondII << SecondType;
9737 
9738       return true;
9739     }
9740 
9741     const bool IsFirstBitField = FirstField->isBitField();
9742     const bool IsSecondBitField = SecondField->isBitField();
9743     if (IsFirstBitField != IsSecondBitField) {
9744       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9745                        FirstField->getSourceRange(), FieldSingleBitField)
9746           << FirstII << IsFirstBitField;
9747       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9748                       SecondField->getSourceRange(), FieldSingleBitField)
9749           << SecondII << IsSecondBitField;
9750       return true;
9751     }
9752 
9753     if (IsFirstBitField && IsSecondBitField) {
9754       unsigned FirstBitWidthHash =
9755           ComputeODRHash(FirstField->getBitWidth());
9756       unsigned SecondBitWidthHash =
9757           ComputeODRHash(SecondField->getBitWidth());
9758       if (FirstBitWidthHash != SecondBitWidthHash) {
9759         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9760                          FirstField->getSourceRange(),
9761                          FieldDifferentWidthBitField)
9762             << FirstII << FirstField->getBitWidth()->getSourceRange();
9763         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9764                         SecondField->getSourceRange(),
9765                         FieldDifferentWidthBitField)
9766             << SecondII << SecondField->getBitWidth()->getSourceRange();
9767         return true;
9768       }
9769     }
9770 
9771     if (!PP.getLangOpts().CPlusPlus)
9772       return false;
9773 
9774     const bool IsFirstMutable = FirstField->isMutable();
9775     const bool IsSecondMutable = SecondField->isMutable();
9776     if (IsFirstMutable != IsSecondMutable) {
9777       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9778                        FirstField->getSourceRange(), FieldSingleMutable)
9779           << FirstII << IsFirstMutable;
9780       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9781                       SecondField->getSourceRange(), FieldSingleMutable)
9782           << SecondII << IsSecondMutable;
9783       return true;
9784     }
9785 
9786     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9787     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9788     if ((!FirstInitializer && SecondInitializer) ||
9789         (FirstInitializer && !SecondInitializer)) {
9790       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9791                        FirstField->getSourceRange(), FieldSingleInitializer)
9792           << FirstII << (FirstInitializer != nullptr);
9793       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9794                       SecondField->getSourceRange(), FieldSingleInitializer)
9795           << SecondII << (SecondInitializer != nullptr);
9796       return true;
9797     }
9798 
9799     if (FirstInitializer && SecondInitializer) {
9800       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9801       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9802       if (FirstInitHash != SecondInitHash) {
9803         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9804                          FirstField->getSourceRange(),
9805                          FieldDifferentInitializers)
9806             << FirstII << FirstInitializer->getSourceRange();
9807         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9808                         SecondField->getSourceRange(),
9809                         FieldDifferentInitializers)
9810             << SecondII << SecondInitializer->getSourceRange();
9811         return true;
9812       }
9813     }
9814 
9815     return false;
9816   };
9817 
9818   auto ODRDiagTypeDefOrAlias =
9819       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9820           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9821           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9822           bool IsTypeAlias) {
9823         auto FirstName = FirstTD->getDeclName();
9824         auto SecondName = SecondTD->getDeclName();
9825         if (FirstName != SecondName) {
9826           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9827                            FirstTD->getSourceRange(), TypedefName)
9828               << IsTypeAlias << FirstName;
9829           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9830                           SecondTD->getSourceRange(), TypedefName)
9831               << IsTypeAlias << SecondName;
9832           return true;
9833         }
9834 
9835         QualType FirstType = FirstTD->getUnderlyingType();
9836         QualType SecondType = SecondTD->getUnderlyingType();
9837         if (ComputeQualTypeODRHash(FirstType) !=
9838             ComputeQualTypeODRHash(SecondType)) {
9839           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9840                            FirstTD->getSourceRange(), TypedefType)
9841               << IsTypeAlias << FirstName << FirstType;
9842           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9843                           SecondTD->getSourceRange(), TypedefType)
9844               << IsTypeAlias << SecondName << SecondType;
9845           return true;
9846         }
9847 
9848         return false;
9849   };
9850 
9851   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9852                      &ComputeQualTypeODRHash, &ComputeODRHash,
9853                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9854                            StringRef SecondModule, VarDecl *FirstVD,
9855                            VarDecl *SecondVD) {
9856     auto FirstName = FirstVD->getDeclName();
9857     auto SecondName = SecondVD->getDeclName();
9858     if (FirstName != SecondName) {
9859       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9860                        FirstVD->getSourceRange(), VarName)
9861           << FirstName;
9862       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9863                       SecondVD->getSourceRange(), VarName)
9864           << SecondName;
9865       return true;
9866     }
9867 
9868     QualType FirstType = FirstVD->getType();
9869     QualType SecondType = SecondVD->getType();
9870     if (ComputeQualTypeODRHash(FirstType) !=
9871         ComputeQualTypeODRHash(SecondType)) {
9872       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9873                        FirstVD->getSourceRange(), VarType)
9874           << FirstName << FirstType;
9875       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9876                       SecondVD->getSourceRange(), VarType)
9877           << SecondName << SecondType;
9878       return true;
9879     }
9880 
9881     if (!PP.getLangOpts().CPlusPlus)
9882       return false;
9883 
9884     const Expr *FirstInit = FirstVD->getInit();
9885     const Expr *SecondInit = SecondVD->getInit();
9886     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9887       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9888                        FirstVD->getSourceRange(), VarSingleInitializer)
9889           << FirstName << (FirstInit == nullptr)
9890           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9891       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9892                       SecondVD->getSourceRange(), VarSingleInitializer)
9893           << SecondName << (SecondInit == nullptr)
9894           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9895       return true;
9896     }
9897 
9898     if (FirstInit && SecondInit &&
9899         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9900       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9901                        FirstVD->getSourceRange(), VarDifferentInitializer)
9902           << FirstName << FirstInit->getSourceRange();
9903       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9904                       SecondVD->getSourceRange(), VarDifferentInitializer)
9905           << SecondName << SecondInit->getSourceRange();
9906       return true;
9907     }
9908 
9909     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9910     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9911     if (FirstIsConstexpr != SecondIsConstexpr) {
9912       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9913                        FirstVD->getSourceRange(), VarConstexpr)
9914           << FirstName << FirstIsConstexpr;
9915       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9916                       SecondVD->getSourceRange(), VarConstexpr)
9917           << SecondName << SecondIsConstexpr;
9918       return true;
9919     }
9920     return false;
9921   };
9922 
9923   auto DifferenceSelector = [](Decl *D) {
9924     assert(D && "valid Decl required");
9925     switch (D->getKind()) {
9926     default:
9927       return Other;
9928     case Decl::AccessSpec:
9929       switch (D->getAccess()) {
9930       case AS_public:
9931         return PublicSpecifer;
9932       case AS_private:
9933         return PrivateSpecifer;
9934       case AS_protected:
9935         return ProtectedSpecifer;
9936       case AS_none:
9937         break;
9938       }
9939       llvm_unreachable("Invalid access specifier");
9940     case Decl::StaticAssert:
9941       return StaticAssert;
9942     case Decl::Field:
9943       return Field;
9944     case Decl::CXXMethod:
9945     case Decl::CXXConstructor:
9946     case Decl::CXXDestructor:
9947       return CXXMethod;
9948     case Decl::TypeAlias:
9949       return TypeAlias;
9950     case Decl::Typedef:
9951       return TypeDef;
9952     case Decl::Var:
9953       return Var;
9954     case Decl::Friend:
9955       return Friend;
9956     case Decl::FunctionTemplate:
9957       return FunctionTemplate;
9958     }
9959   };
9960 
9961   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9962   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9963                                                  RecordDecl *Record,
9964                                                  const DeclContext *DC) {
9965     for (auto *D : Record->decls()) {
9966       if (!ODRHash::isDeclToBeProcessed(D, DC))
9967         continue;
9968       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9969     }
9970   };
9971 
9972   struct DiffResult {
9973     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9974     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9975   };
9976 
9977   // If there is a diagnoseable difference, FirstDiffType and
9978   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9979   // filled in if not EndOfClass.
9980   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9981                                              DeclHashes &SecondHashes) {
9982     DiffResult DR;
9983     auto FirstIt = FirstHashes.begin();
9984     auto SecondIt = SecondHashes.begin();
9985     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9986       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9987           FirstIt->second == SecondIt->second) {
9988         ++FirstIt;
9989         ++SecondIt;
9990         continue;
9991       }
9992 
9993       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9994       DR.SecondDecl =
9995           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9996 
9997       DR.FirstDiffType =
9998           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9999       DR.SecondDiffType =
10000           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
10001       return DR;
10002     }
10003     return DR;
10004   };
10005 
10006   // Use this to diagnose that an unexpected Decl was encountered
10007   // or no difference was detected. This causes a generic error
10008   // message to be emitted.
10009   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
10010                                       StringRef FirstModule,
10011                                       NamedDecl *SecondRecord,
10012                                       StringRef SecondModule) {
10013     Diag(FirstRecord->getLocation(),
10014          diag::err_module_odr_violation_different_definitions)
10015         << FirstRecord << FirstModule.empty() << FirstModule;
10016 
10017     if (DR.FirstDecl) {
10018       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
10019           << FirstRecord << DR.FirstDecl->getSourceRange();
10020     }
10021 
10022     Diag(SecondRecord->getLocation(),
10023          diag::note_module_odr_violation_different_definitions)
10024         << SecondModule;
10025 
10026     if (DR.SecondDecl) {
10027       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
10028           << DR.SecondDecl->getSourceRange();
10029     }
10030   };
10031 
10032   auto DiagnoseODRMismatch =
10033       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
10034              NamedDecl *SecondRecord, StringRef SecondModule) {
10035         SourceLocation FirstLoc;
10036         SourceRange FirstRange;
10037         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
10038         if (DR.FirstDiffType == EndOfClass && FirstTag) {
10039           FirstLoc = FirstTag->getBraceRange().getEnd();
10040         } else {
10041           FirstLoc = DR.FirstDecl->getLocation();
10042           FirstRange = DR.FirstDecl->getSourceRange();
10043         }
10044         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
10045             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
10046             << DR.FirstDiffType;
10047 
10048         SourceLocation SecondLoc;
10049         SourceRange SecondRange;
10050         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
10051         if (DR.SecondDiffType == EndOfClass && SecondTag) {
10052           SecondLoc = SecondTag->getBraceRange().getEnd();
10053         } else {
10054           SecondLoc = DR.SecondDecl->getLocation();
10055           SecondRange = DR.SecondDecl->getSourceRange();
10056         }
10057         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10058             << SecondModule << SecondRange << DR.SecondDiffType;
10059       };
10060 
10061   // Issue any pending ODR-failure diagnostics.
10062   for (auto &Merge : OdrMergeFailures) {
10063     // If we've already pointed out a specific problem with this class, don't
10064     // bother issuing a general "something's different" diagnostic.
10065     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10066       continue;
10067 
10068     bool Diagnosed = false;
10069     CXXRecordDecl *FirstRecord = Merge.first;
10070     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10071     for (auto &RecordPair : Merge.second) {
10072       CXXRecordDecl *SecondRecord = RecordPair.first;
10073       // Multiple different declarations got merged together; tell the user
10074       // where they came from.
10075       if (FirstRecord == SecondRecord)
10076         continue;
10077 
10078       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10079 
10080       auto *FirstDD = FirstRecord->DefinitionData;
10081       auto *SecondDD = RecordPair.second;
10082 
10083       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10084 
10085       // Diagnostics from DefinitionData are emitted here.
10086       if (FirstDD != SecondDD) {
10087         enum ODRDefinitionDataDifference {
10088           NumBases,
10089           NumVBases,
10090           BaseType,
10091           BaseVirtual,
10092           BaseAccess,
10093         };
10094         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10095                                  this](SourceLocation Loc, SourceRange Range,
10096                                        ODRDefinitionDataDifference DiffType) {
10097           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10098                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10099                  << DiffType;
10100         };
10101         auto ODRDiagBaseNote = [&SecondModule,
10102                                 this](SourceLocation Loc, SourceRange Range,
10103                                       ODRDefinitionDataDifference DiffType) {
10104           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10105                  << SecondModule << Range << DiffType;
10106         };
10107 
10108         unsigned FirstNumBases = FirstDD->NumBases;
10109         unsigned FirstNumVBases = FirstDD->NumVBases;
10110         unsigned SecondNumBases = SecondDD->NumBases;
10111         unsigned SecondNumVBases = SecondDD->NumVBases;
10112 
10113         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10114           unsigned NumBases = DD->NumBases;
10115           if (NumBases == 0) return SourceRange();
10116           auto bases = DD->bases();
10117           return SourceRange(bases[0].getBeginLoc(),
10118                              bases[NumBases - 1].getEndLoc());
10119         };
10120 
10121         if (FirstNumBases != SecondNumBases) {
10122           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10123                            NumBases)
10124               << FirstNumBases;
10125           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10126                           NumBases)
10127               << SecondNumBases;
10128           Diagnosed = true;
10129           break;
10130         }
10131 
10132         if (FirstNumVBases != SecondNumVBases) {
10133           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10134                            NumVBases)
10135               << FirstNumVBases;
10136           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10137                           NumVBases)
10138               << SecondNumVBases;
10139           Diagnosed = true;
10140           break;
10141         }
10142 
10143         auto FirstBases = FirstDD->bases();
10144         auto SecondBases = SecondDD->bases();
10145         unsigned i = 0;
10146         for (i = 0; i < FirstNumBases; ++i) {
10147           auto FirstBase = FirstBases[i];
10148           auto SecondBase = SecondBases[i];
10149           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10150               ComputeQualTypeODRHash(SecondBase.getType())) {
10151             ODRDiagBaseError(FirstRecord->getLocation(),
10152                              FirstBase.getSourceRange(), BaseType)
10153                 << (i + 1) << FirstBase.getType();
10154             ODRDiagBaseNote(SecondRecord->getLocation(),
10155                             SecondBase.getSourceRange(), BaseType)
10156                 << (i + 1) << SecondBase.getType();
10157             break;
10158           }
10159 
10160           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10161             ODRDiagBaseError(FirstRecord->getLocation(),
10162                              FirstBase.getSourceRange(), BaseVirtual)
10163                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10164             ODRDiagBaseNote(SecondRecord->getLocation(),
10165                             SecondBase.getSourceRange(), BaseVirtual)
10166                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10167             break;
10168           }
10169 
10170           if (FirstBase.getAccessSpecifierAsWritten() !=
10171               SecondBase.getAccessSpecifierAsWritten()) {
10172             ODRDiagBaseError(FirstRecord->getLocation(),
10173                              FirstBase.getSourceRange(), BaseAccess)
10174                 << (i + 1) << FirstBase.getType()
10175                 << (int)FirstBase.getAccessSpecifierAsWritten();
10176             ODRDiagBaseNote(SecondRecord->getLocation(),
10177                             SecondBase.getSourceRange(), BaseAccess)
10178                 << (i + 1) << SecondBase.getType()
10179                 << (int)SecondBase.getAccessSpecifierAsWritten();
10180             break;
10181           }
10182         }
10183 
10184         if (i != FirstNumBases) {
10185           Diagnosed = true;
10186           break;
10187         }
10188       }
10189 
10190       const ClassTemplateDecl *FirstTemplate =
10191           FirstRecord->getDescribedClassTemplate();
10192       const ClassTemplateDecl *SecondTemplate =
10193           SecondRecord->getDescribedClassTemplate();
10194 
10195       assert(!FirstTemplate == !SecondTemplate &&
10196              "Both pointers should be null or non-null");
10197 
10198       if (FirstTemplate && SecondTemplate) {
10199         DeclHashes FirstTemplateHashes;
10200         DeclHashes SecondTemplateHashes;
10201 
10202         auto PopulateTemplateParameterHashs =
10203             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10204                                      const ClassTemplateDecl *TD) {
10205               for (auto *D : TD->getTemplateParameters()->asArray()) {
10206                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10207               }
10208             };
10209 
10210         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10211         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10212 
10213         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10214                "Number of template parameters should be equal.");
10215 
10216         auto FirstIt = FirstTemplateHashes.begin();
10217         auto FirstEnd = FirstTemplateHashes.end();
10218         auto SecondIt = SecondTemplateHashes.begin();
10219         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10220           if (FirstIt->second == SecondIt->second)
10221             continue;
10222 
10223           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10224           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10225 
10226           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10227                  "Parameter Decl's should be the same kind.");
10228 
10229           enum ODRTemplateDifference {
10230             ParamEmptyName,
10231             ParamName,
10232             ParamSingleDefaultArgument,
10233             ParamDifferentDefaultArgument,
10234           };
10235 
10236           auto hasDefaultArg = [](const NamedDecl *D) {
10237             if (auto *TTP = dyn_cast<TemplateTypeParmDecl>(D))
10238               return TTP->hasDefaultArgument() &&
10239                       !TTP->defaultArgumentWasInherited();
10240             if (auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D))
10241               return NTTP->hasDefaultArgument() &&
10242                       !NTTP->defaultArgumentWasInherited();
10243             auto *TTP = cast<TemplateTemplateParmDecl>(D);
10244             return TTP->hasDefaultArgument() &&
10245                     !TTP->defaultArgumentWasInherited();
10246           };
10247           bool hasFirstArg = hasDefaultArg(FirstDecl);
10248           bool hasSecondArg = hasDefaultArg(SecondDecl);
10249 
10250           ODRTemplateDifference ErrDiffType;
10251           ODRTemplateDifference NoteDiffType;
10252 
10253           DeclarationName FirstName = FirstDecl->getDeclName();
10254           DeclarationName SecondName = SecondDecl->getDeclName();
10255 
10256           if (FirstName != SecondName) {
10257             bool FirstNameEmpty =
10258                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10259             bool SecondNameEmpty = SecondName.isIdentifier() &&
10260                                     !SecondName.getAsIdentifierInfo();
10261             ErrDiffType = FirstNameEmpty ? ParamEmptyName : ParamName;
10262             NoteDiffType = SecondNameEmpty ? ParamEmptyName : ParamName;
10263           } else if (hasFirstArg == hasSecondArg)
10264             ErrDiffType = NoteDiffType = ParamDifferentDefaultArgument;
10265           else
10266             ErrDiffType = NoteDiffType = ParamSingleDefaultArgument;
10267 
10268           Diag(FirstDecl->getLocation(),
10269                 diag::err_module_odr_violation_template_parameter)
10270               << FirstRecord << FirstModule.empty() << FirstModule
10271               << FirstDecl->getSourceRange() << ErrDiffType << hasFirstArg
10272               << FirstName;
10273           Diag(SecondDecl->getLocation(),
10274                 diag::note_module_odr_violation_template_parameter)
10275               << SecondModule << SecondDecl->getSourceRange() << NoteDiffType
10276               << hasSecondArg << SecondName;
10277           break;
10278         }
10279 
10280         if (FirstIt != FirstEnd) {
10281           Diagnosed = true;
10282           break;
10283         }
10284       }
10285 
10286       DeclHashes FirstHashes;
10287       DeclHashes SecondHashes;
10288       const DeclContext *DC = FirstRecord;
10289       PopulateHashes(FirstHashes, FirstRecord, DC);
10290       PopulateHashes(SecondHashes, SecondRecord, DC);
10291 
10292       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10293       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10294       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10295       Decl *FirstDecl = DR.FirstDecl;
10296       Decl *SecondDecl = DR.SecondDecl;
10297 
10298       if (FirstDiffType == Other || SecondDiffType == Other) {
10299         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10300                               SecondModule);
10301         Diagnosed = true;
10302         break;
10303       }
10304 
10305       if (FirstDiffType != SecondDiffType) {
10306         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10307                             SecondModule);
10308         Diagnosed = true;
10309         break;
10310       }
10311 
10312       assert(FirstDiffType == SecondDiffType);
10313 
10314       switch (FirstDiffType) {
10315       case Other:
10316       case EndOfClass:
10317       case PublicSpecifer:
10318       case PrivateSpecifer:
10319       case ProtectedSpecifer:
10320         llvm_unreachable("Invalid diff type");
10321 
10322       case StaticAssert: {
10323         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10324         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10325 
10326         Expr *FirstExpr = FirstSA->getAssertExpr();
10327         Expr *SecondExpr = SecondSA->getAssertExpr();
10328         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10329         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10330         if (FirstODRHash != SecondODRHash) {
10331           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10332                            FirstExpr->getSourceRange(), StaticAssertCondition);
10333           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10334                           SecondExpr->getSourceRange(), StaticAssertCondition);
10335           Diagnosed = true;
10336           break;
10337         }
10338 
10339         StringLiteral *FirstStr = FirstSA->getMessage();
10340         StringLiteral *SecondStr = SecondSA->getMessage();
10341         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10342         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10343           SourceLocation FirstLoc, SecondLoc;
10344           SourceRange FirstRange, SecondRange;
10345           if (FirstStr) {
10346             FirstLoc = FirstStr->getBeginLoc();
10347             FirstRange = FirstStr->getSourceRange();
10348           } else {
10349             FirstLoc = FirstSA->getBeginLoc();
10350             FirstRange = FirstSA->getSourceRange();
10351           }
10352           if (SecondStr) {
10353             SecondLoc = SecondStr->getBeginLoc();
10354             SecondRange = SecondStr->getSourceRange();
10355           } else {
10356             SecondLoc = SecondSA->getBeginLoc();
10357             SecondRange = SecondSA->getSourceRange();
10358           }
10359           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10360                            StaticAssertOnlyMessage)
10361               << (FirstStr == nullptr);
10362           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10363                           StaticAssertOnlyMessage)
10364               << (SecondStr == nullptr);
10365           Diagnosed = true;
10366           break;
10367         }
10368 
10369         if (FirstStr && SecondStr &&
10370             FirstStr->getString() != SecondStr->getString()) {
10371           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10372                            FirstStr->getSourceRange(), StaticAssertMessage);
10373           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10374                           SecondStr->getSourceRange(), StaticAssertMessage);
10375           Diagnosed = true;
10376           break;
10377         }
10378         break;
10379       }
10380       case Field: {
10381         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10382                                  cast<FieldDecl>(FirstDecl),
10383                                  cast<FieldDecl>(SecondDecl));
10384         break;
10385       }
10386       case CXXMethod: {
10387         enum {
10388           DiagMethod,
10389           DiagConstructor,
10390           DiagDestructor,
10391         } FirstMethodType,
10392             SecondMethodType;
10393         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10394           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10395           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10396           return DiagMethod;
10397         };
10398         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10399         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10400         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10401         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10402         auto FirstName = FirstMethod->getDeclName();
10403         auto SecondName = SecondMethod->getDeclName();
10404         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10405           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10406                            FirstMethod->getSourceRange(), MethodName)
10407               << FirstMethodType << FirstName;
10408           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10409                           SecondMethod->getSourceRange(), MethodName)
10410               << SecondMethodType << SecondName;
10411 
10412           Diagnosed = true;
10413           break;
10414         }
10415 
10416         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10417         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10418         if (FirstDeleted != SecondDeleted) {
10419           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10420                            FirstMethod->getSourceRange(), MethodDeleted)
10421               << FirstMethodType << FirstName << FirstDeleted;
10422 
10423           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10424                           SecondMethod->getSourceRange(), MethodDeleted)
10425               << SecondMethodType << SecondName << SecondDeleted;
10426           Diagnosed = true;
10427           break;
10428         }
10429 
10430         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10431         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10432         if (FirstDefaulted != SecondDefaulted) {
10433           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10434                            FirstMethod->getSourceRange(), MethodDefaulted)
10435               << FirstMethodType << FirstName << FirstDefaulted;
10436 
10437           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10438                           SecondMethod->getSourceRange(), MethodDefaulted)
10439               << SecondMethodType << SecondName << SecondDefaulted;
10440           Diagnosed = true;
10441           break;
10442         }
10443 
10444         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10445         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10446         const bool FirstPure = FirstMethod->isPure();
10447         const bool SecondPure = SecondMethod->isPure();
10448         if ((FirstVirtual || SecondVirtual) &&
10449             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10450           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10451                            FirstMethod->getSourceRange(), MethodVirtual)
10452               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10453           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10454                           SecondMethod->getSourceRange(), MethodVirtual)
10455               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10456           Diagnosed = true;
10457           break;
10458         }
10459 
10460         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10461         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10462         // class needs to be checked instead.
10463         const auto FirstStorage = FirstMethod->getStorageClass();
10464         const auto SecondStorage = SecondMethod->getStorageClass();
10465         const bool FirstStatic = FirstStorage == SC_Static;
10466         const bool SecondStatic = SecondStorage == SC_Static;
10467         if (FirstStatic != SecondStatic) {
10468           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10469                            FirstMethod->getSourceRange(), MethodStatic)
10470               << FirstMethodType << FirstName << FirstStatic;
10471           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10472                           SecondMethod->getSourceRange(), MethodStatic)
10473               << SecondMethodType << SecondName << SecondStatic;
10474           Diagnosed = true;
10475           break;
10476         }
10477 
10478         const bool FirstVolatile = FirstMethod->isVolatile();
10479         const bool SecondVolatile = SecondMethod->isVolatile();
10480         if (FirstVolatile != SecondVolatile) {
10481           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10482                            FirstMethod->getSourceRange(), MethodVolatile)
10483               << FirstMethodType << FirstName << FirstVolatile;
10484           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10485                           SecondMethod->getSourceRange(), MethodVolatile)
10486               << SecondMethodType << SecondName << SecondVolatile;
10487           Diagnosed = true;
10488           break;
10489         }
10490 
10491         const bool FirstConst = FirstMethod->isConst();
10492         const bool SecondConst = SecondMethod->isConst();
10493         if (FirstConst != SecondConst) {
10494           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10495                            FirstMethod->getSourceRange(), MethodConst)
10496               << FirstMethodType << FirstName << FirstConst;
10497           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10498                           SecondMethod->getSourceRange(), MethodConst)
10499               << SecondMethodType << SecondName << SecondConst;
10500           Diagnosed = true;
10501           break;
10502         }
10503 
10504         const bool FirstInline = FirstMethod->isInlineSpecified();
10505         const bool SecondInline = SecondMethod->isInlineSpecified();
10506         if (FirstInline != SecondInline) {
10507           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10508                            FirstMethod->getSourceRange(), MethodInline)
10509               << FirstMethodType << FirstName << FirstInline;
10510           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10511                           SecondMethod->getSourceRange(), MethodInline)
10512               << SecondMethodType << SecondName << SecondInline;
10513           Diagnosed = true;
10514           break;
10515         }
10516 
10517         const unsigned FirstNumParameters = FirstMethod->param_size();
10518         const unsigned SecondNumParameters = SecondMethod->param_size();
10519         if (FirstNumParameters != SecondNumParameters) {
10520           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10521                            FirstMethod->getSourceRange(),
10522                            MethodNumberParameters)
10523               << FirstMethodType << FirstName << FirstNumParameters;
10524           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10525                           SecondMethod->getSourceRange(),
10526                           MethodNumberParameters)
10527               << SecondMethodType << SecondName << SecondNumParameters;
10528           Diagnosed = true;
10529           break;
10530         }
10531 
10532         // Need this status boolean to know when break out of the switch.
10533         bool ParameterMismatch = false;
10534         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10535           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10536           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10537 
10538           QualType FirstParamType = FirstParam->getType();
10539           QualType SecondParamType = SecondParam->getType();
10540           if (FirstParamType != SecondParamType &&
10541               ComputeQualTypeODRHash(FirstParamType) !=
10542                   ComputeQualTypeODRHash(SecondParamType)) {
10543             if (const DecayedType *ParamDecayedType =
10544                     FirstParamType->getAs<DecayedType>()) {
10545               ODRDiagDeclError(
10546                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10547                   FirstMethod->getSourceRange(), MethodParameterType)
10548                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10549                   << true << ParamDecayedType->getOriginalType();
10550             } else {
10551               ODRDiagDeclError(
10552                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10553                   FirstMethod->getSourceRange(), MethodParameterType)
10554                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10555                   << false;
10556             }
10557 
10558             if (const DecayedType *ParamDecayedType =
10559                     SecondParamType->getAs<DecayedType>()) {
10560               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10561                               SecondMethod->getSourceRange(),
10562                               MethodParameterType)
10563                   << SecondMethodType << SecondName << (I + 1)
10564                   << SecondParamType << true
10565                   << ParamDecayedType->getOriginalType();
10566             } else {
10567               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10568                               SecondMethod->getSourceRange(),
10569                               MethodParameterType)
10570                   << SecondMethodType << SecondName << (I + 1)
10571                   << SecondParamType << false;
10572             }
10573             ParameterMismatch = true;
10574             break;
10575           }
10576 
10577           DeclarationName FirstParamName = FirstParam->getDeclName();
10578           DeclarationName SecondParamName = SecondParam->getDeclName();
10579           if (FirstParamName != SecondParamName) {
10580             ODRDiagDeclError(FirstRecord, FirstModule,
10581                              FirstMethod->getLocation(),
10582                              FirstMethod->getSourceRange(), MethodParameterName)
10583                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10584             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10585                             SecondMethod->getSourceRange(), MethodParameterName)
10586                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10587             ParameterMismatch = true;
10588             break;
10589           }
10590 
10591           const Expr *FirstInit = FirstParam->getInit();
10592           const Expr *SecondInit = SecondParam->getInit();
10593           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10594             ODRDiagDeclError(FirstRecord, FirstModule,
10595                              FirstMethod->getLocation(),
10596                              FirstMethod->getSourceRange(),
10597                              MethodParameterSingleDefaultArgument)
10598                 << FirstMethodType << FirstName << (I + 1)
10599                 << (FirstInit == nullptr)
10600                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10601             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10602                             SecondMethod->getSourceRange(),
10603                             MethodParameterSingleDefaultArgument)
10604                 << SecondMethodType << SecondName << (I + 1)
10605                 << (SecondInit == nullptr)
10606                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10607             ParameterMismatch = true;
10608             break;
10609           }
10610 
10611           if (FirstInit && SecondInit &&
10612               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10613             ODRDiagDeclError(FirstRecord, FirstModule,
10614                              FirstMethod->getLocation(),
10615                              FirstMethod->getSourceRange(),
10616                              MethodParameterDifferentDefaultArgument)
10617                 << FirstMethodType << FirstName << (I + 1)
10618                 << FirstInit->getSourceRange();
10619             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10620                             SecondMethod->getSourceRange(),
10621                             MethodParameterDifferentDefaultArgument)
10622                 << SecondMethodType << SecondName << (I + 1)
10623                 << SecondInit->getSourceRange();
10624             ParameterMismatch = true;
10625             break;
10626 
10627           }
10628         }
10629 
10630         if (ParameterMismatch) {
10631           Diagnosed = true;
10632           break;
10633         }
10634 
10635         const auto *FirstTemplateArgs =
10636             FirstMethod->getTemplateSpecializationArgs();
10637         const auto *SecondTemplateArgs =
10638             SecondMethod->getTemplateSpecializationArgs();
10639 
10640         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10641             (!FirstTemplateArgs && SecondTemplateArgs)) {
10642           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10643                            FirstMethod->getSourceRange(),
10644                            MethodNoTemplateArguments)
10645               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10646           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10647                           SecondMethod->getSourceRange(),
10648                           MethodNoTemplateArguments)
10649               << SecondMethodType << SecondName
10650               << (SecondTemplateArgs != nullptr);
10651 
10652           Diagnosed = true;
10653           break;
10654         }
10655 
10656         if (FirstTemplateArgs && SecondTemplateArgs) {
10657           // Remove pack expansions from argument list.
10658           auto ExpandTemplateArgumentList =
10659               [](const TemplateArgumentList *TAL) {
10660                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10661                 for (const TemplateArgument &TA : TAL->asArray()) {
10662                   if (TA.getKind() != TemplateArgument::Pack) {
10663                     ExpandedList.push_back(&TA);
10664                     continue;
10665                   }
10666                   llvm::append_range(ExpandedList, llvm::make_pointer_range(
10667                                                        TA.getPackAsArray()));
10668                 }
10669                 return ExpandedList;
10670               };
10671           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10672               ExpandTemplateArgumentList(FirstTemplateArgs);
10673           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10674               ExpandTemplateArgumentList(SecondTemplateArgs);
10675 
10676           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10677             ODRDiagDeclError(FirstRecord, FirstModule,
10678                              FirstMethod->getLocation(),
10679                              FirstMethod->getSourceRange(),
10680                              MethodDifferentNumberTemplateArguments)
10681                 << FirstMethodType << FirstName
10682                 << (unsigned)FirstExpandedList.size();
10683             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10684                             SecondMethod->getSourceRange(),
10685                             MethodDifferentNumberTemplateArguments)
10686                 << SecondMethodType << SecondName
10687                 << (unsigned)SecondExpandedList.size();
10688 
10689             Diagnosed = true;
10690             break;
10691           }
10692 
10693           bool TemplateArgumentMismatch = false;
10694           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10695             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10696                                    &SecondTA = *SecondExpandedList[i];
10697             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10698                 ComputeTemplateArgumentODRHash(SecondTA)) {
10699               continue;
10700             }
10701 
10702             ODRDiagDeclError(
10703                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10704                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10705                 << FirstMethodType << FirstName << FirstTA << i + 1;
10706             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10707                             SecondMethod->getSourceRange(),
10708                             MethodDifferentTemplateArgument)
10709                 << SecondMethodType << SecondName << SecondTA << i + 1;
10710 
10711             TemplateArgumentMismatch = true;
10712             break;
10713           }
10714 
10715           if (TemplateArgumentMismatch) {
10716             Diagnosed = true;
10717             break;
10718           }
10719         }
10720 
10721         // Compute the hash of the method as if it has no body.
10722         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10723           Hash.clear();
10724           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10725           return Hash.CalculateHash();
10726         };
10727 
10728         // Compare the hash generated to the hash stored.  A difference means
10729         // that a body was present in the original source.  Due to merging,
10730         // the stardard way of detecting a body will not work.
10731         const bool HasFirstBody =
10732             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10733         const bool HasSecondBody =
10734             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10735 
10736         if (HasFirstBody != HasSecondBody) {
10737           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10738                            FirstMethod->getSourceRange(), MethodSingleBody)
10739               << FirstMethodType << FirstName << HasFirstBody;
10740           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10741                           SecondMethod->getSourceRange(), MethodSingleBody)
10742               << SecondMethodType << SecondName << HasSecondBody;
10743           Diagnosed = true;
10744           break;
10745         }
10746 
10747         if (HasFirstBody && HasSecondBody) {
10748           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10749                            FirstMethod->getSourceRange(), MethodDifferentBody)
10750               << FirstMethodType << FirstName;
10751           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10752                           SecondMethod->getSourceRange(), MethodDifferentBody)
10753               << SecondMethodType << SecondName;
10754           Diagnosed = true;
10755           break;
10756         }
10757 
10758         break;
10759       }
10760       case TypeAlias:
10761       case TypeDef: {
10762         Diagnosed = ODRDiagTypeDefOrAlias(
10763             FirstRecord, FirstModule, SecondModule,
10764             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10765             FirstDiffType == TypeAlias);
10766         break;
10767       }
10768       case Var: {
10769         Diagnosed =
10770             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10771                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10772         break;
10773       }
10774       case Friend: {
10775         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10776         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10777 
10778         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10779         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10780 
10781         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10782         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10783 
10784         if (FirstND && SecondND) {
10785           ODRDiagDeclError(FirstRecord, FirstModule,
10786                            FirstFriend->getFriendLoc(),
10787                            FirstFriend->getSourceRange(), FriendFunction)
10788               << FirstND;
10789           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10790                           SecondFriend->getSourceRange(), FriendFunction)
10791               << SecondND;
10792 
10793           Diagnosed = true;
10794           break;
10795         }
10796 
10797         if (FirstTSI && SecondTSI) {
10798           QualType FirstFriendType = FirstTSI->getType();
10799           QualType SecondFriendType = SecondTSI->getType();
10800           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10801                  ComputeQualTypeODRHash(SecondFriendType));
10802           ODRDiagDeclError(FirstRecord, FirstModule,
10803                            FirstFriend->getFriendLoc(),
10804                            FirstFriend->getSourceRange(), FriendType)
10805               << FirstFriendType;
10806           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10807                           SecondFriend->getSourceRange(), FriendType)
10808               << SecondFriendType;
10809           Diagnosed = true;
10810           break;
10811         }
10812 
10813         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10814                          FirstFriend->getSourceRange(), FriendTypeFunction)
10815             << (FirstTSI == nullptr);
10816         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10817                         SecondFriend->getSourceRange(), FriendTypeFunction)
10818             << (SecondTSI == nullptr);
10819 
10820         Diagnosed = true;
10821         break;
10822       }
10823       case FunctionTemplate: {
10824         FunctionTemplateDecl *FirstTemplate =
10825             cast<FunctionTemplateDecl>(FirstDecl);
10826         FunctionTemplateDecl *SecondTemplate =
10827             cast<FunctionTemplateDecl>(SecondDecl);
10828 
10829         TemplateParameterList *FirstTPL =
10830             FirstTemplate->getTemplateParameters();
10831         TemplateParameterList *SecondTPL =
10832             SecondTemplate->getTemplateParameters();
10833 
10834         if (FirstTPL->size() != SecondTPL->size()) {
10835           ODRDiagDeclError(FirstRecord, FirstModule,
10836                            FirstTemplate->getLocation(),
10837                            FirstTemplate->getSourceRange(),
10838                            FunctionTemplateDifferentNumberParameters)
10839               << FirstTemplate << FirstTPL->size();
10840           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10841                           SecondTemplate->getSourceRange(),
10842                           FunctionTemplateDifferentNumberParameters)
10843               << SecondTemplate << SecondTPL->size();
10844 
10845           Diagnosed = true;
10846           break;
10847         }
10848 
10849         bool ParameterMismatch = false;
10850         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10851           NamedDecl *FirstParam = FirstTPL->getParam(i);
10852           NamedDecl *SecondParam = SecondTPL->getParam(i);
10853 
10854           if (FirstParam->getKind() != SecondParam->getKind()) {
10855             enum {
10856               TemplateTypeParameter,
10857               NonTypeTemplateParameter,
10858               TemplateTemplateParameter,
10859             };
10860             auto GetParamType = [](NamedDecl *D) {
10861               switch (D->getKind()) {
10862                 default:
10863                   llvm_unreachable("Unexpected template parameter type");
10864                 case Decl::TemplateTypeParm:
10865                   return TemplateTypeParameter;
10866                 case Decl::NonTypeTemplateParm:
10867                   return NonTypeTemplateParameter;
10868                 case Decl::TemplateTemplateParm:
10869                   return TemplateTemplateParameter;
10870               }
10871             };
10872 
10873             ODRDiagDeclError(FirstRecord, FirstModule,
10874                              FirstTemplate->getLocation(),
10875                              FirstTemplate->getSourceRange(),
10876                              FunctionTemplateParameterDifferentKind)
10877                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10878             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10879                             SecondTemplate->getSourceRange(),
10880                             FunctionTemplateParameterDifferentKind)
10881                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10882 
10883             ParameterMismatch = true;
10884             break;
10885           }
10886 
10887           if (FirstParam->getName() != SecondParam->getName()) {
10888             ODRDiagDeclError(
10889                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10890                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10891                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10892                 << FirstParam;
10893             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10894                             SecondTemplate->getSourceRange(),
10895                             FunctionTemplateParameterName)
10896                 << SecondTemplate << (i + 1)
10897                 << (bool)SecondParam->getIdentifier() << SecondParam;
10898             ParameterMismatch = true;
10899             break;
10900           }
10901 
10902           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10903               isa<TemplateTypeParmDecl>(SecondParam)) {
10904             TemplateTypeParmDecl *FirstTTPD =
10905                 cast<TemplateTypeParmDecl>(FirstParam);
10906             TemplateTypeParmDecl *SecondTTPD =
10907                 cast<TemplateTypeParmDecl>(SecondParam);
10908             bool HasFirstDefaultArgument =
10909                 FirstTTPD->hasDefaultArgument() &&
10910                 !FirstTTPD->defaultArgumentWasInherited();
10911             bool HasSecondDefaultArgument =
10912                 SecondTTPD->hasDefaultArgument() &&
10913                 !SecondTTPD->defaultArgumentWasInherited();
10914             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10915               ODRDiagDeclError(FirstRecord, FirstModule,
10916                                FirstTemplate->getLocation(),
10917                                FirstTemplate->getSourceRange(),
10918                                FunctionTemplateParameterSingleDefaultArgument)
10919                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10920               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10921                               SecondTemplate->getSourceRange(),
10922                               FunctionTemplateParameterSingleDefaultArgument)
10923                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10924               ParameterMismatch = true;
10925               break;
10926             }
10927 
10928             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10929               QualType FirstType = FirstTTPD->getDefaultArgument();
10930               QualType SecondType = SecondTTPD->getDefaultArgument();
10931               if (ComputeQualTypeODRHash(FirstType) !=
10932                   ComputeQualTypeODRHash(SecondType)) {
10933                 ODRDiagDeclError(
10934                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10935                     FirstTemplate->getSourceRange(),
10936                     FunctionTemplateParameterDifferentDefaultArgument)
10937                     << FirstTemplate << (i + 1) << FirstType;
10938                 ODRDiagDeclNote(
10939                     SecondModule, SecondTemplate->getLocation(),
10940                     SecondTemplate->getSourceRange(),
10941                     FunctionTemplateParameterDifferentDefaultArgument)
10942                     << SecondTemplate << (i + 1) << SecondType;
10943                 ParameterMismatch = true;
10944                 break;
10945               }
10946             }
10947 
10948             if (FirstTTPD->isParameterPack() !=
10949                 SecondTTPD->isParameterPack()) {
10950               ODRDiagDeclError(FirstRecord, FirstModule,
10951                                FirstTemplate->getLocation(),
10952                                FirstTemplate->getSourceRange(),
10953                                FunctionTemplatePackParameter)
10954                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10955               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10956                               SecondTemplate->getSourceRange(),
10957                               FunctionTemplatePackParameter)
10958                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10959               ParameterMismatch = true;
10960               break;
10961             }
10962           }
10963 
10964           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10965               isa<TemplateTemplateParmDecl>(SecondParam)) {
10966             TemplateTemplateParmDecl *FirstTTPD =
10967                 cast<TemplateTemplateParmDecl>(FirstParam);
10968             TemplateTemplateParmDecl *SecondTTPD =
10969                 cast<TemplateTemplateParmDecl>(SecondParam);
10970 
10971             TemplateParameterList *FirstTPL =
10972                 FirstTTPD->getTemplateParameters();
10973             TemplateParameterList *SecondTPL =
10974                 SecondTTPD->getTemplateParameters();
10975 
10976             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
10977                 ComputeTemplateParameterListODRHash(SecondTPL)) {
10978               ODRDiagDeclError(FirstRecord, FirstModule,
10979                                FirstTemplate->getLocation(),
10980                                FirstTemplate->getSourceRange(),
10981                                FunctionTemplateParameterDifferentType)
10982                   << FirstTemplate << (i + 1);
10983               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10984                               SecondTemplate->getSourceRange(),
10985                               FunctionTemplateParameterDifferentType)
10986                   << SecondTemplate << (i + 1);
10987               ParameterMismatch = true;
10988               break;
10989             }
10990 
10991             bool HasFirstDefaultArgument =
10992                 FirstTTPD->hasDefaultArgument() &&
10993                 !FirstTTPD->defaultArgumentWasInherited();
10994             bool HasSecondDefaultArgument =
10995                 SecondTTPD->hasDefaultArgument() &&
10996                 !SecondTTPD->defaultArgumentWasInherited();
10997             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10998               ODRDiagDeclError(FirstRecord, FirstModule,
10999                                FirstTemplate->getLocation(),
11000                                FirstTemplate->getSourceRange(),
11001                                FunctionTemplateParameterSingleDefaultArgument)
11002                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11003               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11004                               SecondTemplate->getSourceRange(),
11005                               FunctionTemplateParameterSingleDefaultArgument)
11006                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11007               ParameterMismatch = true;
11008               break;
11009             }
11010 
11011             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11012               TemplateArgument FirstTA =
11013                   FirstTTPD->getDefaultArgument().getArgument();
11014               TemplateArgument SecondTA =
11015                   SecondTTPD->getDefaultArgument().getArgument();
11016               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11017                   ComputeTemplateArgumentODRHash(SecondTA)) {
11018                 ODRDiagDeclError(
11019                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11020                     FirstTemplate->getSourceRange(),
11021                     FunctionTemplateParameterDifferentDefaultArgument)
11022                     << FirstTemplate << (i + 1) << FirstTA;
11023                 ODRDiagDeclNote(
11024                     SecondModule, SecondTemplate->getLocation(),
11025                     SecondTemplate->getSourceRange(),
11026                     FunctionTemplateParameterDifferentDefaultArgument)
11027                     << SecondTemplate << (i + 1) << SecondTA;
11028                 ParameterMismatch = true;
11029                 break;
11030               }
11031             }
11032 
11033             if (FirstTTPD->isParameterPack() !=
11034                 SecondTTPD->isParameterPack()) {
11035               ODRDiagDeclError(FirstRecord, FirstModule,
11036                                FirstTemplate->getLocation(),
11037                                FirstTemplate->getSourceRange(),
11038                                FunctionTemplatePackParameter)
11039                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11040               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11041                               SecondTemplate->getSourceRange(),
11042                               FunctionTemplatePackParameter)
11043                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11044               ParameterMismatch = true;
11045               break;
11046             }
11047           }
11048 
11049           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11050               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11051             NonTypeTemplateParmDecl *FirstNTTPD =
11052                 cast<NonTypeTemplateParmDecl>(FirstParam);
11053             NonTypeTemplateParmDecl *SecondNTTPD =
11054                 cast<NonTypeTemplateParmDecl>(SecondParam);
11055 
11056             QualType FirstType = FirstNTTPD->getType();
11057             QualType SecondType = SecondNTTPD->getType();
11058             if (ComputeQualTypeODRHash(FirstType) !=
11059                 ComputeQualTypeODRHash(SecondType)) {
11060               ODRDiagDeclError(FirstRecord, FirstModule,
11061                                FirstTemplate->getLocation(),
11062                                FirstTemplate->getSourceRange(),
11063                                FunctionTemplateParameterDifferentType)
11064                   << FirstTemplate << (i + 1);
11065               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11066                               SecondTemplate->getSourceRange(),
11067                               FunctionTemplateParameterDifferentType)
11068                   << SecondTemplate << (i + 1);
11069               ParameterMismatch = true;
11070               break;
11071             }
11072 
11073             bool HasFirstDefaultArgument =
11074                 FirstNTTPD->hasDefaultArgument() &&
11075                 !FirstNTTPD->defaultArgumentWasInherited();
11076             bool HasSecondDefaultArgument =
11077                 SecondNTTPD->hasDefaultArgument() &&
11078                 !SecondNTTPD->defaultArgumentWasInherited();
11079             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11080               ODRDiagDeclError(FirstRecord, FirstModule,
11081                                FirstTemplate->getLocation(),
11082                                FirstTemplate->getSourceRange(),
11083                                FunctionTemplateParameterSingleDefaultArgument)
11084                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11085               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11086                               SecondTemplate->getSourceRange(),
11087                               FunctionTemplateParameterSingleDefaultArgument)
11088                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11089               ParameterMismatch = true;
11090               break;
11091             }
11092 
11093             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11094               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11095               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11096               if (ComputeODRHash(FirstDefaultArgument) !=
11097                   ComputeODRHash(SecondDefaultArgument)) {
11098                 ODRDiagDeclError(
11099                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11100                     FirstTemplate->getSourceRange(),
11101                     FunctionTemplateParameterDifferentDefaultArgument)
11102                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11103                 ODRDiagDeclNote(
11104                     SecondModule, SecondTemplate->getLocation(),
11105                     SecondTemplate->getSourceRange(),
11106                     FunctionTemplateParameterDifferentDefaultArgument)
11107                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11108                 ParameterMismatch = true;
11109                 break;
11110               }
11111             }
11112 
11113             if (FirstNTTPD->isParameterPack() !=
11114                 SecondNTTPD->isParameterPack()) {
11115               ODRDiagDeclError(FirstRecord, FirstModule,
11116                                FirstTemplate->getLocation(),
11117                                FirstTemplate->getSourceRange(),
11118                                FunctionTemplatePackParameter)
11119                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11120               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11121                               SecondTemplate->getSourceRange(),
11122                               FunctionTemplatePackParameter)
11123                   << SecondTemplate << (i + 1)
11124                   << SecondNTTPD->isParameterPack();
11125               ParameterMismatch = true;
11126               break;
11127             }
11128           }
11129         }
11130 
11131         if (ParameterMismatch) {
11132           Diagnosed = true;
11133           break;
11134         }
11135 
11136         break;
11137       }
11138       }
11139 
11140       if (Diagnosed)
11141         continue;
11142 
11143       Diag(FirstDecl->getLocation(),
11144            diag::err_module_odr_violation_mismatch_decl_unknown)
11145           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11146           << FirstDecl->getSourceRange();
11147       Diag(SecondDecl->getLocation(),
11148            diag::note_module_odr_violation_mismatch_decl_unknown)
11149           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11150       Diagnosed = true;
11151     }
11152 
11153     if (!Diagnosed) {
11154       // All definitions are updates to the same declaration. This happens if a
11155       // module instantiates the declaration of a class template specialization
11156       // and two or more other modules instantiate its definition.
11157       //
11158       // FIXME: Indicate which modules had instantiations of this definition.
11159       // FIXME: How can this even happen?
11160       Diag(Merge.first->getLocation(),
11161            diag::err_module_odr_violation_different_instantiations)
11162         << Merge.first;
11163     }
11164   }
11165 
11166   // Issue ODR failures diagnostics for functions.
11167   for (auto &Merge : FunctionOdrMergeFailures) {
11168     enum ODRFunctionDifference {
11169       ReturnType,
11170       ParameterName,
11171       ParameterType,
11172       ParameterSingleDefaultArgument,
11173       ParameterDifferentDefaultArgument,
11174       FunctionBody,
11175     };
11176 
11177     FunctionDecl *FirstFunction = Merge.first;
11178     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11179 
11180     bool Diagnosed = false;
11181     for (auto &SecondFunction : Merge.second) {
11182 
11183       if (FirstFunction == SecondFunction)
11184         continue;
11185 
11186       std::string SecondModule =
11187           getOwningModuleNameForDiagnostic(SecondFunction);
11188 
11189       auto ODRDiagError = [FirstFunction, &FirstModule,
11190                            this](SourceLocation Loc, SourceRange Range,
11191                                  ODRFunctionDifference DiffType) {
11192         return Diag(Loc, diag::err_module_odr_violation_function)
11193                << FirstFunction << FirstModule.empty() << FirstModule << Range
11194                << DiffType;
11195       };
11196       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11197                                                SourceRange Range,
11198                                                ODRFunctionDifference DiffType) {
11199         return Diag(Loc, diag::note_module_odr_violation_function)
11200                << SecondModule << Range << DiffType;
11201       };
11202 
11203       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11204           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11205         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11206                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11207             << FirstFunction->getReturnType();
11208         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11209                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11210             << SecondFunction->getReturnType();
11211         Diagnosed = true;
11212         break;
11213       }
11214 
11215       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11216              "Merged functions with different number of parameters");
11217 
11218       auto ParamSize = FirstFunction->param_size();
11219       bool ParameterMismatch = false;
11220       for (unsigned I = 0; I < ParamSize; ++I) {
11221         auto *FirstParam = FirstFunction->getParamDecl(I);
11222         auto *SecondParam = SecondFunction->getParamDecl(I);
11223 
11224         assert(getContext().hasSameType(FirstParam->getType(),
11225                                       SecondParam->getType()) &&
11226                "Merged function has different parameter types.");
11227 
11228         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11229           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11230                        ParameterName)
11231               << I + 1 << FirstParam->getDeclName();
11232           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11233                       ParameterName)
11234               << I + 1 << SecondParam->getDeclName();
11235           ParameterMismatch = true;
11236           break;
11237         };
11238 
11239         QualType FirstParamType = FirstParam->getType();
11240         QualType SecondParamType = SecondParam->getType();
11241         if (FirstParamType != SecondParamType &&
11242             ComputeQualTypeODRHash(FirstParamType) !=
11243                 ComputeQualTypeODRHash(SecondParamType)) {
11244           if (const DecayedType *ParamDecayedType =
11245                   FirstParamType->getAs<DecayedType>()) {
11246             ODRDiagError(FirstParam->getLocation(),
11247                          FirstParam->getSourceRange(), ParameterType)
11248                 << (I + 1) << FirstParamType << true
11249                 << ParamDecayedType->getOriginalType();
11250           } else {
11251             ODRDiagError(FirstParam->getLocation(),
11252                          FirstParam->getSourceRange(), ParameterType)
11253                 << (I + 1) << FirstParamType << false;
11254           }
11255 
11256           if (const DecayedType *ParamDecayedType =
11257                   SecondParamType->getAs<DecayedType>()) {
11258             ODRDiagNote(SecondParam->getLocation(),
11259                         SecondParam->getSourceRange(), ParameterType)
11260                 << (I + 1) << SecondParamType << true
11261                 << ParamDecayedType->getOriginalType();
11262           } else {
11263             ODRDiagNote(SecondParam->getLocation(),
11264                         SecondParam->getSourceRange(), ParameterType)
11265                 << (I + 1) << SecondParamType << false;
11266           }
11267           ParameterMismatch = true;
11268           break;
11269         }
11270 
11271         const Expr *FirstInit = FirstParam->getInit();
11272         const Expr *SecondInit = SecondParam->getInit();
11273         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11274           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11275                        ParameterSingleDefaultArgument)
11276               << (I + 1) << (FirstInit == nullptr)
11277               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11278           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11279                       ParameterSingleDefaultArgument)
11280               << (I + 1) << (SecondInit == nullptr)
11281               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11282           ParameterMismatch = true;
11283           break;
11284         }
11285 
11286         if (FirstInit && SecondInit &&
11287             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11288           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11289                        ParameterDifferentDefaultArgument)
11290               << (I + 1) << FirstInit->getSourceRange();
11291           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11292                       ParameterDifferentDefaultArgument)
11293               << (I + 1) << SecondInit->getSourceRange();
11294           ParameterMismatch = true;
11295           break;
11296         }
11297 
11298         assert(ComputeSubDeclODRHash(FirstParam) ==
11299                    ComputeSubDeclODRHash(SecondParam) &&
11300                "Undiagnosed parameter difference.");
11301       }
11302 
11303       if (ParameterMismatch) {
11304         Diagnosed = true;
11305         break;
11306       }
11307 
11308       // If no error has been generated before now, assume the problem is in
11309       // the body and generate a message.
11310       ODRDiagError(FirstFunction->getLocation(),
11311                    FirstFunction->getSourceRange(), FunctionBody);
11312       ODRDiagNote(SecondFunction->getLocation(),
11313                   SecondFunction->getSourceRange(), FunctionBody);
11314       Diagnosed = true;
11315       break;
11316     }
11317     (void)Diagnosed;
11318     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11319   }
11320 
11321   // Issue ODR failures diagnostics for enums.
11322   for (auto &Merge : EnumOdrMergeFailures) {
11323     enum ODREnumDifference {
11324       SingleScopedEnum,
11325       EnumTagKeywordMismatch,
11326       SingleSpecifiedType,
11327       DifferentSpecifiedTypes,
11328       DifferentNumberEnumConstants,
11329       EnumConstantName,
11330       EnumConstantSingleInitilizer,
11331       EnumConstantDifferentInitilizer,
11332     };
11333 
11334     // If we've already pointed out a specific problem with this enum, don't
11335     // bother issuing a general "something's different" diagnostic.
11336     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11337       continue;
11338 
11339     EnumDecl *FirstEnum = Merge.first;
11340     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11341 
11342     using DeclHashes =
11343         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11344     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11345                               DeclHashes &Hashes, EnumDecl *Enum) {
11346       for (auto *D : Enum->decls()) {
11347         // Due to decl merging, the first EnumDecl is the parent of
11348         // Decls in both records.
11349         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11350           continue;
11351         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11352         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11353                             ComputeSubDeclODRHash(D));
11354       }
11355     };
11356     DeclHashes FirstHashes;
11357     PopulateHashes(FirstHashes, FirstEnum);
11358     bool Diagnosed = false;
11359     for (auto &SecondEnum : Merge.second) {
11360 
11361       if (FirstEnum == SecondEnum)
11362         continue;
11363 
11364       std::string SecondModule =
11365           getOwningModuleNameForDiagnostic(SecondEnum);
11366 
11367       auto ODRDiagError = [FirstEnum, &FirstModule,
11368                            this](SourceLocation Loc, SourceRange Range,
11369                                  ODREnumDifference DiffType) {
11370         return Diag(Loc, diag::err_module_odr_violation_enum)
11371                << FirstEnum << FirstModule.empty() << FirstModule << Range
11372                << DiffType;
11373       };
11374       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11375                                                SourceRange Range,
11376                                                ODREnumDifference DiffType) {
11377         return Diag(Loc, diag::note_module_odr_violation_enum)
11378                << SecondModule << Range << DiffType;
11379       };
11380 
11381       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11382         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11383                      SingleScopedEnum)
11384             << FirstEnum->isScoped();
11385         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11386                     SingleScopedEnum)
11387             << SecondEnum->isScoped();
11388         Diagnosed = true;
11389         continue;
11390       }
11391 
11392       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11393         if (FirstEnum->isScopedUsingClassTag() !=
11394             SecondEnum->isScopedUsingClassTag()) {
11395           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11396                        EnumTagKeywordMismatch)
11397               << FirstEnum->isScopedUsingClassTag();
11398           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11399                       EnumTagKeywordMismatch)
11400               << SecondEnum->isScopedUsingClassTag();
11401           Diagnosed = true;
11402           continue;
11403         }
11404       }
11405 
11406       QualType FirstUnderlyingType =
11407           FirstEnum->getIntegerTypeSourceInfo()
11408               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11409               : QualType();
11410       QualType SecondUnderlyingType =
11411           SecondEnum->getIntegerTypeSourceInfo()
11412               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11413               : QualType();
11414       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11415           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11416                        SingleSpecifiedType)
11417               << !FirstUnderlyingType.isNull();
11418           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11419                       SingleSpecifiedType)
11420               << !SecondUnderlyingType.isNull();
11421           Diagnosed = true;
11422           continue;
11423       }
11424 
11425       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11426         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11427             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11428           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11429                        DifferentSpecifiedTypes)
11430               << FirstUnderlyingType;
11431           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11432                       DifferentSpecifiedTypes)
11433               << SecondUnderlyingType;
11434           Diagnosed = true;
11435           continue;
11436         }
11437       }
11438 
11439       DeclHashes SecondHashes;
11440       PopulateHashes(SecondHashes, SecondEnum);
11441 
11442       if (FirstHashes.size() != SecondHashes.size()) {
11443         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11444                      DifferentNumberEnumConstants)
11445             << (int)FirstHashes.size();
11446         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11447                     DifferentNumberEnumConstants)
11448             << (int)SecondHashes.size();
11449         Diagnosed = true;
11450         continue;
11451       }
11452 
11453       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11454         if (FirstHashes[I].second == SecondHashes[I].second)
11455           continue;
11456         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11457         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11458 
11459         if (FirstEnumConstant->getDeclName() !=
11460             SecondEnumConstant->getDeclName()) {
11461 
11462           ODRDiagError(FirstEnumConstant->getLocation(),
11463                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11464               << I + 1 << FirstEnumConstant;
11465           ODRDiagNote(SecondEnumConstant->getLocation(),
11466                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11467               << I + 1 << SecondEnumConstant;
11468           Diagnosed = true;
11469           break;
11470         }
11471 
11472         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11473         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11474         if (!FirstInit && !SecondInit)
11475           continue;
11476 
11477         if (!FirstInit || !SecondInit) {
11478           ODRDiagError(FirstEnumConstant->getLocation(),
11479                        FirstEnumConstant->getSourceRange(),
11480                        EnumConstantSingleInitilizer)
11481               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11482           ODRDiagNote(SecondEnumConstant->getLocation(),
11483                       SecondEnumConstant->getSourceRange(),
11484                       EnumConstantSingleInitilizer)
11485               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11486           Diagnosed = true;
11487           break;
11488         }
11489 
11490         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11491           ODRDiagError(FirstEnumConstant->getLocation(),
11492                        FirstEnumConstant->getSourceRange(),
11493                        EnumConstantDifferentInitilizer)
11494               << I + 1 << FirstEnumConstant;
11495           ODRDiagNote(SecondEnumConstant->getLocation(),
11496                       SecondEnumConstant->getSourceRange(),
11497                       EnumConstantDifferentInitilizer)
11498               << I + 1 << SecondEnumConstant;
11499           Diagnosed = true;
11500           break;
11501         }
11502       }
11503     }
11504 
11505     (void)Diagnosed;
11506     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11507   }
11508 }
11509 
11510 void ASTReader::StartedDeserializing() {
11511   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11512     ReadTimer->startTimer();
11513 }
11514 
11515 void ASTReader::FinishedDeserializing() {
11516   assert(NumCurrentElementsDeserializing &&
11517          "FinishedDeserializing not paired with StartedDeserializing");
11518   if (NumCurrentElementsDeserializing == 1) {
11519     // We decrease NumCurrentElementsDeserializing only after pending actions
11520     // are finished, to avoid recursively re-calling finishPendingActions().
11521     finishPendingActions();
11522   }
11523   --NumCurrentElementsDeserializing;
11524 
11525   if (NumCurrentElementsDeserializing == 0) {
11526     // Propagate exception specification and deduced type updates along
11527     // redeclaration chains.
11528     //
11529     // We do this now rather than in finishPendingActions because we want to
11530     // be able to walk the complete redeclaration chains of the updated decls.
11531     while (!PendingExceptionSpecUpdates.empty() ||
11532            !PendingDeducedTypeUpdates.empty()) {
11533       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11534       PendingExceptionSpecUpdates.clear();
11535       for (auto Update : ESUpdates) {
11536         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11537         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11538         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11539         if (auto *Listener = getContext().getASTMutationListener())
11540           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11541         for (auto *Redecl : Update.second->redecls())
11542           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11543       }
11544 
11545       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11546       PendingDeducedTypeUpdates.clear();
11547       for (auto Update : DTUpdates) {
11548         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11549         // FIXME: If the return type is already deduced, check that it matches.
11550         getContext().adjustDeducedFunctionResultType(Update.first,
11551                                                      Update.second);
11552       }
11553     }
11554 
11555     if (ReadTimer)
11556       ReadTimer->stopTimer();
11557 
11558     diagnoseOdrViolations();
11559 
11560     // We are not in recursive loading, so it's safe to pass the "interesting"
11561     // decls to the consumer.
11562     if (Consumer)
11563       PassInterestingDeclsToConsumer();
11564   }
11565 }
11566 
11567 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11568   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11569     // Remove any fake results before adding any real ones.
11570     auto It = PendingFakeLookupResults.find(II);
11571     if (It != PendingFakeLookupResults.end()) {
11572       for (auto *ND : It->second)
11573         SemaObj->IdResolver.RemoveDecl(ND);
11574       // FIXME: this works around module+PCH performance issue.
11575       // Rather than erase the result from the map, which is O(n), just clear
11576       // the vector of NamedDecls.
11577       It->second.clear();
11578     }
11579   }
11580 
11581   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11582     SemaObj->TUScope->AddDecl(D);
11583   } else if (SemaObj->TUScope) {
11584     // Adding the decl to IdResolver may have failed because it was already in
11585     // (even though it was not added in scope). If it is already in, make sure
11586     // it gets in the scope as well.
11587     if (std::find(SemaObj->IdResolver.begin(Name),
11588                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11589       SemaObj->TUScope->AddDecl(D);
11590   }
11591 }
11592 
11593 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11594                      ASTContext *Context,
11595                      const PCHContainerReader &PCHContainerRdr,
11596                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11597                      StringRef isysroot,
11598                      DisableValidationForModuleKind DisableValidationKind,
11599                      bool AllowASTWithCompilerErrors,
11600                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11601                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11602                      std::unique_ptr<llvm::Timer> ReadTimer)
11603     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11604                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11605                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11606       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11607       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11608       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11609                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11610       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11611       DisableValidationKind(DisableValidationKind),
11612       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11613       AllowConfigurationMismatch(AllowConfigurationMismatch),
11614       ValidateSystemInputs(ValidateSystemInputs),
11615       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11616       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11617   SourceMgr.setExternalSLocEntrySource(this);
11618 
11619   for (const auto &Ext : Extensions) {
11620     auto BlockName = Ext->getExtensionMetadata().BlockName;
11621     auto Known = ModuleFileExtensions.find(BlockName);
11622     if (Known != ModuleFileExtensions.end()) {
11623       Diags.Report(diag::warn_duplicate_module_file_extension)
11624         << BlockName;
11625       continue;
11626     }
11627 
11628     ModuleFileExtensions.insert({BlockName, Ext});
11629   }
11630 }
11631 
11632 ASTReader::~ASTReader() {
11633   if (OwnsDeserializationListener)
11634     delete DeserializationListener;
11635 }
11636 
11637 IdentifierResolver &ASTReader::getIdResolver() {
11638   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11639 }
11640 
11641 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11642                                                unsigned AbbrevID) {
11643   Idx = 0;
11644   Record.clear();
11645   return Cursor.readRecord(AbbrevID, Record);
11646 }
11647 //===----------------------------------------------------------------------===//
11648 //// OMPClauseReader implementation
11649 ////===----------------------------------------------------------------------===//
11650 
11651 // This has to be in namespace clang because it's friended by all
11652 // of the OMP clauses.
11653 namespace clang {
11654 
11655 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11656   ASTRecordReader &Record;
11657   ASTContext &Context;
11658 
11659 public:
11660   OMPClauseReader(ASTRecordReader &Record)
11661       : Record(Record), Context(Record.getContext()) {}
11662 #define GEN_CLANG_CLAUSE_CLASS
11663 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11664 #include "llvm/Frontend/OpenMP/OMP.inc"
11665   OMPClause *readClause();
11666   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11667   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11668 };
11669 
11670 } // end namespace clang
11671 
11672 OMPClause *ASTRecordReader::readOMPClause() {
11673   return OMPClauseReader(*this).readClause();
11674 }
11675 
11676 OMPClause *OMPClauseReader::readClause() {
11677   OMPClause *C = nullptr;
11678   switch (llvm::omp::Clause(Record.readInt())) {
11679   case llvm::omp::OMPC_if:
11680     C = new (Context) OMPIfClause();
11681     break;
11682   case llvm::omp::OMPC_final:
11683     C = new (Context) OMPFinalClause();
11684     break;
11685   case llvm::omp::OMPC_num_threads:
11686     C = new (Context) OMPNumThreadsClause();
11687     break;
11688   case llvm::omp::OMPC_safelen:
11689     C = new (Context) OMPSafelenClause();
11690     break;
11691   case llvm::omp::OMPC_simdlen:
11692     C = new (Context) OMPSimdlenClause();
11693     break;
11694   case llvm::omp::OMPC_sizes: {
11695     unsigned NumSizes = Record.readInt();
11696     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11697     break;
11698   }
11699   case llvm::omp::OMPC_full:
11700     C = OMPFullClause::CreateEmpty(Context);
11701     break;
11702   case llvm::omp::OMPC_partial:
11703     C = OMPPartialClause::CreateEmpty(Context);
11704     break;
11705   case llvm::omp::OMPC_allocator:
11706     C = new (Context) OMPAllocatorClause();
11707     break;
11708   case llvm::omp::OMPC_collapse:
11709     C = new (Context) OMPCollapseClause();
11710     break;
11711   case llvm::omp::OMPC_default:
11712     C = new (Context) OMPDefaultClause();
11713     break;
11714   case llvm::omp::OMPC_proc_bind:
11715     C = new (Context) OMPProcBindClause();
11716     break;
11717   case llvm::omp::OMPC_schedule:
11718     C = new (Context) OMPScheduleClause();
11719     break;
11720   case llvm::omp::OMPC_ordered:
11721     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11722     break;
11723   case llvm::omp::OMPC_nowait:
11724     C = new (Context) OMPNowaitClause();
11725     break;
11726   case llvm::omp::OMPC_untied:
11727     C = new (Context) OMPUntiedClause();
11728     break;
11729   case llvm::omp::OMPC_mergeable:
11730     C = new (Context) OMPMergeableClause();
11731     break;
11732   case llvm::omp::OMPC_read:
11733     C = new (Context) OMPReadClause();
11734     break;
11735   case llvm::omp::OMPC_write:
11736     C = new (Context) OMPWriteClause();
11737     break;
11738   case llvm::omp::OMPC_update:
11739     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11740     break;
11741   case llvm::omp::OMPC_capture:
11742     C = new (Context) OMPCaptureClause();
11743     break;
11744   case llvm::omp::OMPC_compare:
11745     C = new (Context) OMPCompareClause();
11746     break;
11747   case llvm::omp::OMPC_seq_cst:
11748     C = new (Context) OMPSeqCstClause();
11749     break;
11750   case llvm::omp::OMPC_acq_rel:
11751     C = new (Context) OMPAcqRelClause();
11752     break;
11753   case llvm::omp::OMPC_acquire:
11754     C = new (Context) OMPAcquireClause();
11755     break;
11756   case llvm::omp::OMPC_release:
11757     C = new (Context) OMPReleaseClause();
11758     break;
11759   case llvm::omp::OMPC_relaxed:
11760     C = new (Context) OMPRelaxedClause();
11761     break;
11762   case llvm::omp::OMPC_threads:
11763     C = new (Context) OMPThreadsClause();
11764     break;
11765   case llvm::omp::OMPC_simd:
11766     C = new (Context) OMPSIMDClause();
11767     break;
11768   case llvm::omp::OMPC_nogroup:
11769     C = new (Context) OMPNogroupClause();
11770     break;
11771   case llvm::omp::OMPC_unified_address:
11772     C = new (Context) OMPUnifiedAddressClause();
11773     break;
11774   case llvm::omp::OMPC_unified_shared_memory:
11775     C = new (Context) OMPUnifiedSharedMemoryClause();
11776     break;
11777   case llvm::omp::OMPC_reverse_offload:
11778     C = new (Context) OMPReverseOffloadClause();
11779     break;
11780   case llvm::omp::OMPC_dynamic_allocators:
11781     C = new (Context) OMPDynamicAllocatorsClause();
11782     break;
11783   case llvm::omp::OMPC_atomic_default_mem_order:
11784     C = new (Context) OMPAtomicDefaultMemOrderClause();
11785     break;
11786  case llvm::omp::OMPC_private:
11787     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11788     break;
11789   case llvm::omp::OMPC_firstprivate:
11790     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11791     break;
11792   case llvm::omp::OMPC_lastprivate:
11793     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11794     break;
11795   case llvm::omp::OMPC_shared:
11796     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11797     break;
11798   case llvm::omp::OMPC_reduction: {
11799     unsigned N = Record.readInt();
11800     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11801     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11802     break;
11803   }
11804   case llvm::omp::OMPC_task_reduction:
11805     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11806     break;
11807   case llvm::omp::OMPC_in_reduction:
11808     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11809     break;
11810   case llvm::omp::OMPC_linear:
11811     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11812     break;
11813   case llvm::omp::OMPC_aligned:
11814     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11815     break;
11816   case llvm::omp::OMPC_copyin:
11817     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11818     break;
11819   case llvm::omp::OMPC_copyprivate:
11820     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11821     break;
11822   case llvm::omp::OMPC_flush:
11823     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11824     break;
11825   case llvm::omp::OMPC_depobj:
11826     C = OMPDepobjClause::CreateEmpty(Context);
11827     break;
11828   case llvm::omp::OMPC_depend: {
11829     unsigned NumVars = Record.readInt();
11830     unsigned NumLoops = Record.readInt();
11831     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11832     break;
11833   }
11834   case llvm::omp::OMPC_device:
11835     C = new (Context) OMPDeviceClause();
11836     break;
11837   case llvm::omp::OMPC_map: {
11838     OMPMappableExprListSizeTy Sizes;
11839     Sizes.NumVars = Record.readInt();
11840     Sizes.NumUniqueDeclarations = Record.readInt();
11841     Sizes.NumComponentLists = Record.readInt();
11842     Sizes.NumComponents = Record.readInt();
11843     C = OMPMapClause::CreateEmpty(Context, Sizes);
11844     break;
11845   }
11846   case llvm::omp::OMPC_num_teams:
11847     C = new (Context) OMPNumTeamsClause();
11848     break;
11849   case llvm::omp::OMPC_thread_limit:
11850     C = new (Context) OMPThreadLimitClause();
11851     break;
11852   case llvm::omp::OMPC_priority:
11853     C = new (Context) OMPPriorityClause();
11854     break;
11855   case llvm::omp::OMPC_grainsize:
11856     C = new (Context) OMPGrainsizeClause();
11857     break;
11858   case llvm::omp::OMPC_num_tasks:
11859     C = new (Context) OMPNumTasksClause();
11860     break;
11861   case llvm::omp::OMPC_hint:
11862     C = new (Context) OMPHintClause();
11863     break;
11864   case llvm::omp::OMPC_dist_schedule:
11865     C = new (Context) OMPDistScheduleClause();
11866     break;
11867   case llvm::omp::OMPC_defaultmap:
11868     C = new (Context) OMPDefaultmapClause();
11869     break;
11870   case llvm::omp::OMPC_to: {
11871     OMPMappableExprListSizeTy Sizes;
11872     Sizes.NumVars = Record.readInt();
11873     Sizes.NumUniqueDeclarations = Record.readInt();
11874     Sizes.NumComponentLists = Record.readInt();
11875     Sizes.NumComponents = Record.readInt();
11876     C = OMPToClause::CreateEmpty(Context, Sizes);
11877     break;
11878   }
11879   case llvm::omp::OMPC_from: {
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 = OMPFromClause::CreateEmpty(Context, Sizes);
11886     break;
11887   }
11888   case llvm::omp::OMPC_use_device_ptr: {
11889     OMPMappableExprListSizeTy Sizes;
11890     Sizes.NumVars = Record.readInt();
11891     Sizes.NumUniqueDeclarations = Record.readInt();
11892     Sizes.NumComponentLists = Record.readInt();
11893     Sizes.NumComponents = Record.readInt();
11894     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11895     break;
11896   }
11897   case llvm::omp::OMPC_use_device_addr: {
11898     OMPMappableExprListSizeTy Sizes;
11899     Sizes.NumVars = Record.readInt();
11900     Sizes.NumUniqueDeclarations = Record.readInt();
11901     Sizes.NumComponentLists = Record.readInt();
11902     Sizes.NumComponents = Record.readInt();
11903     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11904     break;
11905   }
11906   case llvm::omp::OMPC_is_device_ptr: {
11907     OMPMappableExprListSizeTy Sizes;
11908     Sizes.NumVars = Record.readInt();
11909     Sizes.NumUniqueDeclarations = Record.readInt();
11910     Sizes.NumComponentLists = Record.readInt();
11911     Sizes.NumComponents = Record.readInt();
11912     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11913     break;
11914   }
11915   case llvm::omp::OMPC_has_device_addr: {
11916     OMPMappableExprListSizeTy Sizes;
11917     Sizes.NumVars = Record.readInt();
11918     Sizes.NumUniqueDeclarations = Record.readInt();
11919     Sizes.NumComponentLists = Record.readInt();
11920     Sizes.NumComponents = Record.readInt();
11921     C = OMPHasDeviceAddrClause::CreateEmpty(Context, Sizes);
11922     break;
11923   }
11924   case llvm::omp::OMPC_allocate:
11925     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11926     break;
11927   case llvm::omp::OMPC_nontemporal:
11928     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11929     break;
11930   case llvm::omp::OMPC_inclusive:
11931     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11932     break;
11933   case llvm::omp::OMPC_exclusive:
11934     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11935     break;
11936   case llvm::omp::OMPC_order:
11937     C = new (Context) OMPOrderClause();
11938     break;
11939   case llvm::omp::OMPC_init:
11940     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11941     break;
11942   case llvm::omp::OMPC_use:
11943     C = new (Context) OMPUseClause();
11944     break;
11945   case llvm::omp::OMPC_destroy:
11946     C = new (Context) OMPDestroyClause();
11947     break;
11948   case llvm::omp::OMPC_novariants:
11949     C = new (Context) OMPNovariantsClause();
11950     break;
11951   case llvm::omp::OMPC_nocontext:
11952     C = new (Context) OMPNocontextClause();
11953     break;
11954   case llvm::omp::OMPC_detach:
11955     C = new (Context) OMPDetachClause();
11956     break;
11957   case llvm::omp::OMPC_uses_allocators:
11958     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11959     break;
11960   case llvm::omp::OMPC_affinity:
11961     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11962     break;
11963   case llvm::omp::OMPC_filter:
11964     C = new (Context) OMPFilterClause();
11965     break;
11966   case llvm::omp::OMPC_bind:
11967     C = OMPBindClause::CreateEmpty(Context);
11968     break;
11969   case llvm::omp::OMPC_align:
11970     C = new (Context) OMPAlignClause();
11971     break;
11972 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11973   case llvm::omp::Enum:                                                        \
11974     break;
11975 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11976   default:
11977     break;
11978   }
11979   assert(C && "Unknown OMPClause type");
11980 
11981   Visit(C);
11982   C->setLocStart(Record.readSourceLocation());
11983   C->setLocEnd(Record.readSourceLocation());
11984 
11985   return C;
11986 }
11987 
11988 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11989   C->setPreInitStmt(Record.readSubStmt(),
11990                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11991 }
11992 
11993 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11994   VisitOMPClauseWithPreInit(C);
11995   C->setPostUpdateExpr(Record.readSubExpr());
11996 }
11997 
11998 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11999   VisitOMPClauseWithPreInit(C);
12000   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12001   C->setNameModifierLoc(Record.readSourceLocation());
12002   C->setColonLoc(Record.readSourceLocation());
12003   C->setCondition(Record.readSubExpr());
12004   C->setLParenLoc(Record.readSourceLocation());
12005 }
12006 
12007 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12008   VisitOMPClauseWithPreInit(C);
12009   C->setCondition(Record.readSubExpr());
12010   C->setLParenLoc(Record.readSourceLocation());
12011 }
12012 
12013 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12014   VisitOMPClauseWithPreInit(C);
12015   C->setNumThreads(Record.readSubExpr());
12016   C->setLParenLoc(Record.readSourceLocation());
12017 }
12018 
12019 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12020   C->setSafelen(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12025   C->setSimdlen(Record.readSubExpr());
12026   C->setLParenLoc(Record.readSourceLocation());
12027 }
12028 
12029 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12030   for (Expr *&E : C->getSizesRefs())
12031     E = Record.readSubExpr();
12032   C->setLParenLoc(Record.readSourceLocation());
12033 }
12034 
12035 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12036 
12037 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12038   C->setFactor(Record.readSubExpr());
12039   C->setLParenLoc(Record.readSourceLocation());
12040 }
12041 
12042 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12043   C->setAllocator(Record.readExpr());
12044   C->setLParenLoc(Record.readSourceLocation());
12045 }
12046 
12047 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12048   C->setNumForLoops(Record.readSubExpr());
12049   C->setLParenLoc(Record.readSourceLocation());
12050 }
12051 
12052 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12053   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12054   C->setLParenLoc(Record.readSourceLocation());
12055   C->setDefaultKindKwLoc(Record.readSourceLocation());
12056 }
12057 
12058 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12059   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12060   C->setLParenLoc(Record.readSourceLocation());
12061   C->setProcBindKindKwLoc(Record.readSourceLocation());
12062 }
12063 
12064 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12065   VisitOMPClauseWithPreInit(C);
12066   C->setScheduleKind(
12067        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12068   C->setFirstScheduleModifier(
12069       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12070   C->setSecondScheduleModifier(
12071       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12072   C->setChunkSize(Record.readSubExpr());
12073   C->setLParenLoc(Record.readSourceLocation());
12074   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12075   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12076   C->setScheduleKindLoc(Record.readSourceLocation());
12077   C->setCommaLoc(Record.readSourceLocation());
12078 }
12079 
12080 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12081   C->setNumForLoops(Record.readSubExpr());
12082   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12083     C->setLoopNumIterations(I, Record.readSubExpr());
12084   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12085     C->setLoopCounter(I, Record.readSubExpr());
12086   C->setLParenLoc(Record.readSourceLocation());
12087 }
12088 
12089 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12090   C->setEventHandler(Record.readSubExpr());
12091   C->setLParenLoc(Record.readSourceLocation());
12092 }
12093 
12094 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12095 
12096 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12097 
12098 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12099 
12100 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12101 
12102 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12103 
12104 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12105   if (C->isExtended()) {
12106     C->setLParenLoc(Record.readSourceLocation());
12107     C->setArgumentLoc(Record.readSourceLocation());
12108     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12109   }
12110 }
12111 
12112 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12113 
12114 void OMPClauseReader::VisitOMPCompareClause(OMPCompareClause *) {}
12115 
12116 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12119 
12120 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12121 
12122 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12125 
12126 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12127 
12128 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12129 
12130 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12131 
12132 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12133   unsigned NumVars = C->varlist_size();
12134   SmallVector<Expr *, 16> Vars;
12135   Vars.reserve(NumVars);
12136   for (unsigned I = 0; I != NumVars; ++I)
12137     Vars.push_back(Record.readSubExpr());
12138   C->setVarRefs(Vars);
12139   C->setIsTarget(Record.readBool());
12140   C->setIsTargetSync(Record.readBool());
12141   C->setLParenLoc(Record.readSourceLocation());
12142   C->setVarLoc(Record.readSourceLocation());
12143 }
12144 
12145 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12146   C->setInteropVar(Record.readSubExpr());
12147   C->setLParenLoc(Record.readSourceLocation());
12148   C->setVarLoc(Record.readSourceLocation());
12149 }
12150 
12151 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12152   C->setInteropVar(Record.readSubExpr());
12153   C->setLParenLoc(Record.readSourceLocation());
12154   C->setVarLoc(Record.readSourceLocation());
12155 }
12156 
12157 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12158   VisitOMPClauseWithPreInit(C);
12159   C->setCondition(Record.readSubExpr());
12160   C->setLParenLoc(Record.readSourceLocation());
12161 }
12162 
12163 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12164   VisitOMPClauseWithPreInit(C);
12165   C->setCondition(Record.readSubExpr());
12166   C->setLParenLoc(Record.readSourceLocation());
12167 }
12168 
12169 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12170 
12171 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12172     OMPUnifiedSharedMemoryClause *) {}
12173 
12174 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12175 
12176 void
12177 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12178 }
12179 
12180 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12181     OMPAtomicDefaultMemOrderClause *C) {
12182   C->setAtomicDefaultMemOrderKind(
12183       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12184   C->setLParenLoc(Record.readSourceLocation());
12185   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12186 }
12187 
12188 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12189   C->setLParenLoc(Record.readSourceLocation());
12190   unsigned NumVars = C->varlist_size();
12191   SmallVector<Expr *, 16> Vars;
12192   Vars.reserve(NumVars);
12193   for (unsigned i = 0; i != NumVars; ++i)
12194     Vars.push_back(Record.readSubExpr());
12195   C->setVarRefs(Vars);
12196   Vars.clear();
12197   for (unsigned i = 0; i != NumVars; ++i)
12198     Vars.push_back(Record.readSubExpr());
12199   C->setPrivateCopies(Vars);
12200 }
12201 
12202 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12203   VisitOMPClauseWithPreInit(C);
12204   C->setLParenLoc(Record.readSourceLocation());
12205   unsigned NumVars = C->varlist_size();
12206   SmallVector<Expr *, 16> Vars;
12207   Vars.reserve(NumVars);
12208   for (unsigned i = 0; i != NumVars; ++i)
12209     Vars.push_back(Record.readSubExpr());
12210   C->setVarRefs(Vars);
12211   Vars.clear();
12212   for (unsigned i = 0; i != NumVars; ++i)
12213     Vars.push_back(Record.readSubExpr());
12214   C->setPrivateCopies(Vars);
12215   Vars.clear();
12216   for (unsigned i = 0; i != NumVars; ++i)
12217     Vars.push_back(Record.readSubExpr());
12218   C->setInits(Vars);
12219 }
12220 
12221 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12222   VisitOMPClauseWithPostUpdate(C);
12223   C->setLParenLoc(Record.readSourceLocation());
12224   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12225   C->setKindLoc(Record.readSourceLocation());
12226   C->setColonLoc(Record.readSourceLocation());
12227   unsigned NumVars = C->varlist_size();
12228   SmallVector<Expr *, 16> Vars;
12229   Vars.reserve(NumVars);
12230   for (unsigned i = 0; i != NumVars; ++i)
12231     Vars.push_back(Record.readSubExpr());
12232   C->setVarRefs(Vars);
12233   Vars.clear();
12234   for (unsigned i = 0; i != NumVars; ++i)
12235     Vars.push_back(Record.readSubExpr());
12236   C->setPrivateCopies(Vars);
12237   Vars.clear();
12238   for (unsigned i = 0; i != NumVars; ++i)
12239     Vars.push_back(Record.readSubExpr());
12240   C->setSourceExprs(Vars);
12241   Vars.clear();
12242   for (unsigned i = 0; i != NumVars; ++i)
12243     Vars.push_back(Record.readSubExpr());
12244   C->setDestinationExprs(Vars);
12245   Vars.clear();
12246   for (unsigned i = 0; i != NumVars; ++i)
12247     Vars.push_back(Record.readSubExpr());
12248   C->setAssignmentOps(Vars);
12249 }
12250 
12251 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12252   C->setLParenLoc(Record.readSourceLocation());
12253   unsigned NumVars = C->varlist_size();
12254   SmallVector<Expr *, 16> Vars;
12255   Vars.reserve(NumVars);
12256   for (unsigned i = 0; i != NumVars; ++i)
12257     Vars.push_back(Record.readSubExpr());
12258   C->setVarRefs(Vars);
12259 }
12260 
12261 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12262   VisitOMPClauseWithPostUpdate(C);
12263   C->setLParenLoc(Record.readSourceLocation());
12264   C->setModifierLoc(Record.readSourceLocation());
12265   C->setColonLoc(Record.readSourceLocation());
12266   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12267   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12268   C->setQualifierLoc(NNSL);
12269   C->setNameInfo(DNI);
12270 
12271   unsigned NumVars = C->varlist_size();
12272   SmallVector<Expr *, 16> Vars;
12273   Vars.reserve(NumVars);
12274   for (unsigned i = 0; i != NumVars; ++i)
12275     Vars.push_back(Record.readSubExpr());
12276   C->setVarRefs(Vars);
12277   Vars.clear();
12278   for (unsigned i = 0; i != NumVars; ++i)
12279     Vars.push_back(Record.readSubExpr());
12280   C->setPrivates(Vars);
12281   Vars.clear();
12282   for (unsigned i = 0; i != NumVars; ++i)
12283     Vars.push_back(Record.readSubExpr());
12284   C->setLHSExprs(Vars);
12285   Vars.clear();
12286   for (unsigned i = 0; i != NumVars; ++i)
12287     Vars.push_back(Record.readSubExpr());
12288   C->setRHSExprs(Vars);
12289   Vars.clear();
12290   for (unsigned i = 0; i != NumVars; ++i)
12291     Vars.push_back(Record.readSubExpr());
12292   C->setReductionOps(Vars);
12293   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12294     Vars.clear();
12295     for (unsigned i = 0; i != NumVars; ++i)
12296       Vars.push_back(Record.readSubExpr());
12297     C->setInscanCopyOps(Vars);
12298     Vars.clear();
12299     for (unsigned i = 0; i != NumVars; ++i)
12300       Vars.push_back(Record.readSubExpr());
12301     C->setInscanCopyArrayTemps(Vars);
12302     Vars.clear();
12303     for (unsigned i = 0; i != NumVars; ++i)
12304       Vars.push_back(Record.readSubExpr());
12305     C->setInscanCopyArrayElems(Vars);
12306   }
12307 }
12308 
12309 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12310   VisitOMPClauseWithPostUpdate(C);
12311   C->setLParenLoc(Record.readSourceLocation());
12312   C->setColonLoc(Record.readSourceLocation());
12313   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12314   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12315   C->setQualifierLoc(NNSL);
12316   C->setNameInfo(DNI);
12317 
12318   unsigned NumVars = C->varlist_size();
12319   SmallVector<Expr *, 16> Vars;
12320   Vars.reserve(NumVars);
12321   for (unsigned I = 0; I != NumVars; ++I)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setVarRefs(Vars);
12324   Vars.clear();
12325   for (unsigned I = 0; I != NumVars; ++I)
12326     Vars.push_back(Record.readSubExpr());
12327   C->setPrivates(Vars);
12328   Vars.clear();
12329   for (unsigned I = 0; I != NumVars; ++I)
12330     Vars.push_back(Record.readSubExpr());
12331   C->setLHSExprs(Vars);
12332   Vars.clear();
12333   for (unsigned I = 0; I != NumVars; ++I)
12334     Vars.push_back(Record.readSubExpr());
12335   C->setRHSExprs(Vars);
12336   Vars.clear();
12337   for (unsigned I = 0; I != NumVars; ++I)
12338     Vars.push_back(Record.readSubExpr());
12339   C->setReductionOps(Vars);
12340 }
12341 
12342 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *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   Vars.clear();
12374   for (unsigned I = 0; I != NumVars; ++I)
12375     Vars.push_back(Record.readSubExpr());
12376   C->setTaskgroupDescriptors(Vars);
12377 }
12378 
12379 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12380   VisitOMPClauseWithPostUpdate(C);
12381   C->setLParenLoc(Record.readSourceLocation());
12382   C->setColonLoc(Record.readSourceLocation());
12383   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12384   C->setModifierLoc(Record.readSourceLocation());
12385   unsigned NumVars = C->varlist_size();
12386   SmallVector<Expr *, 16> Vars;
12387   Vars.reserve(NumVars);
12388   for (unsigned i = 0; i != NumVars; ++i)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setVarRefs(Vars);
12391   Vars.clear();
12392   for (unsigned i = 0; i != NumVars; ++i)
12393     Vars.push_back(Record.readSubExpr());
12394   C->setPrivates(Vars);
12395   Vars.clear();
12396   for (unsigned i = 0; i != NumVars; ++i)
12397     Vars.push_back(Record.readSubExpr());
12398   C->setInits(Vars);
12399   Vars.clear();
12400   for (unsigned i = 0; i != NumVars; ++i)
12401     Vars.push_back(Record.readSubExpr());
12402   C->setUpdates(Vars);
12403   Vars.clear();
12404   for (unsigned i = 0; i != NumVars; ++i)
12405     Vars.push_back(Record.readSubExpr());
12406   C->setFinals(Vars);
12407   C->setStep(Record.readSubExpr());
12408   C->setCalcStep(Record.readSubExpr());
12409   Vars.clear();
12410   for (unsigned I = 0; I != NumVars + 1; ++I)
12411     Vars.push_back(Record.readSubExpr());
12412   C->setUsedExprs(Vars);
12413 }
12414 
12415 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12416   C->setLParenLoc(Record.readSourceLocation());
12417   C->setColonLoc(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   C->setAlignment(Record.readSubExpr());
12425 }
12426 
12427 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12428   C->setLParenLoc(Record.readSourceLocation());
12429   unsigned NumVars = C->varlist_size();
12430   SmallVector<Expr *, 16> Exprs;
12431   Exprs.reserve(NumVars);
12432   for (unsigned i = 0; i != NumVars; ++i)
12433     Exprs.push_back(Record.readSubExpr());
12434   C->setVarRefs(Exprs);
12435   Exprs.clear();
12436   for (unsigned i = 0; i != NumVars; ++i)
12437     Exprs.push_back(Record.readSubExpr());
12438   C->setSourceExprs(Exprs);
12439   Exprs.clear();
12440   for (unsigned i = 0; i != NumVars; ++i)
12441     Exprs.push_back(Record.readSubExpr());
12442   C->setDestinationExprs(Exprs);
12443   Exprs.clear();
12444   for (unsigned i = 0; i != NumVars; ++i)
12445     Exprs.push_back(Record.readSubExpr());
12446   C->setAssignmentOps(Exprs);
12447 }
12448 
12449 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12450   C->setLParenLoc(Record.readSourceLocation());
12451   unsigned NumVars = C->varlist_size();
12452   SmallVector<Expr *, 16> Exprs;
12453   Exprs.reserve(NumVars);
12454   for (unsigned i = 0; i != NumVars; ++i)
12455     Exprs.push_back(Record.readSubExpr());
12456   C->setVarRefs(Exprs);
12457   Exprs.clear();
12458   for (unsigned i = 0; i != NumVars; ++i)
12459     Exprs.push_back(Record.readSubExpr());
12460   C->setSourceExprs(Exprs);
12461   Exprs.clear();
12462   for (unsigned i = 0; i != NumVars; ++i)
12463     Exprs.push_back(Record.readSubExpr());
12464   C->setDestinationExprs(Exprs);
12465   Exprs.clear();
12466   for (unsigned i = 0; i != NumVars; ++i)
12467     Exprs.push_back(Record.readSubExpr());
12468   C->setAssignmentOps(Exprs);
12469 }
12470 
12471 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12472   C->setLParenLoc(Record.readSourceLocation());
12473   unsigned NumVars = C->varlist_size();
12474   SmallVector<Expr *, 16> Vars;
12475   Vars.reserve(NumVars);
12476   for (unsigned i = 0; i != NumVars; ++i)
12477     Vars.push_back(Record.readSubExpr());
12478   C->setVarRefs(Vars);
12479 }
12480 
12481 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12482   C->setDepobj(Record.readSubExpr());
12483   C->setLParenLoc(Record.readSourceLocation());
12484 }
12485 
12486 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12487   C->setLParenLoc(Record.readSourceLocation());
12488   C->setModifier(Record.readSubExpr());
12489   C->setDependencyKind(
12490       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12491   C->setDependencyLoc(Record.readSourceLocation());
12492   C->setColonLoc(Record.readSourceLocation());
12493   C->setOmpAllMemoryLoc(Record.readSourceLocation());
12494   unsigned NumVars = C->varlist_size();
12495   SmallVector<Expr *, 16> Vars;
12496   Vars.reserve(NumVars);
12497   for (unsigned I = 0; I != NumVars; ++I)
12498     Vars.push_back(Record.readSubExpr());
12499   C->setVarRefs(Vars);
12500   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12501     C->setLoopData(I, Record.readSubExpr());
12502 }
12503 
12504 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12505   VisitOMPClauseWithPreInit(C);
12506   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12507   C->setDevice(Record.readSubExpr());
12508   C->setModifierLoc(Record.readSourceLocation());
12509   C->setLParenLoc(Record.readSourceLocation());
12510 }
12511 
12512 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12513   C->setLParenLoc(Record.readSourceLocation());
12514   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12515     C->setMapTypeModifier(
12516         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12517     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12518   }
12519   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12520   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12521   C->setMapType(
12522      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12523   C->setMapLoc(Record.readSourceLocation());
12524   C->setColonLoc(Record.readSourceLocation());
12525   auto NumVars = C->varlist_size();
12526   auto UniqueDecls = C->getUniqueDeclarationsNum();
12527   auto TotalLists = C->getTotalComponentListNum();
12528   auto TotalComponents = C->getTotalComponentsNum();
12529 
12530   SmallVector<Expr *, 16> Vars;
12531   Vars.reserve(NumVars);
12532   for (unsigned i = 0; i != NumVars; ++i)
12533     Vars.push_back(Record.readExpr());
12534   C->setVarRefs(Vars);
12535 
12536   SmallVector<Expr *, 16> UDMappers;
12537   UDMappers.reserve(NumVars);
12538   for (unsigned I = 0; I < NumVars; ++I)
12539     UDMappers.push_back(Record.readExpr());
12540   C->setUDMapperRefs(UDMappers);
12541 
12542   SmallVector<ValueDecl *, 16> Decls;
12543   Decls.reserve(UniqueDecls);
12544   for (unsigned i = 0; i < UniqueDecls; ++i)
12545     Decls.push_back(Record.readDeclAs<ValueDecl>());
12546   C->setUniqueDecls(Decls);
12547 
12548   SmallVector<unsigned, 16> ListsPerDecl;
12549   ListsPerDecl.reserve(UniqueDecls);
12550   for (unsigned i = 0; i < UniqueDecls; ++i)
12551     ListsPerDecl.push_back(Record.readInt());
12552   C->setDeclNumLists(ListsPerDecl);
12553 
12554   SmallVector<unsigned, 32> ListSizes;
12555   ListSizes.reserve(TotalLists);
12556   for (unsigned i = 0; i < TotalLists; ++i)
12557     ListSizes.push_back(Record.readInt());
12558   C->setComponentListSizes(ListSizes);
12559 
12560   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12561   Components.reserve(TotalComponents);
12562   for (unsigned i = 0; i < TotalComponents; ++i) {
12563     Expr *AssociatedExprPr = Record.readExpr();
12564     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12565     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12566                             /*IsNonContiguous=*/false);
12567   }
12568   C->setComponents(Components, ListSizes);
12569 }
12570 
12571 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12572   C->setLParenLoc(Record.readSourceLocation());
12573   C->setColonLoc(Record.readSourceLocation());
12574   C->setAllocator(Record.readSubExpr());
12575   unsigned NumVars = C->varlist_size();
12576   SmallVector<Expr *, 16> Vars;
12577   Vars.reserve(NumVars);
12578   for (unsigned i = 0; i != NumVars; ++i)
12579     Vars.push_back(Record.readSubExpr());
12580   C->setVarRefs(Vars);
12581 }
12582 
12583 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12584   VisitOMPClauseWithPreInit(C);
12585   C->setNumTeams(Record.readSubExpr());
12586   C->setLParenLoc(Record.readSourceLocation());
12587 }
12588 
12589 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12590   VisitOMPClauseWithPreInit(C);
12591   C->setThreadLimit(Record.readSubExpr());
12592   C->setLParenLoc(Record.readSourceLocation());
12593 }
12594 
12595 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12596   VisitOMPClauseWithPreInit(C);
12597   C->setPriority(Record.readSubExpr());
12598   C->setLParenLoc(Record.readSourceLocation());
12599 }
12600 
12601 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12602   VisitOMPClauseWithPreInit(C);
12603   C->setGrainsize(Record.readSubExpr());
12604   C->setLParenLoc(Record.readSourceLocation());
12605 }
12606 
12607 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12608   VisitOMPClauseWithPreInit(C);
12609   C->setNumTasks(Record.readSubExpr());
12610   C->setLParenLoc(Record.readSourceLocation());
12611 }
12612 
12613 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12614   C->setHint(Record.readSubExpr());
12615   C->setLParenLoc(Record.readSourceLocation());
12616 }
12617 
12618 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12619   VisitOMPClauseWithPreInit(C);
12620   C->setDistScheduleKind(
12621       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12622   C->setChunkSize(Record.readSubExpr());
12623   C->setLParenLoc(Record.readSourceLocation());
12624   C->setDistScheduleKindLoc(Record.readSourceLocation());
12625   C->setCommaLoc(Record.readSourceLocation());
12626 }
12627 
12628 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12629   C->setDefaultmapKind(
12630        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12631   C->setDefaultmapModifier(
12632       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12633   C->setLParenLoc(Record.readSourceLocation());
12634   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12635   C->setDefaultmapKindLoc(Record.readSourceLocation());
12636 }
12637 
12638 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12639   C->setLParenLoc(Record.readSourceLocation());
12640   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12641     C->setMotionModifier(
12642         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12643     C->setMotionModifierLoc(I, Record.readSourceLocation());
12644   }
12645   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12646   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12647   C->setColonLoc(Record.readSourceLocation());
12648   auto NumVars = C->varlist_size();
12649   auto UniqueDecls = C->getUniqueDeclarationsNum();
12650   auto TotalLists = C->getTotalComponentListNum();
12651   auto TotalComponents = C->getTotalComponentsNum();
12652 
12653   SmallVector<Expr *, 16> Vars;
12654   Vars.reserve(NumVars);
12655   for (unsigned i = 0; i != NumVars; ++i)
12656     Vars.push_back(Record.readSubExpr());
12657   C->setVarRefs(Vars);
12658 
12659   SmallVector<Expr *, 16> UDMappers;
12660   UDMappers.reserve(NumVars);
12661   for (unsigned I = 0; I < NumVars; ++I)
12662     UDMappers.push_back(Record.readSubExpr());
12663   C->setUDMapperRefs(UDMappers);
12664 
12665   SmallVector<ValueDecl *, 16> Decls;
12666   Decls.reserve(UniqueDecls);
12667   for (unsigned i = 0; i < UniqueDecls; ++i)
12668     Decls.push_back(Record.readDeclAs<ValueDecl>());
12669   C->setUniqueDecls(Decls);
12670 
12671   SmallVector<unsigned, 16> ListsPerDecl;
12672   ListsPerDecl.reserve(UniqueDecls);
12673   for (unsigned i = 0; i < UniqueDecls; ++i)
12674     ListsPerDecl.push_back(Record.readInt());
12675   C->setDeclNumLists(ListsPerDecl);
12676 
12677   SmallVector<unsigned, 32> ListSizes;
12678   ListSizes.reserve(TotalLists);
12679   for (unsigned i = 0; i < TotalLists; ++i)
12680     ListSizes.push_back(Record.readInt());
12681   C->setComponentListSizes(ListSizes);
12682 
12683   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12684   Components.reserve(TotalComponents);
12685   for (unsigned i = 0; i < TotalComponents; ++i) {
12686     Expr *AssociatedExprPr = Record.readSubExpr();
12687     bool IsNonContiguous = Record.readBool();
12688     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12689     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12690   }
12691   C->setComponents(Components, ListSizes);
12692 }
12693 
12694 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12695   C->setLParenLoc(Record.readSourceLocation());
12696   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12697     C->setMotionModifier(
12698         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12699     C->setMotionModifierLoc(I, Record.readSourceLocation());
12700   }
12701   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12702   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12703   C->setColonLoc(Record.readSourceLocation());
12704   auto NumVars = C->varlist_size();
12705   auto UniqueDecls = C->getUniqueDeclarationsNum();
12706   auto TotalLists = C->getTotalComponentListNum();
12707   auto TotalComponents = C->getTotalComponentsNum();
12708 
12709   SmallVector<Expr *, 16> Vars;
12710   Vars.reserve(NumVars);
12711   for (unsigned i = 0; i != NumVars; ++i)
12712     Vars.push_back(Record.readSubExpr());
12713   C->setVarRefs(Vars);
12714 
12715   SmallVector<Expr *, 16> UDMappers;
12716   UDMappers.reserve(NumVars);
12717   for (unsigned I = 0; I < NumVars; ++I)
12718     UDMappers.push_back(Record.readSubExpr());
12719   C->setUDMapperRefs(UDMappers);
12720 
12721   SmallVector<ValueDecl *, 16> Decls;
12722   Decls.reserve(UniqueDecls);
12723   for (unsigned i = 0; i < UniqueDecls; ++i)
12724     Decls.push_back(Record.readDeclAs<ValueDecl>());
12725   C->setUniqueDecls(Decls);
12726 
12727   SmallVector<unsigned, 16> ListsPerDecl;
12728   ListsPerDecl.reserve(UniqueDecls);
12729   for (unsigned i = 0; i < UniqueDecls; ++i)
12730     ListsPerDecl.push_back(Record.readInt());
12731   C->setDeclNumLists(ListsPerDecl);
12732 
12733   SmallVector<unsigned, 32> ListSizes;
12734   ListSizes.reserve(TotalLists);
12735   for (unsigned i = 0; i < TotalLists; ++i)
12736     ListSizes.push_back(Record.readInt());
12737   C->setComponentListSizes(ListSizes);
12738 
12739   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12740   Components.reserve(TotalComponents);
12741   for (unsigned i = 0; i < TotalComponents; ++i) {
12742     Expr *AssociatedExprPr = Record.readSubExpr();
12743     bool IsNonContiguous = Record.readBool();
12744     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12745     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12746   }
12747   C->setComponents(Components, ListSizes);
12748 }
12749 
12750 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12751   C->setLParenLoc(Record.readSourceLocation());
12752   auto NumVars = C->varlist_size();
12753   auto UniqueDecls = C->getUniqueDeclarationsNum();
12754   auto TotalLists = C->getTotalComponentListNum();
12755   auto TotalComponents = C->getTotalComponentsNum();
12756 
12757   SmallVector<Expr *, 16> Vars;
12758   Vars.reserve(NumVars);
12759   for (unsigned i = 0; i != NumVars; ++i)
12760     Vars.push_back(Record.readSubExpr());
12761   C->setVarRefs(Vars);
12762   Vars.clear();
12763   for (unsigned i = 0; i != NumVars; ++i)
12764     Vars.push_back(Record.readSubExpr());
12765   C->setPrivateCopies(Vars);
12766   Vars.clear();
12767   for (unsigned i = 0; i != NumVars; ++i)
12768     Vars.push_back(Record.readSubExpr());
12769   C->setInits(Vars);
12770 
12771   SmallVector<ValueDecl *, 16> Decls;
12772   Decls.reserve(UniqueDecls);
12773   for (unsigned i = 0; i < UniqueDecls; ++i)
12774     Decls.push_back(Record.readDeclAs<ValueDecl>());
12775   C->setUniqueDecls(Decls);
12776 
12777   SmallVector<unsigned, 16> ListsPerDecl;
12778   ListsPerDecl.reserve(UniqueDecls);
12779   for (unsigned i = 0; i < UniqueDecls; ++i)
12780     ListsPerDecl.push_back(Record.readInt());
12781   C->setDeclNumLists(ListsPerDecl);
12782 
12783   SmallVector<unsigned, 32> ListSizes;
12784   ListSizes.reserve(TotalLists);
12785   for (unsigned i = 0; i < TotalLists; ++i)
12786     ListSizes.push_back(Record.readInt());
12787   C->setComponentListSizes(ListSizes);
12788 
12789   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12790   Components.reserve(TotalComponents);
12791   for (unsigned i = 0; i < TotalComponents; ++i) {
12792     auto *AssociatedExprPr = Record.readSubExpr();
12793     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12794     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12795                             /*IsNonContiguous=*/false);
12796   }
12797   C->setComponents(Components, ListSizes);
12798 }
12799 
12800 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12801   C->setLParenLoc(Record.readSourceLocation());
12802   auto NumVars = C->varlist_size();
12803   auto UniqueDecls = C->getUniqueDeclarationsNum();
12804   auto TotalLists = C->getTotalComponentListNum();
12805   auto TotalComponents = C->getTotalComponentsNum();
12806 
12807   SmallVector<Expr *, 16> Vars;
12808   Vars.reserve(NumVars);
12809   for (unsigned i = 0; i != NumVars; ++i)
12810     Vars.push_back(Record.readSubExpr());
12811   C->setVarRefs(Vars);
12812 
12813   SmallVector<ValueDecl *, 16> Decls;
12814   Decls.reserve(UniqueDecls);
12815   for (unsigned i = 0; i < UniqueDecls; ++i)
12816     Decls.push_back(Record.readDeclAs<ValueDecl>());
12817   C->setUniqueDecls(Decls);
12818 
12819   SmallVector<unsigned, 16> ListsPerDecl;
12820   ListsPerDecl.reserve(UniqueDecls);
12821   for (unsigned i = 0; i < UniqueDecls; ++i)
12822     ListsPerDecl.push_back(Record.readInt());
12823   C->setDeclNumLists(ListsPerDecl);
12824 
12825   SmallVector<unsigned, 32> ListSizes;
12826   ListSizes.reserve(TotalLists);
12827   for (unsigned i = 0; i < TotalLists; ++i)
12828     ListSizes.push_back(Record.readInt());
12829   C->setComponentListSizes(ListSizes);
12830 
12831   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12832   Components.reserve(TotalComponents);
12833   for (unsigned i = 0; i < TotalComponents; ++i) {
12834     Expr *AssociatedExpr = Record.readSubExpr();
12835     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12836     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12837                             /*IsNonContiguous*/ false);
12838   }
12839   C->setComponents(Components, ListSizes);
12840 }
12841 
12842 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12843   C->setLParenLoc(Record.readSourceLocation());
12844   auto NumVars = C->varlist_size();
12845   auto UniqueDecls = C->getUniqueDeclarationsNum();
12846   auto TotalLists = C->getTotalComponentListNum();
12847   auto TotalComponents = C->getTotalComponentsNum();
12848 
12849   SmallVector<Expr *, 16> Vars;
12850   Vars.reserve(NumVars);
12851   for (unsigned i = 0; i != NumVars; ++i)
12852     Vars.push_back(Record.readSubExpr());
12853   C->setVarRefs(Vars);
12854   Vars.clear();
12855 
12856   SmallVector<ValueDecl *, 16> Decls;
12857   Decls.reserve(UniqueDecls);
12858   for (unsigned i = 0; i < UniqueDecls; ++i)
12859     Decls.push_back(Record.readDeclAs<ValueDecl>());
12860   C->setUniqueDecls(Decls);
12861 
12862   SmallVector<unsigned, 16> ListsPerDecl;
12863   ListsPerDecl.reserve(UniqueDecls);
12864   for (unsigned i = 0; i < UniqueDecls; ++i)
12865     ListsPerDecl.push_back(Record.readInt());
12866   C->setDeclNumLists(ListsPerDecl);
12867 
12868   SmallVector<unsigned, 32> ListSizes;
12869   ListSizes.reserve(TotalLists);
12870   for (unsigned i = 0; i < TotalLists; ++i)
12871     ListSizes.push_back(Record.readInt());
12872   C->setComponentListSizes(ListSizes);
12873 
12874   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12875   Components.reserve(TotalComponents);
12876   for (unsigned i = 0; i < TotalComponents; ++i) {
12877     Expr *AssociatedExpr = Record.readSubExpr();
12878     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12879     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12880                             /*IsNonContiguous=*/false);
12881   }
12882   C->setComponents(Components, ListSizes);
12883 }
12884 
12885 void OMPClauseReader::VisitOMPHasDeviceAddrClause(OMPHasDeviceAddrClause *C) {
12886   C->setLParenLoc(Record.readSourceLocation());
12887   auto NumVars = C->varlist_size();
12888   auto UniqueDecls = C->getUniqueDeclarationsNum();
12889   auto TotalLists = C->getTotalComponentListNum();
12890   auto TotalComponents = C->getTotalComponentsNum();
12891 
12892   SmallVector<Expr *, 16> Vars;
12893   Vars.reserve(NumVars);
12894   for (unsigned I = 0; I != NumVars; ++I)
12895     Vars.push_back(Record.readSubExpr());
12896   C->setVarRefs(Vars);
12897   Vars.clear();
12898 
12899   SmallVector<ValueDecl *, 16> Decls;
12900   Decls.reserve(UniqueDecls);
12901   for (unsigned I = 0; I < UniqueDecls; ++I)
12902     Decls.push_back(Record.readDeclAs<ValueDecl>());
12903   C->setUniqueDecls(Decls);
12904 
12905   SmallVector<unsigned, 16> ListsPerDecl;
12906   ListsPerDecl.reserve(UniqueDecls);
12907   for (unsigned I = 0; I < UniqueDecls; ++I)
12908     ListsPerDecl.push_back(Record.readInt());
12909   C->setDeclNumLists(ListsPerDecl);
12910 
12911   SmallVector<unsigned, 32> ListSizes;
12912   ListSizes.reserve(TotalLists);
12913   for (unsigned i = 0; i < TotalLists; ++i)
12914     ListSizes.push_back(Record.readInt());
12915   C->setComponentListSizes(ListSizes);
12916 
12917   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12918   Components.reserve(TotalComponents);
12919   for (unsigned I = 0; I < TotalComponents; ++I) {
12920     Expr *AssociatedExpr = Record.readSubExpr();
12921     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12922     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12923                             /*IsNonContiguous=*/false);
12924   }
12925   C->setComponents(Components, ListSizes);
12926 }
12927 
12928 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12929   C->setLParenLoc(Record.readSourceLocation());
12930   unsigned NumVars = C->varlist_size();
12931   SmallVector<Expr *, 16> Vars;
12932   Vars.reserve(NumVars);
12933   for (unsigned i = 0; i != NumVars; ++i)
12934     Vars.push_back(Record.readSubExpr());
12935   C->setVarRefs(Vars);
12936   Vars.clear();
12937   Vars.reserve(NumVars);
12938   for (unsigned i = 0; i != NumVars; ++i)
12939     Vars.push_back(Record.readSubExpr());
12940   C->setPrivateRefs(Vars);
12941 }
12942 
12943 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12944   C->setLParenLoc(Record.readSourceLocation());
12945   unsigned NumVars = C->varlist_size();
12946   SmallVector<Expr *, 16> Vars;
12947   Vars.reserve(NumVars);
12948   for (unsigned i = 0; i != NumVars; ++i)
12949     Vars.push_back(Record.readSubExpr());
12950   C->setVarRefs(Vars);
12951 }
12952 
12953 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12954   C->setLParenLoc(Record.readSourceLocation());
12955   unsigned NumVars = C->varlist_size();
12956   SmallVector<Expr *, 16> Vars;
12957   Vars.reserve(NumVars);
12958   for (unsigned i = 0; i != NumVars; ++i)
12959     Vars.push_back(Record.readSubExpr());
12960   C->setVarRefs(Vars);
12961 }
12962 
12963 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12964   C->setLParenLoc(Record.readSourceLocation());
12965   unsigned NumOfAllocators = C->getNumberOfAllocators();
12966   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12967   Data.reserve(NumOfAllocators);
12968   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12969     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12970     D.Allocator = Record.readSubExpr();
12971     D.AllocatorTraits = Record.readSubExpr();
12972     D.LParenLoc = Record.readSourceLocation();
12973     D.RParenLoc = Record.readSourceLocation();
12974   }
12975   C->setAllocatorsData(Data);
12976 }
12977 
12978 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12979   C->setLParenLoc(Record.readSourceLocation());
12980   C->setModifier(Record.readSubExpr());
12981   C->setColonLoc(Record.readSourceLocation());
12982   unsigned NumOfLocators = C->varlist_size();
12983   SmallVector<Expr *, 4> Locators;
12984   Locators.reserve(NumOfLocators);
12985   for (unsigned I = 0; I != NumOfLocators; ++I)
12986     Locators.push_back(Record.readSubExpr());
12987   C->setVarRefs(Locators);
12988 }
12989 
12990 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12991   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12992   C->setLParenLoc(Record.readSourceLocation());
12993   C->setKindKwLoc(Record.readSourceLocation());
12994 }
12995 
12996 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12997   VisitOMPClauseWithPreInit(C);
12998   C->setThreadID(Record.readSubExpr());
12999   C->setLParenLoc(Record.readSourceLocation());
13000 }
13001 
13002 void OMPClauseReader::VisitOMPBindClause(OMPBindClause *C) {
13003   C->setBindKind(Record.readEnum<OpenMPBindClauseKind>());
13004   C->setLParenLoc(Record.readSourceLocation());
13005   C->setBindKindLoc(Record.readSourceLocation());
13006 }
13007 
13008 void OMPClauseReader::VisitOMPAlignClause(OMPAlignClause *C) {
13009   C->setAlignment(Record.readExpr());
13010   C->setLParenLoc(Record.readSourceLocation());
13011 }
13012 
13013 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
13014   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
13015   TI.Sets.resize(readUInt32());
13016   for (auto &Set : TI.Sets) {
13017     Set.Kind = readEnum<llvm::omp::TraitSet>();
13018     Set.Selectors.resize(readUInt32());
13019     for (auto &Selector : Set.Selectors) {
13020       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
13021       Selector.ScoreOrCondition = nullptr;
13022       if (readBool())
13023         Selector.ScoreOrCondition = readExprRef();
13024       Selector.Properties.resize(readUInt32());
13025       for (auto &Property : Selector.Properties)
13026         Property.Kind = readEnum<llvm::omp::TraitProperty>();
13027     }
13028   }
13029   return &TI;
13030 }
13031 
13032 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13033   if (!Data)
13034     return;
13035   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13036     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13037     skipInts(3);
13038   }
13039   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13040   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13041     Clauses[I] = readOMPClause();
13042   Data->setClauses(Clauses);
13043   if (Data->hasAssociatedStmt())
13044     Data->setAssociatedStmt(readStmt());
13045   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13046     Data->getChildren()[I] = readStmt();
13047 }
13048