1 //===- ASTReader.cpp - AST File Reader ------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the ASTReader class, which reads AST files.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "clang/Basic/OpenMPKinds.h"
14 #include "clang/Serialization/ASTRecordReader.h"
15 #include "ASTCommon.h"
16 #include "ASTReaderInternals.h"
17 #include "clang/AST/AbstractTypeReader.h"
18 #include "clang/AST/ASTConsumer.h"
19 #include "clang/AST/ASTContext.h"
20 #include "clang/AST/ASTMutationListener.h"
21 #include "clang/AST/ASTUnresolvedSet.h"
22 #include "clang/AST/Decl.h"
23 #include "clang/AST/DeclBase.h"
24 #include "clang/AST/DeclCXX.h"
25 #include "clang/AST/DeclFriend.h"
26 #include "clang/AST/DeclGroup.h"
27 #include "clang/AST/DeclObjC.h"
28 #include "clang/AST/DeclTemplate.h"
29 #include "clang/AST/DeclarationName.h"
30 #include "clang/AST/Expr.h"
31 #include "clang/AST/ExprCXX.h"
32 #include "clang/AST/ExternalASTSource.h"
33 #include "clang/AST/NestedNameSpecifier.h"
34 #include "clang/AST/OpenMPClause.h"
35 #include "clang/AST/ODRHash.h"
36 #include "clang/AST/RawCommentList.h"
37 #include "clang/AST/TemplateBase.h"
38 #include "clang/AST/TemplateName.h"
39 #include "clang/AST/Type.h"
40 #include "clang/AST/TypeLoc.h"
41 #include "clang/AST/TypeLocVisitor.h"
42 #include "clang/AST/UnresolvedSet.h"
43 #include "clang/Basic/CommentOptions.h"
44 #include "clang/Basic/Diagnostic.h"
45 #include "clang/Basic/DiagnosticOptions.h"
46 #include "clang/Basic/ExceptionSpecificationType.h"
47 #include "clang/Basic/FileManager.h"
48 #include "clang/Basic/FileSystemOptions.h"
49 #include "clang/Basic/IdentifierTable.h"
50 #include "clang/Basic/LLVM.h"
51 #include "clang/Basic/LangOptions.h"
52 #include "clang/Basic/Module.h"
53 #include "clang/Basic/ObjCRuntime.h"
54 #include "clang/Basic/OperatorKinds.h"
55 #include "clang/Basic/PragmaKinds.h"
56 #include "clang/Basic/Sanitizers.h"
57 #include "clang/Basic/SourceLocation.h"
58 #include "clang/Basic/SourceManager.h"
59 #include "clang/Basic/SourceManagerInternals.h"
60 #include "clang/Basic/Specifiers.h"
61 #include "clang/Basic/TargetInfo.h"
62 #include "clang/Basic/TargetOptions.h"
63 #include "clang/Basic/TokenKinds.h"
64 #include "clang/Basic/Version.h"
65 #include "clang/Lex/HeaderSearch.h"
66 #include "clang/Lex/HeaderSearchOptions.h"
67 #include "clang/Lex/MacroInfo.h"
68 #include "clang/Lex/ModuleMap.h"
69 #include "clang/Lex/PreprocessingRecord.h"
70 #include "clang/Lex/Preprocessor.h"
71 #include "clang/Lex/PreprocessorOptions.h"
72 #include "clang/Lex/Token.h"
73 #include "clang/Sema/ObjCMethodList.h"
74 #include "clang/Sema/Scope.h"
75 #include "clang/Sema/Sema.h"
76 #include "clang/Sema/Weak.h"
77 #include "clang/Serialization/ASTBitCodes.h"
78 #include "clang/Serialization/ASTDeserializationListener.h"
79 #include "clang/Serialization/ContinuousRangeMap.h"
80 #include "clang/Serialization/GlobalModuleIndex.h"
81 #include "clang/Serialization/InMemoryModuleCache.h"
82 #include "clang/Serialization/ModuleFile.h"
83 #include "clang/Serialization/ModuleFileExtension.h"
84 #include "clang/Serialization/ModuleManager.h"
85 #include "clang/Serialization/PCHContainerOperations.h"
86 #include "clang/Serialization/SerializationDiagnostic.h"
87 #include "llvm/ADT/APFloat.h"
88 #include "llvm/ADT/APInt.h"
89 #include "llvm/ADT/APSInt.h"
90 #include "llvm/ADT/ArrayRef.h"
91 #include "llvm/ADT/DenseMap.h"
92 #include "llvm/ADT/FoldingSet.h"
93 #include "llvm/ADT/Hashing.h"
94 #include "llvm/ADT/IntrusiveRefCntPtr.h"
95 #include "llvm/ADT/None.h"
96 #include "llvm/ADT/Optional.h"
97 #include "llvm/ADT/STLExtras.h"
98 #include "llvm/ADT/ScopeExit.h"
99 #include "llvm/ADT/SmallPtrSet.h"
100 #include "llvm/ADT/SmallString.h"
101 #include "llvm/ADT/SmallVector.h"
102 #include "llvm/ADT/StringExtras.h"
103 #include "llvm/ADT/StringMap.h"
104 #include "llvm/ADT/StringRef.h"
105 #include "llvm/ADT/Triple.h"
106 #include "llvm/ADT/iterator_range.h"
107 #include "llvm/Bitstream/BitstreamReader.h"
108 #include "llvm/Support/Casting.h"
109 #include "llvm/Support/Compiler.h"
110 #include "llvm/Support/Compression.h"
111 #include "llvm/Support/DJB.h"
112 #include "llvm/Support/Endian.h"
113 #include "llvm/Support/Error.h"
114 #include "llvm/Support/ErrorHandling.h"
115 #include "llvm/Support/FileSystem.h"
116 #include "llvm/Support/MemoryBuffer.h"
117 #include "llvm/Support/Path.h"
118 #include "llvm/Support/SaveAndRestore.h"
119 #include "llvm/Support/Timer.h"
120 #include "llvm/Support/VersionTuple.h"
121 #include "llvm/Support/raw_ostream.h"
122 #include <algorithm>
123 #include <cassert>
124 #include <cstddef>
125 #include <cstdint>
126 #include <cstdio>
127 #include <ctime>
128 #include <iterator>
129 #include <limits>
130 #include <map>
131 #include <memory>
132 #include <string>
133 #include <system_error>
134 #include <tuple>
135 #include <utility>
136 #include <vector>
137 
138 using namespace clang;
139 using namespace clang::serialization;
140 using namespace clang::serialization::reader;
141 using llvm::BitstreamCursor;
142 
143 //===----------------------------------------------------------------------===//
144 // ChainedASTReaderListener implementation
145 //===----------------------------------------------------------------------===//
146 
147 bool
148 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
149   return First->ReadFullVersionInformation(FullVersion) ||
150          Second->ReadFullVersionInformation(FullVersion);
151 }
152 
153 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
154   First->ReadModuleName(ModuleName);
155   Second->ReadModuleName(ModuleName);
156 }
157 
158 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
159   First->ReadModuleMapFile(ModuleMapPath);
160   Second->ReadModuleMapFile(ModuleMapPath);
161 }
162 
163 bool
164 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
165                                               bool Complain,
166                                               bool AllowCompatibleDifferences) {
167   return First->ReadLanguageOptions(LangOpts, Complain,
168                                     AllowCompatibleDifferences) ||
169          Second->ReadLanguageOptions(LangOpts, Complain,
170                                      AllowCompatibleDifferences);
171 }
172 
173 bool ChainedASTReaderListener::ReadTargetOptions(
174     const TargetOptions &TargetOpts, bool Complain,
175     bool AllowCompatibleDifferences) {
176   return First->ReadTargetOptions(TargetOpts, Complain,
177                                   AllowCompatibleDifferences) ||
178          Second->ReadTargetOptions(TargetOpts, Complain,
179                                    AllowCompatibleDifferences);
180 }
181 
182 bool ChainedASTReaderListener::ReadDiagnosticOptions(
183     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
184   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
185          Second->ReadDiagnosticOptions(DiagOpts, Complain);
186 }
187 
188 bool
189 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
190                                                 bool Complain) {
191   return First->ReadFileSystemOptions(FSOpts, Complain) ||
192          Second->ReadFileSystemOptions(FSOpts, Complain);
193 }
194 
195 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
196     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
197     bool Complain) {
198   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
199                                         Complain) ||
200          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
201                                          Complain);
202 }
203 
204 bool ChainedASTReaderListener::ReadPreprocessorOptions(
205     const PreprocessorOptions &PPOpts, bool Complain,
206     std::string &SuggestedPredefines) {
207   return First->ReadPreprocessorOptions(PPOpts, Complain,
208                                         SuggestedPredefines) ||
209          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
210 }
211 
212 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
213                                            unsigned Value) {
214   First->ReadCounter(M, Value);
215   Second->ReadCounter(M, Value);
216 }
217 
218 bool ChainedASTReaderListener::needsInputFileVisitation() {
219   return First->needsInputFileVisitation() ||
220          Second->needsInputFileVisitation();
221 }
222 
223 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
224   return First->needsSystemInputFileVisitation() ||
225   Second->needsSystemInputFileVisitation();
226 }
227 
228 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
229                                                ModuleKind Kind) {
230   First->visitModuleFile(Filename, Kind);
231   Second->visitModuleFile(Filename, Kind);
232 }
233 
234 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
235                                               bool isSystem,
236                                               bool isOverridden,
237                                               bool isExplicitModule) {
238   bool Continue = false;
239   if (First->needsInputFileVisitation() &&
240       (!isSystem || First->needsSystemInputFileVisitation()))
241     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
242                                       isExplicitModule);
243   if (Second->needsInputFileVisitation() &&
244       (!isSystem || Second->needsSystemInputFileVisitation()))
245     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
246                                        isExplicitModule);
247   return Continue;
248 }
249 
250 void ChainedASTReaderListener::readModuleFileExtension(
251        const ModuleFileExtensionMetadata &Metadata) {
252   First->readModuleFileExtension(Metadata);
253   Second->readModuleFileExtension(Metadata);
254 }
255 
256 //===----------------------------------------------------------------------===//
257 // PCH validator implementation
258 //===----------------------------------------------------------------------===//
259 
260 ASTReaderListener::~ASTReaderListener() = default;
261 
262 /// Compare the given set of language options against an existing set of
263 /// language options.
264 ///
265 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
266 /// \param AllowCompatibleDifferences If true, differences between compatible
267 ///        language options will be permitted.
268 ///
269 /// \returns true if the languagae options mis-match, false otherwise.
270 static bool checkLanguageOptions(const LangOptions &LangOpts,
271                                  const LangOptions &ExistingLangOpts,
272                                  DiagnosticsEngine *Diags,
273                                  bool AllowCompatibleDifferences = true) {
274 #define LANGOPT(Name, Bits, Default, Description)                 \
275   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
276     if (Diags)                                                    \
277       Diags->Report(diag::err_pch_langopt_mismatch)               \
278         << Description << LangOpts.Name << ExistingLangOpts.Name; \
279     return true;                                                  \
280   }
281 
282 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
283   if (ExistingLangOpts.Name != LangOpts.Name) {           \
284     if (Diags)                                            \
285       Diags->Report(diag::err_pch_langopt_value_mismatch) \
286         << Description;                                   \
287     return true;                                          \
288   }
289 
290 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
291   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
292     if (Diags)                                                 \
293       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
294         << Description;                                        \
295     return true;                                               \
296   }
297 
298 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
299   if (!AllowCompatibleDifferences)                            \
300     LANGOPT(Name, Bits, Default, Description)
301 
302 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
303   if (!AllowCompatibleDifferences)                                 \
304     ENUM_LANGOPT(Name, Bits, Default, Description)
305 
306 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
307   if (!AllowCompatibleDifferences)                                 \
308     VALUE_LANGOPT(Name, Bits, Default, Description)
309 
310 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
311 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
312 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
313 #include "clang/Basic/LangOptions.def"
314 
315   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
316     if (Diags)
317       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
318     return true;
319   }
320 
321   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
322     if (Diags)
323       Diags->Report(diag::err_pch_langopt_value_mismatch)
324       << "target Objective-C runtime";
325     return true;
326   }
327 
328   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
329       LangOpts.CommentOpts.BlockCommandNames) {
330     if (Diags)
331       Diags->Report(diag::err_pch_langopt_value_mismatch)
332         << "block command names";
333     return true;
334   }
335 
336   // Sanitizer feature mismatches are treated as compatible differences. If
337   // compatible differences aren't allowed, we still only want to check for
338   // mismatches of non-modular sanitizers (the only ones which can affect AST
339   // generation).
340   if (!AllowCompatibleDifferences) {
341     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
342     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
343     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
344     ExistingSanitizers.clear(ModularSanitizers);
345     ImportedSanitizers.clear(ModularSanitizers);
346     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
347       const std::string Flag = "-fsanitize=";
348       if (Diags) {
349 #define SANITIZER(NAME, ID)                                                    \
350   {                                                                            \
351     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
352     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
353     if (InExistingModule != InImportedModule)                                  \
354       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
355           << InExistingModule << (Flag + NAME);                                \
356   }
357 #include "clang/Basic/Sanitizers.def"
358       }
359       return true;
360     }
361   }
362 
363   return false;
364 }
365 
366 /// Compare the given set of target options against an existing set of
367 /// target options.
368 ///
369 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
370 ///
371 /// \returns true if the target options mis-match, false otherwise.
372 static bool checkTargetOptions(const TargetOptions &TargetOpts,
373                                const TargetOptions &ExistingTargetOpts,
374                                DiagnosticsEngine *Diags,
375                                bool AllowCompatibleDifferences = true) {
376 #define CHECK_TARGET_OPT(Field, Name)                             \
377   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
378     if (Diags)                                                    \
379       Diags->Report(diag::err_pch_targetopt_mismatch)             \
380         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
381     return true;                                                  \
382   }
383 
384   // The triple and ABI must match exactly.
385   CHECK_TARGET_OPT(Triple, "target");
386   CHECK_TARGET_OPT(ABI, "target ABI");
387 
388   // We can tolerate different CPUs in many cases, notably when one CPU
389   // supports a strict superset of another. When allowing compatible
390   // differences skip this check.
391   if (!AllowCompatibleDifferences)
392     CHECK_TARGET_OPT(CPU, "target CPU");
393 
394 #undef CHECK_TARGET_OPT
395 
396   // Compare feature sets.
397   SmallVector<StringRef, 4> ExistingFeatures(
398                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
399                                              ExistingTargetOpts.FeaturesAsWritten.end());
400   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
401                                          TargetOpts.FeaturesAsWritten.end());
402   llvm::sort(ExistingFeatures);
403   llvm::sort(ReadFeatures);
404 
405   // We compute the set difference in both directions explicitly so that we can
406   // diagnose the differences differently.
407   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
408   std::set_difference(
409       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
410       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
411   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
412                       ExistingFeatures.begin(), ExistingFeatures.end(),
413                       std::back_inserter(UnmatchedReadFeatures));
414 
415   // If we are allowing compatible differences and the read feature set is
416   // a strict subset of the existing feature set, there is nothing to diagnose.
417   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
418     return false;
419 
420   if (Diags) {
421     for (StringRef Feature : UnmatchedReadFeatures)
422       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
423           << /* is-existing-feature */ false << Feature;
424     for (StringRef Feature : UnmatchedExistingFeatures)
425       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
426           << /* is-existing-feature */ true << Feature;
427   }
428 
429   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
430 }
431 
432 bool
433 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
434                                   bool Complain,
435                                   bool AllowCompatibleDifferences) {
436   const LangOptions &ExistingLangOpts = PP.getLangOpts();
437   return checkLanguageOptions(LangOpts, ExistingLangOpts,
438                               Complain ? &Reader.Diags : nullptr,
439                               AllowCompatibleDifferences);
440 }
441 
442 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
443                                      bool Complain,
444                                      bool AllowCompatibleDifferences) {
445   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
446   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
447                             Complain ? &Reader.Diags : nullptr,
448                             AllowCompatibleDifferences);
449 }
450 
451 namespace {
452 
453 using MacroDefinitionsMap =
454     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
455 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
456 
457 } // namespace
458 
459 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
460                                          DiagnosticsEngine &Diags,
461                                          bool Complain) {
462   using Level = DiagnosticsEngine::Level;
463 
464   // Check current mappings for new -Werror mappings, and the stored mappings
465   // for cases that were explicitly mapped to *not* be errors that are now
466   // errors because of options like -Werror.
467   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
468 
469   for (DiagnosticsEngine *MappingSource : MappingSources) {
470     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
471       diag::kind DiagID = DiagIDMappingPair.first;
472       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
473       if (CurLevel < DiagnosticsEngine::Error)
474         continue; // not significant
475       Level StoredLevel =
476           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
477       if (StoredLevel < DiagnosticsEngine::Error) {
478         if (Complain)
479           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
480               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
481         return true;
482       }
483     }
484   }
485 
486   return false;
487 }
488 
489 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
490   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
491   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
492     return true;
493   return Ext >= diag::Severity::Error;
494 }
495 
496 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
497                                     DiagnosticsEngine &Diags,
498                                     bool IsSystem, bool Complain) {
499   // Top-level options
500   if (IsSystem) {
501     if (Diags.getSuppressSystemWarnings())
502       return false;
503     // If -Wsystem-headers was not enabled before, be conservative
504     if (StoredDiags.getSuppressSystemWarnings()) {
505       if (Complain)
506         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
507       return true;
508     }
509   }
510 
511   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
512     if (Complain)
513       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
514     return true;
515   }
516 
517   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
518       !StoredDiags.getEnableAllWarnings()) {
519     if (Complain)
520       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
521     return true;
522   }
523 
524   if (isExtHandlingFromDiagsError(Diags) &&
525       !isExtHandlingFromDiagsError(StoredDiags)) {
526     if (Complain)
527       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
528     return true;
529   }
530 
531   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
532 }
533 
534 /// Return the top import module if it is implicit, nullptr otherwise.
535 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
536                                           Preprocessor &PP) {
537   // If the original import came from a file explicitly generated by the user,
538   // don't check the diagnostic mappings.
539   // FIXME: currently this is approximated by checking whether this is not a
540   // module import of an implicitly-loaded module file.
541   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
542   // the transitive closure of its imports, since unrelated modules cannot be
543   // imported until after this module finishes validation.
544   ModuleFile *TopImport = &*ModuleMgr.rbegin();
545   while (!TopImport->ImportedBy.empty())
546     TopImport = TopImport->ImportedBy[0];
547   if (TopImport->Kind != MK_ImplicitModule)
548     return nullptr;
549 
550   StringRef ModuleName = TopImport->ModuleName;
551   assert(!ModuleName.empty() && "diagnostic options read before module name");
552 
553   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
554   assert(M && "missing module");
555   return M;
556 }
557 
558 bool PCHValidator::ReadDiagnosticOptions(
559     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
560   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
561   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
562   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
563       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
564   // This should never fail, because we would have processed these options
565   // before writing them to an ASTFile.
566   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
567 
568   ModuleManager &ModuleMgr = Reader.getModuleManager();
569   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
570 
571   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
572   if (!TopM)
573     return false;
574 
575   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
576   // contains the union of their flags.
577   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
578                                  Complain);
579 }
580 
581 /// Collect the macro definitions provided by the given preprocessor
582 /// options.
583 static void
584 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
585                         MacroDefinitionsMap &Macros,
586                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
587   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
588     StringRef Macro = PPOpts.Macros[I].first;
589     bool IsUndef = PPOpts.Macros[I].second;
590 
591     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
592     StringRef MacroName = MacroPair.first;
593     StringRef MacroBody = MacroPair.second;
594 
595     // For an #undef'd macro, we only care about the name.
596     if (IsUndef) {
597       if (MacroNames && !Macros.count(MacroName))
598         MacroNames->push_back(MacroName);
599 
600       Macros[MacroName] = std::make_pair("", true);
601       continue;
602     }
603 
604     // For a #define'd macro, figure out the actual definition.
605     if (MacroName.size() == Macro.size())
606       MacroBody = "1";
607     else {
608       // Note: GCC drops anything following an end-of-line character.
609       StringRef::size_type End = MacroBody.find_first_of("\n\r");
610       MacroBody = MacroBody.substr(0, End);
611     }
612 
613     if (MacroNames && !Macros.count(MacroName))
614       MacroNames->push_back(MacroName);
615     Macros[MacroName] = std::make_pair(MacroBody, false);
616   }
617 }
618 
619 /// Check the preprocessor options deserialized from the control block
620 /// against the preprocessor options in an existing preprocessor.
621 ///
622 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
623 /// \param Validate If true, validate preprocessor options. If false, allow
624 ///        macros defined by \p ExistingPPOpts to override those defined by
625 ///        \p PPOpts in SuggestedPredefines.
626 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
627                                      const PreprocessorOptions &ExistingPPOpts,
628                                      DiagnosticsEngine *Diags,
629                                      FileManager &FileMgr,
630                                      std::string &SuggestedPredefines,
631                                      const LangOptions &LangOpts,
632                                      bool Validate = true) {
633   // Check macro definitions.
634   MacroDefinitionsMap ASTFileMacros;
635   collectMacroDefinitions(PPOpts, ASTFileMacros);
636   MacroDefinitionsMap ExistingMacros;
637   SmallVector<StringRef, 4> ExistingMacroNames;
638   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
639 
640   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
641     // Dig out the macro definition in the existing preprocessor options.
642     StringRef MacroName = ExistingMacroNames[I];
643     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
644 
645     // Check whether we know anything about this macro name or not.
646     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
647         ASTFileMacros.find(MacroName);
648     if (!Validate || Known == ASTFileMacros.end()) {
649       // FIXME: Check whether this identifier was referenced anywhere in the
650       // AST file. If so, we should reject the AST file. Unfortunately, this
651       // information isn't in the control block. What shall we do about it?
652 
653       if (Existing.second) {
654         SuggestedPredefines += "#undef ";
655         SuggestedPredefines += MacroName.str();
656         SuggestedPredefines += '\n';
657       } else {
658         SuggestedPredefines += "#define ";
659         SuggestedPredefines += MacroName.str();
660         SuggestedPredefines += ' ';
661         SuggestedPredefines += Existing.first.str();
662         SuggestedPredefines += '\n';
663       }
664       continue;
665     }
666 
667     // If the macro was defined in one but undef'd in the other, we have a
668     // conflict.
669     if (Existing.second != Known->second.second) {
670       if (Diags) {
671         Diags->Report(diag::err_pch_macro_def_undef)
672           << MacroName << Known->second.second;
673       }
674       return true;
675     }
676 
677     // If the macro was #undef'd in both, or if the macro bodies are identical,
678     // it's fine.
679     if (Existing.second || Existing.first == Known->second.first)
680       continue;
681 
682     // The macro bodies differ; complain.
683     if (Diags) {
684       Diags->Report(diag::err_pch_macro_def_conflict)
685         << MacroName << Known->second.first << Existing.first;
686     }
687     return true;
688   }
689 
690   // Check whether we're using predefines.
691   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
692     if (Diags) {
693       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
694     }
695     return true;
696   }
697 
698   // Detailed record is important since it is used for the module cache hash.
699   if (LangOpts.Modules &&
700       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
701     if (Diags) {
702       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
703     }
704     return true;
705   }
706 
707   // Compute the #include and #include_macros lines we need.
708   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
709     StringRef File = ExistingPPOpts.Includes[I];
710 
711     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
712         !ExistingPPOpts.PCHThroughHeader.empty()) {
713       // In case the through header is an include, we must add all the includes
714       // to the predefines so the start point can be determined.
715       SuggestedPredefines += "#include \"";
716       SuggestedPredefines += File;
717       SuggestedPredefines += "\"\n";
718       continue;
719     }
720 
721     if (File == ExistingPPOpts.ImplicitPCHInclude)
722       continue;
723 
724     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
725           != PPOpts.Includes.end())
726       continue;
727 
728     SuggestedPredefines += "#include \"";
729     SuggestedPredefines += File;
730     SuggestedPredefines += "\"\n";
731   }
732 
733   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
734     StringRef File = ExistingPPOpts.MacroIncludes[I];
735     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
736                   File)
737         != PPOpts.MacroIncludes.end())
738       continue;
739 
740     SuggestedPredefines += "#__include_macros \"";
741     SuggestedPredefines += File;
742     SuggestedPredefines += "\"\n##\n";
743   }
744 
745   return false;
746 }
747 
748 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
749                                            bool Complain,
750                                            std::string &SuggestedPredefines) {
751   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
752 
753   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
754                                   Complain? &Reader.Diags : nullptr,
755                                   PP.getFileManager(),
756                                   SuggestedPredefines,
757                                   PP.getLangOpts());
758 }
759 
760 bool SimpleASTReaderListener::ReadPreprocessorOptions(
761                                   const PreprocessorOptions &PPOpts,
762                                   bool Complain,
763                                   std::string &SuggestedPredefines) {
764   return checkPreprocessorOptions(PPOpts,
765                                   PP.getPreprocessorOpts(),
766                                   nullptr,
767                                   PP.getFileManager(),
768                                   SuggestedPredefines,
769                                   PP.getLangOpts(),
770                                   false);
771 }
772 
773 /// Check the header search options deserialized from the control block
774 /// against the header search options in an existing preprocessor.
775 ///
776 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
777 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
778                                      StringRef SpecificModuleCachePath,
779                                      StringRef ExistingModuleCachePath,
780                                      DiagnosticsEngine *Diags,
781                                      const LangOptions &LangOpts) {
782   if (LangOpts.Modules) {
783     if (SpecificModuleCachePath != ExistingModuleCachePath) {
784       if (Diags)
785         Diags->Report(diag::err_pch_modulecache_mismatch)
786           << SpecificModuleCachePath << ExistingModuleCachePath;
787       return true;
788     }
789   }
790 
791   return false;
792 }
793 
794 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
795                                            StringRef SpecificModuleCachePath,
796                                            bool Complain) {
797   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
798                                   PP.getHeaderSearchInfo().getModuleCachePath(),
799                                   Complain ? &Reader.Diags : nullptr,
800                                   PP.getLangOpts());
801 }
802 
803 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
804   PP.setCounterValue(Value);
805 }
806 
807 //===----------------------------------------------------------------------===//
808 // AST reader implementation
809 //===----------------------------------------------------------------------===//
810 
811 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
812                                            bool TakeOwnership) {
813   DeserializationListener = Listener;
814   OwnsDeserializationListener = TakeOwnership;
815 }
816 
817 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
818   return serialization::ComputeHash(Sel);
819 }
820 
821 std::pair<unsigned, unsigned>
822 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
823   using namespace llvm::support;
824 
825   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
826   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
827   return std::make_pair(KeyLen, DataLen);
828 }
829 
830 ASTSelectorLookupTrait::internal_key_type
831 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
832   using namespace llvm::support;
833 
834   SelectorTable &SelTable = Reader.getContext().Selectors;
835   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
836   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
837       F, endian::readNext<uint32_t, little, unaligned>(d));
838   if (N == 0)
839     return SelTable.getNullarySelector(FirstII);
840   else if (N == 1)
841     return SelTable.getUnarySelector(FirstII);
842 
843   SmallVector<IdentifierInfo *, 16> Args;
844   Args.push_back(FirstII);
845   for (unsigned I = 1; I != N; ++I)
846     Args.push_back(Reader.getLocalIdentifier(
847         F, endian::readNext<uint32_t, little, unaligned>(d)));
848 
849   return SelTable.getSelector(N, Args.data());
850 }
851 
852 ASTSelectorLookupTrait::data_type
853 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
854                                  unsigned DataLen) {
855   using namespace llvm::support;
856 
857   data_type Result;
858 
859   Result.ID = Reader.getGlobalSelectorID(
860       F, endian::readNext<uint32_t, little, unaligned>(d));
861   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
862   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
863   Result.InstanceBits = FullInstanceBits & 0x3;
864   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
865   Result.FactoryBits = FullFactoryBits & 0x3;
866   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
867   unsigned NumInstanceMethods = FullInstanceBits >> 3;
868   unsigned NumFactoryMethods = FullFactoryBits >> 3;
869 
870   // Load instance methods
871   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
872     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
873             F, endian::readNext<uint32_t, little, unaligned>(d)))
874       Result.Instance.push_back(Method);
875   }
876 
877   // Load factory methods
878   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
879     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
880             F, endian::readNext<uint32_t, little, unaligned>(d)))
881       Result.Factory.push_back(Method);
882   }
883 
884   return Result;
885 }
886 
887 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
888   return llvm::djbHash(a);
889 }
890 
891 std::pair<unsigned, unsigned>
892 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
893   using namespace llvm::support;
894 
895   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
896   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
897   return std::make_pair(KeyLen, DataLen);
898 }
899 
900 ASTIdentifierLookupTraitBase::internal_key_type
901 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
902   assert(n >= 2 && d[n-1] == '\0');
903   return StringRef((const char*) d, n-1);
904 }
905 
906 /// Whether the given identifier is "interesting".
907 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
908                                     bool IsModule) {
909   return II.hadMacroDefinition() ||
910          II.isPoisoned() ||
911          (IsModule ? II.hasRevertedBuiltin() : II.getObjCOrBuiltinID()) ||
912          II.hasRevertedTokenIDToIdentifier() ||
913          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
914           II.getFETokenInfo());
915 }
916 
917 static bool readBit(unsigned &Bits) {
918   bool Value = Bits & 0x1;
919   Bits >>= 1;
920   return Value;
921 }
922 
923 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
924   using namespace llvm::support;
925 
926   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
927   return Reader.getGlobalIdentifierID(F, RawID >> 1);
928 }
929 
930 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
931   if (!II.isFromAST()) {
932     II.setIsFromAST();
933     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
934     if (isInterestingIdentifier(Reader, II, IsModule))
935       II.setChangedSinceDeserialization();
936   }
937 }
938 
939 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
940                                                    const unsigned char* d,
941                                                    unsigned DataLen) {
942   using namespace llvm::support;
943 
944   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
945   bool IsInteresting = RawID & 0x01;
946 
947   // Wipe out the "is interesting" bit.
948   RawID = RawID >> 1;
949 
950   // Build the IdentifierInfo and link the identifier ID with it.
951   IdentifierInfo *II = KnownII;
952   if (!II) {
953     II = &Reader.getIdentifierTable().getOwn(k);
954     KnownII = II;
955   }
956   markIdentifierFromAST(Reader, *II);
957   Reader.markIdentifierUpToDate(II);
958 
959   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
960   if (!IsInteresting) {
961     // For uninteresting identifiers, there's nothing else to do. Just notify
962     // the reader that we've finished loading this identifier.
963     Reader.SetIdentifierInfo(ID, II);
964     return II;
965   }
966 
967   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
968   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
969   bool CPlusPlusOperatorKeyword = readBit(Bits);
970   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
971   bool HasRevertedBuiltin = readBit(Bits);
972   bool Poisoned = readBit(Bits);
973   bool ExtensionToken = readBit(Bits);
974   bool HadMacroDefinition = readBit(Bits);
975 
976   assert(Bits == 0 && "Extra bits in the identifier?");
977   DataLen -= 8;
978 
979   // Set or check the various bits in the IdentifierInfo structure.
980   // Token IDs are read-only.
981   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
982     II->revertTokenIDToIdentifier();
983   if (!F.isModule())
984     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
985   else if (HasRevertedBuiltin && II->getBuiltinID()) {
986     II->revertBuiltin();
987     assert((II->hasRevertedBuiltin() ||
988             II->getObjCOrBuiltinID() == ObjCOrBuiltinID) &&
989            "Incorrect ObjC keyword or builtin ID");
990   }
991   assert(II->isExtensionToken() == ExtensionToken &&
992          "Incorrect extension token flag");
993   (void)ExtensionToken;
994   if (Poisoned)
995     II->setIsPoisoned(true);
996   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
997          "Incorrect C++ operator keyword flag");
998   (void)CPlusPlusOperatorKeyword;
999 
1000   // If this identifier is a macro, deserialize the macro
1001   // definition.
1002   if (HadMacroDefinition) {
1003     uint32_t MacroDirectivesOffset =
1004         endian::readNext<uint32_t, little, unaligned>(d);
1005     DataLen -= 4;
1006 
1007     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1008   }
1009 
1010   Reader.SetIdentifierInfo(ID, II);
1011 
1012   // Read all of the declarations visible at global scope with this
1013   // name.
1014   if (DataLen > 0) {
1015     SmallVector<uint32_t, 4> DeclIDs;
1016     for (; DataLen > 0; DataLen -= 4)
1017       DeclIDs.push_back(Reader.getGlobalDeclID(
1018           F, endian::readNext<uint32_t, little, unaligned>(d)));
1019     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1020   }
1021 
1022   return II;
1023 }
1024 
1025 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1026     : Kind(Name.getNameKind()) {
1027   switch (Kind) {
1028   case DeclarationName::Identifier:
1029     Data = (uint64_t)Name.getAsIdentifierInfo();
1030     break;
1031   case DeclarationName::ObjCZeroArgSelector:
1032   case DeclarationName::ObjCOneArgSelector:
1033   case DeclarationName::ObjCMultiArgSelector:
1034     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1035     break;
1036   case DeclarationName::CXXOperatorName:
1037     Data = Name.getCXXOverloadedOperator();
1038     break;
1039   case DeclarationName::CXXLiteralOperatorName:
1040     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1041     break;
1042   case DeclarationName::CXXDeductionGuideName:
1043     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1044                ->getDeclName().getAsIdentifierInfo();
1045     break;
1046   case DeclarationName::CXXConstructorName:
1047   case DeclarationName::CXXDestructorName:
1048   case DeclarationName::CXXConversionFunctionName:
1049   case DeclarationName::CXXUsingDirective:
1050     Data = 0;
1051     break;
1052   }
1053 }
1054 
1055 unsigned DeclarationNameKey::getHash() const {
1056   llvm::FoldingSetNodeID ID;
1057   ID.AddInteger(Kind);
1058 
1059   switch (Kind) {
1060   case DeclarationName::Identifier:
1061   case DeclarationName::CXXLiteralOperatorName:
1062   case DeclarationName::CXXDeductionGuideName:
1063     ID.AddString(((IdentifierInfo*)Data)->getName());
1064     break;
1065   case DeclarationName::ObjCZeroArgSelector:
1066   case DeclarationName::ObjCOneArgSelector:
1067   case DeclarationName::ObjCMultiArgSelector:
1068     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1069     break;
1070   case DeclarationName::CXXOperatorName:
1071     ID.AddInteger((OverloadedOperatorKind)Data);
1072     break;
1073   case DeclarationName::CXXConstructorName:
1074   case DeclarationName::CXXDestructorName:
1075   case DeclarationName::CXXConversionFunctionName:
1076   case DeclarationName::CXXUsingDirective:
1077     break;
1078   }
1079 
1080   return ID.ComputeHash();
1081 }
1082 
1083 ModuleFile *
1084 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1085   using namespace llvm::support;
1086 
1087   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1088   return Reader.getLocalModuleFile(F, ModuleFileID);
1089 }
1090 
1091 std::pair<unsigned, unsigned>
1092 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1093   using namespace llvm::support;
1094 
1095   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
1096   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
1097   return std::make_pair(KeyLen, DataLen);
1098 }
1099 
1100 ASTDeclContextNameLookupTrait::internal_key_type
1101 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1102   using namespace llvm::support;
1103 
1104   auto Kind = (DeclarationName::NameKind)*d++;
1105   uint64_t Data;
1106   switch (Kind) {
1107   case DeclarationName::Identifier:
1108   case DeclarationName::CXXLiteralOperatorName:
1109   case DeclarationName::CXXDeductionGuideName:
1110     Data = (uint64_t)Reader.getLocalIdentifier(
1111         F, endian::readNext<uint32_t, little, unaligned>(d));
1112     break;
1113   case DeclarationName::ObjCZeroArgSelector:
1114   case DeclarationName::ObjCOneArgSelector:
1115   case DeclarationName::ObjCMultiArgSelector:
1116     Data =
1117         (uint64_t)Reader.getLocalSelector(
1118                              F, endian::readNext<uint32_t, little, unaligned>(
1119                                     d)).getAsOpaquePtr();
1120     break;
1121   case DeclarationName::CXXOperatorName:
1122     Data = *d++; // OverloadedOperatorKind
1123     break;
1124   case DeclarationName::CXXConstructorName:
1125   case DeclarationName::CXXDestructorName:
1126   case DeclarationName::CXXConversionFunctionName:
1127   case DeclarationName::CXXUsingDirective:
1128     Data = 0;
1129     break;
1130   }
1131 
1132   return DeclarationNameKey(Kind, Data);
1133 }
1134 
1135 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1136                                                  const unsigned char *d,
1137                                                  unsigned DataLen,
1138                                                  data_type_builder &Val) {
1139   using namespace llvm::support;
1140 
1141   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1142     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1143     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1144   }
1145 }
1146 
1147 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1148                                               BitstreamCursor &Cursor,
1149                                               uint64_t Offset,
1150                                               DeclContext *DC) {
1151   assert(Offset != 0);
1152 
1153   SavedStreamPosition SavedPosition(Cursor);
1154   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1155     Error(std::move(Err));
1156     return true;
1157   }
1158 
1159   RecordData Record;
1160   StringRef Blob;
1161   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1162   if (!MaybeCode) {
1163     Error(MaybeCode.takeError());
1164     return true;
1165   }
1166   unsigned Code = MaybeCode.get();
1167 
1168   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1169   if (!MaybeRecCode) {
1170     Error(MaybeRecCode.takeError());
1171     return true;
1172   }
1173   unsigned RecCode = MaybeRecCode.get();
1174   if (RecCode != DECL_CONTEXT_LEXICAL) {
1175     Error("Expected lexical block");
1176     return true;
1177   }
1178 
1179   assert(!isa<TranslationUnitDecl>(DC) &&
1180          "expected a TU_UPDATE_LEXICAL record for TU");
1181   // If we are handling a C++ class template instantiation, we can see multiple
1182   // lexical updates for the same record. It's important that we select only one
1183   // of them, so that field numbering works properly. Just pick the first one we
1184   // see.
1185   auto &Lex = LexicalDecls[DC];
1186   if (!Lex.first) {
1187     Lex = std::make_pair(
1188         &M, llvm::makeArrayRef(
1189                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1190                     Blob.data()),
1191                 Blob.size() / 4));
1192   }
1193   DC->setHasExternalLexicalStorage(true);
1194   return false;
1195 }
1196 
1197 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1198                                               BitstreamCursor &Cursor,
1199                                               uint64_t Offset,
1200                                               DeclID ID) {
1201   assert(Offset != 0);
1202 
1203   SavedStreamPosition SavedPosition(Cursor);
1204   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1205     Error(std::move(Err));
1206     return true;
1207   }
1208 
1209   RecordData Record;
1210   StringRef Blob;
1211   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1212   if (!MaybeCode) {
1213     Error(MaybeCode.takeError());
1214     return true;
1215   }
1216   unsigned Code = MaybeCode.get();
1217 
1218   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1219   if (!MaybeRecCode) {
1220     Error(MaybeRecCode.takeError());
1221     return true;
1222   }
1223   unsigned RecCode = MaybeRecCode.get();
1224   if (RecCode != DECL_CONTEXT_VISIBLE) {
1225     Error("Expected visible lookup table block");
1226     return true;
1227   }
1228 
1229   // We can't safely determine the primary context yet, so delay attaching the
1230   // lookup table until we're done with recursive deserialization.
1231   auto *Data = (const unsigned char*)Blob.data();
1232   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1233   return false;
1234 }
1235 
1236 void ASTReader::Error(StringRef Msg) const {
1237   Error(diag::err_fe_pch_malformed, Msg);
1238   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1239       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1240     Diag(diag::note_module_cache_path)
1241       << PP.getHeaderSearchInfo().getModuleCachePath();
1242   }
1243 }
1244 
1245 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1246                       StringRef Arg3) const {
1247   if (Diags.isDiagnosticInFlight())
1248     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1249   else
1250     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1251 }
1252 
1253 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1254                       unsigned Select) const {
1255   if (!Diags.isDiagnosticInFlight())
1256     Diag(DiagID) << Arg1 << Arg2 << Select;
1257 }
1258 
1259 void ASTReader::Error(llvm::Error &&Err) const {
1260   Error(toString(std::move(Err)));
1261 }
1262 
1263 //===----------------------------------------------------------------------===//
1264 // Source Manager Deserialization
1265 //===----------------------------------------------------------------------===//
1266 
1267 /// Read the line table in the source manager block.
1268 /// \returns true if there was an error.
1269 bool ASTReader::ParseLineTable(ModuleFile &F,
1270                                const RecordData &Record) {
1271   unsigned Idx = 0;
1272   LineTableInfo &LineTable = SourceMgr.getLineTable();
1273 
1274   // Parse the file names
1275   std::map<int, int> FileIDs;
1276   FileIDs[-1] = -1; // For unspecified filenames.
1277   for (unsigned I = 0; Record[Idx]; ++I) {
1278     // Extract the file name
1279     auto Filename = ReadPath(F, Record, Idx);
1280     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1281   }
1282   ++Idx;
1283 
1284   // Parse the line entries
1285   std::vector<LineEntry> Entries;
1286   while (Idx < Record.size()) {
1287     int FID = Record[Idx++];
1288     assert(FID >= 0 && "Serialized line entries for non-local file.");
1289     // Remap FileID from 1-based old view.
1290     FID += F.SLocEntryBaseID - 1;
1291 
1292     // Extract the line entries
1293     unsigned NumEntries = Record[Idx++];
1294     assert(NumEntries && "no line entries for file ID");
1295     Entries.clear();
1296     Entries.reserve(NumEntries);
1297     for (unsigned I = 0; I != NumEntries; ++I) {
1298       unsigned FileOffset = Record[Idx++];
1299       unsigned LineNo = Record[Idx++];
1300       int FilenameID = FileIDs[Record[Idx++]];
1301       SrcMgr::CharacteristicKind FileKind
1302         = (SrcMgr::CharacteristicKind)Record[Idx++];
1303       unsigned IncludeOffset = Record[Idx++];
1304       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1305                                        FileKind, IncludeOffset));
1306     }
1307     LineTable.AddEntry(FileID::get(FID), Entries);
1308   }
1309 
1310   return false;
1311 }
1312 
1313 /// Read a source manager block
1314 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1315   using namespace SrcMgr;
1316 
1317   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1318 
1319   // Set the source-location entry cursor to the current position in
1320   // the stream. This cursor will be used to read the contents of the
1321   // source manager block initially, and then lazily read
1322   // source-location entries as needed.
1323   SLocEntryCursor = F.Stream;
1324 
1325   // The stream itself is going to skip over the source manager block.
1326   if (llvm::Error Err = F.Stream.SkipBlock()) {
1327     Error(std::move(Err));
1328     return true;
1329   }
1330 
1331   // Enter the source manager block.
1332   if (llvm::Error Err =
1333           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1334     Error(std::move(Err));
1335     return true;
1336   }
1337 
1338   RecordData Record;
1339   while (true) {
1340     Expected<llvm::BitstreamEntry> MaybeE =
1341         SLocEntryCursor.advanceSkippingSubblocks();
1342     if (!MaybeE) {
1343       Error(MaybeE.takeError());
1344       return true;
1345     }
1346     llvm::BitstreamEntry E = MaybeE.get();
1347 
1348     switch (E.Kind) {
1349     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1350     case llvm::BitstreamEntry::Error:
1351       Error("malformed block record in AST file");
1352       return true;
1353     case llvm::BitstreamEntry::EndBlock:
1354       return false;
1355     case llvm::BitstreamEntry::Record:
1356       // The interesting case.
1357       break;
1358     }
1359 
1360     // Read a record.
1361     Record.clear();
1362     StringRef Blob;
1363     Expected<unsigned> MaybeRecord =
1364         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1365     if (!MaybeRecord) {
1366       Error(MaybeRecord.takeError());
1367       return true;
1368     }
1369     switch (MaybeRecord.get()) {
1370     default:  // Default behavior: ignore.
1371       break;
1372 
1373     case SM_SLOC_FILE_ENTRY:
1374     case SM_SLOC_BUFFER_ENTRY:
1375     case SM_SLOC_EXPANSION_ENTRY:
1376       // Once we hit one of the source location entries, we're done.
1377       return false;
1378     }
1379   }
1380 }
1381 
1382 /// If a header file is not found at the path that we expect it to be
1383 /// and the PCH file was moved from its original location, try to resolve the
1384 /// file by assuming that header+PCH were moved together and the header is in
1385 /// the same place relative to the PCH.
1386 static std::string
1387 resolveFileRelativeToOriginalDir(const std::string &Filename,
1388                                  const std::string &OriginalDir,
1389                                  const std::string &CurrDir) {
1390   assert(OriginalDir != CurrDir &&
1391          "No point trying to resolve the file if the PCH dir didn't change");
1392 
1393   using namespace llvm::sys;
1394 
1395   SmallString<128> filePath(Filename);
1396   fs::make_absolute(filePath);
1397   assert(path::is_absolute(OriginalDir));
1398   SmallString<128> currPCHPath(CurrDir);
1399 
1400   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1401                        fileDirE = path::end(path::parent_path(filePath));
1402   path::const_iterator origDirI = path::begin(OriginalDir),
1403                        origDirE = path::end(OriginalDir);
1404   // Skip the common path components from filePath and OriginalDir.
1405   while (fileDirI != fileDirE && origDirI != origDirE &&
1406          *fileDirI == *origDirI) {
1407     ++fileDirI;
1408     ++origDirI;
1409   }
1410   for (; origDirI != origDirE; ++origDirI)
1411     path::append(currPCHPath, "..");
1412   path::append(currPCHPath, fileDirI, fileDirE);
1413   path::append(currPCHPath, path::filename(Filename));
1414   return currPCHPath.str();
1415 }
1416 
1417 bool ASTReader::ReadSLocEntry(int ID) {
1418   if (ID == 0)
1419     return false;
1420 
1421   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1422     Error("source location entry ID out-of-range for AST file");
1423     return true;
1424   }
1425 
1426   // Local helper to read the (possibly-compressed) buffer data following the
1427   // entry record.
1428   auto ReadBuffer = [this](
1429       BitstreamCursor &SLocEntryCursor,
1430       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1431     RecordData Record;
1432     StringRef Blob;
1433     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1434     if (!MaybeCode) {
1435       Error(MaybeCode.takeError());
1436       return nullptr;
1437     }
1438     unsigned Code = MaybeCode.get();
1439 
1440     Expected<unsigned> MaybeRecCode =
1441         SLocEntryCursor.readRecord(Code, Record, &Blob);
1442     if (!MaybeRecCode) {
1443       Error(MaybeRecCode.takeError());
1444       return nullptr;
1445     }
1446     unsigned RecCode = MaybeRecCode.get();
1447 
1448     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1449       if (!llvm::zlib::isAvailable()) {
1450         Error("zlib is not available");
1451         return nullptr;
1452       }
1453       SmallString<0> Uncompressed;
1454       if (llvm::Error E =
1455               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1456         Error("could not decompress embedded file contents: " +
1457               llvm::toString(std::move(E)));
1458         return nullptr;
1459       }
1460       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1461     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1462       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1463     } else {
1464       Error("AST record has invalid code");
1465       return nullptr;
1466     }
1467   };
1468 
1469   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1470   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1471           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1472     Error(std::move(Err));
1473     return true;
1474   }
1475 
1476   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1477   unsigned BaseOffset = F->SLocEntryBaseOffset;
1478 
1479   ++NumSLocEntriesRead;
1480   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1481   if (!MaybeEntry) {
1482     Error(MaybeEntry.takeError());
1483     return true;
1484   }
1485   llvm::BitstreamEntry Entry = MaybeEntry.get();
1486 
1487   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1488     Error("incorrectly-formatted source location entry in AST file");
1489     return true;
1490   }
1491 
1492   RecordData Record;
1493   StringRef Blob;
1494   Expected<unsigned> MaybeSLOC =
1495       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1496   if (!MaybeSLOC) {
1497     Error(MaybeSLOC.takeError());
1498     return true;
1499   }
1500   switch (MaybeSLOC.get()) {
1501   default:
1502     Error("incorrectly-formatted source location entry in AST file");
1503     return true;
1504 
1505   case SM_SLOC_FILE_ENTRY: {
1506     // We will detect whether a file changed and return 'Failure' for it, but
1507     // we will also try to fail gracefully by setting up the SLocEntry.
1508     unsigned InputID = Record[4];
1509     InputFile IF = getInputFile(*F, InputID);
1510     const FileEntry *File = IF.getFile();
1511     bool OverriddenBuffer = IF.isOverridden();
1512 
1513     // Note that we only check if a File was returned. If it was out-of-date
1514     // we have complained but we will continue creating a FileID to recover
1515     // gracefully.
1516     if (!File)
1517       return true;
1518 
1519     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1520     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1521       // This is the module's main file.
1522       IncludeLoc = getImportLocation(F);
1523     }
1524     SrcMgr::CharacteristicKind
1525       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1526     // FIXME: The FileID should be created from the FileEntryRef.
1527     FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1528                                         ID, BaseOffset + Record[0]);
1529     SrcMgr::FileInfo &FileInfo =
1530           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1531     FileInfo.NumCreatedFIDs = Record[5];
1532     if (Record[3])
1533       FileInfo.setHasLineDirectives();
1534 
1535     unsigned NumFileDecls = Record[7];
1536     if (NumFileDecls && ContextObj) {
1537       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1538       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1539       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1540                                                              NumFileDecls));
1541     }
1542 
1543     const SrcMgr::ContentCache *ContentCache
1544       = SourceMgr.getOrCreateContentCache(File, isSystem(FileCharacter));
1545     if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1546         ContentCache->ContentsEntry == ContentCache->OrigEntry &&
1547         !ContentCache->getRawBuffer()) {
1548       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1549       if (!Buffer)
1550         return true;
1551       SourceMgr.overrideFileContents(File, std::move(Buffer));
1552     }
1553 
1554     break;
1555   }
1556 
1557   case SM_SLOC_BUFFER_ENTRY: {
1558     const char *Name = Blob.data();
1559     unsigned Offset = Record[0];
1560     SrcMgr::CharacteristicKind
1561       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1562     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1563     if (IncludeLoc.isInvalid() && F->isModule()) {
1564       IncludeLoc = getImportLocation(F);
1565     }
1566 
1567     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1568     if (!Buffer)
1569       return true;
1570     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1571                            BaseOffset + Offset, IncludeLoc);
1572     break;
1573   }
1574 
1575   case SM_SLOC_EXPANSION_ENTRY: {
1576     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1577     SourceMgr.createExpansionLoc(SpellingLoc,
1578                                      ReadSourceLocation(*F, Record[2]),
1579                                      ReadSourceLocation(*F, Record[3]),
1580                                      Record[5],
1581                                      Record[4],
1582                                      ID,
1583                                      BaseOffset + Record[0]);
1584     break;
1585   }
1586   }
1587 
1588   return false;
1589 }
1590 
1591 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1592   if (ID == 0)
1593     return std::make_pair(SourceLocation(), "");
1594 
1595   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1596     Error("source location entry ID out-of-range for AST file");
1597     return std::make_pair(SourceLocation(), "");
1598   }
1599 
1600   // Find which module file this entry lands in.
1601   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1602   if (!M->isModule())
1603     return std::make_pair(SourceLocation(), "");
1604 
1605   // FIXME: Can we map this down to a particular submodule? That would be
1606   // ideal.
1607   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1608 }
1609 
1610 /// Find the location where the module F is imported.
1611 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1612   if (F->ImportLoc.isValid())
1613     return F->ImportLoc;
1614 
1615   // Otherwise we have a PCH. It's considered to be "imported" at the first
1616   // location of its includer.
1617   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1618     // Main file is the importer.
1619     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1620     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1621   }
1622   return F->ImportedBy[0]->FirstLoc;
1623 }
1624 
1625 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1626 /// the abbreviations that are at the top of the block and then leave the cursor
1627 /// pointing into the block.
1628 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) {
1629   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1630     // FIXME this drops errors on the floor.
1631     consumeError(std::move(Err));
1632     return true;
1633   }
1634 
1635   while (true) {
1636     uint64_t Offset = Cursor.GetCurrentBitNo();
1637     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1638     if (!MaybeCode) {
1639       // FIXME this drops errors on the floor.
1640       consumeError(MaybeCode.takeError());
1641       return true;
1642     }
1643     unsigned Code = MaybeCode.get();
1644 
1645     // We expect all abbrevs to be at the start of the block.
1646     if (Code != llvm::bitc::DEFINE_ABBREV) {
1647       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1648         // FIXME this drops errors on the floor.
1649         consumeError(std::move(Err));
1650         return true;
1651       }
1652       return false;
1653     }
1654     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1655       // FIXME this drops errors on the floor.
1656       consumeError(std::move(Err));
1657       return true;
1658     }
1659   }
1660 }
1661 
1662 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1663                            unsigned &Idx) {
1664   Token Tok;
1665   Tok.startToken();
1666   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1667   Tok.setLength(Record[Idx++]);
1668   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1669     Tok.setIdentifierInfo(II);
1670   Tok.setKind((tok::TokenKind)Record[Idx++]);
1671   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1672   return Tok;
1673 }
1674 
1675 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1676   BitstreamCursor &Stream = F.MacroCursor;
1677 
1678   // Keep track of where we are in the stream, then jump back there
1679   // after reading this macro.
1680   SavedStreamPosition SavedPosition(Stream);
1681 
1682   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1683     // FIXME this drops errors on the floor.
1684     consumeError(std::move(Err));
1685     return nullptr;
1686   }
1687   RecordData Record;
1688   SmallVector<IdentifierInfo*, 16> MacroParams;
1689   MacroInfo *Macro = nullptr;
1690 
1691   while (true) {
1692     // Advance to the next record, but if we get to the end of the block, don't
1693     // pop it (removing all the abbreviations from the cursor) since we want to
1694     // be able to reseek within the block and read entries.
1695     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1696     Expected<llvm::BitstreamEntry> MaybeEntry =
1697         Stream.advanceSkippingSubblocks(Flags);
1698     if (!MaybeEntry) {
1699       Error(MaybeEntry.takeError());
1700       return Macro;
1701     }
1702     llvm::BitstreamEntry Entry = MaybeEntry.get();
1703 
1704     switch (Entry.Kind) {
1705     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1706     case llvm::BitstreamEntry::Error:
1707       Error("malformed block record in AST file");
1708       return Macro;
1709     case llvm::BitstreamEntry::EndBlock:
1710       return Macro;
1711     case llvm::BitstreamEntry::Record:
1712       // The interesting case.
1713       break;
1714     }
1715 
1716     // Read a record.
1717     Record.clear();
1718     PreprocessorRecordTypes RecType;
1719     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1720       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1721     else {
1722       Error(MaybeRecType.takeError());
1723       return Macro;
1724     }
1725     switch (RecType) {
1726     case PP_MODULE_MACRO:
1727     case PP_MACRO_DIRECTIVE_HISTORY:
1728       return Macro;
1729 
1730     case PP_MACRO_OBJECT_LIKE:
1731     case PP_MACRO_FUNCTION_LIKE: {
1732       // If we already have a macro, that means that we've hit the end
1733       // of the definition of the macro we were looking for. We're
1734       // done.
1735       if (Macro)
1736         return Macro;
1737 
1738       unsigned NextIndex = 1; // Skip identifier ID.
1739       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1740       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1741       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1742       MI->setIsUsed(Record[NextIndex++]);
1743       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1744 
1745       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1746         // Decode function-like macro info.
1747         bool isC99VarArgs = Record[NextIndex++];
1748         bool isGNUVarArgs = Record[NextIndex++];
1749         bool hasCommaPasting = Record[NextIndex++];
1750         MacroParams.clear();
1751         unsigned NumArgs = Record[NextIndex++];
1752         for (unsigned i = 0; i != NumArgs; ++i)
1753           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1754 
1755         // Install function-like macro info.
1756         MI->setIsFunctionLike();
1757         if (isC99VarArgs) MI->setIsC99Varargs();
1758         if (isGNUVarArgs) MI->setIsGNUVarargs();
1759         if (hasCommaPasting) MI->setHasCommaPasting();
1760         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1761       }
1762 
1763       // Remember that we saw this macro last so that we add the tokens that
1764       // form its body to it.
1765       Macro = MI;
1766 
1767       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1768           Record[NextIndex]) {
1769         // We have a macro definition. Register the association
1770         PreprocessedEntityID
1771             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1772         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1773         PreprocessingRecord::PPEntityID PPID =
1774             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1775         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1776             PPRec.getPreprocessedEntity(PPID));
1777         if (PPDef)
1778           PPRec.RegisterMacroDefinition(Macro, PPDef);
1779       }
1780 
1781       ++NumMacrosRead;
1782       break;
1783     }
1784 
1785     case PP_TOKEN: {
1786       // If we see a TOKEN before a PP_MACRO_*, then the file is
1787       // erroneous, just pretend we didn't see this.
1788       if (!Macro) break;
1789 
1790       unsigned Idx = 0;
1791       Token Tok = ReadToken(F, Record, Idx);
1792       Macro->AddTokenToBody(Tok);
1793       break;
1794     }
1795     }
1796   }
1797 }
1798 
1799 PreprocessedEntityID
1800 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1801                                          unsigned LocalID) const {
1802   if (!M.ModuleOffsetMap.empty())
1803     ReadModuleOffsetMap(M);
1804 
1805   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1806     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1807   assert(I != M.PreprocessedEntityRemap.end()
1808          && "Invalid index into preprocessed entity index remap");
1809 
1810   return LocalID + I->second;
1811 }
1812 
1813 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1814   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1815 }
1816 
1817 HeaderFileInfoTrait::internal_key_type
1818 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1819   internal_key_type ikey = {FE->getSize(),
1820                             M.HasTimestamps ? FE->getModificationTime() : 0,
1821                             FE->getName(), /*Imported*/ false};
1822   return ikey;
1823 }
1824 
1825 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1826   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1827     return false;
1828 
1829   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1830     return true;
1831 
1832   // Determine whether the actual files are equivalent.
1833   FileManager &FileMgr = Reader.getFileManager();
1834   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1835     if (!Key.Imported) {
1836       if (auto File = FileMgr.getFile(Key.Filename))
1837         return *File;
1838       return nullptr;
1839     }
1840 
1841     std::string Resolved = Key.Filename;
1842     Reader.ResolveImportedPath(M, Resolved);
1843     if (auto File = FileMgr.getFile(Resolved))
1844       return *File;
1845     return nullptr;
1846   };
1847 
1848   const FileEntry *FEA = GetFile(a);
1849   const FileEntry *FEB = GetFile(b);
1850   return FEA && FEA == FEB;
1851 }
1852 
1853 std::pair<unsigned, unsigned>
1854 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1855   using namespace llvm::support;
1856 
1857   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1858   unsigned DataLen = (unsigned) *d++;
1859   return std::make_pair(KeyLen, DataLen);
1860 }
1861 
1862 HeaderFileInfoTrait::internal_key_type
1863 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1864   using namespace llvm::support;
1865 
1866   internal_key_type ikey;
1867   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1868   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1869   ikey.Filename = (const char *)d;
1870   ikey.Imported = true;
1871   return ikey;
1872 }
1873 
1874 HeaderFileInfoTrait::data_type
1875 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1876                               unsigned DataLen) {
1877   using namespace llvm::support;
1878 
1879   const unsigned char *End = d + DataLen;
1880   HeaderFileInfo HFI;
1881   unsigned Flags = *d++;
1882   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1883   HFI.isImport |= (Flags >> 5) & 0x01;
1884   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1885   HFI.DirInfo = (Flags >> 1) & 0x07;
1886   HFI.IndexHeaderMapHeader = Flags & 0x01;
1887   // FIXME: Find a better way to handle this. Maybe just store a
1888   // "has been included" flag?
1889   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1890                              HFI.NumIncludes);
1891   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1892       M, endian::readNext<uint32_t, little, unaligned>(d));
1893   if (unsigned FrameworkOffset =
1894           endian::readNext<uint32_t, little, unaligned>(d)) {
1895     // The framework offset is 1 greater than the actual offset,
1896     // since 0 is used as an indicator for "no framework name".
1897     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1898     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1899   }
1900 
1901   assert((End - d) % 4 == 0 &&
1902          "Wrong data length in HeaderFileInfo deserialization");
1903   while (d != End) {
1904     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1905     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1906     LocalSMID >>= 2;
1907 
1908     // This header is part of a module. Associate it with the module to enable
1909     // implicit module import.
1910     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1911     Module *Mod = Reader.getSubmodule(GlobalSMID);
1912     FileManager &FileMgr = Reader.getFileManager();
1913     ModuleMap &ModMap =
1914         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1915 
1916     std::string Filename = key.Filename;
1917     if (key.Imported)
1918       Reader.ResolveImportedPath(M, Filename);
1919     // FIXME: This is not always the right filename-as-written, but we're not
1920     // going to use this information to rebuild the module, so it doesn't make
1921     // a lot of difference.
1922     Module::Header H = { key.Filename, *FileMgr.getFile(Filename) };
1923     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1924     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1925   }
1926 
1927   // This HeaderFileInfo was externally loaded.
1928   HFI.External = true;
1929   HFI.IsValid = true;
1930   return HFI;
1931 }
1932 
1933 void ASTReader::addPendingMacro(IdentifierInfo *II,
1934                                 ModuleFile *M,
1935                                 uint64_t MacroDirectivesOffset) {
1936   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1937   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1938 }
1939 
1940 void ASTReader::ReadDefinedMacros() {
1941   // Note that we are loading defined macros.
1942   Deserializing Macros(this);
1943 
1944   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1945     BitstreamCursor &MacroCursor = I.MacroCursor;
1946 
1947     // If there was no preprocessor block, skip this file.
1948     if (MacroCursor.getBitcodeBytes().empty())
1949       continue;
1950 
1951     BitstreamCursor Cursor = MacroCursor;
1952     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1953       Error(std::move(Err));
1954       return;
1955     }
1956 
1957     RecordData Record;
1958     while (true) {
1959       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1960       if (!MaybeE) {
1961         Error(MaybeE.takeError());
1962         return;
1963       }
1964       llvm::BitstreamEntry E = MaybeE.get();
1965 
1966       switch (E.Kind) {
1967       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1968       case llvm::BitstreamEntry::Error:
1969         Error("malformed block record in AST file");
1970         return;
1971       case llvm::BitstreamEntry::EndBlock:
1972         goto NextCursor;
1973 
1974       case llvm::BitstreamEntry::Record: {
1975         Record.clear();
1976         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1977         if (!MaybeRecord) {
1978           Error(MaybeRecord.takeError());
1979           return;
1980         }
1981         switch (MaybeRecord.get()) {
1982         default:  // Default behavior: ignore.
1983           break;
1984 
1985         case PP_MACRO_OBJECT_LIKE:
1986         case PP_MACRO_FUNCTION_LIKE: {
1987           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1988           if (II->isOutOfDate())
1989             updateOutOfDateIdentifier(*II);
1990           break;
1991         }
1992 
1993         case PP_TOKEN:
1994           // Ignore tokens.
1995           break;
1996         }
1997         break;
1998       }
1999       }
2000     }
2001     NextCursor:  ;
2002   }
2003 }
2004 
2005 namespace {
2006 
2007   /// Visitor class used to look up identifirs in an AST file.
2008   class IdentifierLookupVisitor {
2009     StringRef Name;
2010     unsigned NameHash;
2011     unsigned PriorGeneration;
2012     unsigned &NumIdentifierLookups;
2013     unsigned &NumIdentifierLookupHits;
2014     IdentifierInfo *Found = nullptr;
2015 
2016   public:
2017     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2018                             unsigned &NumIdentifierLookups,
2019                             unsigned &NumIdentifierLookupHits)
2020       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2021         PriorGeneration(PriorGeneration),
2022         NumIdentifierLookups(NumIdentifierLookups),
2023         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2024 
2025     bool operator()(ModuleFile &M) {
2026       // If we've already searched this module file, skip it now.
2027       if (M.Generation <= PriorGeneration)
2028         return true;
2029 
2030       ASTIdentifierLookupTable *IdTable
2031         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2032       if (!IdTable)
2033         return false;
2034 
2035       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2036                                      Found);
2037       ++NumIdentifierLookups;
2038       ASTIdentifierLookupTable::iterator Pos =
2039           IdTable->find_hashed(Name, NameHash, &Trait);
2040       if (Pos == IdTable->end())
2041         return false;
2042 
2043       // Dereferencing the iterator has the effect of building the
2044       // IdentifierInfo node and populating it with the various
2045       // declarations it needs.
2046       ++NumIdentifierLookupHits;
2047       Found = *Pos;
2048       return true;
2049     }
2050 
2051     // Retrieve the identifier info found within the module
2052     // files.
2053     IdentifierInfo *getIdentifierInfo() const { return Found; }
2054   };
2055 
2056 } // namespace
2057 
2058 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2059   // Note that we are loading an identifier.
2060   Deserializing AnIdentifier(this);
2061 
2062   unsigned PriorGeneration = 0;
2063   if (getContext().getLangOpts().Modules)
2064     PriorGeneration = IdentifierGeneration[&II];
2065 
2066   // If there is a global index, look there first to determine which modules
2067   // provably do not have any results for this identifier.
2068   GlobalModuleIndex::HitSet Hits;
2069   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2070   if (!loadGlobalIndex()) {
2071     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2072       HitsPtr = &Hits;
2073     }
2074   }
2075 
2076   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2077                                   NumIdentifierLookups,
2078                                   NumIdentifierLookupHits);
2079   ModuleMgr.visit(Visitor, HitsPtr);
2080   markIdentifierUpToDate(&II);
2081 }
2082 
2083 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2084   if (!II)
2085     return;
2086 
2087   II->setOutOfDate(false);
2088 
2089   // Update the generation for this identifier.
2090   if (getContext().getLangOpts().Modules)
2091     IdentifierGeneration[II] = getGeneration();
2092 }
2093 
2094 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2095                                     const PendingMacroInfo &PMInfo) {
2096   ModuleFile &M = *PMInfo.M;
2097 
2098   BitstreamCursor &Cursor = M.MacroCursor;
2099   SavedStreamPosition SavedPosition(Cursor);
2100   if (llvm::Error Err = Cursor.JumpToBit(PMInfo.MacroDirectivesOffset)) {
2101     Error(std::move(Err));
2102     return;
2103   }
2104 
2105   struct ModuleMacroRecord {
2106     SubmoduleID SubModID;
2107     MacroInfo *MI;
2108     SmallVector<SubmoduleID, 8> Overrides;
2109   };
2110   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2111 
2112   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2113   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2114   // macro histroy.
2115   RecordData Record;
2116   while (true) {
2117     Expected<llvm::BitstreamEntry> MaybeEntry =
2118         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2119     if (!MaybeEntry) {
2120       Error(MaybeEntry.takeError());
2121       return;
2122     }
2123     llvm::BitstreamEntry Entry = MaybeEntry.get();
2124 
2125     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2126       Error("malformed block record in AST file");
2127       return;
2128     }
2129 
2130     Record.clear();
2131     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2132     if (!MaybePP) {
2133       Error(MaybePP.takeError());
2134       return;
2135     }
2136     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2137     case PP_MACRO_DIRECTIVE_HISTORY:
2138       break;
2139 
2140     case PP_MODULE_MACRO: {
2141       ModuleMacros.push_back(ModuleMacroRecord());
2142       auto &Info = ModuleMacros.back();
2143       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2144       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2145       for (int I = 2, N = Record.size(); I != N; ++I)
2146         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2147       continue;
2148     }
2149 
2150     default:
2151       Error("malformed block record in AST file");
2152       return;
2153     }
2154 
2155     // We found the macro directive history; that's the last record
2156     // for this macro.
2157     break;
2158   }
2159 
2160   // Module macros are listed in reverse dependency order.
2161   {
2162     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2163     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2164     for (auto &MMR : ModuleMacros) {
2165       Overrides.clear();
2166       for (unsigned ModID : MMR.Overrides) {
2167         Module *Mod = getSubmodule(ModID);
2168         auto *Macro = PP.getModuleMacro(Mod, II);
2169         assert(Macro && "missing definition for overridden macro");
2170         Overrides.push_back(Macro);
2171       }
2172 
2173       bool Inserted = false;
2174       Module *Owner = getSubmodule(MMR.SubModID);
2175       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2176     }
2177   }
2178 
2179   // Don't read the directive history for a module; we don't have anywhere
2180   // to put it.
2181   if (M.isModule())
2182     return;
2183 
2184   // Deserialize the macro directives history in reverse source-order.
2185   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2186   unsigned Idx = 0, N = Record.size();
2187   while (Idx < N) {
2188     MacroDirective *MD = nullptr;
2189     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2190     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2191     switch (K) {
2192     case MacroDirective::MD_Define: {
2193       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2194       MD = PP.AllocateDefMacroDirective(MI, Loc);
2195       break;
2196     }
2197     case MacroDirective::MD_Undefine:
2198       MD = PP.AllocateUndefMacroDirective(Loc);
2199       break;
2200     case MacroDirective::MD_Visibility:
2201       bool isPublic = Record[Idx++];
2202       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2203       break;
2204     }
2205 
2206     if (!Latest)
2207       Latest = MD;
2208     if (Earliest)
2209       Earliest->setPrevious(MD);
2210     Earliest = MD;
2211   }
2212 
2213   if (Latest)
2214     PP.setLoadedMacroDirective(II, Earliest, Latest);
2215 }
2216 
2217 ASTReader::InputFileInfo
2218 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2219   // Go find this input file.
2220   BitstreamCursor &Cursor = F.InputFilesCursor;
2221   SavedStreamPosition SavedPosition(Cursor);
2222   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2223     // FIXME this drops errors on the floor.
2224     consumeError(std::move(Err));
2225   }
2226 
2227   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2228   if (!MaybeCode) {
2229     // FIXME this drops errors on the floor.
2230     consumeError(MaybeCode.takeError());
2231   }
2232   unsigned Code = MaybeCode.get();
2233   RecordData Record;
2234   StringRef Blob;
2235 
2236   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2237     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2238            "invalid record type for input file");
2239   else {
2240     // FIXME this drops errors on the floor.
2241     consumeError(Maybe.takeError());
2242   }
2243 
2244   assert(Record[0] == ID && "Bogus stored ID or offset");
2245   InputFileInfo R;
2246   R.StoredSize = static_cast<off_t>(Record[1]);
2247   R.StoredTime = static_cast<time_t>(Record[2]);
2248   R.Overridden = static_cast<bool>(Record[3]);
2249   R.Transient = static_cast<bool>(Record[4]);
2250   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2251   R.Filename = Blob;
2252   ResolveImportedPath(F, R.Filename);
2253 
2254   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2255   if (!MaybeEntry) // FIXME this drops errors on the floor.
2256     consumeError(MaybeEntry.takeError());
2257   llvm::BitstreamEntry Entry = MaybeEntry.get();
2258   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2259          "expected record type for input file hash");
2260 
2261   Record.clear();
2262   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2263     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2264            "invalid record type for input file hash");
2265   else {
2266     // FIXME this drops errors on the floor.
2267     consumeError(Maybe.takeError());
2268   }
2269   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2270                   static_cast<uint64_t>(Record[0]);
2271   return R;
2272 }
2273 
2274 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2275 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2276   // If this ID is bogus, just return an empty input file.
2277   if (ID == 0 || ID > F.InputFilesLoaded.size())
2278     return InputFile();
2279 
2280   // If we've already loaded this input file, return it.
2281   if (F.InputFilesLoaded[ID-1].getFile())
2282     return F.InputFilesLoaded[ID-1];
2283 
2284   if (F.InputFilesLoaded[ID-1].isNotFound())
2285     return InputFile();
2286 
2287   // Go find this input file.
2288   BitstreamCursor &Cursor = F.InputFilesCursor;
2289   SavedStreamPosition SavedPosition(Cursor);
2290   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2291     // FIXME this drops errors on the floor.
2292     consumeError(std::move(Err));
2293   }
2294 
2295   InputFileInfo FI = readInputFileInfo(F, ID);
2296   off_t StoredSize = FI.StoredSize;
2297   time_t StoredTime = FI.StoredTime;
2298   bool Overridden = FI.Overridden;
2299   bool Transient = FI.Transient;
2300   StringRef Filename = FI.Filename;
2301   uint64_t StoredContentHash = FI.ContentHash;
2302 
2303   const FileEntry *File = nullptr;
2304   if (auto FE = FileMgr.getFile(Filename, /*OpenFile=*/false))
2305     File = *FE;
2306 
2307   // If we didn't find the file, resolve it relative to the
2308   // original directory from which this AST file was created.
2309   if (File == nullptr && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2310       F.OriginalDir != F.BaseDirectory) {
2311     std::string Resolved = resolveFileRelativeToOriginalDir(
2312         Filename, F.OriginalDir, F.BaseDirectory);
2313     if (!Resolved.empty())
2314       if (auto FE = FileMgr.getFile(Resolved))
2315         File = *FE;
2316   }
2317 
2318   // For an overridden file, create a virtual file with the stored
2319   // size/timestamp.
2320   if ((Overridden || Transient) && File == nullptr)
2321     File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
2322 
2323   if (File == nullptr) {
2324     if (Complain) {
2325       std::string ErrorStr = "could not find file '";
2326       ErrorStr += Filename;
2327       ErrorStr += "' referenced by AST file '";
2328       ErrorStr += F.FileName;
2329       ErrorStr += "'";
2330       Error(ErrorStr);
2331     }
2332     // Record that we didn't find the file.
2333     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2334     return InputFile();
2335   }
2336 
2337   // Check if there was a request to override the contents of the file
2338   // that was part of the precompiled header. Overriding such a file
2339   // can lead to problems when lexing using the source locations from the
2340   // PCH.
2341   SourceManager &SM = getSourceManager();
2342   // FIXME: Reject if the overrides are different.
2343   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2344     if (Complain)
2345       Error(diag::err_fe_pch_file_overridden, Filename);
2346 
2347     // After emitting the diagnostic, bypass the overriding file to recover
2348     // (this creates a separate FileEntry).
2349     File = SM.bypassFileContentsOverride(*File);
2350     if (!File) {
2351       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2352       return InputFile();
2353     }
2354   }
2355 
2356   enum ModificationType {
2357     Size,
2358     ModTime,
2359     Content,
2360     None,
2361   };
2362   auto HasInputFileChanged = [&]() {
2363     if (StoredSize != File->getSize())
2364       return ModificationType::Size;
2365     if (!DisableValidation && StoredTime &&
2366         StoredTime != File->getModificationTime()) {
2367       // In case the modification time changes but not the content,
2368       // accept the cached file as legit.
2369       if (ValidateASTInputFilesContent &&
2370           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2371         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2372         if (!MemBuffOrError) {
2373           if (!Complain)
2374             return ModificationType::ModTime;
2375           std::string ErrorStr = "could not get buffer for file '";
2376           ErrorStr += File->getName();
2377           ErrorStr += "'";
2378           Error(ErrorStr);
2379           return ModificationType::ModTime;
2380         }
2381 
2382         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2383         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2384           return ModificationType::None;
2385         return ModificationType::Content;
2386       }
2387       return ModificationType::ModTime;
2388     }
2389     return ModificationType::None;
2390   };
2391 
2392   bool IsOutOfDate = false;
2393   auto FileChange = HasInputFileChanged();
2394   // For an overridden file, there is nothing to validate.
2395   if (!Overridden && FileChange != ModificationType::None) {
2396     if (Complain) {
2397       // Build a list of the PCH imports that got us here (in reverse).
2398       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2399       while (!ImportStack.back()->ImportedBy.empty())
2400         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2401 
2402       // The top-level PCH is stale.
2403       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2404       unsigned DiagnosticKind =
2405           moduleKindForDiagnostic(ImportStack.back()->Kind);
2406       if (DiagnosticKind == 0)
2407         Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName,
2408               (unsigned)FileChange);
2409       else if (DiagnosticKind == 1)
2410         Error(diag::err_fe_module_file_modified, Filename, TopLevelPCHName,
2411               (unsigned)FileChange);
2412       else
2413         Error(diag::err_fe_ast_file_modified, Filename, TopLevelPCHName,
2414               (unsigned)FileChange);
2415 
2416       // Print the import stack.
2417       if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) {
2418         Diag(diag::note_pch_required_by)
2419           << Filename << ImportStack[0]->FileName;
2420         for (unsigned I = 1; I < ImportStack.size(); ++I)
2421           Diag(diag::note_pch_required_by)
2422             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2423       }
2424 
2425       if (!Diags.isDiagnosticInFlight())
2426         Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2427     }
2428 
2429     IsOutOfDate = true;
2430   }
2431   // FIXME: If the file is overridden and we've already opened it,
2432   // issue an error (or split it into a separate FileEntry).
2433 
2434   InputFile IF = InputFile(File, Overridden || Transient, IsOutOfDate);
2435 
2436   // Note that we've loaded this input file.
2437   F.InputFilesLoaded[ID-1] = IF;
2438   return IF;
2439 }
2440 
2441 /// If we are loading a relocatable PCH or module file, and the filename
2442 /// is not an absolute path, add the system or module root to the beginning of
2443 /// the file name.
2444 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2445   // Resolve relative to the base directory, if we have one.
2446   if (!M.BaseDirectory.empty())
2447     return ResolveImportedPath(Filename, M.BaseDirectory);
2448 }
2449 
2450 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2451   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2452     return;
2453 
2454   SmallString<128> Buffer;
2455   llvm::sys::path::append(Buffer, Prefix, Filename);
2456   Filename.assign(Buffer.begin(), Buffer.end());
2457 }
2458 
2459 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2460   switch (ARR) {
2461   case ASTReader::Failure: return true;
2462   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2463   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2464   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2465   case ASTReader::ConfigurationMismatch:
2466     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2467   case ASTReader::HadErrors: return true;
2468   case ASTReader::Success: return false;
2469   }
2470 
2471   llvm_unreachable("unknown ASTReadResult");
2472 }
2473 
2474 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2475     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2476     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2477     std::string &SuggestedPredefines) {
2478   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2479     // FIXME this drops errors on the floor.
2480     consumeError(std::move(Err));
2481     return Failure;
2482   }
2483 
2484   // Read all of the records in the options block.
2485   RecordData Record;
2486   ASTReadResult Result = Success;
2487   while (true) {
2488     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2489     if (!MaybeEntry) {
2490       // FIXME this drops errors on the floor.
2491       consumeError(MaybeEntry.takeError());
2492       return Failure;
2493     }
2494     llvm::BitstreamEntry Entry = MaybeEntry.get();
2495 
2496     switch (Entry.Kind) {
2497     case llvm::BitstreamEntry::Error:
2498     case llvm::BitstreamEntry::SubBlock:
2499       return Failure;
2500 
2501     case llvm::BitstreamEntry::EndBlock:
2502       return Result;
2503 
2504     case llvm::BitstreamEntry::Record:
2505       // The interesting case.
2506       break;
2507     }
2508 
2509     // Read and process a record.
2510     Record.clear();
2511     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2512     if (!MaybeRecordType) {
2513       // FIXME this drops errors on the floor.
2514       consumeError(MaybeRecordType.takeError());
2515       return Failure;
2516     }
2517     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2518     case LANGUAGE_OPTIONS: {
2519       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2520       if (ParseLanguageOptions(Record, Complain, Listener,
2521                                AllowCompatibleConfigurationMismatch))
2522         Result = ConfigurationMismatch;
2523       break;
2524     }
2525 
2526     case TARGET_OPTIONS: {
2527       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2528       if (ParseTargetOptions(Record, Complain, Listener,
2529                              AllowCompatibleConfigurationMismatch))
2530         Result = ConfigurationMismatch;
2531       break;
2532     }
2533 
2534     case FILE_SYSTEM_OPTIONS: {
2535       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2536       if (!AllowCompatibleConfigurationMismatch &&
2537           ParseFileSystemOptions(Record, Complain, Listener))
2538         Result = ConfigurationMismatch;
2539       break;
2540     }
2541 
2542     case HEADER_SEARCH_OPTIONS: {
2543       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2544       if (!AllowCompatibleConfigurationMismatch &&
2545           ParseHeaderSearchOptions(Record, Complain, Listener))
2546         Result = ConfigurationMismatch;
2547       break;
2548     }
2549 
2550     case PREPROCESSOR_OPTIONS:
2551       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2552       if (!AllowCompatibleConfigurationMismatch &&
2553           ParsePreprocessorOptions(Record, Complain, Listener,
2554                                    SuggestedPredefines))
2555         Result = ConfigurationMismatch;
2556       break;
2557     }
2558   }
2559 }
2560 
2561 ASTReader::ASTReadResult
2562 ASTReader::ReadControlBlock(ModuleFile &F,
2563                             SmallVectorImpl<ImportedModule> &Loaded,
2564                             const ModuleFile *ImportedBy,
2565                             unsigned ClientLoadCapabilities) {
2566   BitstreamCursor &Stream = F.Stream;
2567 
2568   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2569     Error(std::move(Err));
2570     return Failure;
2571   }
2572 
2573   // Lambda to read the unhashed control block the first time it's called.
2574   //
2575   // For PCM files, the unhashed control block cannot be read until after the
2576   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2577   // need to look ahead before reading the IMPORTS record.  For consistency,
2578   // this block is always read somehow (see BitstreamEntry::EndBlock).
2579   bool HasReadUnhashedControlBlock = false;
2580   auto readUnhashedControlBlockOnce = [&]() {
2581     if (!HasReadUnhashedControlBlock) {
2582       HasReadUnhashedControlBlock = true;
2583       if (ASTReadResult Result =
2584               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2585         return Result;
2586     }
2587     return Success;
2588   };
2589 
2590   // Read all of the records and blocks in the control block.
2591   RecordData Record;
2592   unsigned NumInputs = 0;
2593   unsigned NumUserInputs = 0;
2594   StringRef BaseDirectoryAsWritten;
2595   while (true) {
2596     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2597     if (!MaybeEntry) {
2598       Error(MaybeEntry.takeError());
2599       return Failure;
2600     }
2601     llvm::BitstreamEntry Entry = MaybeEntry.get();
2602 
2603     switch (Entry.Kind) {
2604     case llvm::BitstreamEntry::Error:
2605       Error("malformed block record in AST file");
2606       return Failure;
2607     case llvm::BitstreamEntry::EndBlock: {
2608       // Validate the module before returning.  This call catches an AST with
2609       // no module name and no imports.
2610       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2611         return Result;
2612 
2613       // Validate input files.
2614       const HeaderSearchOptions &HSOpts =
2615           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2616 
2617       // All user input files reside at the index range [0, NumUserInputs), and
2618       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2619       // loaded module files, ignore missing inputs.
2620       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2621           F.Kind != MK_PrebuiltModule) {
2622         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2623 
2624         // If we are reading a module, we will create a verification timestamp,
2625         // so we verify all input files.  Otherwise, verify only user input
2626         // files.
2627 
2628         unsigned N = NumUserInputs;
2629         if (ValidateSystemInputs ||
2630             (HSOpts.ModulesValidateOncePerBuildSession &&
2631              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2632              F.Kind == MK_ImplicitModule))
2633           N = NumInputs;
2634 
2635         for (unsigned I = 0; I < N; ++I) {
2636           InputFile IF = getInputFile(F, I+1, Complain);
2637           if (!IF.getFile() || IF.isOutOfDate())
2638             return OutOfDate;
2639         }
2640       }
2641 
2642       if (Listener)
2643         Listener->visitModuleFile(F.FileName, F.Kind);
2644 
2645       if (Listener && Listener->needsInputFileVisitation()) {
2646         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2647                                                                 : NumUserInputs;
2648         for (unsigned I = 0; I < N; ++I) {
2649           bool IsSystem = I >= NumUserInputs;
2650           InputFileInfo FI = readInputFileInfo(F, I+1);
2651           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2652                                    F.Kind == MK_ExplicitModule ||
2653                                    F.Kind == MK_PrebuiltModule);
2654         }
2655       }
2656 
2657       return Success;
2658     }
2659 
2660     case llvm::BitstreamEntry::SubBlock:
2661       switch (Entry.ID) {
2662       case INPUT_FILES_BLOCK_ID:
2663         F.InputFilesCursor = Stream;
2664         if (llvm::Error Err = Stream.SkipBlock()) {
2665           Error(std::move(Err));
2666           return Failure;
2667         }
2668         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2669           Error("malformed block record in AST file");
2670           return Failure;
2671         }
2672         continue;
2673 
2674       case OPTIONS_BLOCK_ID:
2675         // If we're reading the first module for this group, check its options
2676         // are compatible with ours. For modules it imports, no further checking
2677         // is required, because we checked them when we built it.
2678         if (Listener && !ImportedBy) {
2679           // Should we allow the configuration of the module file to differ from
2680           // the configuration of the current translation unit in a compatible
2681           // way?
2682           //
2683           // FIXME: Allow this for files explicitly specified with -include-pch.
2684           bool AllowCompatibleConfigurationMismatch =
2685               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2686 
2687           ASTReadResult Result =
2688               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2689                                AllowCompatibleConfigurationMismatch, *Listener,
2690                                SuggestedPredefines);
2691           if (Result == Failure) {
2692             Error("malformed block record in AST file");
2693             return Result;
2694           }
2695 
2696           if (DisableValidation ||
2697               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2698             Result = Success;
2699 
2700           // If we can't load the module, exit early since we likely
2701           // will rebuild the module anyway. The stream may be in the
2702           // middle of a block.
2703           if (Result != Success)
2704             return Result;
2705         } else if (llvm::Error Err = Stream.SkipBlock()) {
2706           Error(std::move(Err));
2707           return Failure;
2708         }
2709         continue;
2710 
2711       default:
2712         if (llvm::Error Err = Stream.SkipBlock()) {
2713           Error(std::move(Err));
2714           return Failure;
2715         }
2716         continue;
2717       }
2718 
2719     case llvm::BitstreamEntry::Record:
2720       // The interesting case.
2721       break;
2722     }
2723 
2724     // Read and process a record.
2725     Record.clear();
2726     StringRef Blob;
2727     Expected<unsigned> MaybeRecordType =
2728         Stream.readRecord(Entry.ID, Record, &Blob);
2729     if (!MaybeRecordType) {
2730       Error(MaybeRecordType.takeError());
2731       return Failure;
2732     }
2733     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2734     case METADATA: {
2735       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2736         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2737           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2738                                         : diag::err_pch_version_too_new);
2739         return VersionMismatch;
2740       }
2741 
2742       bool hasErrors = Record[7];
2743       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2744         Diag(diag::err_pch_with_compiler_errors);
2745         return HadErrors;
2746       }
2747       if (hasErrors) {
2748         Diags.ErrorOccurred = true;
2749         Diags.UncompilableErrorOccurred = true;
2750         Diags.UnrecoverableErrorOccurred = true;
2751       }
2752 
2753       F.RelocatablePCH = Record[4];
2754       // Relative paths in a relocatable PCH are relative to our sysroot.
2755       if (F.RelocatablePCH)
2756         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2757 
2758       F.HasTimestamps = Record[5];
2759 
2760       F.PCHHasObjectFile = Record[6];
2761 
2762       const std::string &CurBranch = getClangFullRepositoryVersion();
2763       StringRef ASTBranch = Blob;
2764       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2765         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2766           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2767         return VersionMismatch;
2768       }
2769       break;
2770     }
2771 
2772     case IMPORTS: {
2773       // Validate the AST before processing any imports (otherwise, untangling
2774       // them can be error-prone and expensive).  A module will have a name and
2775       // will already have been validated, but this catches the PCH case.
2776       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2777         return Result;
2778 
2779       // Load each of the imported PCH files.
2780       unsigned Idx = 0, N = Record.size();
2781       while (Idx < N) {
2782         // Read information about the AST file.
2783         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2784         // The import location will be the local one for now; we will adjust
2785         // all import locations of module imports after the global source
2786         // location info are setup, in ReadAST.
2787         SourceLocation ImportLoc =
2788             ReadUntranslatedSourceLocation(Record[Idx++]);
2789         off_t StoredSize = (off_t)Record[Idx++];
2790         time_t StoredModTime = (time_t)Record[Idx++];
2791         ASTFileSignature StoredSignature = {
2792             {{(uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2793               (uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2794               (uint32_t)Record[Idx++]}}};
2795 
2796         std::string ImportedName = ReadString(Record, Idx);
2797         std::string ImportedFile;
2798 
2799         // For prebuilt and explicit modules first consult the file map for
2800         // an override. Note that here we don't search prebuilt module
2801         // directories, only the explicit name to file mappings. Also, we will
2802         // still verify the size/signature making sure it is essentially the
2803         // same file but perhaps in a different location.
2804         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2805           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2806             ImportedName, /*FileMapOnly*/ true);
2807 
2808         if (ImportedFile.empty())
2809           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2810           // ModuleCache as when writing.
2811           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2812         else
2813           SkipPath(Record, Idx);
2814 
2815         // If our client can't cope with us being out of date, we can't cope with
2816         // our dependency being missing.
2817         unsigned Capabilities = ClientLoadCapabilities;
2818         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2819           Capabilities &= ~ARR_Missing;
2820 
2821         // Load the AST file.
2822         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2823                                   Loaded, StoredSize, StoredModTime,
2824                                   StoredSignature, Capabilities);
2825 
2826         // If we diagnosed a problem, produce a backtrace.
2827         if (isDiagnosedResult(Result, Capabilities))
2828           Diag(diag::note_module_file_imported_by)
2829               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2830 
2831         switch (Result) {
2832         case Failure: return Failure;
2833           // If we have to ignore the dependency, we'll have to ignore this too.
2834         case Missing:
2835         case OutOfDate: return OutOfDate;
2836         case VersionMismatch: return VersionMismatch;
2837         case ConfigurationMismatch: return ConfigurationMismatch;
2838         case HadErrors: return HadErrors;
2839         case Success: break;
2840         }
2841       }
2842       break;
2843     }
2844 
2845     case ORIGINAL_FILE:
2846       F.OriginalSourceFileID = FileID::get(Record[0]);
2847       F.ActualOriginalSourceFileName = Blob;
2848       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2849       ResolveImportedPath(F, F.OriginalSourceFileName);
2850       break;
2851 
2852     case ORIGINAL_FILE_ID:
2853       F.OriginalSourceFileID = FileID::get(Record[0]);
2854       break;
2855 
2856     case ORIGINAL_PCH_DIR:
2857       F.OriginalDir = Blob;
2858       break;
2859 
2860     case MODULE_NAME:
2861       F.ModuleName = Blob;
2862       Diag(diag::remark_module_import)
2863           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2864           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2865       if (Listener)
2866         Listener->ReadModuleName(F.ModuleName);
2867 
2868       // Validate the AST as soon as we have a name so we can exit early on
2869       // failure.
2870       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2871         return Result;
2872 
2873       break;
2874 
2875     case MODULE_DIRECTORY: {
2876       // Save the BaseDirectory as written in the PCM for computing the module
2877       // filename for the ModuleCache.
2878       BaseDirectoryAsWritten = Blob;
2879       assert(!F.ModuleName.empty() &&
2880              "MODULE_DIRECTORY found before MODULE_NAME");
2881       // If we've already loaded a module map file covering this module, we may
2882       // have a better path for it (relative to the current build).
2883       Module *M = PP.getHeaderSearchInfo().lookupModule(
2884           F.ModuleName, /*AllowSearch*/ true,
2885           /*AllowExtraModuleMapSearch*/ true);
2886       if (M && M->Directory) {
2887         // If we're implicitly loading a module, the base directory can't
2888         // change between the build and use.
2889         // Don't emit module relocation error if we have -fno-validate-pch
2890         if (!PP.getPreprocessorOpts().DisablePCHValidation &&
2891             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2892           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2893           if (!BuildDir || *BuildDir != M->Directory) {
2894             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2895               Diag(diag::err_imported_module_relocated)
2896                   << F.ModuleName << Blob << M->Directory->getName();
2897             return OutOfDate;
2898           }
2899         }
2900         F.BaseDirectory = M->Directory->getName();
2901       } else {
2902         F.BaseDirectory = Blob;
2903       }
2904       break;
2905     }
2906 
2907     case MODULE_MAP_FILE:
2908       if (ASTReadResult Result =
2909               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2910         return Result;
2911       break;
2912 
2913     case INPUT_FILE_OFFSETS:
2914       NumInputs = Record[0];
2915       NumUserInputs = Record[1];
2916       F.InputFileOffsets =
2917           (const llvm::support::unaligned_uint64_t *)Blob.data();
2918       F.InputFilesLoaded.resize(NumInputs);
2919       F.NumUserInputFiles = NumUserInputs;
2920       break;
2921     }
2922   }
2923 }
2924 
2925 ASTReader::ASTReadResult
2926 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2927   BitstreamCursor &Stream = F.Stream;
2928 
2929   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2930     Error(std::move(Err));
2931     return Failure;
2932   }
2933 
2934   // Read all of the records and blocks for the AST file.
2935   RecordData Record;
2936   while (true) {
2937     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2938     if (!MaybeEntry) {
2939       Error(MaybeEntry.takeError());
2940       return Failure;
2941     }
2942     llvm::BitstreamEntry Entry = MaybeEntry.get();
2943 
2944     switch (Entry.Kind) {
2945     case llvm::BitstreamEntry::Error:
2946       Error("error at end of module block in AST file");
2947       return Failure;
2948     case llvm::BitstreamEntry::EndBlock:
2949       // Outside of C++, we do not store a lookup map for the translation unit.
2950       // Instead, mark it as needing a lookup map to be built if this module
2951       // contains any declarations lexically within it (which it always does!).
2952       // This usually has no cost, since we very rarely need the lookup map for
2953       // the translation unit outside C++.
2954       if (ASTContext *Ctx = ContextObj) {
2955         DeclContext *DC = Ctx->getTranslationUnitDecl();
2956         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2957           DC->setMustBuildLookupTable();
2958       }
2959 
2960       return Success;
2961     case llvm::BitstreamEntry::SubBlock:
2962       switch (Entry.ID) {
2963       case DECLTYPES_BLOCK_ID:
2964         // We lazily load the decls block, but we want to set up the
2965         // DeclsCursor cursor to point into it.  Clone our current bitcode
2966         // cursor to it, enter the block and read the abbrevs in that block.
2967         // With the main cursor, we just skip over it.
2968         F.DeclsCursor = Stream;
2969         if (llvm::Error Err = Stream.SkipBlock()) {
2970           Error(std::move(Err));
2971           return Failure;
2972         }
2973         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
2974           Error("malformed block record in AST file");
2975           return Failure;
2976         }
2977         break;
2978 
2979       case PREPROCESSOR_BLOCK_ID:
2980         F.MacroCursor = Stream;
2981         if (!PP.getExternalSource())
2982           PP.setExternalSource(this);
2983 
2984         if (llvm::Error Err = Stream.SkipBlock()) {
2985           Error(std::move(Err));
2986           return Failure;
2987         }
2988         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2989           Error("malformed block record in AST file");
2990           return Failure;
2991         }
2992         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
2993         break;
2994 
2995       case PREPROCESSOR_DETAIL_BLOCK_ID:
2996         F.PreprocessorDetailCursor = Stream;
2997 
2998         if (llvm::Error Err = Stream.SkipBlock()) {
2999           Error(std::move(Err));
3000           return Failure;
3001         }
3002         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3003                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3004           Error("malformed preprocessor detail record in AST file");
3005           return Failure;
3006         }
3007         F.PreprocessorDetailStartOffset
3008         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3009 
3010         if (!PP.getPreprocessingRecord())
3011           PP.createPreprocessingRecord();
3012         if (!PP.getPreprocessingRecord()->getExternalSource())
3013           PP.getPreprocessingRecord()->SetExternalSource(*this);
3014         break;
3015 
3016       case SOURCE_MANAGER_BLOCK_ID:
3017         if (ReadSourceManagerBlock(F))
3018           return Failure;
3019         break;
3020 
3021       case SUBMODULE_BLOCK_ID:
3022         if (ASTReadResult Result =
3023                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3024           return Result;
3025         break;
3026 
3027       case COMMENTS_BLOCK_ID: {
3028         BitstreamCursor C = Stream;
3029 
3030         if (llvm::Error Err = Stream.SkipBlock()) {
3031           Error(std::move(Err));
3032           return Failure;
3033         }
3034         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3035           Error("malformed comments block in AST file");
3036           return Failure;
3037         }
3038         CommentsCursors.push_back(std::make_pair(C, &F));
3039         break;
3040       }
3041 
3042       default:
3043         if (llvm::Error Err = Stream.SkipBlock()) {
3044           Error(std::move(Err));
3045           return Failure;
3046         }
3047         break;
3048       }
3049       continue;
3050 
3051     case llvm::BitstreamEntry::Record:
3052       // The interesting case.
3053       break;
3054     }
3055 
3056     // Read and process a record.
3057     Record.clear();
3058     StringRef Blob;
3059     Expected<unsigned> MaybeRecordType =
3060         Stream.readRecord(Entry.ID, Record, &Blob);
3061     if (!MaybeRecordType) {
3062       Error(MaybeRecordType.takeError());
3063       return Failure;
3064     }
3065     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3066 
3067     // If we're not loading an AST context, we don't care about most records.
3068     if (!ContextObj) {
3069       switch (RecordType) {
3070       case IDENTIFIER_TABLE:
3071       case IDENTIFIER_OFFSET:
3072       case INTERESTING_IDENTIFIERS:
3073       case STATISTICS:
3074       case PP_CONDITIONAL_STACK:
3075       case PP_COUNTER_VALUE:
3076       case SOURCE_LOCATION_OFFSETS:
3077       case MODULE_OFFSET_MAP:
3078       case SOURCE_MANAGER_LINE_TABLE:
3079       case SOURCE_LOCATION_PRELOADS:
3080       case PPD_ENTITIES_OFFSETS:
3081       case HEADER_SEARCH_TABLE:
3082       case IMPORTED_MODULES:
3083       case MACRO_OFFSET:
3084         break;
3085       default:
3086         continue;
3087       }
3088     }
3089 
3090     switch (RecordType) {
3091     default:  // Default behavior: ignore.
3092       break;
3093 
3094     case TYPE_OFFSET: {
3095       if (F.LocalNumTypes != 0) {
3096         Error("duplicate TYPE_OFFSET record in AST file");
3097         return Failure;
3098       }
3099       F.TypeOffsets = (const uint32_t *)Blob.data();
3100       F.LocalNumTypes = Record[0];
3101       unsigned LocalBaseTypeIndex = Record[1];
3102       F.BaseTypeIndex = getTotalNumTypes();
3103 
3104       if (F.LocalNumTypes > 0) {
3105         // Introduce the global -> local mapping for types within this module.
3106         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3107 
3108         // Introduce the local -> global mapping for types within this module.
3109         F.TypeRemap.insertOrReplace(
3110           std::make_pair(LocalBaseTypeIndex,
3111                          F.BaseTypeIndex - LocalBaseTypeIndex));
3112 
3113         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3114       }
3115       break;
3116     }
3117 
3118     case DECL_OFFSET: {
3119       if (F.LocalNumDecls != 0) {
3120         Error("duplicate DECL_OFFSET record in AST file");
3121         return Failure;
3122       }
3123       F.DeclOffsets = (const DeclOffset *)Blob.data();
3124       F.LocalNumDecls = Record[0];
3125       unsigned LocalBaseDeclID = Record[1];
3126       F.BaseDeclID = getTotalNumDecls();
3127 
3128       if (F.LocalNumDecls > 0) {
3129         // Introduce the global -> local mapping for declarations within this
3130         // module.
3131         GlobalDeclMap.insert(
3132           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3133 
3134         // Introduce the local -> global mapping for declarations within this
3135         // module.
3136         F.DeclRemap.insertOrReplace(
3137           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3138 
3139         // Introduce the global -> local mapping for declarations within this
3140         // module.
3141         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3142 
3143         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3144       }
3145       break;
3146     }
3147 
3148     case TU_UPDATE_LEXICAL: {
3149       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3150       LexicalContents Contents(
3151           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3152               Blob.data()),
3153           static_cast<unsigned int>(Blob.size() / 4));
3154       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3155       TU->setHasExternalLexicalStorage(true);
3156       break;
3157     }
3158 
3159     case UPDATE_VISIBLE: {
3160       unsigned Idx = 0;
3161       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3162       auto *Data = (const unsigned char*)Blob.data();
3163       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3164       // If we've already loaded the decl, perform the updates when we finish
3165       // loading this block.
3166       if (Decl *D = GetExistingDecl(ID))
3167         PendingUpdateRecords.push_back(
3168             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3169       break;
3170     }
3171 
3172     case IDENTIFIER_TABLE:
3173       F.IdentifierTableData = Blob.data();
3174       if (Record[0]) {
3175         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3176             (const unsigned char *)F.IdentifierTableData + Record[0],
3177             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
3178             (const unsigned char *)F.IdentifierTableData,
3179             ASTIdentifierLookupTrait(*this, F));
3180 
3181         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3182       }
3183       break;
3184 
3185     case IDENTIFIER_OFFSET: {
3186       if (F.LocalNumIdentifiers != 0) {
3187         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3188         return Failure;
3189       }
3190       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3191       F.LocalNumIdentifiers = Record[0];
3192       unsigned LocalBaseIdentifierID = Record[1];
3193       F.BaseIdentifierID = getTotalNumIdentifiers();
3194 
3195       if (F.LocalNumIdentifiers > 0) {
3196         // Introduce the global -> local mapping for identifiers within this
3197         // module.
3198         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3199                                                   &F));
3200 
3201         // Introduce the local -> global mapping for identifiers within this
3202         // module.
3203         F.IdentifierRemap.insertOrReplace(
3204           std::make_pair(LocalBaseIdentifierID,
3205                          F.BaseIdentifierID - LocalBaseIdentifierID));
3206 
3207         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3208                                  + F.LocalNumIdentifiers);
3209       }
3210       break;
3211     }
3212 
3213     case INTERESTING_IDENTIFIERS:
3214       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3215       break;
3216 
3217     case EAGERLY_DESERIALIZED_DECLS:
3218       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3219       // about "interesting" decls (for instance, if we're building a module).
3220       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3221         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3222       break;
3223 
3224     case MODULAR_CODEGEN_DECLS:
3225       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3226       // them (ie: if we're not codegenerating this module).
3227       if (F.Kind == MK_MainFile)
3228         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3229           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3230       break;
3231 
3232     case SPECIAL_TYPES:
3233       if (SpecialTypes.empty()) {
3234         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3235           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3236         break;
3237       }
3238 
3239       if (SpecialTypes.size() != Record.size()) {
3240         Error("invalid special-types record");
3241         return Failure;
3242       }
3243 
3244       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3245         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3246         if (!SpecialTypes[I])
3247           SpecialTypes[I] = ID;
3248         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3249         // merge step?
3250       }
3251       break;
3252 
3253     case STATISTICS:
3254       TotalNumStatements += Record[0];
3255       TotalNumMacros += Record[1];
3256       TotalLexicalDeclContexts += Record[2];
3257       TotalVisibleDeclContexts += Record[3];
3258       break;
3259 
3260     case UNUSED_FILESCOPED_DECLS:
3261       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3262         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3263       break;
3264 
3265     case DELEGATING_CTORS:
3266       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3267         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3268       break;
3269 
3270     case WEAK_UNDECLARED_IDENTIFIERS:
3271       if (Record.size() % 4 != 0) {
3272         Error("invalid weak identifiers record");
3273         return Failure;
3274       }
3275 
3276       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3277       // files. This isn't the way to do it :)
3278       WeakUndeclaredIdentifiers.clear();
3279 
3280       // Translate the weak, undeclared identifiers into global IDs.
3281       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3282         WeakUndeclaredIdentifiers.push_back(
3283           getGlobalIdentifierID(F, Record[I++]));
3284         WeakUndeclaredIdentifiers.push_back(
3285           getGlobalIdentifierID(F, Record[I++]));
3286         WeakUndeclaredIdentifiers.push_back(
3287           ReadSourceLocation(F, Record, I).getRawEncoding());
3288         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3289       }
3290       break;
3291 
3292     case SELECTOR_OFFSETS: {
3293       F.SelectorOffsets = (const uint32_t *)Blob.data();
3294       F.LocalNumSelectors = Record[0];
3295       unsigned LocalBaseSelectorID = Record[1];
3296       F.BaseSelectorID = getTotalNumSelectors();
3297 
3298       if (F.LocalNumSelectors > 0) {
3299         // Introduce the global -> local mapping for selectors within this
3300         // module.
3301         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3302 
3303         // Introduce the local -> global mapping for selectors within this
3304         // module.
3305         F.SelectorRemap.insertOrReplace(
3306           std::make_pair(LocalBaseSelectorID,
3307                          F.BaseSelectorID - LocalBaseSelectorID));
3308 
3309         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3310       }
3311       break;
3312     }
3313 
3314     case METHOD_POOL:
3315       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3316       if (Record[0])
3317         F.SelectorLookupTable
3318           = ASTSelectorLookupTable::Create(
3319                         F.SelectorLookupTableData + Record[0],
3320                         F.SelectorLookupTableData,
3321                         ASTSelectorLookupTrait(*this, F));
3322       TotalNumMethodPoolEntries += Record[1];
3323       break;
3324 
3325     case REFERENCED_SELECTOR_POOL:
3326       if (!Record.empty()) {
3327         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3328           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3329                                                                 Record[Idx++]));
3330           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3331                                               getRawEncoding());
3332         }
3333       }
3334       break;
3335 
3336     case PP_CONDITIONAL_STACK:
3337       if (!Record.empty()) {
3338         unsigned Idx = 0, End = Record.size() - 1;
3339         bool ReachedEOFWhileSkipping = Record[Idx++];
3340         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3341         if (ReachedEOFWhileSkipping) {
3342           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3343           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3344           bool FoundNonSkipPortion = Record[Idx++];
3345           bool FoundElse = Record[Idx++];
3346           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3347           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3348                            FoundElse, ElseLoc);
3349         }
3350         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3351         while (Idx < End) {
3352           auto Loc = ReadSourceLocation(F, Record, Idx);
3353           bool WasSkipping = Record[Idx++];
3354           bool FoundNonSkip = Record[Idx++];
3355           bool FoundElse = Record[Idx++];
3356           ConditionalStack.push_back(
3357               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3358         }
3359         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3360       }
3361       break;
3362 
3363     case PP_COUNTER_VALUE:
3364       if (!Record.empty() && Listener)
3365         Listener->ReadCounter(F, Record[0]);
3366       break;
3367 
3368     case FILE_SORTED_DECLS:
3369       F.FileSortedDecls = (const DeclID *)Blob.data();
3370       F.NumFileSortedDecls = Record[0];
3371       break;
3372 
3373     case SOURCE_LOCATION_OFFSETS: {
3374       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3375       F.LocalNumSLocEntries = Record[0];
3376       unsigned SLocSpaceSize = Record[1];
3377       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3378           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3379                                               SLocSpaceSize);
3380       if (!F.SLocEntryBaseID) {
3381         Error("ran out of source locations");
3382         break;
3383       }
3384       // Make our entry in the range map. BaseID is negative and growing, so
3385       // we invert it. Because we invert it, though, we need the other end of
3386       // the range.
3387       unsigned RangeStart =
3388           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3389       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3390       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3391 
3392       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3393       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3394       GlobalSLocOffsetMap.insert(
3395           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3396                            - SLocSpaceSize,&F));
3397 
3398       // Initialize the remapping table.
3399       // Invalid stays invalid.
3400       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3401       // This module. Base was 2 when being compiled.
3402       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3403                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3404 
3405       TotalNumSLocEntries += F.LocalNumSLocEntries;
3406       break;
3407     }
3408 
3409     case MODULE_OFFSET_MAP:
3410       F.ModuleOffsetMap = Blob;
3411       break;
3412 
3413     case SOURCE_MANAGER_LINE_TABLE:
3414       if (ParseLineTable(F, Record)) {
3415         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3416         return Failure;
3417       }
3418       break;
3419 
3420     case SOURCE_LOCATION_PRELOADS: {
3421       // Need to transform from the local view (1-based IDs) to the global view,
3422       // which is based off F.SLocEntryBaseID.
3423       if (!F.PreloadSLocEntries.empty()) {
3424         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3425         return Failure;
3426       }
3427 
3428       F.PreloadSLocEntries.swap(Record);
3429       break;
3430     }
3431 
3432     case EXT_VECTOR_DECLS:
3433       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3434         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3435       break;
3436 
3437     case VTABLE_USES:
3438       if (Record.size() % 3 != 0) {
3439         Error("Invalid VTABLE_USES record");
3440         return Failure;
3441       }
3442 
3443       // Later tables overwrite earlier ones.
3444       // FIXME: Modules will have some trouble with this. This is clearly not
3445       // the right way to do this.
3446       VTableUses.clear();
3447 
3448       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3449         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3450         VTableUses.push_back(
3451           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3452         VTableUses.push_back(Record[Idx++]);
3453       }
3454       break;
3455 
3456     case PENDING_IMPLICIT_INSTANTIATIONS:
3457       if (PendingInstantiations.size() % 2 != 0) {
3458         Error("Invalid existing PendingInstantiations");
3459         return Failure;
3460       }
3461 
3462       if (Record.size() % 2 != 0) {
3463         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3464         return Failure;
3465       }
3466 
3467       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3468         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3469         PendingInstantiations.push_back(
3470           ReadSourceLocation(F, Record, I).getRawEncoding());
3471       }
3472       break;
3473 
3474     case SEMA_DECL_REFS:
3475       if (Record.size() != 3) {
3476         Error("Invalid SEMA_DECL_REFS block");
3477         return Failure;
3478       }
3479       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3480         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3481       break;
3482 
3483     case PPD_ENTITIES_OFFSETS: {
3484       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3485       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3486       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3487 
3488       unsigned LocalBasePreprocessedEntityID = Record[0];
3489 
3490       unsigned StartingID;
3491       if (!PP.getPreprocessingRecord())
3492         PP.createPreprocessingRecord();
3493       if (!PP.getPreprocessingRecord()->getExternalSource())
3494         PP.getPreprocessingRecord()->SetExternalSource(*this);
3495       StartingID
3496         = PP.getPreprocessingRecord()
3497             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3498       F.BasePreprocessedEntityID = StartingID;
3499 
3500       if (F.NumPreprocessedEntities > 0) {
3501         // Introduce the global -> local mapping for preprocessed entities in
3502         // this module.
3503         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3504 
3505         // Introduce the local -> global mapping for preprocessed entities in
3506         // this module.
3507         F.PreprocessedEntityRemap.insertOrReplace(
3508           std::make_pair(LocalBasePreprocessedEntityID,
3509             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3510       }
3511 
3512       break;
3513     }
3514 
3515     case PPD_SKIPPED_RANGES: {
3516       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3517       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3518       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3519 
3520       if (!PP.getPreprocessingRecord())
3521         PP.createPreprocessingRecord();
3522       if (!PP.getPreprocessingRecord()->getExternalSource())
3523         PP.getPreprocessingRecord()->SetExternalSource(*this);
3524       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3525           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3526 
3527       if (F.NumPreprocessedSkippedRanges > 0)
3528         GlobalSkippedRangeMap.insert(
3529             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3530       break;
3531     }
3532 
3533     case DECL_UPDATE_OFFSETS:
3534       if (Record.size() % 2 != 0) {
3535         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3536         return Failure;
3537       }
3538       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3539         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3540         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3541 
3542         // If we've already loaded the decl, perform the updates when we finish
3543         // loading this block.
3544         if (Decl *D = GetExistingDecl(ID))
3545           PendingUpdateRecords.push_back(
3546               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3547       }
3548       break;
3549 
3550     case OBJC_CATEGORIES_MAP:
3551       if (F.LocalNumObjCCategoriesInMap != 0) {
3552         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3553         return Failure;
3554       }
3555 
3556       F.LocalNumObjCCategoriesInMap = Record[0];
3557       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3558       break;
3559 
3560     case OBJC_CATEGORIES:
3561       F.ObjCCategories.swap(Record);
3562       break;
3563 
3564     case CUDA_SPECIAL_DECL_REFS:
3565       // Later tables overwrite earlier ones.
3566       // FIXME: Modules will have trouble with this.
3567       CUDASpecialDeclRefs.clear();
3568       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3569         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3570       break;
3571 
3572     case HEADER_SEARCH_TABLE:
3573       F.HeaderFileInfoTableData = Blob.data();
3574       F.LocalNumHeaderFileInfos = Record[1];
3575       if (Record[0]) {
3576         F.HeaderFileInfoTable
3577           = HeaderFileInfoLookupTable::Create(
3578                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3579                    (const unsigned char *)F.HeaderFileInfoTableData,
3580                    HeaderFileInfoTrait(*this, F,
3581                                        &PP.getHeaderSearchInfo(),
3582                                        Blob.data() + Record[2]));
3583 
3584         PP.getHeaderSearchInfo().SetExternalSource(this);
3585         if (!PP.getHeaderSearchInfo().getExternalLookup())
3586           PP.getHeaderSearchInfo().SetExternalLookup(this);
3587       }
3588       break;
3589 
3590     case FP_PRAGMA_OPTIONS:
3591       // Later tables overwrite earlier ones.
3592       FPPragmaOptions.swap(Record);
3593       break;
3594 
3595     case OPENCL_EXTENSIONS:
3596       for (unsigned I = 0, E = Record.size(); I != E; ) {
3597         auto Name = ReadString(Record, I);
3598         auto &Opt = OpenCLExtensions.OptMap[Name];
3599         Opt.Supported = Record[I++] != 0;
3600         Opt.Enabled = Record[I++] != 0;
3601         Opt.Avail = Record[I++];
3602         Opt.Core = Record[I++];
3603       }
3604       break;
3605 
3606     case OPENCL_EXTENSION_TYPES:
3607       for (unsigned I = 0, E = Record.size(); I != E;) {
3608         auto TypeID = static_cast<::TypeID>(Record[I++]);
3609         auto *Type = GetType(TypeID).getTypePtr();
3610         auto NumExt = static_cast<unsigned>(Record[I++]);
3611         for (unsigned II = 0; II != NumExt; ++II) {
3612           auto Ext = ReadString(Record, I);
3613           OpenCLTypeExtMap[Type].insert(Ext);
3614         }
3615       }
3616       break;
3617 
3618     case OPENCL_EXTENSION_DECLS:
3619       for (unsigned I = 0, E = Record.size(); I != E;) {
3620         auto DeclID = static_cast<::DeclID>(Record[I++]);
3621         auto *Decl = GetDecl(DeclID);
3622         auto NumExt = static_cast<unsigned>(Record[I++]);
3623         for (unsigned II = 0; II != NumExt; ++II) {
3624           auto Ext = ReadString(Record, I);
3625           OpenCLDeclExtMap[Decl].insert(Ext);
3626         }
3627       }
3628       break;
3629 
3630     case TENTATIVE_DEFINITIONS:
3631       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3632         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3633       break;
3634 
3635     case KNOWN_NAMESPACES:
3636       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3637         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3638       break;
3639 
3640     case UNDEFINED_BUT_USED:
3641       if (UndefinedButUsed.size() % 2 != 0) {
3642         Error("Invalid existing UndefinedButUsed");
3643         return Failure;
3644       }
3645 
3646       if (Record.size() % 2 != 0) {
3647         Error("invalid undefined-but-used record");
3648         return Failure;
3649       }
3650       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3651         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3652         UndefinedButUsed.push_back(
3653             ReadSourceLocation(F, Record, I).getRawEncoding());
3654       }
3655       break;
3656 
3657     case DELETE_EXPRS_TO_ANALYZE:
3658       for (unsigned I = 0, N = Record.size(); I != N;) {
3659         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3660         const uint64_t Count = Record[I++];
3661         DelayedDeleteExprs.push_back(Count);
3662         for (uint64_t C = 0; C < Count; ++C) {
3663           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3664           bool IsArrayForm = Record[I++] == 1;
3665           DelayedDeleteExprs.push_back(IsArrayForm);
3666         }
3667       }
3668       break;
3669 
3670     case IMPORTED_MODULES:
3671       if (!F.isModule()) {
3672         // If we aren't loading a module (which has its own exports), make
3673         // all of the imported modules visible.
3674         // FIXME: Deal with macros-only imports.
3675         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3676           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3677           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3678           if (GlobalID) {
3679             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3680             if (DeserializationListener)
3681               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3682           }
3683         }
3684       }
3685       break;
3686 
3687     case MACRO_OFFSET: {
3688       if (F.LocalNumMacros != 0) {
3689         Error("duplicate MACRO_OFFSET record in AST file");
3690         return Failure;
3691       }
3692       F.MacroOffsets = (const uint32_t *)Blob.data();
3693       F.LocalNumMacros = Record[0];
3694       unsigned LocalBaseMacroID = Record[1];
3695       F.BaseMacroID = getTotalNumMacros();
3696 
3697       if (F.LocalNumMacros > 0) {
3698         // Introduce the global -> local mapping for macros within this module.
3699         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3700 
3701         // Introduce the local -> global mapping for macros within this module.
3702         F.MacroRemap.insertOrReplace(
3703           std::make_pair(LocalBaseMacroID,
3704                          F.BaseMacroID - LocalBaseMacroID));
3705 
3706         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3707       }
3708       break;
3709     }
3710 
3711     case LATE_PARSED_TEMPLATE:
3712       LateParsedTemplates.append(Record.begin(), Record.end());
3713       break;
3714 
3715     case OPTIMIZE_PRAGMA_OPTIONS:
3716       if (Record.size() != 1) {
3717         Error("invalid pragma optimize record");
3718         return Failure;
3719       }
3720       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3721       break;
3722 
3723     case MSSTRUCT_PRAGMA_OPTIONS:
3724       if (Record.size() != 1) {
3725         Error("invalid pragma ms_struct record");
3726         return Failure;
3727       }
3728       PragmaMSStructState = Record[0];
3729       break;
3730 
3731     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3732       if (Record.size() != 2) {
3733         Error("invalid pragma ms_struct record");
3734         return Failure;
3735       }
3736       PragmaMSPointersToMembersState = Record[0];
3737       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3738       break;
3739 
3740     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3741       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3742         UnusedLocalTypedefNameCandidates.push_back(
3743             getGlobalDeclID(F, Record[I]));
3744       break;
3745 
3746     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3747       if (Record.size() != 1) {
3748         Error("invalid cuda pragma options record");
3749         return Failure;
3750       }
3751       ForceCUDAHostDeviceDepth = Record[0];
3752       break;
3753 
3754     case PACK_PRAGMA_OPTIONS: {
3755       if (Record.size() < 3) {
3756         Error("invalid pragma pack record");
3757         return Failure;
3758       }
3759       PragmaPackCurrentValue = Record[0];
3760       PragmaPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3761       unsigned NumStackEntries = Record[2];
3762       unsigned Idx = 3;
3763       // Reset the stack when importing a new module.
3764       PragmaPackStack.clear();
3765       for (unsigned I = 0; I < NumStackEntries; ++I) {
3766         PragmaPackStackEntry Entry;
3767         Entry.Value = Record[Idx++];
3768         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3769         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3770         PragmaPackStrings.push_back(ReadString(Record, Idx));
3771         Entry.SlotLabel = PragmaPackStrings.back();
3772         PragmaPackStack.push_back(Entry);
3773       }
3774       break;
3775     }
3776     }
3777   }
3778 }
3779 
3780 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3781   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3782 
3783   // Additional remapping information.
3784   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3785   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3786   F.ModuleOffsetMap = StringRef();
3787 
3788   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3789   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3790     F.SLocRemap.insert(std::make_pair(0U, 0));
3791     F.SLocRemap.insert(std::make_pair(2U, 1));
3792   }
3793 
3794   // Continuous range maps we may be updating in our module.
3795   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3796   RemapBuilder SLocRemap(F.SLocRemap);
3797   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3798   RemapBuilder MacroRemap(F.MacroRemap);
3799   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3800   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3801   RemapBuilder SelectorRemap(F.SelectorRemap);
3802   RemapBuilder DeclRemap(F.DeclRemap);
3803   RemapBuilder TypeRemap(F.TypeRemap);
3804 
3805   while (Data < DataEnd) {
3806     // FIXME: Looking up dependency modules by filename is horrible. Let's
3807     // start fixing this with prebuilt and explicit modules and see how it
3808     // goes...
3809     using namespace llvm::support;
3810     ModuleKind Kind = static_cast<ModuleKind>(
3811       endian::readNext<uint8_t, little, unaligned>(Data));
3812     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3813     StringRef Name = StringRef((const char*)Data, Len);
3814     Data += Len;
3815     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule
3816                       ? ModuleMgr.lookupByModuleName(Name)
3817                       : ModuleMgr.lookupByFileName(Name));
3818     if (!OM) {
3819       std::string Msg =
3820           "SourceLocation remap refers to unknown module, cannot find ";
3821       Msg.append(Name);
3822       Error(Msg);
3823       return;
3824     }
3825 
3826     uint32_t SLocOffset =
3827         endian::readNext<uint32_t, little, unaligned>(Data);
3828     uint32_t IdentifierIDOffset =
3829         endian::readNext<uint32_t, little, unaligned>(Data);
3830     uint32_t MacroIDOffset =
3831         endian::readNext<uint32_t, little, unaligned>(Data);
3832     uint32_t PreprocessedEntityIDOffset =
3833         endian::readNext<uint32_t, little, unaligned>(Data);
3834     uint32_t SubmoduleIDOffset =
3835         endian::readNext<uint32_t, little, unaligned>(Data);
3836     uint32_t SelectorIDOffset =
3837         endian::readNext<uint32_t, little, unaligned>(Data);
3838     uint32_t DeclIDOffset =
3839         endian::readNext<uint32_t, little, unaligned>(Data);
3840     uint32_t TypeIndexOffset =
3841         endian::readNext<uint32_t, little, unaligned>(Data);
3842 
3843     uint32_t None = std::numeric_limits<uint32_t>::max();
3844 
3845     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3846                          RemapBuilder &Remap) {
3847       if (Offset != None)
3848         Remap.insert(std::make_pair(Offset,
3849                                     static_cast<int>(BaseOffset - Offset)));
3850     };
3851     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3852     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3853     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3854     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3855               PreprocessedEntityRemap);
3856     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3857     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3858     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3859     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3860 
3861     // Global -> local mappings.
3862     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3863   }
3864 }
3865 
3866 ASTReader::ASTReadResult
3867 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3868                                   const ModuleFile *ImportedBy,
3869                                   unsigned ClientLoadCapabilities) {
3870   unsigned Idx = 0;
3871   F.ModuleMapPath = ReadPath(F, Record, Idx);
3872 
3873   // Try to resolve ModuleName in the current header search context and
3874   // verify that it is found in the same module map file as we saved. If the
3875   // top-level AST file is a main file, skip this check because there is no
3876   // usable header search context.
3877   assert(!F.ModuleName.empty() &&
3878          "MODULE_NAME should come before MODULE_MAP_FILE");
3879   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3880     // An implicitly-loaded module file should have its module listed in some
3881     // module map file that we've already loaded.
3882     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3883     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3884     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3885     // Don't emit module relocation error if we have -fno-validate-pch
3886     if (!PP.getPreprocessorOpts().DisablePCHValidation && !ModMap) {
3887       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3888         if (auto *ASTFE = M ? M->getASTFile() : nullptr) {
3889           // This module was defined by an imported (explicit) module.
3890           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3891                                                << ASTFE->getName();
3892         } else {
3893           // This module was built with a different module map.
3894           Diag(diag::err_imported_module_not_found)
3895               << F.ModuleName << F.FileName
3896               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3897               << !ImportedBy;
3898           // In case it was imported by a PCH, there's a chance the user is
3899           // just missing to include the search path to the directory containing
3900           // the modulemap.
3901           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3902             Diag(diag::note_imported_by_pch_module_not_found)
3903                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3904         }
3905       }
3906       return OutOfDate;
3907     }
3908 
3909     assert(M->Name == F.ModuleName && "found module with different name");
3910 
3911     // Check the primary module map file.
3912     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3913     if (!StoredModMap || *StoredModMap != ModMap) {
3914       assert(ModMap && "found module is missing module map file");
3915       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3916              "top-level import should be verified");
3917       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3918       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3919         Diag(diag::err_imported_module_modmap_changed)
3920             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3921             << ModMap->getName() << F.ModuleMapPath << NotImported;
3922       return OutOfDate;
3923     }
3924 
3925     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3926     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3927       // FIXME: we should use input files rather than storing names.
3928       std::string Filename = ReadPath(F, Record, Idx);
3929       auto F = FileMgr.getFile(Filename, false, false);
3930       if (!F) {
3931         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3932           Error("could not find file '" + Filename +"' referenced by AST file");
3933         return OutOfDate;
3934       }
3935       AdditionalStoredMaps.insert(*F);
3936     }
3937 
3938     // Check any additional module map files (e.g. module.private.modulemap)
3939     // that are not in the pcm.
3940     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3941       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3942         // Remove files that match
3943         // Note: SmallPtrSet::erase is really remove
3944         if (!AdditionalStoredMaps.erase(ModMap)) {
3945           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3946             Diag(diag::err_module_different_modmap)
3947               << F.ModuleName << /*new*/0 << ModMap->getName();
3948           return OutOfDate;
3949         }
3950       }
3951     }
3952 
3953     // Check any additional module map files that are in the pcm, but not
3954     // found in header search. Cases that match are already removed.
3955     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3956       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3957         Diag(diag::err_module_different_modmap)
3958           << F.ModuleName << /*not new*/1 << ModMap->getName();
3959       return OutOfDate;
3960     }
3961   }
3962 
3963   if (Listener)
3964     Listener->ReadModuleMapFile(F.ModuleMapPath);
3965   return Success;
3966 }
3967 
3968 /// Move the given method to the back of the global list of methods.
3969 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3970   // Find the entry for this selector in the method pool.
3971   Sema::GlobalMethodPool::iterator Known
3972     = S.MethodPool.find(Method->getSelector());
3973   if (Known == S.MethodPool.end())
3974     return;
3975 
3976   // Retrieve the appropriate method list.
3977   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3978                                                     : Known->second.second;
3979   bool Found = false;
3980   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3981     if (!Found) {
3982       if (List->getMethod() == Method) {
3983         Found = true;
3984       } else {
3985         // Keep searching.
3986         continue;
3987       }
3988     }
3989 
3990     if (List->getNext())
3991       List->setMethod(List->getNext()->getMethod());
3992     else
3993       List->setMethod(Method);
3994   }
3995 }
3996 
3997 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
3998   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
3999   for (Decl *D : Names) {
4000     bool wasHidden = D->isHidden();
4001     D->setVisibleDespiteOwningModule();
4002 
4003     if (wasHidden && SemaObj) {
4004       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4005         moveMethodToBackOfGlobalList(*SemaObj, Method);
4006       }
4007     }
4008   }
4009 }
4010 
4011 void ASTReader::makeModuleVisible(Module *Mod,
4012                                   Module::NameVisibilityKind NameVisibility,
4013                                   SourceLocation ImportLoc) {
4014   llvm::SmallPtrSet<Module *, 4> Visited;
4015   SmallVector<Module *, 4> Stack;
4016   Stack.push_back(Mod);
4017   while (!Stack.empty()) {
4018     Mod = Stack.pop_back_val();
4019 
4020     if (NameVisibility <= Mod->NameVisibility) {
4021       // This module already has this level of visibility (or greater), so
4022       // there is nothing more to do.
4023       continue;
4024     }
4025 
4026     if (!Mod->isAvailable()) {
4027       // Modules that aren't available cannot be made visible.
4028       continue;
4029     }
4030 
4031     // Update the module's name visibility.
4032     Mod->NameVisibility = NameVisibility;
4033 
4034     // If we've already deserialized any names from this module,
4035     // mark them as visible.
4036     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4037     if (Hidden != HiddenNamesMap.end()) {
4038       auto HiddenNames = std::move(*Hidden);
4039       HiddenNamesMap.erase(Hidden);
4040       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4041       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4042              "making names visible added hidden names");
4043     }
4044 
4045     // Push any exported modules onto the stack to be marked as visible.
4046     SmallVector<Module *, 16> Exports;
4047     Mod->getExportedModules(Exports);
4048     for (SmallVectorImpl<Module *>::iterator
4049            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4050       Module *Exported = *I;
4051       if (Visited.insert(Exported).second)
4052         Stack.push_back(Exported);
4053     }
4054   }
4055 }
4056 
4057 /// We've merged the definition \p MergedDef into the existing definition
4058 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4059 /// visible.
4060 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4061                                           NamedDecl *MergedDef) {
4062   if (Def->isHidden()) {
4063     // If MergedDef is visible or becomes visible, make the definition visible.
4064     if (!MergedDef->isHidden())
4065       Def->setVisibleDespiteOwningModule();
4066     else {
4067       getContext().mergeDefinitionIntoModule(
4068           Def, MergedDef->getImportedOwningModule(),
4069           /*NotifyListeners*/ false);
4070       PendingMergedDefinitionsToDeduplicate.insert(Def);
4071     }
4072   }
4073 }
4074 
4075 bool ASTReader::loadGlobalIndex() {
4076   if (GlobalIndex)
4077     return false;
4078 
4079   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4080       !PP.getLangOpts().Modules)
4081     return true;
4082 
4083   // Try to load the global index.
4084   TriedLoadingGlobalIndex = true;
4085   StringRef ModuleCachePath
4086     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4087   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4088       GlobalModuleIndex::readIndex(ModuleCachePath);
4089   if (llvm::Error Err = std::move(Result.second)) {
4090     assert(!Result.first);
4091     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4092     return true;
4093   }
4094 
4095   GlobalIndex.reset(Result.first);
4096   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4097   return false;
4098 }
4099 
4100 bool ASTReader::isGlobalIndexUnavailable() const {
4101   return PP.getLangOpts().Modules && UseGlobalIndex &&
4102          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4103 }
4104 
4105 static void updateModuleTimestamp(ModuleFile &MF) {
4106   // Overwrite the timestamp file contents so that file's mtime changes.
4107   std::string TimestampFilename = MF.getTimestampFilename();
4108   std::error_code EC;
4109   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4110   if (EC)
4111     return;
4112   OS << "Timestamp file\n";
4113   OS.close();
4114   OS.clear_error(); // Avoid triggering a fatal error.
4115 }
4116 
4117 /// Given a cursor at the start of an AST file, scan ahead and drop the
4118 /// cursor into the start of the given block ID, returning false on success and
4119 /// true on failure.
4120 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4121   while (true) {
4122     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4123     if (!MaybeEntry) {
4124       // FIXME this drops errors on the floor.
4125       consumeError(MaybeEntry.takeError());
4126       return true;
4127     }
4128     llvm::BitstreamEntry Entry = MaybeEntry.get();
4129 
4130     switch (Entry.Kind) {
4131     case llvm::BitstreamEntry::Error:
4132     case llvm::BitstreamEntry::EndBlock:
4133       return true;
4134 
4135     case llvm::BitstreamEntry::Record:
4136       // Ignore top-level records.
4137       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4138         break;
4139       else {
4140         // FIXME this drops errors on the floor.
4141         consumeError(Skipped.takeError());
4142         return true;
4143       }
4144 
4145     case llvm::BitstreamEntry::SubBlock:
4146       if (Entry.ID == BlockID) {
4147         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4148           // FIXME this drops the error on the floor.
4149           consumeError(std::move(Err));
4150           return true;
4151         }
4152         // Found it!
4153         return false;
4154       }
4155 
4156       if (llvm::Error Err = Cursor.SkipBlock()) {
4157         // FIXME this drops the error on the floor.
4158         consumeError(std::move(Err));
4159         return true;
4160       }
4161     }
4162   }
4163 }
4164 
4165 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4166                                             ModuleKind Type,
4167                                             SourceLocation ImportLoc,
4168                                             unsigned ClientLoadCapabilities,
4169                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4170   llvm::SaveAndRestore<SourceLocation>
4171     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4172 
4173   // Defer any pending actions until we get to the end of reading the AST file.
4174   Deserializing AnASTFile(this);
4175 
4176   // Bump the generation number.
4177   unsigned PreviousGeneration = 0;
4178   if (ContextObj)
4179     PreviousGeneration = incrementGeneration(*ContextObj);
4180 
4181   unsigned NumModules = ModuleMgr.size();
4182   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4183     assert(ReadResult && "expected to return error");
4184     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4185                             PP.getLangOpts().Modules
4186                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4187                                 : nullptr);
4188 
4189     // If we find that any modules are unusable, the global index is going
4190     // to be out-of-date. Just remove it.
4191     GlobalIndex.reset();
4192     ModuleMgr.setGlobalIndex(nullptr);
4193     return ReadResult;
4194   };
4195 
4196   SmallVector<ImportedModule, 4> Loaded;
4197   switch (ASTReadResult ReadResult =
4198               ReadASTCore(FileName, Type, ImportLoc,
4199                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4200                           ASTFileSignature(), ClientLoadCapabilities)) {
4201   case Failure:
4202   case Missing:
4203   case OutOfDate:
4204   case VersionMismatch:
4205   case ConfigurationMismatch:
4206   case HadErrors:
4207     return removeModulesAndReturn(ReadResult);
4208   case Success:
4209     break;
4210   }
4211 
4212   // Here comes stuff that we only do once the entire chain is loaded.
4213 
4214   // Load the AST blocks of all of the modules that we loaded.  We can still
4215   // hit errors parsing the ASTs at this point.
4216   for (ImportedModule &M : Loaded) {
4217     ModuleFile &F = *M.Mod;
4218 
4219     // Read the AST block.
4220     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4221       return removeModulesAndReturn(Result);
4222 
4223     // The AST block should always have a definition for the main module.
4224     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4225       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4226       return removeModulesAndReturn(Failure);
4227     }
4228 
4229     // Read the extension blocks.
4230     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4231       if (ASTReadResult Result = ReadExtensionBlock(F))
4232         return removeModulesAndReturn(Result);
4233     }
4234 
4235     // Once read, set the ModuleFile bit base offset and update the size in
4236     // bits of all files we've seen.
4237     F.GlobalBitOffset = TotalModulesSizeInBits;
4238     TotalModulesSizeInBits += F.SizeInBits;
4239     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4240   }
4241 
4242   // Preload source locations and interesting indentifiers.
4243   for (ImportedModule &M : Loaded) {
4244     ModuleFile &F = *M.Mod;
4245 
4246     // Preload SLocEntries.
4247     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4248       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4249       // Load it through the SourceManager and don't call ReadSLocEntry()
4250       // directly because the entry may have already been loaded in which case
4251       // calling ReadSLocEntry() directly would trigger an assertion in
4252       // SourceManager.
4253       SourceMgr.getLoadedSLocEntryByID(Index);
4254     }
4255 
4256     // Map the original source file ID into the ID space of the current
4257     // compilation.
4258     if (F.OriginalSourceFileID.isValid()) {
4259       F.OriginalSourceFileID = FileID::get(
4260           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4261     }
4262 
4263     // Preload all the pending interesting identifiers by marking them out of
4264     // date.
4265     for (auto Offset : F.PreloadIdentifierOffsets) {
4266       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
4267           F.IdentifierTableData + Offset);
4268 
4269       ASTIdentifierLookupTrait Trait(*this, F);
4270       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4271       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4272       auto &II = PP.getIdentifierTable().getOwn(Key);
4273       II.setOutOfDate(true);
4274 
4275       // Mark this identifier as being from an AST file so that we can track
4276       // whether we need to serialize it.
4277       markIdentifierFromAST(*this, II);
4278 
4279       // Associate the ID with the identifier so that the writer can reuse it.
4280       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4281       SetIdentifierInfo(ID, &II);
4282     }
4283   }
4284 
4285   // Setup the import locations and notify the module manager that we've
4286   // committed to these module files.
4287   for (ImportedModule &M : Loaded) {
4288     ModuleFile &F = *M.Mod;
4289 
4290     ModuleMgr.moduleFileAccepted(&F);
4291 
4292     // Set the import location.
4293     F.DirectImportLoc = ImportLoc;
4294     // FIXME: We assume that locations from PCH / preamble do not need
4295     // any translation.
4296     if (!M.ImportedBy)
4297       F.ImportLoc = M.ImportLoc;
4298     else
4299       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4300   }
4301 
4302   if (!PP.getLangOpts().CPlusPlus ||
4303       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4304        Type != MK_PrebuiltModule)) {
4305     // Mark all of the identifiers in the identifier table as being out of date,
4306     // so that various accessors know to check the loaded modules when the
4307     // identifier is used.
4308     //
4309     // For C++ modules, we don't need information on many identifiers (just
4310     // those that provide macros or are poisoned), so we mark all of
4311     // the interesting ones via PreloadIdentifierOffsets.
4312     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4313                                 IdEnd = PP.getIdentifierTable().end();
4314          Id != IdEnd; ++Id)
4315       Id->second->setOutOfDate(true);
4316   }
4317   // Mark selectors as out of date.
4318   for (auto Sel : SelectorGeneration)
4319     SelectorOutOfDate[Sel.first] = true;
4320 
4321   // Resolve any unresolved module exports.
4322   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4323     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4324     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4325     Module *ResolvedMod = getSubmodule(GlobalID);
4326 
4327     switch (Unresolved.Kind) {
4328     case UnresolvedModuleRef::Conflict:
4329       if (ResolvedMod) {
4330         Module::Conflict Conflict;
4331         Conflict.Other = ResolvedMod;
4332         Conflict.Message = Unresolved.String.str();
4333         Unresolved.Mod->Conflicts.push_back(Conflict);
4334       }
4335       continue;
4336 
4337     case UnresolvedModuleRef::Import:
4338       if (ResolvedMod)
4339         Unresolved.Mod->Imports.insert(ResolvedMod);
4340       continue;
4341 
4342     case UnresolvedModuleRef::Export:
4343       if (ResolvedMod || Unresolved.IsWildcard)
4344         Unresolved.Mod->Exports.push_back(
4345           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4346       continue;
4347     }
4348   }
4349   UnresolvedModuleRefs.clear();
4350 
4351   if (Imported)
4352     Imported->append(ImportedModules.begin(),
4353                      ImportedModules.end());
4354 
4355   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4356   // Might be unnecessary as use declarations are only used to build the
4357   // module itself.
4358 
4359   if (ContextObj)
4360     InitializeContext();
4361 
4362   if (SemaObj)
4363     UpdateSema();
4364 
4365   if (DeserializationListener)
4366     DeserializationListener->ReaderInitialized(this);
4367 
4368   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4369   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4370     // If this AST file is a precompiled preamble, then set the
4371     // preamble file ID of the source manager to the file source file
4372     // from which the preamble was built.
4373     if (Type == MK_Preamble) {
4374       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4375     } else if (Type == MK_MainFile) {
4376       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4377     }
4378   }
4379 
4380   // For any Objective-C class definitions we have already loaded, make sure
4381   // that we load any additional categories.
4382   if (ContextObj) {
4383     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4384       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4385                          ObjCClassesLoaded[I],
4386                          PreviousGeneration);
4387     }
4388   }
4389 
4390   if (PP.getHeaderSearchInfo()
4391           .getHeaderSearchOpts()
4392           .ModulesValidateOncePerBuildSession) {
4393     // Now we are certain that the module and all modules it depends on are
4394     // up to date.  Create or update timestamp files for modules that are
4395     // located in the module cache (not for PCH files that could be anywhere
4396     // in the filesystem).
4397     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4398       ImportedModule &M = Loaded[I];
4399       if (M.Mod->Kind == MK_ImplicitModule) {
4400         updateModuleTimestamp(*M.Mod);
4401       }
4402     }
4403   }
4404 
4405   return Success;
4406 }
4407 
4408 static ASTFileSignature readASTFileSignature(StringRef PCH);
4409 
4410 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4411 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4412   // FIXME checking magic headers is done in other places such as
4413   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4414   // always done the same. Unify it all with a helper.
4415   if (!Stream.canSkipToPos(4))
4416     return llvm::createStringError(std::errc::illegal_byte_sequence,
4417                                    "file too small to contain AST file magic");
4418   for (unsigned C : {'C', 'P', 'C', 'H'})
4419     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4420       if (Res.get() != C)
4421         return llvm::createStringError(
4422             std::errc::illegal_byte_sequence,
4423             "file doesn't start with AST file magic");
4424     } else
4425       return Res.takeError();
4426   return llvm::Error::success();
4427 }
4428 
4429 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4430   switch (Kind) {
4431   case MK_PCH:
4432     return 0; // PCH
4433   case MK_ImplicitModule:
4434   case MK_ExplicitModule:
4435   case MK_PrebuiltModule:
4436     return 1; // module
4437   case MK_MainFile:
4438   case MK_Preamble:
4439     return 2; // main source file
4440   }
4441   llvm_unreachable("unknown module kind");
4442 }
4443 
4444 ASTReader::ASTReadResult
4445 ASTReader::ReadASTCore(StringRef FileName,
4446                        ModuleKind Type,
4447                        SourceLocation ImportLoc,
4448                        ModuleFile *ImportedBy,
4449                        SmallVectorImpl<ImportedModule> &Loaded,
4450                        off_t ExpectedSize, time_t ExpectedModTime,
4451                        ASTFileSignature ExpectedSignature,
4452                        unsigned ClientLoadCapabilities) {
4453   ModuleFile *M;
4454   std::string ErrorStr;
4455   ModuleManager::AddModuleResult AddResult
4456     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4457                           getGeneration(), ExpectedSize, ExpectedModTime,
4458                           ExpectedSignature, readASTFileSignature,
4459                           M, ErrorStr);
4460 
4461   switch (AddResult) {
4462   case ModuleManager::AlreadyLoaded:
4463     Diag(diag::remark_module_import)
4464         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4465         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4466     return Success;
4467 
4468   case ModuleManager::NewlyLoaded:
4469     // Load module file below.
4470     break;
4471 
4472   case ModuleManager::Missing:
4473     // The module file was missing; if the client can handle that, return
4474     // it.
4475     if (ClientLoadCapabilities & ARR_Missing)
4476       return Missing;
4477 
4478     // Otherwise, return an error.
4479     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
4480                                           << FileName << !ErrorStr.empty()
4481                                           << ErrorStr;
4482     return Failure;
4483 
4484   case ModuleManager::OutOfDate:
4485     // We couldn't load the module file because it is out-of-date. If the
4486     // client can handle out-of-date, return it.
4487     if (ClientLoadCapabilities & ARR_OutOfDate)
4488       return OutOfDate;
4489 
4490     // Otherwise, return an error.
4491     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
4492                                             << FileName << !ErrorStr.empty()
4493                                             << ErrorStr;
4494     return Failure;
4495   }
4496 
4497   assert(M && "Missing module file");
4498 
4499   bool ShouldFinalizePCM = false;
4500   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4501     auto &MC = getModuleManager().getModuleCache();
4502     if (ShouldFinalizePCM)
4503       MC.finalizePCM(FileName);
4504     else
4505       MC.tryToDropPCM(FileName);
4506   });
4507   ModuleFile &F = *M;
4508   BitstreamCursor &Stream = F.Stream;
4509   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4510   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4511 
4512   // Sniff for the signature.
4513   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4514     Diag(diag::err_module_file_invalid)
4515         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4516     return Failure;
4517   }
4518 
4519   // This is used for compatibility with older PCH formats.
4520   bool HaveReadControlBlock = false;
4521   while (true) {
4522     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4523     if (!MaybeEntry) {
4524       Error(MaybeEntry.takeError());
4525       return Failure;
4526     }
4527     llvm::BitstreamEntry Entry = MaybeEntry.get();
4528 
4529     switch (Entry.Kind) {
4530     case llvm::BitstreamEntry::Error:
4531     case llvm::BitstreamEntry::Record:
4532     case llvm::BitstreamEntry::EndBlock:
4533       Error("invalid record at top-level of AST file");
4534       return Failure;
4535 
4536     case llvm::BitstreamEntry::SubBlock:
4537       break;
4538     }
4539 
4540     switch (Entry.ID) {
4541     case CONTROL_BLOCK_ID:
4542       HaveReadControlBlock = true;
4543       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4544       case Success:
4545         // Check that we didn't try to load a non-module AST file as a module.
4546         //
4547         // FIXME: Should we also perform the converse check? Loading a module as
4548         // a PCH file sort of works, but it's a bit wonky.
4549         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4550              Type == MK_PrebuiltModule) &&
4551             F.ModuleName.empty()) {
4552           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4553           if (Result != OutOfDate ||
4554               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4555             Diag(diag::err_module_file_not_module) << FileName;
4556           return Result;
4557         }
4558         break;
4559 
4560       case Failure: return Failure;
4561       case Missing: return Missing;
4562       case OutOfDate: return OutOfDate;
4563       case VersionMismatch: return VersionMismatch;
4564       case ConfigurationMismatch: return ConfigurationMismatch;
4565       case HadErrors: return HadErrors;
4566       }
4567       break;
4568 
4569     case AST_BLOCK_ID:
4570       if (!HaveReadControlBlock) {
4571         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4572           Diag(diag::err_pch_version_too_old);
4573         return VersionMismatch;
4574       }
4575 
4576       // Record that we've loaded this module.
4577       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4578       ShouldFinalizePCM = true;
4579       return Success;
4580 
4581     case UNHASHED_CONTROL_BLOCK_ID:
4582       // This block is handled using look-ahead during ReadControlBlock.  We
4583       // shouldn't get here!
4584       Error("malformed block record in AST file");
4585       return Failure;
4586 
4587     default:
4588       if (llvm::Error Err = Stream.SkipBlock()) {
4589         Error(std::move(Err));
4590         return Failure;
4591       }
4592       break;
4593     }
4594   }
4595 
4596   llvm_unreachable("unexpected break; expected return");
4597 }
4598 
4599 ASTReader::ASTReadResult
4600 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4601                                     unsigned ClientLoadCapabilities) {
4602   const HeaderSearchOptions &HSOpts =
4603       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4604   bool AllowCompatibleConfigurationMismatch =
4605       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4606 
4607   ASTReadResult Result = readUnhashedControlBlockImpl(
4608       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4609       Listener.get(),
4610       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4611 
4612   // If F was directly imported by another module, it's implicitly validated by
4613   // the importing module.
4614   if (DisableValidation || WasImportedBy ||
4615       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4616     return Success;
4617 
4618   if (Result == Failure) {
4619     Error("malformed block record in AST file");
4620     return Failure;
4621   }
4622 
4623   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4624     // If this module has already been finalized in the ModuleCache, we're stuck
4625     // with it; we can only load a single version of each module.
4626     //
4627     // This can happen when a module is imported in two contexts: in one, as a
4628     // user module; in another, as a system module (due to an import from
4629     // another module marked with the [system] flag).  It usually indicates a
4630     // bug in the module map: this module should also be marked with [system].
4631     //
4632     // If -Wno-system-headers (the default), and the first import is as a
4633     // system module, then validation will fail during the as-user import,
4634     // since -Werror flags won't have been validated.  However, it's reasonable
4635     // to treat this consistently as a system module.
4636     //
4637     // If -Wsystem-headers, the PCM on disk was built with
4638     // -Wno-system-headers, and the first import is as a user module, then
4639     // validation will fail during the as-system import since the PCM on disk
4640     // doesn't guarantee that -Werror was respected.  However, the -Werror
4641     // flags were checked during the initial as-user import.
4642     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4643       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4644       return Success;
4645     }
4646   }
4647 
4648   return Result;
4649 }
4650 
4651 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4652     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4653     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4654     bool ValidateDiagnosticOptions) {
4655   // Initialize a stream.
4656   BitstreamCursor Stream(StreamData);
4657 
4658   // Sniff for the signature.
4659   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4660     // FIXME this drops the error on the floor.
4661     consumeError(std::move(Err));
4662     return Failure;
4663   }
4664 
4665   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4666   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4667     return Failure;
4668 
4669   // Read all of the records in the options block.
4670   RecordData Record;
4671   ASTReadResult Result = Success;
4672   while (true) {
4673     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4674     if (!MaybeEntry) {
4675       // FIXME this drops the error on the floor.
4676       consumeError(MaybeEntry.takeError());
4677       return Failure;
4678     }
4679     llvm::BitstreamEntry Entry = MaybeEntry.get();
4680 
4681     switch (Entry.Kind) {
4682     case llvm::BitstreamEntry::Error:
4683     case llvm::BitstreamEntry::SubBlock:
4684       return Failure;
4685 
4686     case llvm::BitstreamEntry::EndBlock:
4687       return Result;
4688 
4689     case llvm::BitstreamEntry::Record:
4690       // The interesting case.
4691       break;
4692     }
4693 
4694     // Read and process a record.
4695     Record.clear();
4696     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4697     if (!MaybeRecordType) {
4698       // FIXME this drops the error.
4699       return Failure;
4700     }
4701     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4702     case SIGNATURE:
4703       if (F)
4704         std::copy(Record.begin(), Record.end(), F->Signature.data());
4705       break;
4706     case DIAGNOSTIC_OPTIONS: {
4707       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4708       if (Listener && ValidateDiagnosticOptions &&
4709           !AllowCompatibleConfigurationMismatch &&
4710           ParseDiagnosticOptions(Record, Complain, *Listener))
4711         Result = OutOfDate; // Don't return early.  Read the signature.
4712       break;
4713     }
4714     case DIAG_PRAGMA_MAPPINGS:
4715       if (!F)
4716         break;
4717       if (F->PragmaDiagMappings.empty())
4718         F->PragmaDiagMappings.swap(Record);
4719       else
4720         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4721                                      Record.begin(), Record.end());
4722       break;
4723     }
4724   }
4725 }
4726 
4727 /// Parse a record and blob containing module file extension metadata.
4728 static bool parseModuleFileExtensionMetadata(
4729               const SmallVectorImpl<uint64_t> &Record,
4730               StringRef Blob,
4731               ModuleFileExtensionMetadata &Metadata) {
4732   if (Record.size() < 4) return true;
4733 
4734   Metadata.MajorVersion = Record[0];
4735   Metadata.MinorVersion = Record[1];
4736 
4737   unsigned BlockNameLen = Record[2];
4738   unsigned UserInfoLen = Record[3];
4739 
4740   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4741 
4742   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4743   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4744                                   Blob.data() + BlockNameLen + UserInfoLen);
4745   return false;
4746 }
4747 
4748 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4749   BitstreamCursor &Stream = F.Stream;
4750 
4751   RecordData Record;
4752   while (true) {
4753     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4754     if (!MaybeEntry) {
4755       Error(MaybeEntry.takeError());
4756       return Failure;
4757     }
4758     llvm::BitstreamEntry Entry = MaybeEntry.get();
4759 
4760     switch (Entry.Kind) {
4761     case llvm::BitstreamEntry::SubBlock:
4762       if (llvm::Error Err = Stream.SkipBlock()) {
4763         Error(std::move(Err));
4764         return Failure;
4765       }
4766       continue;
4767 
4768     case llvm::BitstreamEntry::EndBlock:
4769       return Success;
4770 
4771     case llvm::BitstreamEntry::Error:
4772       return HadErrors;
4773 
4774     case llvm::BitstreamEntry::Record:
4775       break;
4776     }
4777 
4778     Record.clear();
4779     StringRef Blob;
4780     Expected<unsigned> MaybeRecCode =
4781         Stream.readRecord(Entry.ID, Record, &Blob);
4782     if (!MaybeRecCode) {
4783       Error(MaybeRecCode.takeError());
4784       return Failure;
4785     }
4786     switch (MaybeRecCode.get()) {
4787     case EXTENSION_METADATA: {
4788       ModuleFileExtensionMetadata Metadata;
4789       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4790         Error("malformed EXTENSION_METADATA in AST file");
4791         return Failure;
4792       }
4793 
4794       // Find a module file extension with this block name.
4795       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4796       if (Known == ModuleFileExtensions.end()) break;
4797 
4798       // Form a reader.
4799       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4800                                                              F, Stream)) {
4801         F.ExtensionReaders.push_back(std::move(Reader));
4802       }
4803 
4804       break;
4805     }
4806     }
4807   }
4808 
4809   return Success;
4810 }
4811 
4812 void ASTReader::InitializeContext() {
4813   assert(ContextObj && "no context to initialize");
4814   ASTContext &Context = *ContextObj;
4815 
4816   // If there's a listener, notify them that we "read" the translation unit.
4817   if (DeserializationListener)
4818     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4819                                       Context.getTranslationUnitDecl());
4820 
4821   // FIXME: Find a better way to deal with collisions between these
4822   // built-in types. Right now, we just ignore the problem.
4823 
4824   // Load the special types.
4825   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4826     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4827       if (!Context.CFConstantStringTypeDecl)
4828         Context.setCFConstantStringType(GetType(String));
4829     }
4830 
4831     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4832       QualType FileType = GetType(File);
4833       if (FileType.isNull()) {
4834         Error("FILE type is NULL");
4835         return;
4836       }
4837 
4838       if (!Context.FILEDecl) {
4839         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4840           Context.setFILEDecl(Typedef->getDecl());
4841         else {
4842           const TagType *Tag = FileType->getAs<TagType>();
4843           if (!Tag) {
4844             Error("Invalid FILE type in AST file");
4845             return;
4846           }
4847           Context.setFILEDecl(Tag->getDecl());
4848         }
4849       }
4850     }
4851 
4852     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4853       QualType Jmp_bufType = GetType(Jmp_buf);
4854       if (Jmp_bufType.isNull()) {
4855         Error("jmp_buf type is NULL");
4856         return;
4857       }
4858 
4859       if (!Context.jmp_bufDecl) {
4860         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4861           Context.setjmp_bufDecl(Typedef->getDecl());
4862         else {
4863           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4864           if (!Tag) {
4865             Error("Invalid jmp_buf type in AST file");
4866             return;
4867           }
4868           Context.setjmp_bufDecl(Tag->getDecl());
4869         }
4870       }
4871     }
4872 
4873     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4874       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4875       if (Sigjmp_bufType.isNull()) {
4876         Error("sigjmp_buf type is NULL");
4877         return;
4878       }
4879 
4880       if (!Context.sigjmp_bufDecl) {
4881         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4882           Context.setsigjmp_bufDecl(Typedef->getDecl());
4883         else {
4884           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4885           assert(Tag && "Invalid sigjmp_buf type in AST file");
4886           Context.setsigjmp_bufDecl(Tag->getDecl());
4887         }
4888       }
4889     }
4890 
4891     if (unsigned ObjCIdRedef
4892           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4893       if (Context.ObjCIdRedefinitionType.isNull())
4894         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4895     }
4896 
4897     if (unsigned ObjCClassRedef
4898           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4899       if (Context.ObjCClassRedefinitionType.isNull())
4900         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4901     }
4902 
4903     if (unsigned ObjCSelRedef
4904           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4905       if (Context.ObjCSelRedefinitionType.isNull())
4906         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4907     }
4908 
4909     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4910       QualType Ucontext_tType = GetType(Ucontext_t);
4911       if (Ucontext_tType.isNull()) {
4912         Error("ucontext_t type is NULL");
4913         return;
4914       }
4915 
4916       if (!Context.ucontext_tDecl) {
4917         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4918           Context.setucontext_tDecl(Typedef->getDecl());
4919         else {
4920           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4921           assert(Tag && "Invalid ucontext_t type in AST file");
4922           Context.setucontext_tDecl(Tag->getDecl());
4923         }
4924       }
4925     }
4926   }
4927 
4928   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4929 
4930   // If there were any CUDA special declarations, deserialize them.
4931   if (!CUDASpecialDeclRefs.empty()) {
4932     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4933     Context.setcudaConfigureCallDecl(
4934                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4935   }
4936 
4937   // Re-export any modules that were imported by a non-module AST file.
4938   // FIXME: This does not make macro-only imports visible again.
4939   for (auto &Import : ImportedModules) {
4940     if (Module *Imported = getSubmodule(Import.ID)) {
4941       makeModuleVisible(Imported, Module::AllVisible,
4942                         /*ImportLoc=*/Import.ImportLoc);
4943       if (Import.ImportLoc.isValid())
4944         PP.makeModuleVisible(Imported, Import.ImportLoc);
4945       // FIXME: should we tell Sema to make the module visible too?
4946     }
4947   }
4948   ImportedModules.clear();
4949 }
4950 
4951 void ASTReader::finalizeForWriting() {
4952   // Nothing to do for now.
4953 }
4954 
4955 /// Reads and return the signature record from \p PCH's control block, or
4956 /// else returns 0.
4957 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4958   BitstreamCursor Stream(PCH);
4959   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4960     // FIXME this drops the error on the floor.
4961     consumeError(std::move(Err));
4962     return ASTFileSignature();
4963   }
4964 
4965   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4966   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4967     return ASTFileSignature();
4968 
4969   // Scan for SIGNATURE inside the diagnostic options block.
4970   ASTReader::RecordData Record;
4971   while (true) {
4972     Expected<llvm::BitstreamEntry> MaybeEntry =
4973         Stream.advanceSkippingSubblocks();
4974     if (!MaybeEntry) {
4975       // FIXME this drops the error on the floor.
4976       consumeError(MaybeEntry.takeError());
4977       return ASTFileSignature();
4978     }
4979     llvm::BitstreamEntry Entry = MaybeEntry.get();
4980 
4981     if (Entry.Kind != llvm::BitstreamEntry::Record)
4982       return ASTFileSignature();
4983 
4984     Record.clear();
4985     StringRef Blob;
4986     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
4987     if (!MaybeRecord) {
4988       // FIXME this drops the error on the floor.
4989       consumeError(MaybeRecord.takeError());
4990       return ASTFileSignature();
4991     }
4992     if (SIGNATURE == MaybeRecord.get())
4993       return {{{(uint32_t)Record[0], (uint32_t)Record[1], (uint32_t)Record[2],
4994                 (uint32_t)Record[3], (uint32_t)Record[4]}}};
4995   }
4996 }
4997 
4998 /// Retrieve the name of the original source file name
4999 /// directly from the AST file, without actually loading the AST
5000 /// file.
5001 std::string ASTReader::getOriginalSourceFile(
5002     const std::string &ASTFileName, FileManager &FileMgr,
5003     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5004   // Open the AST file.
5005   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5006   if (!Buffer) {
5007     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5008         << ASTFileName << Buffer.getError().message();
5009     return std::string();
5010   }
5011 
5012   // Initialize the stream
5013   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5014 
5015   // Sniff for the signature.
5016   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5017     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5018     return std::string();
5019   }
5020 
5021   // Scan for the CONTROL_BLOCK_ID block.
5022   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5023     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5024     return std::string();
5025   }
5026 
5027   // Scan for ORIGINAL_FILE inside the control block.
5028   RecordData Record;
5029   while (true) {
5030     Expected<llvm::BitstreamEntry> MaybeEntry =
5031         Stream.advanceSkippingSubblocks();
5032     if (!MaybeEntry) {
5033       // FIXME this drops errors on the floor.
5034       consumeError(MaybeEntry.takeError());
5035       return std::string();
5036     }
5037     llvm::BitstreamEntry Entry = MaybeEntry.get();
5038 
5039     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5040       return std::string();
5041 
5042     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5043       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5044       return std::string();
5045     }
5046 
5047     Record.clear();
5048     StringRef Blob;
5049     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5050     if (!MaybeRecord) {
5051       // FIXME this drops the errors on the floor.
5052       consumeError(MaybeRecord.takeError());
5053       return std::string();
5054     }
5055     if (ORIGINAL_FILE == MaybeRecord.get())
5056       return Blob.str();
5057   }
5058 }
5059 
5060 namespace {
5061 
5062   class SimplePCHValidator : public ASTReaderListener {
5063     const LangOptions &ExistingLangOpts;
5064     const TargetOptions &ExistingTargetOpts;
5065     const PreprocessorOptions &ExistingPPOpts;
5066     std::string ExistingModuleCachePath;
5067     FileManager &FileMgr;
5068 
5069   public:
5070     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5071                        const TargetOptions &ExistingTargetOpts,
5072                        const PreprocessorOptions &ExistingPPOpts,
5073                        StringRef ExistingModuleCachePath,
5074                        FileManager &FileMgr)
5075       : ExistingLangOpts(ExistingLangOpts),
5076         ExistingTargetOpts(ExistingTargetOpts),
5077         ExistingPPOpts(ExistingPPOpts),
5078         ExistingModuleCachePath(ExistingModuleCachePath),
5079         FileMgr(FileMgr) {}
5080 
5081     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5082                              bool AllowCompatibleDifferences) override {
5083       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5084                                   AllowCompatibleDifferences);
5085     }
5086 
5087     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5088                            bool AllowCompatibleDifferences) override {
5089       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5090                                 AllowCompatibleDifferences);
5091     }
5092 
5093     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5094                                  StringRef SpecificModuleCachePath,
5095                                  bool Complain) override {
5096       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5097                                       ExistingModuleCachePath,
5098                                       nullptr, ExistingLangOpts);
5099     }
5100 
5101     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5102                                  bool Complain,
5103                                  std::string &SuggestedPredefines) override {
5104       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5105                                       SuggestedPredefines, ExistingLangOpts);
5106     }
5107   };
5108 
5109 } // namespace
5110 
5111 bool ASTReader::readASTFileControlBlock(
5112     StringRef Filename, FileManager &FileMgr,
5113     const PCHContainerReader &PCHContainerRdr,
5114     bool FindModuleFileExtensions,
5115     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5116   // Open the AST file.
5117   // FIXME: This allows use of the VFS; we do not allow use of the
5118   // VFS when actually loading a module.
5119   auto Buffer = FileMgr.getBufferForFile(Filename);
5120   if (!Buffer) {
5121     return true;
5122   }
5123 
5124   // Initialize the stream
5125   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5126   BitstreamCursor Stream(Bytes);
5127 
5128   // Sniff for the signature.
5129   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5130     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5131     return true;
5132   }
5133 
5134   // Scan for the CONTROL_BLOCK_ID block.
5135   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5136     return true;
5137 
5138   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5139   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5140   bool NeedsImports = Listener.needsImportVisitation();
5141   BitstreamCursor InputFilesCursor;
5142 
5143   RecordData Record;
5144   std::string ModuleDir;
5145   bool DoneWithControlBlock = false;
5146   while (!DoneWithControlBlock) {
5147     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5148     if (!MaybeEntry) {
5149       // FIXME this drops the error on the floor.
5150       consumeError(MaybeEntry.takeError());
5151       return true;
5152     }
5153     llvm::BitstreamEntry Entry = MaybeEntry.get();
5154 
5155     switch (Entry.Kind) {
5156     case llvm::BitstreamEntry::SubBlock: {
5157       switch (Entry.ID) {
5158       case OPTIONS_BLOCK_ID: {
5159         std::string IgnoredSuggestedPredefines;
5160         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5161                              /*AllowCompatibleConfigurationMismatch*/ false,
5162                              Listener, IgnoredSuggestedPredefines) != Success)
5163           return true;
5164         break;
5165       }
5166 
5167       case INPUT_FILES_BLOCK_ID:
5168         InputFilesCursor = Stream;
5169         if (llvm::Error Err = Stream.SkipBlock()) {
5170           // FIXME this drops the error on the floor.
5171           consumeError(std::move(Err));
5172           return true;
5173         }
5174         if (NeedsInputFiles &&
5175             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5176           return true;
5177         break;
5178 
5179       default:
5180         if (llvm::Error Err = Stream.SkipBlock()) {
5181           // FIXME this drops the error on the floor.
5182           consumeError(std::move(Err));
5183           return true;
5184         }
5185         break;
5186       }
5187 
5188       continue;
5189     }
5190 
5191     case llvm::BitstreamEntry::EndBlock:
5192       DoneWithControlBlock = true;
5193       break;
5194 
5195     case llvm::BitstreamEntry::Error:
5196       return true;
5197 
5198     case llvm::BitstreamEntry::Record:
5199       break;
5200     }
5201 
5202     if (DoneWithControlBlock) break;
5203 
5204     Record.clear();
5205     StringRef Blob;
5206     Expected<unsigned> MaybeRecCode =
5207         Stream.readRecord(Entry.ID, Record, &Blob);
5208     if (!MaybeRecCode) {
5209       // FIXME this drops the error.
5210       return Failure;
5211     }
5212     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5213     case METADATA:
5214       if (Record[0] != VERSION_MAJOR)
5215         return true;
5216       if (Listener.ReadFullVersionInformation(Blob))
5217         return true;
5218       break;
5219     case MODULE_NAME:
5220       Listener.ReadModuleName(Blob);
5221       break;
5222     case MODULE_DIRECTORY:
5223       ModuleDir = Blob;
5224       break;
5225     case MODULE_MAP_FILE: {
5226       unsigned Idx = 0;
5227       auto Path = ReadString(Record, Idx);
5228       ResolveImportedPath(Path, ModuleDir);
5229       Listener.ReadModuleMapFile(Path);
5230       break;
5231     }
5232     case INPUT_FILE_OFFSETS: {
5233       if (!NeedsInputFiles)
5234         break;
5235 
5236       unsigned NumInputFiles = Record[0];
5237       unsigned NumUserFiles = Record[1];
5238       const llvm::support::unaligned_uint64_t *InputFileOffs =
5239           (const llvm::support::unaligned_uint64_t *)Blob.data();
5240       for (unsigned I = 0; I != NumInputFiles; ++I) {
5241         // Go find this input file.
5242         bool isSystemFile = I >= NumUserFiles;
5243 
5244         if (isSystemFile && !NeedsSystemInputFiles)
5245           break; // the rest are system input files
5246 
5247         BitstreamCursor &Cursor = InputFilesCursor;
5248         SavedStreamPosition SavedPosition(Cursor);
5249         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5250           // FIXME this drops errors on the floor.
5251           consumeError(std::move(Err));
5252         }
5253 
5254         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5255         if (!MaybeCode) {
5256           // FIXME this drops errors on the floor.
5257           consumeError(MaybeCode.takeError());
5258         }
5259         unsigned Code = MaybeCode.get();
5260 
5261         RecordData Record;
5262         StringRef Blob;
5263         bool shouldContinue = false;
5264         Expected<unsigned> MaybeRecordType =
5265             Cursor.readRecord(Code, Record, &Blob);
5266         if (!MaybeRecordType) {
5267           // FIXME this drops errors on the floor.
5268           consumeError(MaybeRecordType.takeError());
5269         }
5270         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5271         case INPUT_FILE_HASH:
5272           break;
5273         case INPUT_FILE:
5274           bool Overridden = static_cast<bool>(Record[3]);
5275           std::string Filename = Blob;
5276           ResolveImportedPath(Filename, ModuleDir);
5277           shouldContinue = Listener.visitInputFile(
5278               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5279           break;
5280         }
5281         if (!shouldContinue)
5282           break;
5283       }
5284       break;
5285     }
5286 
5287     case IMPORTS: {
5288       if (!NeedsImports)
5289         break;
5290 
5291       unsigned Idx = 0, N = Record.size();
5292       while (Idx < N) {
5293         // Read information about the AST file.
5294         Idx += 1+1+1+1+5; // Kind, ImportLoc, Size, ModTime, Signature
5295         std::string ModuleName = ReadString(Record, Idx);
5296         std::string Filename = ReadString(Record, Idx);
5297         ResolveImportedPath(Filename, ModuleDir);
5298         Listener.visitImport(ModuleName, Filename);
5299       }
5300       break;
5301     }
5302 
5303     default:
5304       // No other validation to perform.
5305       break;
5306     }
5307   }
5308 
5309   // Look for module file extension blocks, if requested.
5310   if (FindModuleFileExtensions) {
5311     BitstreamCursor SavedStream = Stream;
5312     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5313       bool DoneWithExtensionBlock = false;
5314       while (!DoneWithExtensionBlock) {
5315         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5316         if (!MaybeEntry) {
5317           // FIXME this drops the error.
5318           return true;
5319         }
5320         llvm::BitstreamEntry Entry = MaybeEntry.get();
5321 
5322         switch (Entry.Kind) {
5323         case llvm::BitstreamEntry::SubBlock:
5324           if (llvm::Error Err = Stream.SkipBlock()) {
5325             // FIXME this drops the error on the floor.
5326             consumeError(std::move(Err));
5327             return true;
5328           }
5329           continue;
5330 
5331         case llvm::BitstreamEntry::EndBlock:
5332           DoneWithExtensionBlock = true;
5333           continue;
5334 
5335         case llvm::BitstreamEntry::Error:
5336           return true;
5337 
5338         case llvm::BitstreamEntry::Record:
5339           break;
5340         }
5341 
5342        Record.clear();
5343        StringRef Blob;
5344        Expected<unsigned> MaybeRecCode =
5345            Stream.readRecord(Entry.ID, Record, &Blob);
5346        if (!MaybeRecCode) {
5347          // FIXME this drops the error.
5348          return true;
5349        }
5350        switch (MaybeRecCode.get()) {
5351        case EXTENSION_METADATA: {
5352          ModuleFileExtensionMetadata Metadata;
5353          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5354            return true;
5355 
5356          Listener.readModuleFileExtension(Metadata);
5357          break;
5358        }
5359        }
5360       }
5361     }
5362     Stream = SavedStream;
5363   }
5364 
5365   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5366   if (readUnhashedControlBlockImpl(
5367           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5368           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5369           ValidateDiagnosticOptions) != Success)
5370     return true;
5371 
5372   return false;
5373 }
5374 
5375 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5376                                     const PCHContainerReader &PCHContainerRdr,
5377                                     const LangOptions &LangOpts,
5378                                     const TargetOptions &TargetOpts,
5379                                     const PreprocessorOptions &PPOpts,
5380                                     StringRef ExistingModuleCachePath) {
5381   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5382                                ExistingModuleCachePath, FileMgr);
5383   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5384                                   /*FindModuleFileExtensions=*/false,
5385                                   validator,
5386                                   /*ValidateDiagnosticOptions=*/true);
5387 }
5388 
5389 ASTReader::ASTReadResult
5390 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5391   // Enter the submodule block.
5392   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5393     Error(std::move(Err));
5394     return Failure;
5395   }
5396 
5397   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5398   bool First = true;
5399   Module *CurrentModule = nullptr;
5400   RecordData Record;
5401   while (true) {
5402     Expected<llvm::BitstreamEntry> MaybeEntry =
5403         F.Stream.advanceSkippingSubblocks();
5404     if (!MaybeEntry) {
5405       Error(MaybeEntry.takeError());
5406       return Failure;
5407     }
5408     llvm::BitstreamEntry Entry = MaybeEntry.get();
5409 
5410     switch (Entry.Kind) {
5411     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5412     case llvm::BitstreamEntry::Error:
5413       Error("malformed block record in AST file");
5414       return Failure;
5415     case llvm::BitstreamEntry::EndBlock:
5416       return Success;
5417     case llvm::BitstreamEntry::Record:
5418       // The interesting case.
5419       break;
5420     }
5421 
5422     // Read a record.
5423     StringRef Blob;
5424     Record.clear();
5425     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5426     if (!MaybeKind) {
5427       Error(MaybeKind.takeError());
5428       return Failure;
5429     }
5430     unsigned Kind = MaybeKind.get();
5431 
5432     if ((Kind == SUBMODULE_METADATA) != First) {
5433       Error("submodule metadata record should be at beginning of block");
5434       return Failure;
5435     }
5436     First = false;
5437 
5438     // Submodule information is only valid if we have a current module.
5439     // FIXME: Should we error on these cases?
5440     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5441         Kind != SUBMODULE_DEFINITION)
5442       continue;
5443 
5444     switch (Kind) {
5445     default:  // Default behavior: ignore.
5446       break;
5447 
5448     case SUBMODULE_DEFINITION: {
5449       if (Record.size() < 12) {
5450         Error("malformed module definition");
5451         return Failure;
5452       }
5453 
5454       StringRef Name = Blob;
5455       unsigned Idx = 0;
5456       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5457       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5458       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5459       bool IsFramework = Record[Idx++];
5460       bool IsExplicit = Record[Idx++];
5461       bool IsSystem = Record[Idx++];
5462       bool IsExternC = Record[Idx++];
5463       bool InferSubmodules = Record[Idx++];
5464       bool InferExplicitSubmodules = Record[Idx++];
5465       bool InferExportWildcard = Record[Idx++];
5466       bool ConfigMacrosExhaustive = Record[Idx++];
5467       bool ModuleMapIsPrivate = Record[Idx++];
5468 
5469       Module *ParentModule = nullptr;
5470       if (Parent)
5471         ParentModule = getSubmodule(Parent);
5472 
5473       // Retrieve this (sub)module from the module map, creating it if
5474       // necessary.
5475       CurrentModule =
5476           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5477               .first;
5478 
5479       // FIXME: set the definition loc for CurrentModule, or call
5480       // ModMap.setInferredModuleAllowedBy()
5481 
5482       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5483       if (GlobalIndex >= SubmodulesLoaded.size() ||
5484           SubmodulesLoaded[GlobalIndex]) {
5485         Error("too many submodules");
5486         return Failure;
5487       }
5488 
5489       if (!ParentModule) {
5490         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5491           // Don't emit module relocation error if we have -fno-validate-pch
5492           if (!PP.getPreprocessorOpts().DisablePCHValidation &&
5493               CurFile != F.File) {
5494             Error(diag::err_module_file_conflict,
5495                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5496                   F.File->getName());
5497             return Failure;
5498           }
5499         }
5500 
5501         F.DidReadTopLevelSubmodule = true;
5502         CurrentModule->setASTFile(F.File);
5503         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5504       }
5505 
5506       CurrentModule->Kind = Kind;
5507       CurrentModule->Signature = F.Signature;
5508       CurrentModule->IsFromModuleFile = true;
5509       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5510       CurrentModule->IsExternC = IsExternC;
5511       CurrentModule->InferSubmodules = InferSubmodules;
5512       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5513       CurrentModule->InferExportWildcard = InferExportWildcard;
5514       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5515       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5516       if (DeserializationListener)
5517         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5518 
5519       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5520 
5521       // Clear out data that will be replaced by what is in the module file.
5522       CurrentModule->LinkLibraries.clear();
5523       CurrentModule->ConfigMacros.clear();
5524       CurrentModule->UnresolvedConflicts.clear();
5525       CurrentModule->Conflicts.clear();
5526 
5527       // The module is available unless it's missing a requirement; relevant
5528       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5529       // Missing headers that were present when the module was built do not
5530       // make it unavailable -- if we got this far, this must be an explicitly
5531       // imported module file.
5532       CurrentModule->Requirements.clear();
5533       CurrentModule->MissingHeaders.clear();
5534       CurrentModule->IsMissingRequirement =
5535           ParentModule && ParentModule->IsMissingRequirement;
5536       CurrentModule->IsAvailable = !CurrentModule->IsMissingRequirement;
5537       break;
5538     }
5539 
5540     case SUBMODULE_UMBRELLA_HEADER: {
5541       std::string Filename = Blob;
5542       ResolveImportedPath(F, Filename);
5543       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5544         if (!CurrentModule->getUmbrellaHeader())
5545           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5546         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5547           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5548             Error("mismatched umbrella headers in submodule");
5549           return OutOfDate;
5550         }
5551       }
5552       break;
5553     }
5554 
5555     case SUBMODULE_HEADER:
5556     case SUBMODULE_EXCLUDED_HEADER:
5557     case SUBMODULE_PRIVATE_HEADER:
5558       // We lazily associate headers with their modules via the HeaderInfo table.
5559       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5560       // of complete filenames or remove it entirely.
5561       break;
5562 
5563     case SUBMODULE_TEXTUAL_HEADER:
5564     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5565       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5566       // them here.
5567       break;
5568 
5569     case SUBMODULE_TOPHEADER:
5570       CurrentModule->addTopHeaderFilename(Blob);
5571       break;
5572 
5573     case SUBMODULE_UMBRELLA_DIR: {
5574       std::string Dirname = Blob;
5575       ResolveImportedPath(F, Dirname);
5576       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5577         if (!CurrentModule->getUmbrellaDir())
5578           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5579         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5580           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5581             Error("mismatched umbrella directories in submodule");
5582           return OutOfDate;
5583         }
5584       }
5585       break;
5586     }
5587 
5588     case SUBMODULE_METADATA: {
5589       F.BaseSubmoduleID = getTotalNumSubmodules();
5590       F.LocalNumSubmodules = Record[0];
5591       unsigned LocalBaseSubmoduleID = Record[1];
5592       if (F.LocalNumSubmodules > 0) {
5593         // Introduce the global -> local mapping for submodules within this
5594         // module.
5595         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5596 
5597         // Introduce the local -> global mapping for submodules within this
5598         // module.
5599         F.SubmoduleRemap.insertOrReplace(
5600           std::make_pair(LocalBaseSubmoduleID,
5601                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5602 
5603         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5604       }
5605       break;
5606     }
5607 
5608     case SUBMODULE_IMPORTS:
5609       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5610         UnresolvedModuleRef Unresolved;
5611         Unresolved.File = &F;
5612         Unresolved.Mod = CurrentModule;
5613         Unresolved.ID = Record[Idx];
5614         Unresolved.Kind = UnresolvedModuleRef::Import;
5615         Unresolved.IsWildcard = false;
5616         UnresolvedModuleRefs.push_back(Unresolved);
5617       }
5618       break;
5619 
5620     case SUBMODULE_EXPORTS:
5621       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5622         UnresolvedModuleRef Unresolved;
5623         Unresolved.File = &F;
5624         Unresolved.Mod = CurrentModule;
5625         Unresolved.ID = Record[Idx];
5626         Unresolved.Kind = UnresolvedModuleRef::Export;
5627         Unresolved.IsWildcard = Record[Idx + 1];
5628         UnresolvedModuleRefs.push_back(Unresolved);
5629       }
5630 
5631       // Once we've loaded the set of exports, there's no reason to keep
5632       // the parsed, unresolved exports around.
5633       CurrentModule->UnresolvedExports.clear();
5634       break;
5635 
5636     case SUBMODULE_REQUIRES:
5637       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5638                                     PP.getTargetInfo());
5639       break;
5640 
5641     case SUBMODULE_LINK_LIBRARY:
5642       ModMap.resolveLinkAsDependencies(CurrentModule);
5643       CurrentModule->LinkLibraries.push_back(
5644                                          Module::LinkLibrary(Blob, Record[0]));
5645       break;
5646 
5647     case SUBMODULE_CONFIG_MACRO:
5648       CurrentModule->ConfigMacros.push_back(Blob.str());
5649       break;
5650 
5651     case SUBMODULE_CONFLICT: {
5652       UnresolvedModuleRef Unresolved;
5653       Unresolved.File = &F;
5654       Unresolved.Mod = CurrentModule;
5655       Unresolved.ID = Record[0];
5656       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5657       Unresolved.IsWildcard = false;
5658       Unresolved.String = Blob;
5659       UnresolvedModuleRefs.push_back(Unresolved);
5660       break;
5661     }
5662 
5663     case SUBMODULE_INITIALIZERS: {
5664       if (!ContextObj)
5665         break;
5666       SmallVector<uint32_t, 16> Inits;
5667       for (auto &ID : Record)
5668         Inits.push_back(getGlobalDeclID(F, ID));
5669       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5670       break;
5671     }
5672 
5673     case SUBMODULE_EXPORT_AS:
5674       CurrentModule->ExportAsModule = Blob.str();
5675       ModMap.addLinkAsDependency(CurrentModule);
5676       break;
5677     }
5678   }
5679 }
5680 
5681 /// Parse the record that corresponds to a LangOptions data
5682 /// structure.
5683 ///
5684 /// This routine parses the language options from the AST file and then gives
5685 /// them to the AST listener if one is set.
5686 ///
5687 /// \returns true if the listener deems the file unacceptable, false otherwise.
5688 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5689                                      bool Complain,
5690                                      ASTReaderListener &Listener,
5691                                      bool AllowCompatibleDifferences) {
5692   LangOptions LangOpts;
5693   unsigned Idx = 0;
5694 #define LANGOPT(Name, Bits, Default, Description) \
5695   LangOpts.Name = Record[Idx++];
5696 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5697   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5698 #include "clang/Basic/LangOptions.def"
5699 #define SANITIZER(NAME, ID)                                                    \
5700   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5701 #include "clang/Basic/Sanitizers.def"
5702 
5703   for (unsigned N = Record[Idx++]; N; --N)
5704     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5705 
5706   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5707   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5708   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5709 
5710   LangOpts.CurrentModule = ReadString(Record, Idx);
5711 
5712   // Comment options.
5713   for (unsigned N = Record[Idx++]; N; --N) {
5714     LangOpts.CommentOpts.BlockCommandNames.push_back(
5715       ReadString(Record, Idx));
5716   }
5717   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5718 
5719   // OpenMP offloading options.
5720   for (unsigned N = Record[Idx++]; N; --N) {
5721     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5722   }
5723 
5724   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5725 
5726   return Listener.ReadLanguageOptions(LangOpts, Complain,
5727                                       AllowCompatibleDifferences);
5728 }
5729 
5730 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5731                                    ASTReaderListener &Listener,
5732                                    bool AllowCompatibleDifferences) {
5733   unsigned Idx = 0;
5734   TargetOptions TargetOpts;
5735   TargetOpts.Triple = ReadString(Record, Idx);
5736   TargetOpts.CPU = ReadString(Record, Idx);
5737   TargetOpts.ABI = ReadString(Record, Idx);
5738   for (unsigned N = Record[Idx++]; N; --N) {
5739     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5740   }
5741   for (unsigned N = Record[Idx++]; N; --N) {
5742     TargetOpts.Features.push_back(ReadString(Record, Idx));
5743   }
5744 
5745   return Listener.ReadTargetOptions(TargetOpts, Complain,
5746                                     AllowCompatibleDifferences);
5747 }
5748 
5749 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5750                                        ASTReaderListener &Listener) {
5751   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5752   unsigned Idx = 0;
5753 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5754 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5755   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5756 #include "clang/Basic/DiagnosticOptions.def"
5757 
5758   for (unsigned N = Record[Idx++]; N; --N)
5759     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5760   for (unsigned N = Record[Idx++]; N; --N)
5761     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5762 
5763   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5764 }
5765 
5766 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5767                                        ASTReaderListener &Listener) {
5768   FileSystemOptions FSOpts;
5769   unsigned Idx = 0;
5770   FSOpts.WorkingDir = ReadString(Record, Idx);
5771   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5772 }
5773 
5774 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5775                                          bool Complain,
5776                                          ASTReaderListener &Listener) {
5777   HeaderSearchOptions HSOpts;
5778   unsigned Idx = 0;
5779   HSOpts.Sysroot = ReadString(Record, Idx);
5780 
5781   // Include entries.
5782   for (unsigned N = Record[Idx++]; N; --N) {
5783     std::string Path = ReadString(Record, Idx);
5784     frontend::IncludeDirGroup Group
5785       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5786     bool IsFramework = Record[Idx++];
5787     bool IgnoreSysRoot = Record[Idx++];
5788     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5789                                     IgnoreSysRoot);
5790   }
5791 
5792   // System header prefixes.
5793   for (unsigned N = Record[Idx++]; N; --N) {
5794     std::string Prefix = ReadString(Record, Idx);
5795     bool IsSystemHeader = Record[Idx++];
5796     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5797   }
5798 
5799   HSOpts.ResourceDir = ReadString(Record, Idx);
5800   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5801   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5802   HSOpts.DisableModuleHash = Record[Idx++];
5803   HSOpts.ImplicitModuleMaps = Record[Idx++];
5804   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5805   HSOpts.UseBuiltinIncludes = Record[Idx++];
5806   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5807   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5808   HSOpts.UseLibcxx = Record[Idx++];
5809   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5810 
5811   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5812                                           Complain);
5813 }
5814 
5815 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5816                                          bool Complain,
5817                                          ASTReaderListener &Listener,
5818                                          std::string &SuggestedPredefines) {
5819   PreprocessorOptions PPOpts;
5820   unsigned Idx = 0;
5821 
5822   // Macro definitions/undefs
5823   for (unsigned N = Record[Idx++]; N; --N) {
5824     std::string Macro = ReadString(Record, Idx);
5825     bool IsUndef = Record[Idx++];
5826     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5827   }
5828 
5829   // Includes
5830   for (unsigned N = Record[Idx++]; N; --N) {
5831     PPOpts.Includes.push_back(ReadString(Record, Idx));
5832   }
5833 
5834   // Macro Includes
5835   for (unsigned N = Record[Idx++]; N; --N) {
5836     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5837   }
5838 
5839   PPOpts.UsePredefines = Record[Idx++];
5840   PPOpts.DetailedRecord = Record[Idx++];
5841   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5842   PPOpts.ObjCXXARCStandardLibrary =
5843     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5844   SuggestedPredefines.clear();
5845   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5846                                           SuggestedPredefines);
5847 }
5848 
5849 std::pair<ModuleFile *, unsigned>
5850 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5851   GlobalPreprocessedEntityMapType::iterator
5852   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5853   assert(I != GlobalPreprocessedEntityMap.end() &&
5854          "Corrupted global preprocessed entity map");
5855   ModuleFile *M = I->second;
5856   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5857   return std::make_pair(M, LocalIndex);
5858 }
5859 
5860 llvm::iterator_range<PreprocessingRecord::iterator>
5861 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5862   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5863     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5864                                              Mod.NumPreprocessedEntities);
5865 
5866   return llvm::make_range(PreprocessingRecord::iterator(),
5867                           PreprocessingRecord::iterator());
5868 }
5869 
5870 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5871 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5872   return llvm::make_range(
5873       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5874       ModuleDeclIterator(this, &Mod,
5875                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5876 }
5877 
5878 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5879   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5880   assert(I != GlobalSkippedRangeMap.end() &&
5881     "Corrupted global skipped range map");
5882   ModuleFile *M = I->second;
5883   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5884   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5885   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5886   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5887                     TranslateSourceLocation(*M, RawRange.getEnd()));
5888   assert(Range.isValid());
5889   return Range;
5890 }
5891 
5892 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5893   PreprocessedEntityID PPID = Index+1;
5894   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5895   ModuleFile &M = *PPInfo.first;
5896   unsigned LocalIndex = PPInfo.second;
5897   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5898 
5899   if (!PP.getPreprocessingRecord()) {
5900     Error("no preprocessing record");
5901     return nullptr;
5902   }
5903 
5904   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5905   if (llvm::Error Err =
5906           M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset)) {
5907     Error(std::move(Err));
5908     return nullptr;
5909   }
5910 
5911   Expected<llvm::BitstreamEntry> MaybeEntry =
5912       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5913   if (!MaybeEntry) {
5914     Error(MaybeEntry.takeError());
5915     return nullptr;
5916   }
5917   llvm::BitstreamEntry Entry = MaybeEntry.get();
5918 
5919   if (Entry.Kind != llvm::BitstreamEntry::Record)
5920     return nullptr;
5921 
5922   // Read the record.
5923   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5924                     TranslateSourceLocation(M, PPOffs.getEnd()));
5925   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5926   StringRef Blob;
5927   RecordData Record;
5928   Expected<unsigned> MaybeRecType =
5929       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5930   if (!MaybeRecType) {
5931     Error(MaybeRecType.takeError());
5932     return nullptr;
5933   }
5934   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5935   case PPD_MACRO_EXPANSION: {
5936     bool isBuiltin = Record[0];
5937     IdentifierInfo *Name = nullptr;
5938     MacroDefinitionRecord *Def = nullptr;
5939     if (isBuiltin)
5940       Name = getLocalIdentifier(M, Record[1]);
5941     else {
5942       PreprocessedEntityID GlobalID =
5943           getGlobalPreprocessedEntityID(M, Record[1]);
5944       Def = cast<MacroDefinitionRecord>(
5945           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5946     }
5947 
5948     MacroExpansion *ME;
5949     if (isBuiltin)
5950       ME = new (PPRec) MacroExpansion(Name, Range);
5951     else
5952       ME = new (PPRec) MacroExpansion(Def, Range);
5953 
5954     return ME;
5955   }
5956 
5957   case PPD_MACRO_DEFINITION: {
5958     // Decode the identifier info and then check again; if the macro is
5959     // still defined and associated with the identifier,
5960     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
5961     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
5962 
5963     if (DeserializationListener)
5964       DeserializationListener->MacroDefinitionRead(PPID, MD);
5965 
5966     return MD;
5967   }
5968 
5969   case PPD_INCLUSION_DIRECTIVE: {
5970     const char *FullFileNameStart = Blob.data() + Record[0];
5971     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
5972     const FileEntry *File = nullptr;
5973     if (!FullFileName.empty())
5974       if (auto FE = PP.getFileManager().getFile(FullFileName))
5975         File = *FE;
5976 
5977     // FIXME: Stable encoding
5978     InclusionDirective::InclusionKind Kind
5979       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
5980     InclusionDirective *ID
5981       = new (PPRec) InclusionDirective(PPRec, Kind,
5982                                        StringRef(Blob.data(), Record[0]),
5983                                        Record[1], Record[3],
5984                                        File,
5985                                        Range);
5986     return ID;
5987   }
5988   }
5989 
5990   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
5991 }
5992 
5993 /// Find the next module that contains entities and return the ID
5994 /// of the first entry.
5995 ///
5996 /// \param SLocMapI points at a chunk of a module that contains no
5997 /// preprocessed entities or the entities it contains are not the ones we are
5998 /// looking for.
5999 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6000                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6001   ++SLocMapI;
6002   for (GlobalSLocOffsetMapType::const_iterator
6003          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6004     ModuleFile &M = *SLocMapI->second;
6005     if (M.NumPreprocessedEntities)
6006       return M.BasePreprocessedEntityID;
6007   }
6008 
6009   return getTotalNumPreprocessedEntities();
6010 }
6011 
6012 namespace {
6013 
6014 struct PPEntityComp {
6015   const ASTReader &Reader;
6016   ModuleFile &M;
6017 
6018   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6019 
6020   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6021     SourceLocation LHS = getLoc(L);
6022     SourceLocation RHS = getLoc(R);
6023     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6024   }
6025 
6026   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6027     SourceLocation LHS = getLoc(L);
6028     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6029   }
6030 
6031   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6032     SourceLocation RHS = getLoc(R);
6033     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6034   }
6035 
6036   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6037     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6038   }
6039 };
6040 
6041 } // namespace
6042 
6043 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6044                                                        bool EndsAfter) const {
6045   if (SourceMgr.isLocalSourceLocation(Loc))
6046     return getTotalNumPreprocessedEntities();
6047 
6048   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6049       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6050   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6051          "Corrupted global sloc offset map");
6052 
6053   if (SLocMapI->second->NumPreprocessedEntities == 0)
6054     return findNextPreprocessedEntity(SLocMapI);
6055 
6056   ModuleFile &M = *SLocMapI->second;
6057 
6058   using pp_iterator = const PPEntityOffset *;
6059 
6060   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6061   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6062 
6063   size_t Count = M.NumPreprocessedEntities;
6064   size_t Half;
6065   pp_iterator First = pp_begin;
6066   pp_iterator PPI;
6067 
6068   if (EndsAfter) {
6069     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6070                            PPEntityComp(*this, M));
6071   } else {
6072     // Do a binary search manually instead of using std::lower_bound because
6073     // The end locations of entities may be unordered (when a macro expansion
6074     // is inside another macro argument), but for this case it is not important
6075     // whether we get the first macro expansion or its containing macro.
6076     while (Count > 0) {
6077       Half = Count / 2;
6078       PPI = First;
6079       std::advance(PPI, Half);
6080       if (SourceMgr.isBeforeInTranslationUnit(
6081               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6082         First = PPI;
6083         ++First;
6084         Count = Count - Half - 1;
6085       } else
6086         Count = Half;
6087     }
6088   }
6089 
6090   if (PPI == pp_end)
6091     return findNextPreprocessedEntity(SLocMapI);
6092 
6093   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6094 }
6095 
6096 /// Returns a pair of [Begin, End) indices of preallocated
6097 /// preprocessed entities that \arg Range encompasses.
6098 std::pair<unsigned, unsigned>
6099     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6100   if (Range.isInvalid())
6101     return std::make_pair(0,0);
6102   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6103 
6104   PreprocessedEntityID BeginID =
6105       findPreprocessedEntity(Range.getBegin(), false);
6106   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6107   return std::make_pair(BeginID, EndID);
6108 }
6109 
6110 /// Optionally returns true or false if the preallocated preprocessed
6111 /// entity with index \arg Index came from file \arg FID.
6112 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6113                                                              FileID FID) {
6114   if (FID.isInvalid())
6115     return false;
6116 
6117   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6118   ModuleFile &M = *PPInfo.first;
6119   unsigned LocalIndex = PPInfo.second;
6120   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6121 
6122   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6123   if (Loc.isInvalid())
6124     return false;
6125 
6126   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6127     return true;
6128   else
6129     return false;
6130 }
6131 
6132 namespace {
6133 
6134   /// Visitor used to search for information about a header file.
6135   class HeaderFileInfoVisitor {
6136     const FileEntry *FE;
6137     Optional<HeaderFileInfo> HFI;
6138 
6139   public:
6140     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6141 
6142     bool operator()(ModuleFile &M) {
6143       HeaderFileInfoLookupTable *Table
6144         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6145       if (!Table)
6146         return false;
6147 
6148       // Look in the on-disk hash table for an entry for this file name.
6149       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6150       if (Pos == Table->end())
6151         return false;
6152 
6153       HFI = *Pos;
6154       return true;
6155     }
6156 
6157     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6158   };
6159 
6160 } // namespace
6161 
6162 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6163   HeaderFileInfoVisitor Visitor(FE);
6164   ModuleMgr.visit(Visitor);
6165   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6166     return *HFI;
6167 
6168   return HeaderFileInfo();
6169 }
6170 
6171 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6172   using DiagState = DiagnosticsEngine::DiagState;
6173   SmallVector<DiagState *, 32> DiagStates;
6174 
6175   for (ModuleFile &F : ModuleMgr) {
6176     unsigned Idx = 0;
6177     auto &Record = F.PragmaDiagMappings;
6178     if (Record.empty())
6179       continue;
6180 
6181     DiagStates.clear();
6182 
6183     auto ReadDiagState =
6184         [&](const DiagState &BasedOn, SourceLocation Loc,
6185             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6186       unsigned BackrefID = Record[Idx++];
6187       if (BackrefID != 0)
6188         return DiagStates[BackrefID - 1];
6189 
6190       // A new DiagState was created here.
6191       Diag.DiagStates.push_back(BasedOn);
6192       DiagState *NewState = &Diag.DiagStates.back();
6193       DiagStates.push_back(NewState);
6194       unsigned Size = Record[Idx++];
6195       assert(Idx + Size * 2 <= Record.size() &&
6196              "Invalid data, not enough diag/map pairs");
6197       while (Size--) {
6198         unsigned DiagID = Record[Idx++];
6199         DiagnosticMapping NewMapping =
6200             DiagnosticMapping::deserialize(Record[Idx++]);
6201         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6202           continue;
6203 
6204         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6205 
6206         // If this mapping was specified as a warning but the severity was
6207         // upgraded due to diagnostic settings, simulate the current diagnostic
6208         // settings (and use a warning).
6209         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6210           NewMapping.setSeverity(diag::Severity::Warning);
6211           NewMapping.setUpgradedFromWarning(false);
6212         }
6213 
6214         Mapping = NewMapping;
6215       }
6216       return NewState;
6217     };
6218 
6219     // Read the first state.
6220     DiagState *FirstState;
6221     if (F.Kind == MK_ImplicitModule) {
6222       // Implicitly-built modules are reused with different diagnostic
6223       // settings.  Use the initial diagnostic state from Diag to simulate this
6224       // compilation's diagnostic settings.
6225       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6226       DiagStates.push_back(FirstState);
6227 
6228       // Skip the initial diagnostic state from the serialized module.
6229       assert(Record[1] == 0 &&
6230              "Invalid data, unexpected backref in initial state");
6231       Idx = 3 + Record[2] * 2;
6232       assert(Idx < Record.size() &&
6233              "Invalid data, not enough state change pairs in initial state");
6234     } else if (F.isModule()) {
6235       // For an explicit module, preserve the flags from the module build
6236       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6237       // -Wblah flags.
6238       unsigned Flags = Record[Idx++];
6239       DiagState Initial;
6240       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6241       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6242       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6243       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6244       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6245       Initial.ExtBehavior = (diag::Severity)Flags;
6246       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6247 
6248       assert(F.OriginalSourceFileID.isValid());
6249 
6250       // Set up the root buffer of the module to start with the initial
6251       // diagnostic state of the module itself, to cover files that contain no
6252       // explicit transitions (for which we did not serialize anything).
6253       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6254           .StateTransitions.push_back({FirstState, 0});
6255     } else {
6256       // For prefix ASTs, start with whatever the user configured on the
6257       // command line.
6258       Idx++; // Skip flags.
6259       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6260                                  SourceLocation(), false);
6261     }
6262 
6263     // Read the state transitions.
6264     unsigned NumLocations = Record[Idx++];
6265     while (NumLocations--) {
6266       assert(Idx < Record.size() &&
6267              "Invalid data, missing pragma diagnostic states");
6268       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6269       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6270       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6271       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6272       unsigned Transitions = Record[Idx++];
6273 
6274       // Note that we don't need to set up Parent/ParentOffset here, because
6275       // we won't be changing the diagnostic state within imported FileIDs
6276       // (other than perhaps appending to the main source file, which has no
6277       // parent).
6278       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6279       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6280       for (unsigned I = 0; I != Transitions; ++I) {
6281         unsigned Offset = Record[Idx++];
6282         auto *State =
6283             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6284         F.StateTransitions.push_back({State, Offset});
6285       }
6286     }
6287 
6288     // Read the final state.
6289     assert(Idx < Record.size() &&
6290            "Invalid data, missing final pragma diagnostic state");
6291     SourceLocation CurStateLoc =
6292         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6293     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6294 
6295     if (!F.isModule()) {
6296       Diag.DiagStatesByLoc.CurDiagState = CurState;
6297       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6298 
6299       // Preserve the property that the imaginary root file describes the
6300       // current state.
6301       FileID NullFile;
6302       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6303       if (T.empty())
6304         T.push_back({CurState, 0});
6305       else
6306         T[0].State = CurState;
6307     }
6308 
6309     // Don't try to read these mappings again.
6310     Record.clear();
6311   }
6312 }
6313 
6314 /// Get the correct cursor and offset for loading a type.
6315 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6316   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6317   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6318   ModuleFile *M = I->second;
6319   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
6320 }
6321 
6322 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6323   switch (code) {
6324 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6325   case TYPE_##CODE_ID: return Type::CLASS_ID;
6326 #include "clang/Serialization/TypeBitCodes.def"
6327   default: return llvm::None;
6328   }
6329 }
6330 
6331 /// Read and return the type with the given index..
6332 ///
6333 /// The index is the type ID, shifted and minus the number of predefs. This
6334 /// routine actually reads the record corresponding to the type at the given
6335 /// location. It is a helper routine for GetType, which deals with reading type
6336 /// IDs.
6337 QualType ASTReader::readTypeRecord(unsigned Index) {
6338   assert(ContextObj && "reading type with no AST context");
6339   ASTContext &Context = *ContextObj;
6340   RecordLocation Loc = TypeCursorForIndex(Index);
6341   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6342 
6343   // Keep track of where we are in the stream, then jump back there
6344   // after reading this type.
6345   SavedStreamPosition SavedPosition(DeclsCursor);
6346 
6347   ReadingKindTracker ReadingKind(Read_Type, *this);
6348 
6349   // Note that we are loading a type record.
6350   Deserializing AType(this);
6351 
6352   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6353     Error(std::move(Err));
6354     return QualType();
6355   }
6356   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6357   if (!RawCode) {
6358     Error(RawCode.takeError());
6359     return QualType();
6360   }
6361 
6362   ASTRecordReader Record(*this, *Loc.F);
6363   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6364   if (!Code) {
6365     Error(Code.takeError());
6366     return QualType();
6367   }
6368   if (Code.get() == TYPE_EXT_QUAL) {
6369     QualType baseType = Record.readQualType();
6370     Qualifiers quals = Record.readQualifiers();
6371     return Context.getQualifiedType(baseType, quals);
6372   }
6373 
6374   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6375   if (!maybeClass) {
6376     Error("Unexpected code for type");
6377     return QualType();
6378   }
6379 
6380   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6381   return TypeReader.read(*maybeClass);
6382 }
6383 
6384 namespace clang {
6385 
6386 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6387   ASTRecordReader &Reader;
6388 
6389   SourceLocation readSourceLocation() {
6390     return Reader.readSourceLocation();
6391   }
6392 
6393   TypeSourceInfo *GetTypeSourceInfo() {
6394     return Reader.readTypeSourceInfo();
6395   }
6396 
6397   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6398     return Reader.readNestedNameSpecifierLoc();
6399   }
6400 
6401   Attr *ReadAttr() {
6402     return Reader.readAttr();
6403   }
6404 
6405 public:
6406   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6407 
6408   // We want compile-time assurance that we've enumerated all of
6409   // these, so unfortunately we have to declare them first, then
6410   // define them out-of-line.
6411 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6412 #define TYPELOC(CLASS, PARENT) \
6413   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6414 #include "clang/AST/TypeLocNodes.def"
6415 
6416   void VisitFunctionTypeLoc(FunctionTypeLoc);
6417   void VisitArrayTypeLoc(ArrayTypeLoc);
6418 };
6419 
6420 } // namespace clang
6421 
6422 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6423   // nothing to do
6424 }
6425 
6426 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6427   TL.setBuiltinLoc(readSourceLocation());
6428   if (TL.needsExtraLocalData()) {
6429     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6430     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Reader.readInt()));
6431     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Reader.readInt()));
6432     TL.setModeAttr(Reader.readInt());
6433   }
6434 }
6435 
6436 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6437   TL.setNameLoc(readSourceLocation());
6438 }
6439 
6440 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6441   TL.setStarLoc(readSourceLocation());
6442 }
6443 
6444 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6445   // nothing to do
6446 }
6447 
6448 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6449   // nothing to do
6450 }
6451 
6452 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6453   TL.setExpansionLoc(readSourceLocation());
6454 }
6455 
6456 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6457   TL.setCaretLoc(readSourceLocation());
6458 }
6459 
6460 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6461   TL.setAmpLoc(readSourceLocation());
6462 }
6463 
6464 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6465   TL.setAmpAmpLoc(readSourceLocation());
6466 }
6467 
6468 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6469   TL.setStarLoc(readSourceLocation());
6470   TL.setClassTInfo(GetTypeSourceInfo());
6471 }
6472 
6473 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6474   TL.setLBracketLoc(readSourceLocation());
6475   TL.setRBracketLoc(readSourceLocation());
6476   if (Reader.readBool())
6477     TL.setSizeExpr(Reader.readExpr());
6478   else
6479     TL.setSizeExpr(nullptr);
6480 }
6481 
6482 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6483   VisitArrayTypeLoc(TL);
6484 }
6485 
6486 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6487   VisitArrayTypeLoc(TL);
6488 }
6489 
6490 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6491   VisitArrayTypeLoc(TL);
6492 }
6493 
6494 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6495                                             DependentSizedArrayTypeLoc TL) {
6496   VisitArrayTypeLoc(TL);
6497 }
6498 
6499 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6500     DependentAddressSpaceTypeLoc TL) {
6501 
6502     TL.setAttrNameLoc(readSourceLocation());
6503     TL.setAttrOperandParensRange(Reader.readSourceRange());
6504     TL.setAttrExprOperand(Reader.readExpr());
6505 }
6506 
6507 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6508                                         DependentSizedExtVectorTypeLoc TL) {
6509   TL.setNameLoc(readSourceLocation());
6510 }
6511 
6512 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6513   TL.setNameLoc(readSourceLocation());
6514 }
6515 
6516 void TypeLocReader::VisitDependentVectorTypeLoc(
6517     DependentVectorTypeLoc TL) {
6518   TL.setNameLoc(readSourceLocation());
6519 }
6520 
6521 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6522   TL.setNameLoc(readSourceLocation());
6523 }
6524 
6525 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6526   TL.setLocalRangeBegin(readSourceLocation());
6527   TL.setLParenLoc(readSourceLocation());
6528   TL.setRParenLoc(readSourceLocation());
6529   TL.setExceptionSpecRange(Reader.readSourceRange());
6530   TL.setLocalRangeEnd(readSourceLocation());
6531   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6532     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6533   }
6534 }
6535 
6536 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6537   VisitFunctionTypeLoc(TL);
6538 }
6539 
6540 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6541   VisitFunctionTypeLoc(TL);
6542 }
6543 
6544 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6545   TL.setNameLoc(readSourceLocation());
6546 }
6547 
6548 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6549   TL.setNameLoc(readSourceLocation());
6550 }
6551 
6552 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6553   TL.setTypeofLoc(readSourceLocation());
6554   TL.setLParenLoc(readSourceLocation());
6555   TL.setRParenLoc(readSourceLocation());
6556 }
6557 
6558 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6559   TL.setTypeofLoc(readSourceLocation());
6560   TL.setLParenLoc(readSourceLocation());
6561   TL.setRParenLoc(readSourceLocation());
6562   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6563 }
6564 
6565 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6566   TL.setNameLoc(readSourceLocation());
6567 }
6568 
6569 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6570   TL.setKWLoc(readSourceLocation());
6571   TL.setLParenLoc(readSourceLocation());
6572   TL.setRParenLoc(readSourceLocation());
6573   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6574 }
6575 
6576 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6577   TL.setNameLoc(readSourceLocation());
6578 }
6579 
6580 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6581     DeducedTemplateSpecializationTypeLoc TL) {
6582   TL.setTemplateNameLoc(readSourceLocation());
6583 }
6584 
6585 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6586   TL.setNameLoc(readSourceLocation());
6587 }
6588 
6589 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6590   TL.setNameLoc(readSourceLocation());
6591 }
6592 
6593 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6594   TL.setAttr(ReadAttr());
6595 }
6596 
6597 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6598   TL.setNameLoc(readSourceLocation());
6599 }
6600 
6601 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6602                                             SubstTemplateTypeParmTypeLoc TL) {
6603   TL.setNameLoc(readSourceLocation());
6604 }
6605 
6606 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6607                                           SubstTemplateTypeParmPackTypeLoc TL) {
6608   TL.setNameLoc(readSourceLocation());
6609 }
6610 
6611 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6612                                            TemplateSpecializationTypeLoc TL) {
6613   TL.setTemplateKeywordLoc(readSourceLocation());
6614   TL.setTemplateNameLoc(readSourceLocation());
6615   TL.setLAngleLoc(readSourceLocation());
6616   TL.setRAngleLoc(readSourceLocation());
6617   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6618     TL.setArgLocInfo(
6619         i,
6620         Reader.readTemplateArgumentLocInfo(
6621           TL.getTypePtr()->getArg(i).getKind()));
6622 }
6623 
6624 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6625   TL.setLParenLoc(readSourceLocation());
6626   TL.setRParenLoc(readSourceLocation());
6627 }
6628 
6629 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6630   TL.setElaboratedKeywordLoc(readSourceLocation());
6631   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6632 }
6633 
6634 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6635   TL.setNameLoc(readSourceLocation());
6636 }
6637 
6638 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6639   TL.setElaboratedKeywordLoc(readSourceLocation());
6640   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6641   TL.setNameLoc(readSourceLocation());
6642 }
6643 
6644 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6645        DependentTemplateSpecializationTypeLoc TL) {
6646   TL.setElaboratedKeywordLoc(readSourceLocation());
6647   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6648   TL.setTemplateKeywordLoc(readSourceLocation());
6649   TL.setTemplateNameLoc(readSourceLocation());
6650   TL.setLAngleLoc(readSourceLocation());
6651   TL.setRAngleLoc(readSourceLocation());
6652   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6653     TL.setArgLocInfo(
6654         I,
6655         Reader.readTemplateArgumentLocInfo(
6656             TL.getTypePtr()->getArg(I).getKind()));
6657 }
6658 
6659 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6660   TL.setEllipsisLoc(readSourceLocation());
6661 }
6662 
6663 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6664   TL.setNameLoc(readSourceLocation());
6665 }
6666 
6667 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6668   if (TL.getNumProtocols()) {
6669     TL.setProtocolLAngleLoc(readSourceLocation());
6670     TL.setProtocolRAngleLoc(readSourceLocation());
6671   }
6672   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6673     TL.setProtocolLoc(i, readSourceLocation());
6674 }
6675 
6676 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6677   TL.setHasBaseTypeAsWritten(Reader.readBool());
6678   TL.setTypeArgsLAngleLoc(readSourceLocation());
6679   TL.setTypeArgsRAngleLoc(readSourceLocation());
6680   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6681     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6682   TL.setProtocolLAngleLoc(readSourceLocation());
6683   TL.setProtocolRAngleLoc(readSourceLocation());
6684   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6685     TL.setProtocolLoc(i, readSourceLocation());
6686 }
6687 
6688 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6689   TL.setStarLoc(readSourceLocation());
6690 }
6691 
6692 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6693   TL.setKWLoc(readSourceLocation());
6694   TL.setLParenLoc(readSourceLocation());
6695   TL.setRParenLoc(readSourceLocation());
6696 }
6697 
6698 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6699   TL.setKWLoc(readSourceLocation());
6700 }
6701 
6702 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6703   TypeLocReader TLR(*this);
6704   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6705     TLR.Visit(TL);
6706 }
6707 
6708 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6709   QualType InfoTy = readType();
6710   if (InfoTy.isNull())
6711     return nullptr;
6712 
6713   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6714   readTypeLoc(TInfo->getTypeLoc());
6715   return TInfo;
6716 }
6717 
6718 QualType ASTReader::GetType(TypeID ID) {
6719   assert(ContextObj && "reading type with no AST context");
6720   ASTContext &Context = *ContextObj;
6721 
6722   unsigned FastQuals = ID & Qualifiers::FastMask;
6723   unsigned Index = ID >> Qualifiers::FastWidth;
6724 
6725   if (Index < NUM_PREDEF_TYPE_IDS) {
6726     QualType T;
6727     switch ((PredefinedTypeIDs)Index) {
6728     case PREDEF_TYPE_NULL_ID:
6729       return QualType();
6730     case PREDEF_TYPE_VOID_ID:
6731       T = Context.VoidTy;
6732       break;
6733     case PREDEF_TYPE_BOOL_ID:
6734       T = Context.BoolTy;
6735       break;
6736     case PREDEF_TYPE_CHAR_U_ID:
6737     case PREDEF_TYPE_CHAR_S_ID:
6738       // FIXME: Check that the signedness of CharTy is correct!
6739       T = Context.CharTy;
6740       break;
6741     case PREDEF_TYPE_UCHAR_ID:
6742       T = Context.UnsignedCharTy;
6743       break;
6744     case PREDEF_TYPE_USHORT_ID:
6745       T = Context.UnsignedShortTy;
6746       break;
6747     case PREDEF_TYPE_UINT_ID:
6748       T = Context.UnsignedIntTy;
6749       break;
6750     case PREDEF_TYPE_ULONG_ID:
6751       T = Context.UnsignedLongTy;
6752       break;
6753     case PREDEF_TYPE_ULONGLONG_ID:
6754       T = Context.UnsignedLongLongTy;
6755       break;
6756     case PREDEF_TYPE_UINT128_ID:
6757       T = Context.UnsignedInt128Ty;
6758       break;
6759     case PREDEF_TYPE_SCHAR_ID:
6760       T = Context.SignedCharTy;
6761       break;
6762     case PREDEF_TYPE_WCHAR_ID:
6763       T = Context.WCharTy;
6764       break;
6765     case PREDEF_TYPE_SHORT_ID:
6766       T = Context.ShortTy;
6767       break;
6768     case PREDEF_TYPE_INT_ID:
6769       T = Context.IntTy;
6770       break;
6771     case PREDEF_TYPE_LONG_ID:
6772       T = Context.LongTy;
6773       break;
6774     case PREDEF_TYPE_LONGLONG_ID:
6775       T = Context.LongLongTy;
6776       break;
6777     case PREDEF_TYPE_INT128_ID:
6778       T = Context.Int128Ty;
6779       break;
6780     case PREDEF_TYPE_HALF_ID:
6781       T = Context.HalfTy;
6782       break;
6783     case PREDEF_TYPE_FLOAT_ID:
6784       T = Context.FloatTy;
6785       break;
6786     case PREDEF_TYPE_DOUBLE_ID:
6787       T = Context.DoubleTy;
6788       break;
6789     case PREDEF_TYPE_LONGDOUBLE_ID:
6790       T = Context.LongDoubleTy;
6791       break;
6792     case PREDEF_TYPE_SHORT_ACCUM_ID:
6793       T = Context.ShortAccumTy;
6794       break;
6795     case PREDEF_TYPE_ACCUM_ID:
6796       T = Context.AccumTy;
6797       break;
6798     case PREDEF_TYPE_LONG_ACCUM_ID:
6799       T = Context.LongAccumTy;
6800       break;
6801     case PREDEF_TYPE_USHORT_ACCUM_ID:
6802       T = Context.UnsignedShortAccumTy;
6803       break;
6804     case PREDEF_TYPE_UACCUM_ID:
6805       T = Context.UnsignedAccumTy;
6806       break;
6807     case PREDEF_TYPE_ULONG_ACCUM_ID:
6808       T = Context.UnsignedLongAccumTy;
6809       break;
6810     case PREDEF_TYPE_SHORT_FRACT_ID:
6811       T = Context.ShortFractTy;
6812       break;
6813     case PREDEF_TYPE_FRACT_ID:
6814       T = Context.FractTy;
6815       break;
6816     case PREDEF_TYPE_LONG_FRACT_ID:
6817       T = Context.LongFractTy;
6818       break;
6819     case PREDEF_TYPE_USHORT_FRACT_ID:
6820       T = Context.UnsignedShortFractTy;
6821       break;
6822     case PREDEF_TYPE_UFRACT_ID:
6823       T = Context.UnsignedFractTy;
6824       break;
6825     case PREDEF_TYPE_ULONG_FRACT_ID:
6826       T = Context.UnsignedLongFractTy;
6827       break;
6828     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6829       T = Context.SatShortAccumTy;
6830       break;
6831     case PREDEF_TYPE_SAT_ACCUM_ID:
6832       T = Context.SatAccumTy;
6833       break;
6834     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6835       T = Context.SatLongAccumTy;
6836       break;
6837     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6838       T = Context.SatUnsignedShortAccumTy;
6839       break;
6840     case PREDEF_TYPE_SAT_UACCUM_ID:
6841       T = Context.SatUnsignedAccumTy;
6842       break;
6843     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6844       T = Context.SatUnsignedLongAccumTy;
6845       break;
6846     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6847       T = Context.SatShortFractTy;
6848       break;
6849     case PREDEF_TYPE_SAT_FRACT_ID:
6850       T = Context.SatFractTy;
6851       break;
6852     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6853       T = Context.SatLongFractTy;
6854       break;
6855     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6856       T = Context.SatUnsignedShortFractTy;
6857       break;
6858     case PREDEF_TYPE_SAT_UFRACT_ID:
6859       T = Context.SatUnsignedFractTy;
6860       break;
6861     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6862       T = Context.SatUnsignedLongFractTy;
6863       break;
6864     case PREDEF_TYPE_FLOAT16_ID:
6865       T = Context.Float16Ty;
6866       break;
6867     case PREDEF_TYPE_FLOAT128_ID:
6868       T = Context.Float128Ty;
6869       break;
6870     case PREDEF_TYPE_OVERLOAD_ID:
6871       T = Context.OverloadTy;
6872       break;
6873     case PREDEF_TYPE_BOUND_MEMBER:
6874       T = Context.BoundMemberTy;
6875       break;
6876     case PREDEF_TYPE_PSEUDO_OBJECT:
6877       T = Context.PseudoObjectTy;
6878       break;
6879     case PREDEF_TYPE_DEPENDENT_ID:
6880       T = Context.DependentTy;
6881       break;
6882     case PREDEF_TYPE_UNKNOWN_ANY:
6883       T = Context.UnknownAnyTy;
6884       break;
6885     case PREDEF_TYPE_NULLPTR_ID:
6886       T = Context.NullPtrTy;
6887       break;
6888     case PREDEF_TYPE_CHAR8_ID:
6889       T = Context.Char8Ty;
6890       break;
6891     case PREDEF_TYPE_CHAR16_ID:
6892       T = Context.Char16Ty;
6893       break;
6894     case PREDEF_TYPE_CHAR32_ID:
6895       T = Context.Char32Ty;
6896       break;
6897     case PREDEF_TYPE_OBJC_ID:
6898       T = Context.ObjCBuiltinIdTy;
6899       break;
6900     case PREDEF_TYPE_OBJC_CLASS:
6901       T = Context.ObjCBuiltinClassTy;
6902       break;
6903     case PREDEF_TYPE_OBJC_SEL:
6904       T = Context.ObjCBuiltinSelTy;
6905       break;
6906 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6907     case PREDEF_TYPE_##Id##_ID: \
6908       T = Context.SingletonId; \
6909       break;
6910 #include "clang/Basic/OpenCLImageTypes.def"
6911 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
6912     case PREDEF_TYPE_##Id##_ID: \
6913       T = Context.Id##Ty; \
6914       break;
6915 #include "clang/Basic/OpenCLExtensionTypes.def"
6916     case PREDEF_TYPE_SAMPLER_ID:
6917       T = Context.OCLSamplerTy;
6918       break;
6919     case PREDEF_TYPE_EVENT_ID:
6920       T = Context.OCLEventTy;
6921       break;
6922     case PREDEF_TYPE_CLK_EVENT_ID:
6923       T = Context.OCLClkEventTy;
6924       break;
6925     case PREDEF_TYPE_QUEUE_ID:
6926       T = Context.OCLQueueTy;
6927       break;
6928     case PREDEF_TYPE_RESERVE_ID_ID:
6929       T = Context.OCLReserveIDTy;
6930       break;
6931     case PREDEF_TYPE_AUTO_DEDUCT:
6932       T = Context.getAutoDeductType();
6933       break;
6934     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
6935       T = Context.getAutoRRefDeductType();
6936       break;
6937     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
6938       T = Context.ARCUnbridgedCastTy;
6939       break;
6940     case PREDEF_TYPE_BUILTIN_FN:
6941       T = Context.BuiltinFnTy;
6942       break;
6943     case PREDEF_TYPE_OMP_ARRAY_SECTION:
6944       T = Context.OMPArraySectionTy;
6945       break;
6946 #define SVE_TYPE(Name, Id, SingletonId) \
6947     case PREDEF_TYPE_##Id##_ID: \
6948       T = Context.SingletonId; \
6949       break;
6950 #include "clang/Basic/AArch64SVEACLETypes.def"
6951     }
6952 
6953     assert(!T.isNull() && "Unknown predefined type");
6954     return T.withFastQualifiers(FastQuals);
6955   }
6956 
6957   Index -= NUM_PREDEF_TYPE_IDS;
6958   assert(Index < TypesLoaded.size() && "Type index out-of-range");
6959   if (TypesLoaded[Index].isNull()) {
6960     TypesLoaded[Index] = readTypeRecord(Index);
6961     if (TypesLoaded[Index].isNull())
6962       return QualType();
6963 
6964     TypesLoaded[Index]->setFromAST();
6965     if (DeserializationListener)
6966       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
6967                                         TypesLoaded[Index]);
6968   }
6969 
6970   return TypesLoaded[Index].withFastQualifiers(FastQuals);
6971 }
6972 
6973 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
6974   return GetType(getGlobalTypeID(F, LocalID));
6975 }
6976 
6977 serialization::TypeID
6978 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
6979   unsigned FastQuals = LocalID & Qualifiers::FastMask;
6980   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
6981 
6982   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
6983     return LocalID;
6984 
6985   if (!F.ModuleOffsetMap.empty())
6986     ReadModuleOffsetMap(F);
6987 
6988   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6989     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
6990   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
6991 
6992   unsigned GlobalIndex = LocalIndex + I->second;
6993   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
6994 }
6995 
6996 TemplateArgumentLocInfo
6997 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
6998   switch (Kind) {
6999   case TemplateArgument::Expression:
7000     return readExpr();
7001   case TemplateArgument::Type:
7002     return readTypeSourceInfo();
7003   case TemplateArgument::Template: {
7004     NestedNameSpecifierLoc QualifierLoc =
7005       readNestedNameSpecifierLoc();
7006     SourceLocation TemplateNameLoc = readSourceLocation();
7007     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7008                                    SourceLocation());
7009   }
7010   case TemplateArgument::TemplateExpansion: {
7011     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7012     SourceLocation TemplateNameLoc = readSourceLocation();
7013     SourceLocation EllipsisLoc = readSourceLocation();
7014     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7015                                    EllipsisLoc);
7016   }
7017   case TemplateArgument::Null:
7018   case TemplateArgument::Integral:
7019   case TemplateArgument::Declaration:
7020   case TemplateArgument::NullPtr:
7021   case TemplateArgument::Pack:
7022     // FIXME: Is this right?
7023     return TemplateArgumentLocInfo();
7024   }
7025   llvm_unreachable("unexpected template argument loc");
7026 }
7027 
7028 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7029   TemplateArgument Arg = readTemplateArgument();
7030 
7031   if (Arg.getKind() == TemplateArgument::Expression) {
7032     if (readBool()) // bool InfoHasSameExpr.
7033       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7034   }
7035   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7036 }
7037 
7038 const ASTTemplateArgumentListInfo *
7039 ASTRecordReader::readASTTemplateArgumentListInfo() {
7040   SourceLocation LAngleLoc = readSourceLocation();
7041   SourceLocation RAngleLoc = readSourceLocation();
7042   unsigned NumArgsAsWritten = readInt();
7043   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7044   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7045     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7046   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7047 }
7048 
7049 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7050   return GetDecl(ID);
7051 }
7052 
7053 void ASTReader::CompleteRedeclChain(const Decl *D) {
7054   if (NumCurrentElementsDeserializing) {
7055     // We arrange to not care about the complete redeclaration chain while we're
7056     // deserializing. Just remember that the AST has marked this one as complete
7057     // but that it's not actually complete yet, so we know we still need to
7058     // complete it later.
7059     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7060     return;
7061   }
7062 
7063   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7064 
7065   // If this is a named declaration, complete it by looking it up
7066   // within its context.
7067   //
7068   // FIXME: Merging a function definition should merge
7069   // all mergeable entities within it.
7070   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7071       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7072     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7073       if (!getContext().getLangOpts().CPlusPlus &&
7074           isa<TranslationUnitDecl>(DC)) {
7075         // Outside of C++, we don't have a lookup table for the TU, so update
7076         // the identifier instead. (For C++ modules, we don't store decls
7077         // in the serialized identifier table, so we do the lookup in the TU.)
7078         auto *II = Name.getAsIdentifierInfo();
7079         assert(II && "non-identifier name in C?");
7080         if (II->isOutOfDate())
7081           updateOutOfDateIdentifier(*II);
7082       } else
7083         DC->lookup(Name);
7084     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7085       // Find all declarations of this kind from the relevant context.
7086       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7087         auto *DC = cast<DeclContext>(DCDecl);
7088         SmallVector<Decl*, 8> Decls;
7089         FindExternalLexicalDecls(
7090             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7091       }
7092     }
7093   }
7094 
7095   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7096     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7097   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7098     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7099   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7100     if (auto *Template = FD->getPrimaryTemplate())
7101       Template->LoadLazySpecializations();
7102   }
7103 }
7104 
7105 CXXCtorInitializer **
7106 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7107   RecordLocation Loc = getLocalBitOffset(Offset);
7108   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7109   SavedStreamPosition SavedPosition(Cursor);
7110   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7111     Error(std::move(Err));
7112     return nullptr;
7113   }
7114   ReadingKindTracker ReadingKind(Read_Decl, *this);
7115 
7116   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7117   if (!MaybeCode) {
7118     Error(MaybeCode.takeError());
7119     return nullptr;
7120   }
7121   unsigned Code = MaybeCode.get();
7122 
7123   ASTRecordReader Record(*this, *Loc.F);
7124   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7125   if (!MaybeRecCode) {
7126     Error(MaybeRecCode.takeError());
7127     return nullptr;
7128   }
7129   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7130     Error("malformed AST file: missing C++ ctor initializers");
7131     return nullptr;
7132   }
7133 
7134   return Record.readCXXCtorInitializers();
7135 }
7136 
7137 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7138   assert(ContextObj && "reading base specifiers with no AST context");
7139   ASTContext &Context = *ContextObj;
7140 
7141   RecordLocation Loc = getLocalBitOffset(Offset);
7142   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7143   SavedStreamPosition SavedPosition(Cursor);
7144   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7145     Error(std::move(Err));
7146     return nullptr;
7147   }
7148   ReadingKindTracker ReadingKind(Read_Decl, *this);
7149 
7150   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7151   if (!MaybeCode) {
7152     Error(MaybeCode.takeError());
7153     return nullptr;
7154   }
7155   unsigned Code = MaybeCode.get();
7156 
7157   ASTRecordReader Record(*this, *Loc.F);
7158   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7159   if (!MaybeRecCode) {
7160     Error(MaybeCode.takeError());
7161     return nullptr;
7162   }
7163   unsigned RecCode = MaybeRecCode.get();
7164 
7165   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7166     Error("malformed AST file: missing C++ base specifiers");
7167     return nullptr;
7168   }
7169 
7170   unsigned NumBases = Record.readInt();
7171   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7172   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7173   for (unsigned I = 0; I != NumBases; ++I)
7174     Bases[I] = Record.readCXXBaseSpecifier();
7175   return Bases;
7176 }
7177 
7178 serialization::DeclID
7179 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7180   if (LocalID < NUM_PREDEF_DECL_IDS)
7181     return LocalID;
7182 
7183   if (!F.ModuleOffsetMap.empty())
7184     ReadModuleOffsetMap(F);
7185 
7186   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7187     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7188   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7189 
7190   return LocalID + I->second;
7191 }
7192 
7193 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7194                                    ModuleFile &M) const {
7195   // Predefined decls aren't from any module.
7196   if (ID < NUM_PREDEF_DECL_IDS)
7197     return false;
7198 
7199   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7200          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7201 }
7202 
7203 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7204   if (!D->isFromASTFile())
7205     return nullptr;
7206   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7207   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7208   return I->second;
7209 }
7210 
7211 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7212   if (ID < NUM_PREDEF_DECL_IDS)
7213     return SourceLocation();
7214 
7215   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7216 
7217   if (Index > DeclsLoaded.size()) {
7218     Error("declaration ID out-of-range for AST file");
7219     return SourceLocation();
7220   }
7221 
7222   if (Decl *D = DeclsLoaded[Index])
7223     return D->getLocation();
7224 
7225   SourceLocation Loc;
7226   DeclCursorForID(ID, Loc);
7227   return Loc;
7228 }
7229 
7230 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7231   switch (ID) {
7232   case PREDEF_DECL_NULL_ID:
7233     return nullptr;
7234 
7235   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7236     return Context.getTranslationUnitDecl();
7237 
7238   case PREDEF_DECL_OBJC_ID_ID:
7239     return Context.getObjCIdDecl();
7240 
7241   case PREDEF_DECL_OBJC_SEL_ID:
7242     return Context.getObjCSelDecl();
7243 
7244   case PREDEF_DECL_OBJC_CLASS_ID:
7245     return Context.getObjCClassDecl();
7246 
7247   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7248     return Context.getObjCProtocolDecl();
7249 
7250   case PREDEF_DECL_INT_128_ID:
7251     return Context.getInt128Decl();
7252 
7253   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7254     return Context.getUInt128Decl();
7255 
7256   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7257     return Context.getObjCInstanceTypeDecl();
7258 
7259   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7260     return Context.getBuiltinVaListDecl();
7261 
7262   case PREDEF_DECL_VA_LIST_TAG:
7263     return Context.getVaListTagDecl();
7264 
7265   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7266     return Context.getBuiltinMSVaListDecl();
7267 
7268   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7269     return Context.getExternCContextDecl();
7270 
7271   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7272     return Context.getMakeIntegerSeqDecl();
7273 
7274   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7275     return Context.getCFConstantStringDecl();
7276 
7277   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7278     return Context.getCFConstantStringTagDecl();
7279 
7280   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7281     return Context.getTypePackElementDecl();
7282   }
7283   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7284 }
7285 
7286 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7287   assert(ContextObj && "reading decl with no AST context");
7288   if (ID < NUM_PREDEF_DECL_IDS) {
7289     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7290     if (D) {
7291       // Track that we have merged the declaration with ID \p ID into the
7292       // pre-existing predefined declaration \p D.
7293       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7294       if (Merged.empty())
7295         Merged.push_back(ID);
7296     }
7297     return D;
7298   }
7299 
7300   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7301 
7302   if (Index >= DeclsLoaded.size()) {
7303     assert(0 && "declaration ID out-of-range for AST file");
7304     Error("declaration ID out-of-range for AST file");
7305     return nullptr;
7306   }
7307 
7308   return DeclsLoaded[Index];
7309 }
7310 
7311 Decl *ASTReader::GetDecl(DeclID ID) {
7312   if (ID < NUM_PREDEF_DECL_IDS)
7313     return GetExistingDecl(ID);
7314 
7315   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7316 
7317   if (Index >= DeclsLoaded.size()) {
7318     assert(0 && "declaration ID out-of-range for AST file");
7319     Error("declaration ID out-of-range for AST file");
7320     return nullptr;
7321   }
7322 
7323   if (!DeclsLoaded[Index]) {
7324     ReadDeclRecord(ID);
7325     if (DeserializationListener)
7326       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7327   }
7328 
7329   return DeclsLoaded[Index];
7330 }
7331 
7332 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7333                                                   DeclID GlobalID) {
7334   if (GlobalID < NUM_PREDEF_DECL_IDS)
7335     return GlobalID;
7336 
7337   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7338   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7339   ModuleFile *Owner = I->second;
7340 
7341   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7342     = M.GlobalToLocalDeclIDs.find(Owner);
7343   if (Pos == M.GlobalToLocalDeclIDs.end())
7344     return 0;
7345 
7346   return GlobalID - Owner->BaseDeclID + Pos->second;
7347 }
7348 
7349 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7350                                             const RecordData &Record,
7351                                             unsigned &Idx) {
7352   if (Idx >= Record.size()) {
7353     Error("Corrupted AST file");
7354     return 0;
7355   }
7356 
7357   return getGlobalDeclID(F, Record[Idx++]);
7358 }
7359 
7360 /// Resolve the offset of a statement into a statement.
7361 ///
7362 /// This operation will read a new statement from the external
7363 /// source each time it is called, and is meant to be used via a
7364 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7365 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7366   // Switch case IDs are per Decl.
7367   ClearSwitchCaseIDs();
7368 
7369   // Offset here is a global offset across the entire chain.
7370   RecordLocation Loc = getLocalBitOffset(Offset);
7371   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7372     Error(std::move(Err));
7373     return nullptr;
7374   }
7375   assert(NumCurrentElementsDeserializing == 0 &&
7376          "should not be called while already deserializing");
7377   Deserializing D(this);
7378   return ReadStmtFromStream(*Loc.F);
7379 }
7380 
7381 void ASTReader::FindExternalLexicalDecls(
7382     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7383     SmallVectorImpl<Decl *> &Decls) {
7384   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7385 
7386   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7387     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7388     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7389       auto K = (Decl::Kind)+LexicalDecls[I];
7390       if (!IsKindWeWant(K))
7391         continue;
7392 
7393       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7394 
7395       // Don't add predefined declarations to the lexical context more
7396       // than once.
7397       if (ID < NUM_PREDEF_DECL_IDS) {
7398         if (PredefsVisited[ID])
7399           continue;
7400 
7401         PredefsVisited[ID] = true;
7402       }
7403 
7404       if (Decl *D = GetLocalDecl(*M, ID)) {
7405         assert(D->getKind() == K && "wrong kind for lexical decl");
7406         if (!DC->isDeclInLexicalTraversal(D))
7407           Decls.push_back(D);
7408       }
7409     }
7410   };
7411 
7412   if (isa<TranslationUnitDecl>(DC)) {
7413     for (auto Lexical : TULexicalDecls)
7414       Visit(Lexical.first, Lexical.second);
7415   } else {
7416     auto I = LexicalDecls.find(DC);
7417     if (I != LexicalDecls.end())
7418       Visit(I->second.first, I->second.second);
7419   }
7420 
7421   ++NumLexicalDeclContextsRead;
7422 }
7423 
7424 namespace {
7425 
7426 class DeclIDComp {
7427   ASTReader &Reader;
7428   ModuleFile &Mod;
7429 
7430 public:
7431   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7432 
7433   bool operator()(LocalDeclID L, LocalDeclID R) const {
7434     SourceLocation LHS = getLocation(L);
7435     SourceLocation RHS = getLocation(R);
7436     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7437   }
7438 
7439   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7440     SourceLocation RHS = getLocation(R);
7441     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7442   }
7443 
7444   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7445     SourceLocation LHS = getLocation(L);
7446     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7447   }
7448 
7449   SourceLocation getLocation(LocalDeclID ID) const {
7450     return Reader.getSourceManager().getFileLoc(
7451             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7452   }
7453 };
7454 
7455 } // namespace
7456 
7457 void ASTReader::FindFileRegionDecls(FileID File,
7458                                     unsigned Offset, unsigned Length,
7459                                     SmallVectorImpl<Decl *> &Decls) {
7460   SourceManager &SM = getSourceManager();
7461 
7462   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7463   if (I == FileDeclIDs.end())
7464     return;
7465 
7466   FileDeclsInfo &DInfo = I->second;
7467   if (DInfo.Decls.empty())
7468     return;
7469 
7470   SourceLocation
7471     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7472   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7473 
7474   DeclIDComp DIDComp(*this, *DInfo.Mod);
7475   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7476       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7477   if (BeginIt != DInfo.Decls.begin())
7478     --BeginIt;
7479 
7480   // If we are pointing at a top-level decl inside an objc container, we need
7481   // to backtrack until we find it otherwise we will fail to report that the
7482   // region overlaps with an objc container.
7483   while (BeginIt != DInfo.Decls.begin() &&
7484          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7485              ->isTopLevelDeclInObjCContainer())
7486     --BeginIt;
7487 
7488   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7489       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7490   if (EndIt != DInfo.Decls.end())
7491     ++EndIt;
7492 
7493   for (ArrayRef<serialization::LocalDeclID>::iterator
7494          DIt = BeginIt; DIt != EndIt; ++DIt)
7495     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7496 }
7497 
7498 bool
7499 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7500                                           DeclarationName Name) {
7501   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7502          "DeclContext has no visible decls in storage");
7503   if (!Name)
7504     return false;
7505 
7506   auto It = Lookups.find(DC);
7507   if (It == Lookups.end())
7508     return false;
7509 
7510   Deserializing LookupResults(this);
7511 
7512   // Load the list of declarations.
7513   SmallVector<NamedDecl *, 64> Decls;
7514   for (DeclID ID : It->second.Table.find(Name)) {
7515     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7516     if (ND->getDeclName() == Name)
7517       Decls.push_back(ND);
7518   }
7519 
7520   ++NumVisibleDeclContextsRead;
7521   SetExternalVisibleDeclsForName(DC, Name, Decls);
7522   return !Decls.empty();
7523 }
7524 
7525 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7526   if (!DC->hasExternalVisibleStorage())
7527     return;
7528 
7529   auto It = Lookups.find(DC);
7530   assert(It != Lookups.end() &&
7531          "have external visible storage but no lookup tables");
7532 
7533   DeclsMap Decls;
7534 
7535   for (DeclID ID : It->second.Table.findAll()) {
7536     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7537     Decls[ND->getDeclName()].push_back(ND);
7538   }
7539 
7540   ++NumVisibleDeclContextsRead;
7541 
7542   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7543     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7544   }
7545   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7546 }
7547 
7548 const serialization::reader::DeclContextLookupTable *
7549 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7550   auto I = Lookups.find(Primary);
7551   return I == Lookups.end() ? nullptr : &I->second;
7552 }
7553 
7554 /// Under non-PCH compilation the consumer receives the objc methods
7555 /// before receiving the implementation, and codegen depends on this.
7556 /// We simulate this by deserializing and passing to consumer the methods of the
7557 /// implementation before passing the deserialized implementation decl.
7558 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7559                                        ASTConsumer *Consumer) {
7560   assert(ImplD && Consumer);
7561 
7562   for (auto *I : ImplD->methods())
7563     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7564 
7565   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7566 }
7567 
7568 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7569   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7570     PassObjCImplDeclToConsumer(ImplD, Consumer);
7571   else
7572     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7573 }
7574 
7575 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7576   this->Consumer = Consumer;
7577 
7578   if (Consumer)
7579     PassInterestingDeclsToConsumer();
7580 
7581   if (DeserializationListener)
7582     DeserializationListener->ReaderInitialized(this);
7583 }
7584 
7585 void ASTReader::PrintStats() {
7586   std::fprintf(stderr, "*** AST File Statistics:\n");
7587 
7588   unsigned NumTypesLoaded
7589     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7590                                       QualType());
7591   unsigned NumDeclsLoaded
7592     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7593                                       (Decl *)nullptr);
7594   unsigned NumIdentifiersLoaded
7595     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7596                                             IdentifiersLoaded.end(),
7597                                             (IdentifierInfo *)nullptr);
7598   unsigned NumMacrosLoaded
7599     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7600                                        MacrosLoaded.end(),
7601                                        (MacroInfo *)nullptr);
7602   unsigned NumSelectorsLoaded
7603     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7604                                           SelectorsLoaded.end(),
7605                                           Selector());
7606 
7607   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7608     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7609                  NumSLocEntriesRead, TotalNumSLocEntries,
7610                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7611   if (!TypesLoaded.empty())
7612     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7613                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7614                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7615   if (!DeclsLoaded.empty())
7616     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7617                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7618                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7619   if (!IdentifiersLoaded.empty())
7620     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7621                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7622                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7623   if (!MacrosLoaded.empty())
7624     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7625                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7626                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7627   if (!SelectorsLoaded.empty())
7628     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7629                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7630                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7631   if (TotalNumStatements)
7632     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7633                  NumStatementsRead, TotalNumStatements,
7634                  ((float)NumStatementsRead/TotalNumStatements * 100));
7635   if (TotalNumMacros)
7636     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7637                  NumMacrosRead, TotalNumMacros,
7638                  ((float)NumMacrosRead/TotalNumMacros * 100));
7639   if (TotalLexicalDeclContexts)
7640     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7641                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7642                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7643                   * 100));
7644   if (TotalVisibleDeclContexts)
7645     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7646                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7647                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7648                   * 100));
7649   if (TotalNumMethodPoolEntries)
7650     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7651                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7652                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7653                   * 100));
7654   if (NumMethodPoolLookups)
7655     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7656                  NumMethodPoolHits, NumMethodPoolLookups,
7657                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7658   if (NumMethodPoolTableLookups)
7659     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7660                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7661                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7662                   * 100.0));
7663   if (NumIdentifierLookupHits)
7664     std::fprintf(stderr,
7665                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7666                  NumIdentifierLookupHits, NumIdentifierLookups,
7667                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7668 
7669   if (GlobalIndex) {
7670     std::fprintf(stderr, "\n");
7671     GlobalIndex->printStats();
7672   }
7673 
7674   std::fprintf(stderr, "\n");
7675   dump();
7676   std::fprintf(stderr, "\n");
7677 }
7678 
7679 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7680 LLVM_DUMP_METHOD static void
7681 dumpModuleIDMap(StringRef Name,
7682                 const ContinuousRangeMap<Key, ModuleFile *,
7683                                          InitialCapacity> &Map) {
7684   if (Map.begin() == Map.end())
7685     return;
7686 
7687   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7688 
7689   llvm::errs() << Name << ":\n";
7690   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7691        I != IEnd; ++I) {
7692     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7693       << "\n";
7694   }
7695 }
7696 
7697 LLVM_DUMP_METHOD void ASTReader::dump() {
7698   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7699   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7700   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7701   dumpModuleIDMap("Global type map", GlobalTypeMap);
7702   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7703   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7704   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7705   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7706   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7707   dumpModuleIDMap("Global preprocessed entity map",
7708                   GlobalPreprocessedEntityMap);
7709 
7710   llvm::errs() << "\n*** PCH/Modules Loaded:";
7711   for (ModuleFile &M : ModuleMgr)
7712     M.dump();
7713 }
7714 
7715 /// Return the amount of memory used by memory buffers, breaking down
7716 /// by heap-backed versus mmap'ed memory.
7717 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7718   for (ModuleFile &I : ModuleMgr) {
7719     if (llvm::MemoryBuffer *buf = I.Buffer) {
7720       size_t bytes = buf->getBufferSize();
7721       switch (buf->getBufferKind()) {
7722         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7723           sizes.malloc_bytes += bytes;
7724           break;
7725         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7726           sizes.mmap_bytes += bytes;
7727           break;
7728       }
7729     }
7730   }
7731 }
7732 
7733 void ASTReader::InitializeSema(Sema &S) {
7734   SemaObj = &S;
7735   S.addExternalSource(this);
7736 
7737   // Makes sure any declarations that were deserialized "too early"
7738   // still get added to the identifier's declaration chains.
7739   for (uint64_t ID : PreloadedDeclIDs) {
7740     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7741     pushExternalDeclIntoScope(D, D->getDeclName());
7742   }
7743   PreloadedDeclIDs.clear();
7744 
7745   // FIXME: What happens if these are changed by a module import?
7746   if (!FPPragmaOptions.empty()) {
7747     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7748     SemaObj->FPFeatures = FPOptions(FPPragmaOptions[0]);
7749   }
7750 
7751   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7752   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7753   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7754 
7755   UpdateSema();
7756 }
7757 
7758 void ASTReader::UpdateSema() {
7759   assert(SemaObj && "no Sema to update");
7760 
7761   // Load the offsets of the declarations that Sema references.
7762   // They will be lazily deserialized when needed.
7763   if (!SemaDeclRefs.empty()) {
7764     assert(SemaDeclRefs.size() % 3 == 0);
7765     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7766       if (!SemaObj->StdNamespace)
7767         SemaObj->StdNamespace = SemaDeclRefs[I];
7768       if (!SemaObj->StdBadAlloc)
7769         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7770       if (!SemaObj->StdAlignValT)
7771         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7772     }
7773     SemaDeclRefs.clear();
7774   }
7775 
7776   // Update the state of pragmas. Use the same API as if we had encountered the
7777   // pragma in the source.
7778   if(OptimizeOffPragmaLocation.isValid())
7779     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7780   if (PragmaMSStructState != -1)
7781     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7782   if (PointersToMembersPragmaLocation.isValid()) {
7783     SemaObj->ActOnPragmaMSPointersToMembers(
7784         (LangOptions::PragmaMSPointersToMembersKind)
7785             PragmaMSPointersToMembersState,
7786         PointersToMembersPragmaLocation);
7787   }
7788   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7789 
7790   if (PragmaPackCurrentValue) {
7791     // The bottom of the stack might have a default value. It must be adjusted
7792     // to the current value to ensure that the packing state is preserved after
7793     // popping entries that were included/imported from a PCH/module.
7794     bool DropFirst = false;
7795     if (!PragmaPackStack.empty() &&
7796         PragmaPackStack.front().Location.isInvalid()) {
7797       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
7798              "Expected a default alignment value");
7799       SemaObj->PackStack.Stack.emplace_back(
7800           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
7801           SemaObj->PackStack.CurrentPragmaLocation,
7802           PragmaPackStack.front().PushLocation);
7803       DropFirst = true;
7804     }
7805     for (const auto &Entry :
7806          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
7807       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
7808                                             Entry.Location, Entry.PushLocation);
7809     if (PragmaPackCurrentLocation.isInvalid()) {
7810       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
7811              "Expected a default alignment value");
7812       // Keep the current values.
7813     } else {
7814       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
7815       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
7816     }
7817   }
7818 }
7819 
7820 IdentifierInfo *ASTReader::get(StringRef Name) {
7821   // Note that we are loading an identifier.
7822   Deserializing AnIdentifier(this);
7823 
7824   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7825                                   NumIdentifierLookups,
7826                                   NumIdentifierLookupHits);
7827 
7828   // We don't need to do identifier table lookups in C++ modules (we preload
7829   // all interesting declarations, and don't need to use the scope for name
7830   // lookups). Perform the lookup in PCH files, though, since we don't build
7831   // a complete initial identifier table if we're carrying on from a PCH.
7832   if (PP.getLangOpts().CPlusPlus) {
7833     for (auto F : ModuleMgr.pch_modules())
7834       if (Visitor(*F))
7835         break;
7836   } else {
7837     // If there is a global index, look there first to determine which modules
7838     // provably do not have any results for this identifier.
7839     GlobalModuleIndex::HitSet Hits;
7840     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7841     if (!loadGlobalIndex()) {
7842       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7843         HitsPtr = &Hits;
7844       }
7845     }
7846 
7847     ModuleMgr.visit(Visitor, HitsPtr);
7848   }
7849 
7850   IdentifierInfo *II = Visitor.getIdentifierInfo();
7851   markIdentifierUpToDate(II);
7852   return II;
7853 }
7854 
7855 namespace clang {
7856 
7857   /// An identifier-lookup iterator that enumerates all of the
7858   /// identifiers stored within a set of AST files.
7859   class ASTIdentifierIterator : public IdentifierIterator {
7860     /// The AST reader whose identifiers are being enumerated.
7861     const ASTReader &Reader;
7862 
7863     /// The current index into the chain of AST files stored in
7864     /// the AST reader.
7865     unsigned Index;
7866 
7867     /// The current position within the identifier lookup table
7868     /// of the current AST file.
7869     ASTIdentifierLookupTable::key_iterator Current;
7870 
7871     /// The end position within the identifier lookup table of
7872     /// the current AST file.
7873     ASTIdentifierLookupTable::key_iterator End;
7874 
7875     /// Whether to skip any modules in the ASTReader.
7876     bool SkipModules;
7877 
7878   public:
7879     explicit ASTIdentifierIterator(const ASTReader &Reader,
7880                                    bool SkipModules = false);
7881 
7882     StringRef Next() override;
7883   };
7884 
7885 } // namespace clang
7886 
7887 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
7888                                              bool SkipModules)
7889     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
7890 }
7891 
7892 StringRef ASTIdentifierIterator::Next() {
7893   while (Current == End) {
7894     // If we have exhausted all of our AST files, we're done.
7895     if (Index == 0)
7896       return StringRef();
7897 
7898     --Index;
7899     ModuleFile &F = Reader.ModuleMgr[Index];
7900     if (SkipModules && F.isModule())
7901       continue;
7902 
7903     ASTIdentifierLookupTable *IdTable =
7904         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
7905     Current = IdTable->key_begin();
7906     End = IdTable->key_end();
7907   }
7908 
7909   // We have any identifiers remaining in the current AST file; return
7910   // the next one.
7911   StringRef Result = *Current;
7912   ++Current;
7913   return Result;
7914 }
7915 
7916 namespace {
7917 
7918 /// A utility for appending two IdentifierIterators.
7919 class ChainedIdentifierIterator : public IdentifierIterator {
7920   std::unique_ptr<IdentifierIterator> Current;
7921   std::unique_ptr<IdentifierIterator> Queued;
7922 
7923 public:
7924   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
7925                             std::unique_ptr<IdentifierIterator> Second)
7926       : Current(std::move(First)), Queued(std::move(Second)) {}
7927 
7928   StringRef Next() override {
7929     if (!Current)
7930       return StringRef();
7931 
7932     StringRef result = Current->Next();
7933     if (!result.empty())
7934       return result;
7935 
7936     // Try the queued iterator, which may itself be empty.
7937     Current.reset();
7938     std::swap(Current, Queued);
7939     return Next();
7940   }
7941 };
7942 
7943 } // namespace
7944 
7945 IdentifierIterator *ASTReader::getIdentifiers() {
7946   if (!loadGlobalIndex()) {
7947     std::unique_ptr<IdentifierIterator> ReaderIter(
7948         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
7949     std::unique_ptr<IdentifierIterator> ModulesIter(
7950         GlobalIndex->createIdentifierIterator());
7951     return new ChainedIdentifierIterator(std::move(ReaderIter),
7952                                          std::move(ModulesIter));
7953   }
7954 
7955   return new ASTIdentifierIterator(*this);
7956 }
7957 
7958 namespace clang {
7959 namespace serialization {
7960 
7961   class ReadMethodPoolVisitor {
7962     ASTReader &Reader;
7963     Selector Sel;
7964     unsigned PriorGeneration;
7965     unsigned InstanceBits = 0;
7966     unsigned FactoryBits = 0;
7967     bool InstanceHasMoreThanOneDecl = false;
7968     bool FactoryHasMoreThanOneDecl = false;
7969     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7970     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7971 
7972   public:
7973     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7974                           unsigned PriorGeneration)
7975         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
7976 
7977     bool operator()(ModuleFile &M) {
7978       if (!M.SelectorLookupTable)
7979         return false;
7980 
7981       // If we've already searched this module file, skip it now.
7982       if (M.Generation <= PriorGeneration)
7983         return true;
7984 
7985       ++Reader.NumMethodPoolTableLookups;
7986       ASTSelectorLookupTable *PoolTable
7987         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
7988       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
7989       if (Pos == PoolTable->end())
7990         return false;
7991 
7992       ++Reader.NumMethodPoolTableHits;
7993       ++Reader.NumSelectorsRead;
7994       // FIXME: Not quite happy with the statistics here. We probably should
7995       // disable this tracking when called via LoadSelector.
7996       // Also, should entries without methods count as misses?
7997       ++Reader.NumMethodPoolEntriesRead;
7998       ASTSelectorLookupTrait::data_type Data = *Pos;
7999       if (Reader.DeserializationListener)
8000         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8001 
8002       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8003       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8004       InstanceBits = Data.InstanceBits;
8005       FactoryBits = Data.FactoryBits;
8006       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8007       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8008       return true;
8009     }
8010 
8011     /// Retrieve the instance methods found by this visitor.
8012     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8013       return InstanceMethods;
8014     }
8015 
8016     /// Retrieve the instance methods found by this visitor.
8017     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8018       return FactoryMethods;
8019     }
8020 
8021     unsigned getInstanceBits() const { return InstanceBits; }
8022     unsigned getFactoryBits() const { return FactoryBits; }
8023 
8024     bool instanceHasMoreThanOneDecl() const {
8025       return InstanceHasMoreThanOneDecl;
8026     }
8027 
8028     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8029   };
8030 
8031 } // namespace serialization
8032 } // namespace clang
8033 
8034 /// Add the given set of methods to the method list.
8035 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8036                              ObjCMethodList &List) {
8037   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8038     S.addMethodToGlobalList(&List, Methods[I]);
8039   }
8040 }
8041 
8042 void ASTReader::ReadMethodPool(Selector Sel) {
8043   // Get the selector generation and update it to the current generation.
8044   unsigned &Generation = SelectorGeneration[Sel];
8045   unsigned PriorGeneration = Generation;
8046   Generation = getGeneration();
8047   SelectorOutOfDate[Sel] = false;
8048 
8049   // Search for methods defined with this selector.
8050   ++NumMethodPoolLookups;
8051   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8052   ModuleMgr.visit(Visitor);
8053 
8054   if (Visitor.getInstanceMethods().empty() &&
8055       Visitor.getFactoryMethods().empty())
8056     return;
8057 
8058   ++NumMethodPoolHits;
8059 
8060   if (!getSema())
8061     return;
8062 
8063   Sema &S = *getSema();
8064   Sema::GlobalMethodPool::iterator Pos
8065     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8066 
8067   Pos->second.first.setBits(Visitor.getInstanceBits());
8068   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8069   Pos->second.second.setBits(Visitor.getFactoryBits());
8070   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8071 
8072   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8073   // when building a module we keep every method individually and may need to
8074   // update hasMoreThanOneDecl as we add the methods.
8075   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8076   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8077 }
8078 
8079 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8080   if (SelectorOutOfDate[Sel])
8081     ReadMethodPool(Sel);
8082 }
8083 
8084 void ASTReader::ReadKnownNamespaces(
8085                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8086   Namespaces.clear();
8087 
8088   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8089     if (NamespaceDecl *Namespace
8090                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8091       Namespaces.push_back(Namespace);
8092   }
8093 }
8094 
8095 void ASTReader::ReadUndefinedButUsed(
8096     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8097   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8098     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8099     SourceLocation Loc =
8100         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8101     Undefined.insert(std::make_pair(D, Loc));
8102   }
8103 }
8104 
8105 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8106     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8107                                                      Exprs) {
8108   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8109     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8110     uint64_t Count = DelayedDeleteExprs[Idx++];
8111     for (uint64_t C = 0; C < Count; ++C) {
8112       SourceLocation DeleteLoc =
8113           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8114       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8115       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8116     }
8117   }
8118 }
8119 
8120 void ASTReader::ReadTentativeDefinitions(
8121                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8122   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8123     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8124     if (Var)
8125       TentativeDefs.push_back(Var);
8126   }
8127   TentativeDefinitions.clear();
8128 }
8129 
8130 void ASTReader::ReadUnusedFileScopedDecls(
8131                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8132   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8133     DeclaratorDecl *D
8134       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8135     if (D)
8136       Decls.push_back(D);
8137   }
8138   UnusedFileScopedDecls.clear();
8139 }
8140 
8141 void ASTReader::ReadDelegatingConstructors(
8142                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8143   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8144     CXXConstructorDecl *D
8145       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8146     if (D)
8147       Decls.push_back(D);
8148   }
8149   DelegatingCtorDecls.clear();
8150 }
8151 
8152 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8153   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8154     TypedefNameDecl *D
8155       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8156     if (D)
8157       Decls.push_back(D);
8158   }
8159   ExtVectorDecls.clear();
8160 }
8161 
8162 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8163     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8164   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8165        ++I) {
8166     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8167         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8168     if (D)
8169       Decls.insert(D);
8170   }
8171   UnusedLocalTypedefNameCandidates.clear();
8172 }
8173 
8174 void ASTReader::ReadReferencedSelectors(
8175        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8176   if (ReferencedSelectorsData.empty())
8177     return;
8178 
8179   // If there are @selector references added them to its pool. This is for
8180   // implementation of -Wselector.
8181   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8182   unsigned I = 0;
8183   while (I < DataSize) {
8184     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8185     SourceLocation SelLoc
8186       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8187     Sels.push_back(std::make_pair(Sel, SelLoc));
8188   }
8189   ReferencedSelectorsData.clear();
8190 }
8191 
8192 void ASTReader::ReadWeakUndeclaredIdentifiers(
8193        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8194   if (WeakUndeclaredIdentifiers.empty())
8195     return;
8196 
8197   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8198     IdentifierInfo *WeakId
8199       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8200     IdentifierInfo *AliasId
8201       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8202     SourceLocation Loc
8203       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8204     bool Used = WeakUndeclaredIdentifiers[I++];
8205     WeakInfo WI(AliasId, Loc);
8206     WI.setUsed(Used);
8207     WeakIDs.push_back(std::make_pair(WeakId, WI));
8208   }
8209   WeakUndeclaredIdentifiers.clear();
8210 }
8211 
8212 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8213   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8214     ExternalVTableUse VT;
8215     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8216     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8217     VT.DefinitionRequired = VTableUses[Idx++];
8218     VTables.push_back(VT);
8219   }
8220 
8221   VTableUses.clear();
8222 }
8223 
8224 void ASTReader::ReadPendingInstantiations(
8225        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8226   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8227     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8228     SourceLocation Loc
8229       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8230 
8231     Pending.push_back(std::make_pair(D, Loc));
8232   }
8233   PendingInstantiations.clear();
8234 }
8235 
8236 void ASTReader::ReadLateParsedTemplates(
8237     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8238         &LPTMap) {
8239   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8240        /* In loop */) {
8241     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8242 
8243     auto LT = std::make_unique<LateParsedTemplate>();
8244     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8245 
8246     ModuleFile *F = getOwningModuleFile(LT->D);
8247     assert(F && "No module");
8248 
8249     unsigned TokN = LateParsedTemplates[Idx++];
8250     LT->Toks.reserve(TokN);
8251     for (unsigned T = 0; T < TokN; ++T)
8252       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8253 
8254     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8255   }
8256 
8257   LateParsedTemplates.clear();
8258 }
8259 
8260 void ASTReader::LoadSelector(Selector Sel) {
8261   // It would be complicated to avoid reading the methods anyway. So don't.
8262   ReadMethodPool(Sel);
8263 }
8264 
8265 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8266   assert(ID && "Non-zero identifier ID required");
8267   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8268   IdentifiersLoaded[ID - 1] = II;
8269   if (DeserializationListener)
8270     DeserializationListener->IdentifierRead(ID, II);
8271 }
8272 
8273 /// Set the globally-visible declarations associated with the given
8274 /// identifier.
8275 ///
8276 /// If the AST reader is currently in a state where the given declaration IDs
8277 /// cannot safely be resolved, they are queued until it is safe to resolve
8278 /// them.
8279 ///
8280 /// \param II an IdentifierInfo that refers to one or more globally-visible
8281 /// declarations.
8282 ///
8283 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8284 /// visible at global scope.
8285 ///
8286 /// \param Decls if non-null, this vector will be populated with the set of
8287 /// deserialized declarations. These declarations will not be pushed into
8288 /// scope.
8289 void
8290 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8291                               const SmallVectorImpl<uint32_t> &DeclIDs,
8292                                    SmallVectorImpl<Decl *> *Decls) {
8293   if (NumCurrentElementsDeserializing && !Decls) {
8294     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8295     return;
8296   }
8297 
8298   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8299     if (!SemaObj) {
8300       // Queue this declaration so that it will be added to the
8301       // translation unit scope and identifier's declaration chain
8302       // once a Sema object is known.
8303       PreloadedDeclIDs.push_back(DeclIDs[I]);
8304       continue;
8305     }
8306 
8307     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8308 
8309     // If we're simply supposed to record the declarations, do so now.
8310     if (Decls) {
8311       Decls->push_back(D);
8312       continue;
8313     }
8314 
8315     // Introduce this declaration into the translation-unit scope
8316     // and add it to the declaration chain for this identifier, so
8317     // that (unqualified) name lookup will find it.
8318     pushExternalDeclIntoScope(D, II);
8319   }
8320 }
8321 
8322 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8323   if (ID == 0)
8324     return nullptr;
8325 
8326   if (IdentifiersLoaded.empty()) {
8327     Error("no identifier table in AST file");
8328     return nullptr;
8329   }
8330 
8331   ID -= 1;
8332   if (!IdentifiersLoaded[ID]) {
8333     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8334     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8335     ModuleFile *M = I->second;
8336     unsigned Index = ID - M->BaseIdentifierID;
8337     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8338 
8339     // All of the strings in the AST file are preceded by a 16-bit length.
8340     // Extract that 16-bit length to avoid having to execute strlen().
8341     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8342     //  unsigned integers.  This is important to avoid integer overflow when
8343     //  we cast them to 'unsigned'.
8344     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8345     unsigned StrLen = (((unsigned) StrLenPtr[0])
8346                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8347     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8348     IdentifiersLoaded[ID] = &II;
8349     markIdentifierFromAST(*this,  II);
8350     if (DeserializationListener)
8351       DeserializationListener->IdentifierRead(ID + 1, &II);
8352   }
8353 
8354   return IdentifiersLoaded[ID];
8355 }
8356 
8357 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8358   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8359 }
8360 
8361 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8362   if (LocalID < NUM_PREDEF_IDENT_IDS)
8363     return LocalID;
8364 
8365   if (!M.ModuleOffsetMap.empty())
8366     ReadModuleOffsetMap(M);
8367 
8368   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8369     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8370   assert(I != M.IdentifierRemap.end()
8371          && "Invalid index into identifier index remap");
8372 
8373   return LocalID + I->second;
8374 }
8375 
8376 MacroInfo *ASTReader::getMacro(MacroID ID) {
8377   if (ID == 0)
8378     return nullptr;
8379 
8380   if (MacrosLoaded.empty()) {
8381     Error("no macro table in AST file");
8382     return nullptr;
8383   }
8384 
8385   ID -= NUM_PREDEF_MACRO_IDS;
8386   if (!MacrosLoaded[ID]) {
8387     GlobalMacroMapType::iterator I
8388       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8389     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8390     ModuleFile *M = I->second;
8391     unsigned Index = ID - M->BaseMacroID;
8392     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
8393 
8394     if (DeserializationListener)
8395       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8396                                          MacrosLoaded[ID]);
8397   }
8398 
8399   return MacrosLoaded[ID];
8400 }
8401 
8402 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8403   if (LocalID < NUM_PREDEF_MACRO_IDS)
8404     return LocalID;
8405 
8406   if (!M.ModuleOffsetMap.empty())
8407     ReadModuleOffsetMap(M);
8408 
8409   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8410     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8411   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8412 
8413   return LocalID + I->second;
8414 }
8415 
8416 serialization::SubmoduleID
8417 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8418   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8419     return LocalID;
8420 
8421   if (!M.ModuleOffsetMap.empty())
8422     ReadModuleOffsetMap(M);
8423 
8424   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8425     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8426   assert(I != M.SubmoduleRemap.end()
8427          && "Invalid index into submodule index remap");
8428 
8429   return LocalID + I->second;
8430 }
8431 
8432 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8433   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8434     assert(GlobalID == 0 && "Unhandled global submodule ID");
8435     return nullptr;
8436   }
8437 
8438   if (GlobalID > SubmodulesLoaded.size()) {
8439     Error("submodule ID out of range in AST file");
8440     return nullptr;
8441   }
8442 
8443   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8444 }
8445 
8446 Module *ASTReader::getModule(unsigned ID) {
8447   return getSubmodule(ID);
8448 }
8449 
8450 bool ASTReader::DeclIsFromPCHWithObjectFile(const Decl *D) {
8451   ModuleFile *MF = getOwningModuleFile(D);
8452   return MF && MF->PCHHasObjectFile;
8453 }
8454 
8455 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8456   if (ID & 1) {
8457     // It's a module, look it up by submodule ID.
8458     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8459     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8460   } else {
8461     // It's a prefix (preamble, PCH, ...). Look it up by index.
8462     unsigned IndexFromEnd = ID >> 1;
8463     assert(IndexFromEnd && "got reference to unknown module file");
8464     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8465   }
8466 }
8467 
8468 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8469   if (!F)
8470     return 1;
8471 
8472   // For a file representing a module, use the submodule ID of the top-level
8473   // module as the file ID. For any other kind of file, the number of such
8474   // files loaded beforehand will be the same on reload.
8475   // FIXME: Is this true even if we have an explicit module file and a PCH?
8476   if (F->isModule())
8477     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8478 
8479   auto PCHModules = getModuleManager().pch_modules();
8480   auto I = llvm::find(PCHModules, F);
8481   assert(I != PCHModules.end() && "emitting reference to unknown file");
8482   return (I - PCHModules.end()) << 1;
8483 }
8484 
8485 llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
8486 ASTReader::getSourceDescriptor(unsigned ID) {
8487   if (const Module *M = getSubmodule(ID))
8488     return ExternalASTSource::ASTSourceDescriptor(*M);
8489 
8490   // If there is only a single PCH, return it instead.
8491   // Chained PCH are not supported.
8492   const auto &PCHChain = ModuleMgr.pch_modules();
8493   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8494     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8495     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8496     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8497     return ASTReader::ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8498                                           MF.Signature);
8499   }
8500   return None;
8501 }
8502 
8503 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8504   auto I = DefinitionSource.find(FD);
8505   if (I == DefinitionSource.end())
8506     return EK_ReplyHazy;
8507   return I->second ? EK_Never : EK_Always;
8508 }
8509 
8510 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8511   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8512 }
8513 
8514 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8515   if (ID == 0)
8516     return Selector();
8517 
8518   if (ID > SelectorsLoaded.size()) {
8519     Error("selector ID out of range in AST file");
8520     return Selector();
8521   }
8522 
8523   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8524     // Load this selector from the selector table.
8525     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8526     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8527     ModuleFile &M = *I->second;
8528     ASTSelectorLookupTrait Trait(*this, M);
8529     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8530     SelectorsLoaded[ID - 1] =
8531       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8532     if (DeserializationListener)
8533       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8534   }
8535 
8536   return SelectorsLoaded[ID - 1];
8537 }
8538 
8539 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8540   return DecodeSelector(ID);
8541 }
8542 
8543 uint32_t ASTReader::GetNumExternalSelectors() {
8544   // ID 0 (the null selector) is considered an external selector.
8545   return getTotalNumSelectors() + 1;
8546 }
8547 
8548 serialization::SelectorID
8549 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8550   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8551     return LocalID;
8552 
8553   if (!M.ModuleOffsetMap.empty())
8554     ReadModuleOffsetMap(M);
8555 
8556   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8557     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8558   assert(I != M.SelectorRemap.end()
8559          && "Invalid index into selector index remap");
8560 
8561   return LocalID + I->second;
8562 }
8563 
8564 DeclarationNameLoc
8565 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8566   DeclarationNameLoc DNLoc;
8567   switch (Name.getNameKind()) {
8568   case DeclarationName::CXXConstructorName:
8569   case DeclarationName::CXXDestructorName:
8570   case DeclarationName::CXXConversionFunctionName:
8571     DNLoc.NamedType.TInfo = readTypeSourceInfo();
8572     break;
8573 
8574   case DeclarationName::CXXOperatorName:
8575     DNLoc.CXXOperatorName.BeginOpNameLoc
8576       = readSourceLocation().getRawEncoding();
8577     DNLoc.CXXOperatorName.EndOpNameLoc
8578       = readSourceLocation().getRawEncoding();
8579     break;
8580 
8581   case DeclarationName::CXXLiteralOperatorName:
8582     DNLoc.CXXLiteralOperatorName.OpNameLoc
8583       = readSourceLocation().getRawEncoding();
8584     break;
8585 
8586   case DeclarationName::Identifier:
8587   case DeclarationName::ObjCZeroArgSelector:
8588   case DeclarationName::ObjCOneArgSelector:
8589   case DeclarationName::ObjCMultiArgSelector:
8590   case DeclarationName::CXXUsingDirective:
8591   case DeclarationName::CXXDeductionGuideName:
8592     break;
8593   }
8594   return DNLoc;
8595 }
8596 
8597 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8598   DeclarationNameInfo NameInfo;
8599   NameInfo.setName(readDeclarationName());
8600   NameInfo.setLoc(readSourceLocation());
8601   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8602   return NameInfo;
8603 }
8604 
8605 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8606   Info.QualifierLoc = readNestedNameSpecifierLoc();
8607   unsigned NumTPLists = readInt();
8608   Info.NumTemplParamLists = NumTPLists;
8609   if (NumTPLists) {
8610     Info.TemplParamLists =
8611         new (getContext()) TemplateParameterList *[NumTPLists];
8612     for (unsigned i = 0; i != NumTPLists; ++i)
8613       Info.TemplParamLists[i] = readTemplateParameterList();
8614   }
8615 }
8616 
8617 TemplateParameterList *
8618 ASTRecordReader::readTemplateParameterList() {
8619   SourceLocation TemplateLoc = readSourceLocation();
8620   SourceLocation LAngleLoc = readSourceLocation();
8621   SourceLocation RAngleLoc = readSourceLocation();
8622 
8623   unsigned NumParams = readInt();
8624   SmallVector<NamedDecl *, 16> Params;
8625   Params.reserve(NumParams);
8626   while (NumParams--)
8627     Params.push_back(readDeclAs<NamedDecl>());
8628 
8629   bool HasRequiresClause = readBool();
8630   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8631 
8632   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8633       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8634   return TemplateParams;
8635 }
8636 
8637 void ASTRecordReader::readTemplateArgumentList(
8638                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8639                         bool Canonicalize) {
8640   unsigned NumTemplateArgs = readInt();
8641   TemplArgs.reserve(NumTemplateArgs);
8642   while (NumTemplateArgs--)
8643     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8644 }
8645 
8646 /// Read a UnresolvedSet structure.
8647 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8648   unsigned NumDecls = readInt();
8649   Set.reserve(getContext(), NumDecls);
8650   while (NumDecls--) {
8651     DeclID ID = readDeclID();
8652     AccessSpecifier AS = (AccessSpecifier) readInt();
8653     Set.addLazyDecl(getContext(), ID, AS);
8654   }
8655 }
8656 
8657 CXXBaseSpecifier
8658 ASTRecordReader::readCXXBaseSpecifier() {
8659   bool isVirtual = readBool();
8660   bool isBaseOfClass = readBool();
8661   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8662   bool inheritConstructors = readBool();
8663   TypeSourceInfo *TInfo = readTypeSourceInfo();
8664   SourceRange Range = readSourceRange();
8665   SourceLocation EllipsisLoc = readSourceLocation();
8666   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8667                           EllipsisLoc);
8668   Result.setInheritConstructors(inheritConstructors);
8669   return Result;
8670 }
8671 
8672 CXXCtorInitializer **
8673 ASTRecordReader::readCXXCtorInitializers() {
8674   ASTContext &Context = getContext();
8675   unsigned NumInitializers = readInt();
8676   assert(NumInitializers && "wrote ctor initializers but have no inits");
8677   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8678   for (unsigned i = 0; i != NumInitializers; ++i) {
8679     TypeSourceInfo *TInfo = nullptr;
8680     bool IsBaseVirtual = false;
8681     FieldDecl *Member = nullptr;
8682     IndirectFieldDecl *IndirectMember = nullptr;
8683 
8684     CtorInitializerType Type = (CtorInitializerType) readInt();
8685     switch (Type) {
8686     case CTOR_INITIALIZER_BASE:
8687       TInfo = readTypeSourceInfo();
8688       IsBaseVirtual = readBool();
8689       break;
8690 
8691     case CTOR_INITIALIZER_DELEGATING:
8692       TInfo = readTypeSourceInfo();
8693       break;
8694 
8695      case CTOR_INITIALIZER_MEMBER:
8696       Member = readDeclAs<FieldDecl>();
8697       break;
8698 
8699      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8700       IndirectMember = readDeclAs<IndirectFieldDecl>();
8701       break;
8702     }
8703 
8704     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8705     Expr *Init = readExpr();
8706     SourceLocation LParenLoc = readSourceLocation();
8707     SourceLocation RParenLoc = readSourceLocation();
8708 
8709     CXXCtorInitializer *BOMInit;
8710     if (Type == CTOR_INITIALIZER_BASE)
8711       BOMInit = new (Context)
8712           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8713                              RParenLoc, MemberOrEllipsisLoc);
8714     else if (Type == CTOR_INITIALIZER_DELEGATING)
8715       BOMInit = new (Context)
8716           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8717     else if (Member)
8718       BOMInit = new (Context)
8719           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8720                              Init, RParenLoc);
8721     else
8722       BOMInit = new (Context)
8723           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8724                              LParenLoc, Init, RParenLoc);
8725 
8726     if (/*IsWritten*/readBool()) {
8727       unsigned SourceOrder = readInt();
8728       BOMInit->setSourceOrder(SourceOrder);
8729     }
8730 
8731     CtorInitializers[i] = BOMInit;
8732   }
8733 
8734   return CtorInitializers;
8735 }
8736 
8737 NestedNameSpecifierLoc
8738 ASTRecordReader::readNestedNameSpecifierLoc() {
8739   ASTContext &Context = getContext();
8740   unsigned N = readInt();
8741   NestedNameSpecifierLocBuilder Builder;
8742   for (unsigned I = 0; I != N; ++I) {
8743     auto Kind = readNestedNameSpecifierKind();
8744     switch (Kind) {
8745     case NestedNameSpecifier::Identifier: {
8746       IdentifierInfo *II = readIdentifier();
8747       SourceRange Range = readSourceRange();
8748       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8749       break;
8750     }
8751 
8752     case NestedNameSpecifier::Namespace: {
8753       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8754       SourceRange Range = readSourceRange();
8755       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8756       break;
8757     }
8758 
8759     case NestedNameSpecifier::NamespaceAlias: {
8760       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8761       SourceRange Range = readSourceRange();
8762       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8763       break;
8764     }
8765 
8766     case NestedNameSpecifier::TypeSpec:
8767     case NestedNameSpecifier::TypeSpecWithTemplate: {
8768       bool Template = readBool();
8769       TypeSourceInfo *T = readTypeSourceInfo();
8770       if (!T)
8771         return NestedNameSpecifierLoc();
8772       SourceLocation ColonColonLoc = readSourceLocation();
8773 
8774       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8775       Builder.Extend(Context,
8776                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8777                      T->getTypeLoc(), ColonColonLoc);
8778       break;
8779     }
8780 
8781     case NestedNameSpecifier::Global: {
8782       SourceLocation ColonColonLoc = readSourceLocation();
8783       Builder.MakeGlobal(Context, ColonColonLoc);
8784       break;
8785     }
8786 
8787     case NestedNameSpecifier::Super: {
8788       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8789       SourceRange Range = readSourceRange();
8790       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8791       break;
8792     }
8793     }
8794   }
8795 
8796   return Builder.getWithLocInContext(Context);
8797 }
8798 
8799 SourceRange
8800 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8801                            unsigned &Idx) {
8802   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8803   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8804   return SourceRange(beg, end);
8805 }
8806 
8807 static FixedPointSemantics
8808 ReadFixedPointSemantics(const SmallVectorImpl<uint64_t> &Record,
8809                         unsigned &Idx) {
8810   unsigned Width = Record[Idx++];
8811   unsigned Scale = Record[Idx++];
8812   uint64_t Tmp = Record[Idx++];
8813   bool IsSigned = Tmp & 0x1;
8814   bool IsSaturated = Tmp & 0x2;
8815   bool HasUnsignedPadding = Tmp & 0x4;
8816   return FixedPointSemantics(Width, Scale, IsSigned, IsSaturated,
8817                              HasUnsignedPadding);
8818 }
8819 
8820 static const llvm::fltSemantics &
8821 readAPFloatSemantics(ASTRecordReader &reader) {
8822   return llvm::APFloatBase::EnumToSemantics(
8823     static_cast<llvm::APFloatBase::Semantics>(reader.readInt()));
8824 }
8825 
8826 APValue ASTRecordReader::readAPValue() {
8827   unsigned Kind = readInt();
8828   switch ((APValue::ValueKind) Kind) {
8829   case APValue::None:
8830     return APValue();
8831   case APValue::Indeterminate:
8832     return APValue::IndeterminateValue();
8833   case APValue::Int:
8834     return APValue(readAPSInt());
8835   case APValue::Float: {
8836     const llvm::fltSemantics &FloatSema = readAPFloatSemantics(*this);
8837     return APValue(readAPFloat(FloatSema));
8838   }
8839   case APValue::FixedPoint: {
8840     FixedPointSemantics FPSema = ReadFixedPointSemantics(Record, Idx);
8841     return APValue(APFixedPoint(readAPInt(), FPSema));
8842   }
8843   case APValue::ComplexInt: {
8844     llvm::APSInt First = readAPSInt();
8845     return APValue(std::move(First), readAPSInt());
8846   }
8847   case APValue::ComplexFloat: {
8848     const llvm::fltSemantics &FloatSema1 = readAPFloatSemantics(*this);
8849     llvm::APFloat First = readAPFloat(FloatSema1);
8850     const llvm::fltSemantics &FloatSema2 = readAPFloatSemantics(*this);
8851     return APValue(std::move(First), readAPFloat(FloatSema2));
8852   }
8853   case APValue::LValue:
8854   case APValue::Vector:
8855   case APValue::Array:
8856   case APValue::Struct:
8857   case APValue::Union:
8858   case APValue::MemberPointer:
8859   case APValue::AddrLabelDiff:
8860     // TODO : Handle all these APValue::ValueKind.
8861     return APValue();
8862   }
8863   llvm_unreachable("Invalid APValue::ValueKind");
8864 }
8865 
8866 /// Read a floating-point value
8867 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8868   return llvm::APFloat(Sem, readAPInt());
8869 }
8870 
8871 // Read a string
8872 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8873   unsigned Len = Record[Idx++];
8874   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8875   Idx += Len;
8876   return Result;
8877 }
8878 
8879 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8880                                 unsigned &Idx) {
8881   std::string Filename = ReadString(Record, Idx);
8882   ResolveImportedPath(F, Filename);
8883   return Filename;
8884 }
8885 
8886 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8887                                 const RecordData &Record, unsigned &Idx) {
8888   std::string Filename = ReadString(Record, Idx);
8889   if (!BaseDirectory.empty())
8890     ResolveImportedPath(Filename, BaseDirectory);
8891   return Filename;
8892 }
8893 
8894 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8895                                          unsigned &Idx) {
8896   unsigned Major = Record[Idx++];
8897   unsigned Minor = Record[Idx++];
8898   unsigned Subminor = Record[Idx++];
8899   if (Minor == 0)
8900     return VersionTuple(Major);
8901   if (Subminor == 0)
8902     return VersionTuple(Major, Minor - 1);
8903   return VersionTuple(Major, Minor - 1, Subminor - 1);
8904 }
8905 
8906 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8907                                           const RecordData &Record,
8908                                           unsigned &Idx) {
8909   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8910   return CXXTemporary::Create(getContext(), Decl);
8911 }
8912 
8913 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
8914   return Diag(CurrentImportLoc, DiagID);
8915 }
8916 
8917 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
8918   return Diags.Report(Loc, DiagID);
8919 }
8920 
8921 /// Retrieve the identifier table associated with the
8922 /// preprocessor.
8923 IdentifierTable &ASTReader::getIdentifierTable() {
8924   return PP.getIdentifierTable();
8925 }
8926 
8927 /// Record that the given ID maps to the given switch-case
8928 /// statement.
8929 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8930   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8931          "Already have a SwitchCase with this ID");
8932   (*CurrSwitchCaseStmts)[ID] = SC;
8933 }
8934 
8935 /// Retrieve the switch-case statement with the given ID.
8936 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8937   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8938   return (*CurrSwitchCaseStmts)[ID];
8939 }
8940 
8941 void ASTReader::ClearSwitchCaseIDs() {
8942   CurrSwitchCaseStmts->clear();
8943 }
8944 
8945 void ASTReader::ReadComments() {
8946   ASTContext &Context = getContext();
8947   std::vector<RawComment *> Comments;
8948   for (SmallVectorImpl<std::pair<BitstreamCursor,
8949                                  serialization::ModuleFile *>>::iterator
8950        I = CommentsCursors.begin(),
8951        E = CommentsCursors.end();
8952        I != E; ++I) {
8953     Comments.clear();
8954     BitstreamCursor &Cursor = I->first;
8955     serialization::ModuleFile &F = *I->second;
8956     SavedStreamPosition SavedPosition(Cursor);
8957 
8958     RecordData Record;
8959     while (true) {
8960       Expected<llvm::BitstreamEntry> MaybeEntry =
8961           Cursor.advanceSkippingSubblocks(
8962               BitstreamCursor::AF_DontPopBlockAtEnd);
8963       if (!MaybeEntry) {
8964         Error(MaybeEntry.takeError());
8965         return;
8966       }
8967       llvm::BitstreamEntry Entry = MaybeEntry.get();
8968 
8969       switch (Entry.Kind) {
8970       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
8971       case llvm::BitstreamEntry::Error:
8972         Error("malformed block record in AST file");
8973         return;
8974       case llvm::BitstreamEntry::EndBlock:
8975         goto NextCursor;
8976       case llvm::BitstreamEntry::Record:
8977         // The interesting case.
8978         break;
8979       }
8980 
8981       // Read a record.
8982       Record.clear();
8983       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
8984       if (!MaybeComment) {
8985         Error(MaybeComment.takeError());
8986         return;
8987       }
8988       switch ((CommentRecordTypes)MaybeComment.get()) {
8989       case COMMENTS_RAW_COMMENT: {
8990         unsigned Idx = 0;
8991         SourceRange SR = ReadSourceRange(F, Record, Idx);
8992         RawComment::CommentKind Kind =
8993             (RawComment::CommentKind) Record[Idx++];
8994         bool IsTrailingComment = Record[Idx++];
8995         bool IsAlmostTrailingComment = Record[Idx++];
8996         Comments.push_back(new (Context) RawComment(
8997             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
8998         break;
8999       }
9000       }
9001     }
9002   NextCursor:
9003     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9004         FileToOffsetToComment;
9005     for (RawComment *C : Comments) {
9006       SourceLocation CommentLoc = C->getBeginLoc();
9007       if (CommentLoc.isValid()) {
9008         std::pair<FileID, unsigned> Loc =
9009             SourceMgr.getDecomposedLoc(CommentLoc);
9010         if (Loc.first.isValid())
9011           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9012       }
9013     }
9014   }
9015 }
9016 
9017 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9018                                 bool IncludeSystem, bool Complain,
9019                     llvm::function_ref<void(const serialization::InputFile &IF,
9020                                             bool isSystem)> Visitor) {
9021   unsigned NumUserInputs = MF.NumUserInputFiles;
9022   unsigned NumInputs = MF.InputFilesLoaded.size();
9023   assert(NumUserInputs <= NumInputs);
9024   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9025   for (unsigned I = 0; I < N; ++I) {
9026     bool IsSystem = I >= NumUserInputs;
9027     InputFile IF = getInputFile(MF, I+1, Complain);
9028     Visitor(IF, IsSystem);
9029   }
9030 }
9031 
9032 void ASTReader::visitTopLevelModuleMaps(
9033     serialization::ModuleFile &MF,
9034     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9035   unsigned NumInputs = MF.InputFilesLoaded.size();
9036   for (unsigned I = 0; I < NumInputs; ++I) {
9037     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9038     if (IFI.TopLevelModuleMap)
9039       // FIXME: This unnecessarily re-reads the InputFileInfo.
9040       if (auto *FE = getInputFile(MF, I + 1).getFile())
9041         Visitor(FE);
9042   }
9043 }
9044 
9045 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9046   // If we know the owning module, use it.
9047   if (Module *M = D->getImportedOwningModule())
9048     return M->getFullModuleName();
9049 
9050   // Otherwise, use the name of the top-level module the decl is within.
9051   if (ModuleFile *M = getOwningModuleFile(D))
9052     return M->ModuleName;
9053 
9054   // Not from a module.
9055   return {};
9056 }
9057 
9058 void ASTReader::finishPendingActions() {
9059   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9060          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9061          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9062          !PendingUpdateRecords.empty()) {
9063     // If any identifiers with corresponding top-level declarations have
9064     // been loaded, load those declarations now.
9065     using TopLevelDeclsMap =
9066         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9067     TopLevelDeclsMap TopLevelDecls;
9068 
9069     while (!PendingIdentifierInfos.empty()) {
9070       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9071       SmallVector<uint32_t, 4> DeclIDs =
9072           std::move(PendingIdentifierInfos.back().second);
9073       PendingIdentifierInfos.pop_back();
9074 
9075       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9076     }
9077 
9078     // Load each function type that we deferred loading because it was a
9079     // deduced type that might refer to a local type declared within itself.
9080     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9081       auto *FD = PendingFunctionTypes[I].first;
9082       FD->setType(GetType(PendingFunctionTypes[I].second));
9083 
9084       // If we gave a function a deduced return type, remember that we need to
9085       // propagate that along the redeclaration chain.
9086       auto *DT = FD->getReturnType()->getContainedDeducedType();
9087       if (DT && DT->isDeduced())
9088         PendingDeducedTypeUpdates.insert(
9089             {FD->getCanonicalDecl(), FD->getReturnType()});
9090     }
9091     PendingFunctionTypes.clear();
9092 
9093     // For each decl chain that we wanted to complete while deserializing, mark
9094     // it as "still needs to be completed".
9095     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9096       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9097     }
9098     PendingIncompleteDeclChains.clear();
9099 
9100     // Load pending declaration chains.
9101     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9102       loadPendingDeclChain(PendingDeclChains[I].first,
9103                            PendingDeclChains[I].second);
9104     PendingDeclChains.clear();
9105 
9106     // Make the most recent of the top-level declarations visible.
9107     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9108            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9109       IdentifierInfo *II = TLD->first;
9110       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9111         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9112       }
9113     }
9114 
9115     // Load any pending macro definitions.
9116     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9117       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9118       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9119       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9120       // Initialize the macro history from chained-PCHs ahead of module imports.
9121       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9122            ++IDIdx) {
9123         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9124         if (!Info.M->isModule())
9125           resolvePendingMacro(II, Info);
9126       }
9127       // Handle module imports.
9128       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9129            ++IDIdx) {
9130         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9131         if (Info.M->isModule())
9132           resolvePendingMacro(II, Info);
9133       }
9134     }
9135     PendingMacroIDs.clear();
9136 
9137     // Wire up the DeclContexts for Decls that we delayed setting until
9138     // recursive loading is completed.
9139     while (!PendingDeclContextInfos.empty()) {
9140       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9141       PendingDeclContextInfos.pop_front();
9142       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9143       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9144       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9145     }
9146 
9147     // Perform any pending declaration updates.
9148     while (!PendingUpdateRecords.empty()) {
9149       auto Update = PendingUpdateRecords.pop_back_val();
9150       ReadingKindTracker ReadingKind(Read_Decl, *this);
9151       loadDeclUpdateRecords(Update);
9152     }
9153   }
9154 
9155   // At this point, all update records for loaded decls are in place, so any
9156   // fake class definitions should have become real.
9157   assert(PendingFakeDefinitionData.empty() &&
9158          "faked up a class definition but never saw the real one");
9159 
9160   // If we deserialized any C++ or Objective-C class definitions, any
9161   // Objective-C protocol definitions, or any redeclarable templates, make sure
9162   // that all redeclarations point to the definitions. Note that this can only
9163   // happen now, after the redeclaration chains have been fully wired.
9164   for (Decl *D : PendingDefinitions) {
9165     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9166       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9167         // Make sure that the TagType points at the definition.
9168         const_cast<TagType*>(TagT)->decl = TD;
9169       }
9170 
9171       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9172         for (auto *R = getMostRecentExistingDecl(RD); R;
9173              R = R->getPreviousDecl()) {
9174           assert((R == D) ==
9175                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9176                  "declaration thinks it's the definition but it isn't");
9177           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9178         }
9179       }
9180 
9181       continue;
9182     }
9183 
9184     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9185       // Make sure that the ObjCInterfaceType points at the definition.
9186       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9187         ->Decl = ID;
9188 
9189       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9190         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9191 
9192       continue;
9193     }
9194 
9195     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9196       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9197         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9198 
9199       continue;
9200     }
9201 
9202     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9203     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9204       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9205   }
9206   PendingDefinitions.clear();
9207 
9208   // Load the bodies of any functions or methods we've encountered. We do
9209   // this now (delayed) so that we can be sure that the declaration chains
9210   // have been fully wired up (hasBody relies on this).
9211   // FIXME: We shouldn't require complete redeclaration chains here.
9212   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9213                                PBEnd = PendingBodies.end();
9214        PB != PBEnd; ++PB) {
9215     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9216       // For a function defined inline within a class template, force the
9217       // canonical definition to be the one inside the canonical definition of
9218       // the template. This ensures that we instantiate from a correct view
9219       // of the template.
9220       //
9221       // Sadly we can't do this more generally: we can't be sure that all
9222       // copies of an arbitrary class definition will have the same members
9223       // defined (eg, some member functions may not be instantiated, and some
9224       // special members may or may not have been implicitly defined).
9225       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9226         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9227           continue;
9228 
9229       // FIXME: Check for =delete/=default?
9230       // FIXME: Complain about ODR violations here?
9231       const FunctionDecl *Defn = nullptr;
9232       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9233         FD->setLazyBody(PB->second);
9234       } else {
9235         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9236         mergeDefinitionVisibility(NonConstDefn, FD);
9237 
9238         if (!FD->isLateTemplateParsed() &&
9239             !NonConstDefn->isLateTemplateParsed() &&
9240             FD->getODRHash() != NonConstDefn->getODRHash()) {
9241           if (!isa<CXXMethodDecl>(FD)) {
9242             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9243           } else if (FD->getLexicalParent()->isFileContext() &&
9244                      NonConstDefn->getLexicalParent()->isFileContext()) {
9245             // Only diagnose out-of-line method definitions.  If they are
9246             // in class definitions, then an error will be generated when
9247             // processing the class bodies.
9248             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9249           }
9250         }
9251       }
9252       continue;
9253     }
9254 
9255     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9256     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9257       MD->setLazyBody(PB->second);
9258   }
9259   PendingBodies.clear();
9260 
9261   // Do some cleanup.
9262   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9263     getContext().deduplicateMergedDefinitonsFor(ND);
9264   PendingMergedDefinitionsToDeduplicate.clear();
9265 }
9266 
9267 void ASTReader::diagnoseOdrViolations() {
9268   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9269       PendingFunctionOdrMergeFailures.empty() &&
9270       PendingEnumOdrMergeFailures.empty())
9271     return;
9272 
9273   // Trigger the import of the full definition of each class that had any
9274   // odr-merging problems, so we can produce better diagnostics for them.
9275   // These updates may in turn find and diagnose some ODR failures, so take
9276   // ownership of the set first.
9277   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9278   PendingOdrMergeFailures.clear();
9279   for (auto &Merge : OdrMergeFailures) {
9280     Merge.first->buildLookup();
9281     Merge.first->decls_begin();
9282     Merge.first->bases_begin();
9283     Merge.first->vbases_begin();
9284     for (auto &RecordPair : Merge.second) {
9285       auto *RD = RecordPair.first;
9286       RD->decls_begin();
9287       RD->bases_begin();
9288       RD->vbases_begin();
9289     }
9290   }
9291 
9292   // Trigger the import of functions.
9293   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9294   PendingFunctionOdrMergeFailures.clear();
9295   for (auto &Merge : FunctionOdrMergeFailures) {
9296     Merge.first->buildLookup();
9297     Merge.first->decls_begin();
9298     Merge.first->getBody();
9299     for (auto &FD : Merge.second) {
9300       FD->buildLookup();
9301       FD->decls_begin();
9302       FD->getBody();
9303     }
9304   }
9305 
9306   // Trigger the import of enums.
9307   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9308   PendingEnumOdrMergeFailures.clear();
9309   for (auto &Merge : EnumOdrMergeFailures) {
9310     Merge.first->decls_begin();
9311     for (auto &Enum : Merge.second) {
9312       Enum->decls_begin();
9313     }
9314   }
9315 
9316   // For each declaration from a merged context, check that the canonical
9317   // definition of that context also contains a declaration of the same
9318   // entity.
9319   //
9320   // Caution: this loop does things that might invalidate iterators into
9321   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9322   while (!PendingOdrMergeChecks.empty()) {
9323     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9324 
9325     // FIXME: Skip over implicit declarations for now. This matters for things
9326     // like implicitly-declared special member functions. This isn't entirely
9327     // correct; we can end up with multiple unmerged declarations of the same
9328     // implicit entity.
9329     if (D->isImplicit())
9330       continue;
9331 
9332     DeclContext *CanonDef = D->getDeclContext();
9333 
9334     bool Found = false;
9335     const Decl *DCanon = D->getCanonicalDecl();
9336 
9337     for (auto RI : D->redecls()) {
9338       if (RI->getLexicalDeclContext() == CanonDef) {
9339         Found = true;
9340         break;
9341       }
9342     }
9343     if (Found)
9344       continue;
9345 
9346     // Quick check failed, time to do the slow thing. Note, we can't just
9347     // look up the name of D in CanonDef here, because the member that is
9348     // in CanonDef might not be found by name lookup (it might have been
9349     // replaced by a more recent declaration in the lookup table), and we
9350     // can't necessarily find it in the redeclaration chain because it might
9351     // be merely mergeable, not redeclarable.
9352     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9353     for (auto *CanonMember : CanonDef->decls()) {
9354       if (CanonMember->getCanonicalDecl() == DCanon) {
9355         // This can happen if the declaration is merely mergeable and not
9356         // actually redeclarable (we looked for redeclarations earlier).
9357         //
9358         // FIXME: We should be able to detect this more efficiently, without
9359         // pulling in all of the members of CanonDef.
9360         Found = true;
9361         break;
9362       }
9363       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9364         if (ND->getDeclName() == D->getDeclName())
9365           Candidates.push_back(ND);
9366     }
9367 
9368     if (!Found) {
9369       // The AST doesn't like TagDecls becoming invalid after they've been
9370       // completed. We only really need to mark FieldDecls as invalid here.
9371       if (!isa<TagDecl>(D))
9372         D->setInvalidDecl();
9373 
9374       // Ensure we don't accidentally recursively enter deserialization while
9375       // we're producing our diagnostic.
9376       Deserializing RecursionGuard(this);
9377 
9378       std::string CanonDefModule =
9379           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9380       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9381         << D << getOwningModuleNameForDiagnostic(D)
9382         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9383 
9384       if (Candidates.empty())
9385         Diag(cast<Decl>(CanonDef)->getLocation(),
9386              diag::note_module_odr_violation_no_possible_decls) << D;
9387       else {
9388         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9389           Diag(Candidates[I]->getLocation(),
9390                diag::note_module_odr_violation_possible_decl)
9391             << Candidates[I];
9392       }
9393 
9394       DiagnosedOdrMergeFailures.insert(CanonDef);
9395     }
9396   }
9397 
9398   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9399       EnumOdrMergeFailures.empty())
9400     return;
9401 
9402   // Ensure we don't accidentally recursively enter deserialization while
9403   // we're producing our diagnostics.
9404   Deserializing RecursionGuard(this);
9405 
9406   // Common code for hashing helpers.
9407   ODRHash Hash;
9408   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9409     Hash.clear();
9410     Hash.AddQualType(Ty);
9411     return Hash.CalculateHash();
9412   };
9413 
9414   auto ComputeODRHash = [&Hash](const Stmt *S) {
9415     assert(S);
9416     Hash.clear();
9417     Hash.AddStmt(S);
9418     return Hash.CalculateHash();
9419   };
9420 
9421   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9422     assert(D);
9423     Hash.clear();
9424     Hash.AddSubDecl(D);
9425     return Hash.CalculateHash();
9426   };
9427 
9428   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9429     Hash.clear();
9430     Hash.AddTemplateArgument(TA);
9431     return Hash.CalculateHash();
9432   };
9433 
9434   auto ComputeTemplateParameterListODRHash =
9435       [&Hash](const TemplateParameterList *TPL) {
9436         assert(TPL);
9437         Hash.clear();
9438         Hash.AddTemplateParameterList(TPL);
9439         return Hash.CalculateHash();
9440       };
9441 
9442   // Issue any pending ODR-failure diagnostics.
9443   for (auto &Merge : OdrMergeFailures) {
9444     // If we've already pointed out a specific problem with this class, don't
9445     // bother issuing a general "something's different" diagnostic.
9446     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9447       continue;
9448 
9449     bool Diagnosed = false;
9450     CXXRecordDecl *FirstRecord = Merge.first;
9451     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9452     for (auto &RecordPair : Merge.second) {
9453       CXXRecordDecl *SecondRecord = RecordPair.first;
9454       // Multiple different declarations got merged together; tell the user
9455       // where they came from.
9456       if (FirstRecord == SecondRecord)
9457         continue;
9458 
9459       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9460 
9461       auto *FirstDD = FirstRecord->DefinitionData;
9462       auto *SecondDD = RecordPair.second;
9463 
9464       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
9465 
9466       // Diagnostics from DefinitionData are emitted here.
9467       if (FirstDD != SecondDD) {
9468         enum ODRDefinitionDataDifference {
9469           NumBases,
9470           NumVBases,
9471           BaseType,
9472           BaseVirtual,
9473           BaseAccess,
9474         };
9475         auto ODRDiagError = [FirstRecord, &FirstModule,
9476                              this](SourceLocation Loc, SourceRange Range,
9477                                    ODRDefinitionDataDifference DiffType) {
9478           return Diag(Loc, diag::err_module_odr_violation_definition_data)
9479                  << FirstRecord << FirstModule.empty() << FirstModule << Range
9480                  << DiffType;
9481         };
9482         auto ODRDiagNote = [&SecondModule,
9483                             this](SourceLocation Loc, SourceRange Range,
9484                                   ODRDefinitionDataDifference DiffType) {
9485           return Diag(Loc, diag::note_module_odr_violation_definition_data)
9486                  << SecondModule << Range << DiffType;
9487         };
9488 
9489         unsigned FirstNumBases = FirstDD->NumBases;
9490         unsigned FirstNumVBases = FirstDD->NumVBases;
9491         unsigned SecondNumBases = SecondDD->NumBases;
9492         unsigned SecondNumVBases = SecondDD->NumVBases;
9493 
9494         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
9495           unsigned NumBases = DD->NumBases;
9496           if (NumBases == 0) return SourceRange();
9497           auto bases = DD->bases();
9498           return SourceRange(bases[0].getBeginLoc(),
9499                              bases[NumBases - 1].getEndLoc());
9500         };
9501 
9502         if (FirstNumBases != SecondNumBases) {
9503           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9504                        NumBases)
9505               << FirstNumBases;
9506           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9507                       NumBases)
9508               << SecondNumBases;
9509           Diagnosed = true;
9510           break;
9511         }
9512 
9513         if (FirstNumVBases != SecondNumVBases) {
9514           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9515                        NumVBases)
9516               << FirstNumVBases;
9517           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9518                       NumVBases)
9519               << SecondNumVBases;
9520           Diagnosed = true;
9521           break;
9522         }
9523 
9524         auto FirstBases = FirstDD->bases();
9525         auto SecondBases = SecondDD->bases();
9526         unsigned i = 0;
9527         for (i = 0; i < FirstNumBases; ++i) {
9528           auto FirstBase = FirstBases[i];
9529           auto SecondBase = SecondBases[i];
9530           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
9531               ComputeQualTypeODRHash(SecondBase.getType())) {
9532             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9533                          BaseType)
9534                 << (i + 1) << FirstBase.getType();
9535             ODRDiagNote(SecondRecord->getLocation(),
9536                         SecondBase.getSourceRange(), BaseType)
9537                 << (i + 1) << SecondBase.getType();
9538             break;
9539           }
9540 
9541           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
9542             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9543                          BaseVirtual)
9544                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
9545             ODRDiagNote(SecondRecord->getLocation(),
9546                         SecondBase.getSourceRange(), BaseVirtual)
9547                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
9548             break;
9549           }
9550 
9551           if (FirstBase.getAccessSpecifierAsWritten() !=
9552               SecondBase.getAccessSpecifierAsWritten()) {
9553             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9554                          BaseAccess)
9555                 << (i + 1) << FirstBase.getType()
9556                 << (int)FirstBase.getAccessSpecifierAsWritten();
9557             ODRDiagNote(SecondRecord->getLocation(),
9558                         SecondBase.getSourceRange(), BaseAccess)
9559                 << (i + 1) << SecondBase.getType()
9560                 << (int)SecondBase.getAccessSpecifierAsWritten();
9561             break;
9562           }
9563         }
9564 
9565         if (i != FirstNumBases) {
9566           Diagnosed = true;
9567           break;
9568         }
9569       }
9570 
9571       using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9572 
9573       const ClassTemplateDecl *FirstTemplate =
9574           FirstRecord->getDescribedClassTemplate();
9575       const ClassTemplateDecl *SecondTemplate =
9576           SecondRecord->getDescribedClassTemplate();
9577 
9578       assert(!FirstTemplate == !SecondTemplate &&
9579              "Both pointers should be null or non-null");
9580 
9581       enum ODRTemplateDifference {
9582         ParamEmptyName,
9583         ParamName,
9584         ParamSingleDefaultArgument,
9585         ParamDifferentDefaultArgument,
9586       };
9587 
9588       if (FirstTemplate && SecondTemplate) {
9589         DeclHashes FirstTemplateHashes;
9590         DeclHashes SecondTemplateHashes;
9591 
9592         auto PopulateTemplateParameterHashs =
9593             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9594                                      const ClassTemplateDecl *TD) {
9595               for (auto *D : TD->getTemplateParameters()->asArray()) {
9596                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9597               }
9598             };
9599 
9600         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
9601         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
9602 
9603         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
9604                "Number of template parameters should be equal.");
9605 
9606         auto FirstIt = FirstTemplateHashes.begin();
9607         auto FirstEnd = FirstTemplateHashes.end();
9608         auto SecondIt = SecondTemplateHashes.begin();
9609         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
9610           if (FirstIt->second == SecondIt->second)
9611             continue;
9612 
9613           auto ODRDiagError = [FirstRecord, &FirstModule,
9614                                this](SourceLocation Loc, SourceRange Range,
9615                                      ODRTemplateDifference DiffType) {
9616             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
9617                    << FirstRecord << FirstModule.empty() << FirstModule << Range
9618                    << DiffType;
9619           };
9620           auto ODRDiagNote = [&SecondModule,
9621                               this](SourceLocation Loc, SourceRange Range,
9622                                     ODRTemplateDifference DiffType) {
9623             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
9624                    << SecondModule << Range << DiffType;
9625           };
9626 
9627           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
9628           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
9629 
9630           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
9631                  "Parameter Decl's should be the same kind.");
9632 
9633           DeclarationName FirstName = FirstDecl->getDeclName();
9634           DeclarationName SecondName = SecondDecl->getDeclName();
9635 
9636           if (FirstName != SecondName) {
9637             const bool FirstNameEmpty =
9638                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
9639             const bool SecondNameEmpty =
9640                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
9641             assert((!FirstNameEmpty || !SecondNameEmpty) &&
9642                    "Both template parameters cannot be unnamed.");
9643             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9644                          FirstNameEmpty ? ParamEmptyName : ParamName)
9645                 << FirstName;
9646             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9647                         SecondNameEmpty ? ParamEmptyName : ParamName)
9648                 << SecondName;
9649             break;
9650           }
9651 
9652           switch (FirstDecl->getKind()) {
9653           default:
9654             llvm_unreachable("Invalid template parameter type.");
9655           case Decl::TemplateTypeParm: {
9656             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
9657             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
9658             const bool HasFirstDefaultArgument =
9659                 FirstParam->hasDefaultArgument() &&
9660                 !FirstParam->defaultArgumentWasInherited();
9661             const bool HasSecondDefaultArgument =
9662                 SecondParam->hasDefaultArgument() &&
9663                 !SecondParam->defaultArgumentWasInherited();
9664 
9665             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9666               ODRDiagError(FirstDecl->getLocation(),
9667                            FirstDecl->getSourceRange(),
9668                            ParamSingleDefaultArgument)
9669                   << HasFirstDefaultArgument;
9670               ODRDiagNote(SecondDecl->getLocation(),
9671                           SecondDecl->getSourceRange(),
9672                           ParamSingleDefaultArgument)
9673                   << HasSecondDefaultArgument;
9674               break;
9675             }
9676 
9677             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9678                    "Expecting default arguments.");
9679 
9680             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9681                          ParamDifferentDefaultArgument);
9682             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9683                         ParamDifferentDefaultArgument);
9684 
9685             break;
9686           }
9687           case Decl::NonTypeTemplateParm: {
9688             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
9689             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
9690             const bool HasFirstDefaultArgument =
9691                 FirstParam->hasDefaultArgument() &&
9692                 !FirstParam->defaultArgumentWasInherited();
9693             const bool HasSecondDefaultArgument =
9694                 SecondParam->hasDefaultArgument() &&
9695                 !SecondParam->defaultArgumentWasInherited();
9696 
9697             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9698               ODRDiagError(FirstDecl->getLocation(),
9699                            FirstDecl->getSourceRange(),
9700                            ParamSingleDefaultArgument)
9701                   << HasFirstDefaultArgument;
9702               ODRDiagNote(SecondDecl->getLocation(),
9703                           SecondDecl->getSourceRange(),
9704                           ParamSingleDefaultArgument)
9705                   << HasSecondDefaultArgument;
9706               break;
9707             }
9708 
9709             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9710                    "Expecting default arguments.");
9711 
9712             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9713                          ParamDifferentDefaultArgument);
9714             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9715                         ParamDifferentDefaultArgument);
9716 
9717             break;
9718           }
9719           case Decl::TemplateTemplateParm: {
9720             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
9721             const auto *SecondParam =
9722                 cast<TemplateTemplateParmDecl>(SecondDecl);
9723             const bool HasFirstDefaultArgument =
9724                 FirstParam->hasDefaultArgument() &&
9725                 !FirstParam->defaultArgumentWasInherited();
9726             const bool HasSecondDefaultArgument =
9727                 SecondParam->hasDefaultArgument() &&
9728                 !SecondParam->defaultArgumentWasInherited();
9729 
9730             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9731               ODRDiagError(FirstDecl->getLocation(),
9732                            FirstDecl->getSourceRange(),
9733                            ParamSingleDefaultArgument)
9734                   << HasFirstDefaultArgument;
9735               ODRDiagNote(SecondDecl->getLocation(),
9736                           SecondDecl->getSourceRange(),
9737                           ParamSingleDefaultArgument)
9738                   << HasSecondDefaultArgument;
9739               break;
9740             }
9741 
9742             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9743                    "Expecting default arguments.");
9744 
9745             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9746                          ParamDifferentDefaultArgument);
9747             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9748                         ParamDifferentDefaultArgument);
9749 
9750             break;
9751           }
9752           }
9753 
9754           break;
9755         }
9756 
9757         if (FirstIt != FirstEnd) {
9758           Diagnosed = true;
9759           break;
9760         }
9761       }
9762 
9763       DeclHashes FirstHashes;
9764       DeclHashes SecondHashes;
9765 
9766       auto PopulateHashes = [&ComputeSubDeclODRHash, FirstRecord](
9767                                 DeclHashes &Hashes, CXXRecordDecl *Record) {
9768         for (auto *D : Record->decls()) {
9769           // Due to decl merging, the first CXXRecordDecl is the parent of
9770           // Decls in both records.
9771           if (!ODRHash::isWhitelistedDecl(D, FirstRecord))
9772             continue;
9773           Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9774         }
9775       };
9776       PopulateHashes(FirstHashes, FirstRecord);
9777       PopulateHashes(SecondHashes, SecondRecord);
9778 
9779       // Used with err_module_odr_violation_mismatch_decl and
9780       // note_module_odr_violation_mismatch_decl
9781       // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9782       enum {
9783         EndOfClass,
9784         PublicSpecifer,
9785         PrivateSpecifer,
9786         ProtectedSpecifer,
9787         StaticAssert,
9788         Field,
9789         CXXMethod,
9790         TypeAlias,
9791         TypeDef,
9792         Var,
9793         Friend,
9794         FunctionTemplate,
9795         Other
9796       } FirstDiffType = Other,
9797         SecondDiffType = Other;
9798 
9799       auto DifferenceSelector = [](Decl *D) {
9800         assert(D && "valid Decl required");
9801         switch (D->getKind()) {
9802         default:
9803           return Other;
9804         case Decl::AccessSpec:
9805           switch (D->getAccess()) {
9806           case AS_public:
9807             return PublicSpecifer;
9808           case AS_private:
9809             return PrivateSpecifer;
9810           case AS_protected:
9811             return ProtectedSpecifer;
9812           case AS_none:
9813             break;
9814           }
9815           llvm_unreachable("Invalid access specifier");
9816         case Decl::StaticAssert:
9817           return StaticAssert;
9818         case Decl::Field:
9819           return Field;
9820         case Decl::CXXMethod:
9821         case Decl::CXXConstructor:
9822         case Decl::CXXDestructor:
9823           return CXXMethod;
9824         case Decl::TypeAlias:
9825           return TypeAlias;
9826         case Decl::Typedef:
9827           return TypeDef;
9828         case Decl::Var:
9829           return Var;
9830         case Decl::Friend:
9831           return Friend;
9832         case Decl::FunctionTemplate:
9833           return FunctionTemplate;
9834         }
9835       };
9836 
9837       Decl *FirstDecl = nullptr;
9838       Decl *SecondDecl = nullptr;
9839       auto FirstIt = FirstHashes.begin();
9840       auto SecondIt = SecondHashes.begin();
9841 
9842       // If there is a diagnoseable difference, FirstDiffType and
9843       // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9844       // filled in if not EndOfClass.
9845       while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9846         if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9847             FirstIt->second == SecondIt->second) {
9848           ++FirstIt;
9849           ++SecondIt;
9850           continue;
9851         }
9852 
9853         FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9854         SecondDecl = SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9855 
9856         FirstDiffType = FirstDecl ? DifferenceSelector(FirstDecl) : EndOfClass;
9857         SecondDiffType =
9858             SecondDecl ? DifferenceSelector(SecondDecl) : EndOfClass;
9859 
9860         break;
9861       }
9862 
9863       if (FirstDiffType == Other || SecondDiffType == Other) {
9864         // Reaching this point means an unexpected Decl was encountered
9865         // or no difference was detected.  This causes a generic error
9866         // message to be emitted.
9867         Diag(FirstRecord->getLocation(),
9868              diag::err_module_odr_violation_different_definitions)
9869             << FirstRecord << FirstModule.empty() << FirstModule;
9870 
9871         if (FirstDecl) {
9872           Diag(FirstDecl->getLocation(), diag::note_first_module_difference)
9873               << FirstRecord << FirstDecl->getSourceRange();
9874         }
9875 
9876         Diag(SecondRecord->getLocation(),
9877              diag::note_module_odr_violation_different_definitions)
9878             << SecondModule;
9879 
9880         if (SecondDecl) {
9881           Diag(SecondDecl->getLocation(), diag::note_second_module_difference)
9882               << SecondDecl->getSourceRange();
9883         }
9884 
9885         Diagnosed = true;
9886         break;
9887       }
9888 
9889       if (FirstDiffType != SecondDiffType) {
9890         SourceLocation FirstLoc;
9891         SourceRange FirstRange;
9892         if (FirstDiffType == EndOfClass) {
9893           FirstLoc = FirstRecord->getBraceRange().getEnd();
9894         } else {
9895           FirstLoc = FirstIt->first->getLocation();
9896           FirstRange = FirstIt->first->getSourceRange();
9897         }
9898         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9899             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9900             << FirstDiffType;
9901 
9902         SourceLocation SecondLoc;
9903         SourceRange SecondRange;
9904         if (SecondDiffType == EndOfClass) {
9905           SecondLoc = SecondRecord->getBraceRange().getEnd();
9906         } else {
9907           SecondLoc = SecondDecl->getLocation();
9908           SecondRange = SecondDecl->getSourceRange();
9909         }
9910         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9911             << SecondModule << SecondRange << SecondDiffType;
9912         Diagnosed = true;
9913         break;
9914       }
9915 
9916       assert(FirstDiffType == SecondDiffType);
9917 
9918       // Used with err_module_odr_violation_mismatch_decl_diff and
9919       // note_module_odr_violation_mismatch_decl_diff
9920       enum ODRDeclDifference {
9921         StaticAssertCondition,
9922         StaticAssertMessage,
9923         StaticAssertOnlyMessage,
9924         FieldName,
9925         FieldTypeName,
9926         FieldSingleBitField,
9927         FieldDifferentWidthBitField,
9928         FieldSingleMutable,
9929         FieldSingleInitializer,
9930         FieldDifferentInitializers,
9931         MethodName,
9932         MethodDeleted,
9933         MethodDefaulted,
9934         MethodVirtual,
9935         MethodStatic,
9936         MethodVolatile,
9937         MethodConst,
9938         MethodInline,
9939         MethodNumberParameters,
9940         MethodParameterType,
9941         MethodParameterName,
9942         MethodParameterSingleDefaultArgument,
9943         MethodParameterDifferentDefaultArgument,
9944         MethodNoTemplateArguments,
9945         MethodDifferentNumberTemplateArguments,
9946         MethodDifferentTemplateArgument,
9947         MethodSingleBody,
9948         MethodDifferentBody,
9949         TypedefName,
9950         TypedefType,
9951         VarName,
9952         VarType,
9953         VarSingleInitializer,
9954         VarDifferentInitializer,
9955         VarConstexpr,
9956         FriendTypeFunction,
9957         FriendType,
9958         FriendFunction,
9959         FunctionTemplateDifferentNumberParameters,
9960         FunctionTemplateParameterDifferentKind,
9961         FunctionTemplateParameterName,
9962         FunctionTemplateParameterSingleDefaultArgument,
9963         FunctionTemplateParameterDifferentDefaultArgument,
9964         FunctionTemplateParameterDifferentType,
9965         FunctionTemplatePackParameter,
9966       };
9967 
9968       // These lambdas have the common portions of the ODR diagnostics.  This
9969       // has the same return as Diag(), so addition parameters can be passed
9970       // in with operator<<
9971       auto ODRDiagError = [FirstRecord, &FirstModule, this](
9972           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9973         return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9974                << FirstRecord << FirstModule.empty() << FirstModule << Range
9975                << DiffType;
9976       };
9977       auto ODRDiagNote = [&SecondModule, this](
9978           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9979         return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9980                << SecondModule << Range << DiffType;
9981       };
9982 
9983       switch (FirstDiffType) {
9984       case Other:
9985       case EndOfClass:
9986       case PublicSpecifer:
9987       case PrivateSpecifer:
9988       case ProtectedSpecifer:
9989         llvm_unreachable("Invalid diff type");
9990 
9991       case StaticAssert: {
9992         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
9993         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
9994 
9995         Expr *FirstExpr = FirstSA->getAssertExpr();
9996         Expr *SecondExpr = SecondSA->getAssertExpr();
9997         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
9998         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
9999         if (FirstODRHash != SecondODRHash) {
10000           ODRDiagError(FirstExpr->getBeginLoc(), FirstExpr->getSourceRange(),
10001                        StaticAssertCondition);
10002           ODRDiagNote(SecondExpr->getBeginLoc(), SecondExpr->getSourceRange(),
10003                       StaticAssertCondition);
10004           Diagnosed = true;
10005           break;
10006         }
10007 
10008         StringLiteral *FirstStr = FirstSA->getMessage();
10009         StringLiteral *SecondStr = SecondSA->getMessage();
10010         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10011         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10012           SourceLocation FirstLoc, SecondLoc;
10013           SourceRange FirstRange, SecondRange;
10014           if (FirstStr) {
10015             FirstLoc = FirstStr->getBeginLoc();
10016             FirstRange = FirstStr->getSourceRange();
10017           } else {
10018             FirstLoc = FirstSA->getBeginLoc();
10019             FirstRange = FirstSA->getSourceRange();
10020           }
10021           if (SecondStr) {
10022             SecondLoc = SecondStr->getBeginLoc();
10023             SecondRange = SecondStr->getSourceRange();
10024           } else {
10025             SecondLoc = SecondSA->getBeginLoc();
10026             SecondRange = SecondSA->getSourceRange();
10027           }
10028           ODRDiagError(FirstLoc, FirstRange, StaticAssertOnlyMessage)
10029               << (FirstStr == nullptr);
10030           ODRDiagNote(SecondLoc, SecondRange, StaticAssertOnlyMessage)
10031               << (SecondStr == nullptr);
10032           Diagnosed = true;
10033           break;
10034         }
10035 
10036         if (FirstStr && SecondStr &&
10037             FirstStr->getString() != SecondStr->getString()) {
10038           ODRDiagError(FirstStr->getBeginLoc(), FirstStr->getSourceRange(),
10039                        StaticAssertMessage);
10040           ODRDiagNote(SecondStr->getBeginLoc(), SecondStr->getSourceRange(),
10041                       StaticAssertMessage);
10042           Diagnosed = true;
10043           break;
10044         }
10045         break;
10046       }
10047       case Field: {
10048         FieldDecl *FirstField = cast<FieldDecl>(FirstDecl);
10049         FieldDecl *SecondField = cast<FieldDecl>(SecondDecl);
10050         IdentifierInfo *FirstII = FirstField->getIdentifier();
10051         IdentifierInfo *SecondII = SecondField->getIdentifier();
10052         if (FirstII->getName() != SecondII->getName()) {
10053           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10054                        FieldName)
10055               << FirstII;
10056           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10057                       FieldName)
10058               << SecondII;
10059 
10060           Diagnosed = true;
10061           break;
10062         }
10063 
10064         assert(getContext().hasSameType(FirstField->getType(),
10065                                         SecondField->getType()));
10066 
10067         QualType FirstType = FirstField->getType();
10068         QualType SecondType = SecondField->getType();
10069         if (ComputeQualTypeODRHash(FirstType) !=
10070             ComputeQualTypeODRHash(SecondType)) {
10071           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10072                        FieldTypeName)
10073               << FirstII << FirstType;
10074           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10075                       FieldTypeName)
10076               << SecondII << SecondType;
10077 
10078           Diagnosed = true;
10079           break;
10080         }
10081 
10082         const bool IsFirstBitField = FirstField->isBitField();
10083         const bool IsSecondBitField = SecondField->isBitField();
10084         if (IsFirstBitField != IsSecondBitField) {
10085           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10086                        FieldSingleBitField)
10087               << FirstII << IsFirstBitField;
10088           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10089                       FieldSingleBitField)
10090               << SecondII << IsSecondBitField;
10091           Diagnosed = true;
10092           break;
10093         }
10094 
10095         if (IsFirstBitField && IsSecondBitField) {
10096           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10097                        FieldDifferentWidthBitField)
10098               << FirstII << FirstField->getBitWidth()->getSourceRange();
10099           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10100                       FieldDifferentWidthBitField)
10101               << SecondII << SecondField->getBitWidth()->getSourceRange();
10102           Diagnosed = true;
10103           break;
10104         }
10105 
10106         const bool IsFirstMutable = FirstField->isMutable();
10107         const bool IsSecondMutable = SecondField->isMutable();
10108         if (IsFirstMutable != IsSecondMutable) {
10109           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10110                        FieldSingleMutable)
10111               << FirstII << IsFirstMutable;
10112           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10113                       FieldSingleMutable)
10114               << SecondII << IsSecondMutable;
10115           Diagnosed = true;
10116           break;
10117         }
10118 
10119         const Expr *FirstInitializer = FirstField->getInClassInitializer();
10120         const Expr *SecondInitializer = SecondField->getInClassInitializer();
10121         if ((!FirstInitializer && SecondInitializer) ||
10122             (FirstInitializer && !SecondInitializer)) {
10123           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10124                        FieldSingleInitializer)
10125               << FirstII << (FirstInitializer != nullptr);
10126           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10127                       FieldSingleInitializer)
10128               << SecondII << (SecondInitializer != nullptr);
10129           Diagnosed = true;
10130           break;
10131         }
10132 
10133         if (FirstInitializer && SecondInitializer) {
10134           unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
10135           unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
10136           if (FirstInitHash != SecondInitHash) {
10137             ODRDiagError(FirstField->getLocation(),
10138                          FirstField->getSourceRange(),
10139                          FieldDifferentInitializers)
10140                 << FirstII << FirstInitializer->getSourceRange();
10141             ODRDiagNote(SecondField->getLocation(),
10142                         SecondField->getSourceRange(),
10143                         FieldDifferentInitializers)
10144                 << SecondII << SecondInitializer->getSourceRange();
10145             Diagnosed = true;
10146             break;
10147           }
10148         }
10149 
10150         break;
10151       }
10152       case CXXMethod: {
10153         enum {
10154           DiagMethod,
10155           DiagConstructor,
10156           DiagDestructor,
10157         } FirstMethodType,
10158             SecondMethodType;
10159         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10160           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10161           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10162           return DiagMethod;
10163         };
10164         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10165         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10166         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10167         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10168         auto FirstName = FirstMethod->getDeclName();
10169         auto SecondName = SecondMethod->getDeclName();
10170         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10171           ODRDiagError(FirstMethod->getLocation(),
10172                        FirstMethod->getSourceRange(), MethodName)
10173               << FirstMethodType << FirstName;
10174           ODRDiagNote(SecondMethod->getLocation(),
10175                       SecondMethod->getSourceRange(), MethodName)
10176               << SecondMethodType << SecondName;
10177 
10178           Diagnosed = true;
10179           break;
10180         }
10181 
10182         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10183         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10184         if (FirstDeleted != SecondDeleted) {
10185           ODRDiagError(FirstMethod->getLocation(),
10186                        FirstMethod->getSourceRange(), MethodDeleted)
10187               << FirstMethodType << FirstName << FirstDeleted;
10188 
10189           ODRDiagNote(SecondMethod->getLocation(),
10190                       SecondMethod->getSourceRange(), MethodDeleted)
10191               << SecondMethodType << SecondName << SecondDeleted;
10192           Diagnosed = true;
10193           break;
10194         }
10195 
10196         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10197         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10198         if (FirstDefaulted != SecondDefaulted) {
10199           ODRDiagError(FirstMethod->getLocation(),
10200                        FirstMethod->getSourceRange(), MethodDefaulted)
10201               << FirstMethodType << FirstName << FirstDefaulted;
10202 
10203           ODRDiagNote(SecondMethod->getLocation(),
10204                       SecondMethod->getSourceRange(), MethodDefaulted)
10205               << SecondMethodType << SecondName << SecondDefaulted;
10206           Diagnosed = true;
10207           break;
10208         }
10209 
10210         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10211         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10212         const bool FirstPure = FirstMethod->isPure();
10213         const bool SecondPure = SecondMethod->isPure();
10214         if ((FirstVirtual || SecondVirtual) &&
10215             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10216           ODRDiagError(FirstMethod->getLocation(),
10217                        FirstMethod->getSourceRange(), MethodVirtual)
10218               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10219           ODRDiagNote(SecondMethod->getLocation(),
10220                       SecondMethod->getSourceRange(), MethodVirtual)
10221               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10222           Diagnosed = true;
10223           break;
10224         }
10225 
10226         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10227         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10228         // class needs to be checked instead.
10229         const auto FirstStorage = FirstMethod->getStorageClass();
10230         const auto SecondStorage = SecondMethod->getStorageClass();
10231         const bool FirstStatic = FirstStorage == SC_Static;
10232         const bool SecondStatic = SecondStorage == SC_Static;
10233         if (FirstStatic != SecondStatic) {
10234           ODRDiagError(FirstMethod->getLocation(),
10235                        FirstMethod->getSourceRange(), MethodStatic)
10236               << FirstMethodType << FirstName << FirstStatic;
10237           ODRDiagNote(SecondMethod->getLocation(),
10238                       SecondMethod->getSourceRange(), MethodStatic)
10239               << SecondMethodType << SecondName << SecondStatic;
10240           Diagnosed = true;
10241           break;
10242         }
10243 
10244         const bool FirstVolatile = FirstMethod->isVolatile();
10245         const bool SecondVolatile = SecondMethod->isVolatile();
10246         if (FirstVolatile != SecondVolatile) {
10247           ODRDiagError(FirstMethod->getLocation(),
10248                        FirstMethod->getSourceRange(), MethodVolatile)
10249               << FirstMethodType << FirstName << FirstVolatile;
10250           ODRDiagNote(SecondMethod->getLocation(),
10251                       SecondMethod->getSourceRange(), MethodVolatile)
10252               << SecondMethodType << SecondName << SecondVolatile;
10253           Diagnosed = true;
10254           break;
10255         }
10256 
10257         const bool FirstConst = FirstMethod->isConst();
10258         const bool SecondConst = SecondMethod->isConst();
10259         if (FirstConst != SecondConst) {
10260           ODRDiagError(FirstMethod->getLocation(),
10261                        FirstMethod->getSourceRange(), MethodConst)
10262               << FirstMethodType << FirstName << FirstConst;
10263           ODRDiagNote(SecondMethod->getLocation(),
10264                       SecondMethod->getSourceRange(), MethodConst)
10265               << SecondMethodType << SecondName << SecondConst;
10266           Diagnosed = true;
10267           break;
10268         }
10269 
10270         const bool FirstInline = FirstMethod->isInlineSpecified();
10271         const bool SecondInline = SecondMethod->isInlineSpecified();
10272         if (FirstInline != SecondInline) {
10273           ODRDiagError(FirstMethod->getLocation(),
10274                        FirstMethod->getSourceRange(), MethodInline)
10275               << FirstMethodType << FirstName << FirstInline;
10276           ODRDiagNote(SecondMethod->getLocation(),
10277                       SecondMethod->getSourceRange(), MethodInline)
10278               << SecondMethodType << SecondName << SecondInline;
10279           Diagnosed = true;
10280           break;
10281         }
10282 
10283         const unsigned FirstNumParameters = FirstMethod->param_size();
10284         const unsigned SecondNumParameters = SecondMethod->param_size();
10285         if (FirstNumParameters != SecondNumParameters) {
10286           ODRDiagError(FirstMethod->getLocation(),
10287                        FirstMethod->getSourceRange(), MethodNumberParameters)
10288               << FirstMethodType << FirstName << FirstNumParameters;
10289           ODRDiagNote(SecondMethod->getLocation(),
10290                       SecondMethod->getSourceRange(), MethodNumberParameters)
10291               << SecondMethodType << SecondName << SecondNumParameters;
10292           Diagnosed = true;
10293           break;
10294         }
10295 
10296         // Need this status boolean to know when break out of the switch.
10297         bool ParameterMismatch = false;
10298         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10299           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10300           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10301 
10302           QualType FirstParamType = FirstParam->getType();
10303           QualType SecondParamType = SecondParam->getType();
10304           if (FirstParamType != SecondParamType &&
10305               ComputeQualTypeODRHash(FirstParamType) !=
10306                   ComputeQualTypeODRHash(SecondParamType)) {
10307             if (const DecayedType *ParamDecayedType =
10308                     FirstParamType->getAs<DecayedType>()) {
10309               ODRDiagError(FirstMethod->getLocation(),
10310                            FirstMethod->getSourceRange(), MethodParameterType)
10311                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10312                   << true << ParamDecayedType->getOriginalType();
10313             } else {
10314               ODRDiagError(FirstMethod->getLocation(),
10315                            FirstMethod->getSourceRange(), MethodParameterType)
10316                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10317                   << false;
10318             }
10319 
10320             if (const DecayedType *ParamDecayedType =
10321                     SecondParamType->getAs<DecayedType>()) {
10322               ODRDiagNote(SecondMethod->getLocation(),
10323                           SecondMethod->getSourceRange(), MethodParameterType)
10324                   << SecondMethodType << SecondName << (I + 1)
10325                   << SecondParamType << true
10326                   << ParamDecayedType->getOriginalType();
10327             } else {
10328               ODRDiagNote(SecondMethod->getLocation(),
10329                           SecondMethod->getSourceRange(), MethodParameterType)
10330                   << SecondMethodType << SecondName << (I + 1)
10331                   << SecondParamType << false;
10332             }
10333             ParameterMismatch = true;
10334             break;
10335           }
10336 
10337           DeclarationName FirstParamName = FirstParam->getDeclName();
10338           DeclarationName SecondParamName = SecondParam->getDeclName();
10339           if (FirstParamName != SecondParamName) {
10340             ODRDiagError(FirstMethod->getLocation(),
10341                          FirstMethod->getSourceRange(), MethodParameterName)
10342                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10343             ODRDiagNote(SecondMethod->getLocation(),
10344                         SecondMethod->getSourceRange(), MethodParameterName)
10345                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10346             ParameterMismatch = true;
10347             break;
10348           }
10349 
10350           const Expr *FirstInit = FirstParam->getInit();
10351           const Expr *SecondInit = SecondParam->getInit();
10352           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10353             ODRDiagError(FirstMethod->getLocation(),
10354                          FirstMethod->getSourceRange(),
10355                          MethodParameterSingleDefaultArgument)
10356                 << FirstMethodType << FirstName << (I + 1)
10357                 << (FirstInit == nullptr)
10358                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10359             ODRDiagNote(SecondMethod->getLocation(),
10360                         SecondMethod->getSourceRange(),
10361                         MethodParameterSingleDefaultArgument)
10362                 << SecondMethodType << SecondName << (I + 1)
10363                 << (SecondInit == nullptr)
10364                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10365             ParameterMismatch = true;
10366             break;
10367           }
10368 
10369           if (FirstInit && SecondInit &&
10370               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10371             ODRDiagError(FirstMethod->getLocation(),
10372                          FirstMethod->getSourceRange(),
10373                          MethodParameterDifferentDefaultArgument)
10374                 << FirstMethodType << FirstName << (I + 1)
10375                 << FirstInit->getSourceRange();
10376             ODRDiagNote(SecondMethod->getLocation(),
10377                         SecondMethod->getSourceRange(),
10378                         MethodParameterDifferentDefaultArgument)
10379                 << SecondMethodType << SecondName << (I + 1)
10380                 << SecondInit->getSourceRange();
10381             ParameterMismatch = true;
10382             break;
10383 
10384           }
10385         }
10386 
10387         if (ParameterMismatch) {
10388           Diagnosed = true;
10389           break;
10390         }
10391 
10392         const auto *FirstTemplateArgs =
10393             FirstMethod->getTemplateSpecializationArgs();
10394         const auto *SecondTemplateArgs =
10395             SecondMethod->getTemplateSpecializationArgs();
10396 
10397         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10398             (!FirstTemplateArgs && SecondTemplateArgs)) {
10399           ODRDiagError(FirstMethod->getLocation(),
10400                        FirstMethod->getSourceRange(), MethodNoTemplateArguments)
10401               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10402           ODRDiagNote(SecondMethod->getLocation(),
10403                       SecondMethod->getSourceRange(), MethodNoTemplateArguments)
10404               << SecondMethodType << SecondName
10405               << (SecondTemplateArgs != nullptr);
10406 
10407           Diagnosed = true;
10408           break;
10409         }
10410 
10411         if (FirstTemplateArgs && SecondTemplateArgs) {
10412           // Remove pack expansions from argument list.
10413           auto ExpandTemplateArgumentList =
10414               [](const TemplateArgumentList *TAL) {
10415                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10416                 for (const TemplateArgument &TA : TAL->asArray()) {
10417                   if (TA.getKind() != TemplateArgument::Pack) {
10418                     ExpandedList.push_back(&TA);
10419                     continue;
10420                   }
10421                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10422                     ExpandedList.push_back(&PackTA);
10423                   }
10424                 }
10425                 return ExpandedList;
10426               };
10427           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10428               ExpandTemplateArgumentList(FirstTemplateArgs);
10429           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10430               ExpandTemplateArgumentList(SecondTemplateArgs);
10431 
10432           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10433             ODRDiagError(FirstMethod->getLocation(),
10434                          FirstMethod->getSourceRange(),
10435                          MethodDifferentNumberTemplateArguments)
10436                 << FirstMethodType << FirstName
10437                 << (unsigned)FirstExpandedList.size();
10438             ODRDiagNote(SecondMethod->getLocation(),
10439                         SecondMethod->getSourceRange(),
10440                         MethodDifferentNumberTemplateArguments)
10441                 << SecondMethodType << SecondName
10442                 << (unsigned)SecondExpandedList.size();
10443 
10444             Diagnosed = true;
10445             break;
10446           }
10447 
10448           bool TemplateArgumentMismatch = false;
10449           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10450             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10451                                    &SecondTA = *SecondExpandedList[i];
10452             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10453                 ComputeTemplateArgumentODRHash(SecondTA)) {
10454               continue;
10455             }
10456 
10457             ODRDiagError(FirstMethod->getLocation(),
10458                          FirstMethod->getSourceRange(),
10459                          MethodDifferentTemplateArgument)
10460                 << FirstMethodType << FirstName << FirstTA << i + 1;
10461             ODRDiagNote(SecondMethod->getLocation(),
10462                         SecondMethod->getSourceRange(),
10463                         MethodDifferentTemplateArgument)
10464                 << SecondMethodType << SecondName << SecondTA << i + 1;
10465 
10466             TemplateArgumentMismatch = true;
10467             break;
10468           }
10469 
10470           if (TemplateArgumentMismatch) {
10471             Diagnosed = true;
10472             break;
10473           }
10474         }
10475 
10476         // Compute the hash of the method as if it has no body.
10477         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10478           Hash.clear();
10479           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10480           return Hash.CalculateHash();
10481         };
10482 
10483         // Compare the hash generated to the hash stored.  A difference means
10484         // that a body was present in the original source.  Due to merging,
10485         // the stardard way of detecting a body will not work.
10486         const bool HasFirstBody =
10487             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10488         const bool HasSecondBody =
10489             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10490 
10491         if (HasFirstBody != HasSecondBody) {
10492           ODRDiagError(FirstMethod->getLocation(),
10493                        FirstMethod->getSourceRange(), MethodSingleBody)
10494               << FirstMethodType << FirstName << HasFirstBody;
10495           ODRDiagNote(SecondMethod->getLocation(),
10496                       SecondMethod->getSourceRange(), MethodSingleBody)
10497               << SecondMethodType << SecondName << HasSecondBody;
10498           Diagnosed = true;
10499           break;
10500         }
10501 
10502         if (HasFirstBody && HasSecondBody) {
10503           ODRDiagError(FirstMethod->getLocation(),
10504                        FirstMethod->getSourceRange(), MethodDifferentBody)
10505               << FirstMethodType << FirstName;
10506           ODRDiagNote(SecondMethod->getLocation(),
10507                       SecondMethod->getSourceRange(), MethodDifferentBody)
10508               << SecondMethodType << SecondName;
10509           Diagnosed = true;
10510           break;
10511         }
10512 
10513         break;
10514       }
10515       case TypeAlias:
10516       case TypeDef: {
10517         TypedefNameDecl *FirstTD = cast<TypedefNameDecl>(FirstDecl);
10518         TypedefNameDecl *SecondTD = cast<TypedefNameDecl>(SecondDecl);
10519         auto FirstName = FirstTD->getDeclName();
10520         auto SecondName = SecondTD->getDeclName();
10521         if (FirstName != SecondName) {
10522           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10523                        TypedefName)
10524               << (FirstDiffType == TypeAlias) << FirstName;
10525           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10526                       TypedefName)
10527               << (FirstDiffType == TypeAlias) << SecondName;
10528           Diagnosed = true;
10529           break;
10530         }
10531 
10532         QualType FirstType = FirstTD->getUnderlyingType();
10533         QualType SecondType = SecondTD->getUnderlyingType();
10534         if (ComputeQualTypeODRHash(FirstType) !=
10535             ComputeQualTypeODRHash(SecondType)) {
10536           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10537                        TypedefType)
10538               << (FirstDiffType == TypeAlias) << FirstName << FirstType;
10539           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10540                       TypedefType)
10541               << (FirstDiffType == TypeAlias) << SecondName << SecondType;
10542           Diagnosed = true;
10543           break;
10544         }
10545         break;
10546       }
10547       case Var: {
10548         VarDecl *FirstVD = cast<VarDecl>(FirstDecl);
10549         VarDecl *SecondVD = cast<VarDecl>(SecondDecl);
10550         auto FirstName = FirstVD->getDeclName();
10551         auto SecondName = SecondVD->getDeclName();
10552         if (FirstName != SecondName) {
10553           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10554                        VarName)
10555               << FirstName;
10556           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10557                       VarName)
10558               << SecondName;
10559           Diagnosed = true;
10560           break;
10561         }
10562 
10563         QualType FirstType = FirstVD->getType();
10564         QualType SecondType = SecondVD->getType();
10565         if (ComputeQualTypeODRHash(FirstType) !=
10566                         ComputeQualTypeODRHash(SecondType)) {
10567           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10568                        VarType)
10569               << FirstName << FirstType;
10570           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10571                       VarType)
10572               << SecondName << SecondType;
10573           Diagnosed = true;
10574           break;
10575         }
10576 
10577         const Expr *FirstInit = FirstVD->getInit();
10578         const Expr *SecondInit = SecondVD->getInit();
10579         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10580           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10581                        VarSingleInitializer)
10582               << FirstName << (FirstInit == nullptr)
10583               << (FirstInit ? FirstInit->getSourceRange(): SourceRange());
10584           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10585                       VarSingleInitializer)
10586               << SecondName << (SecondInit == nullptr)
10587               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10588           Diagnosed = true;
10589           break;
10590         }
10591 
10592         if (FirstInit && SecondInit &&
10593             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10594           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10595                        VarDifferentInitializer)
10596               << FirstName << FirstInit->getSourceRange();
10597           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10598                       VarDifferentInitializer)
10599               << SecondName << SecondInit->getSourceRange();
10600           Diagnosed = true;
10601           break;
10602         }
10603 
10604         const bool FirstIsConstexpr = FirstVD->isConstexpr();
10605         const bool SecondIsConstexpr = SecondVD->isConstexpr();
10606         if (FirstIsConstexpr != SecondIsConstexpr) {
10607           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10608                        VarConstexpr)
10609               << FirstName << FirstIsConstexpr;
10610           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10611                       VarConstexpr)
10612               << SecondName << SecondIsConstexpr;
10613           Diagnosed = true;
10614           break;
10615         }
10616         break;
10617       }
10618       case Friend: {
10619         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10620         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10621 
10622         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10623         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10624 
10625         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10626         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10627 
10628         if (FirstND && SecondND) {
10629           ODRDiagError(FirstFriend->getFriendLoc(),
10630                        FirstFriend->getSourceRange(), FriendFunction)
10631               << FirstND;
10632           ODRDiagNote(SecondFriend->getFriendLoc(),
10633                       SecondFriend->getSourceRange(), FriendFunction)
10634               << SecondND;
10635 
10636           Diagnosed = true;
10637           break;
10638         }
10639 
10640         if (FirstTSI && SecondTSI) {
10641           QualType FirstFriendType = FirstTSI->getType();
10642           QualType SecondFriendType = SecondTSI->getType();
10643           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10644                  ComputeQualTypeODRHash(SecondFriendType));
10645           ODRDiagError(FirstFriend->getFriendLoc(),
10646                        FirstFriend->getSourceRange(), FriendType)
10647               << FirstFriendType;
10648           ODRDiagNote(SecondFriend->getFriendLoc(),
10649                       SecondFriend->getSourceRange(), FriendType)
10650               << SecondFriendType;
10651           Diagnosed = true;
10652           break;
10653         }
10654 
10655         ODRDiagError(FirstFriend->getFriendLoc(), FirstFriend->getSourceRange(),
10656                      FriendTypeFunction)
10657             << (FirstTSI == nullptr);
10658         ODRDiagNote(SecondFriend->getFriendLoc(),
10659                     SecondFriend->getSourceRange(), FriendTypeFunction)
10660             << (SecondTSI == nullptr);
10661 
10662         Diagnosed = true;
10663         break;
10664       }
10665       case FunctionTemplate: {
10666         FunctionTemplateDecl *FirstTemplate =
10667             cast<FunctionTemplateDecl>(FirstDecl);
10668         FunctionTemplateDecl *SecondTemplate =
10669             cast<FunctionTemplateDecl>(SecondDecl);
10670 
10671         TemplateParameterList *FirstTPL =
10672             FirstTemplate->getTemplateParameters();
10673         TemplateParameterList *SecondTPL =
10674             SecondTemplate->getTemplateParameters();
10675 
10676         if (FirstTPL->size() != SecondTPL->size()) {
10677           ODRDiagError(FirstTemplate->getLocation(),
10678                        FirstTemplate->getSourceRange(),
10679                        FunctionTemplateDifferentNumberParameters)
10680               << FirstTemplate << FirstTPL->size();
10681           ODRDiagNote(SecondTemplate->getLocation(),
10682                       SecondTemplate->getSourceRange(),
10683                       FunctionTemplateDifferentNumberParameters)
10684               << SecondTemplate  << SecondTPL->size();
10685 
10686           Diagnosed = true;
10687           break;
10688         }
10689 
10690         bool ParameterMismatch = false;
10691         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10692           NamedDecl *FirstParam = FirstTPL->getParam(i);
10693           NamedDecl *SecondParam = SecondTPL->getParam(i);
10694 
10695           if (FirstParam->getKind() != SecondParam->getKind()) {
10696             enum {
10697               TemplateTypeParameter,
10698               NonTypeTemplateParameter,
10699               TemplateTemplateParameter,
10700             };
10701             auto GetParamType = [](NamedDecl *D) {
10702               switch (D->getKind()) {
10703                 default:
10704                   llvm_unreachable("Unexpected template parameter type");
10705                 case Decl::TemplateTypeParm:
10706                   return TemplateTypeParameter;
10707                 case Decl::NonTypeTemplateParm:
10708                   return NonTypeTemplateParameter;
10709                 case Decl::TemplateTemplateParm:
10710                   return TemplateTemplateParameter;
10711               }
10712             };
10713 
10714             ODRDiagError(FirstTemplate->getLocation(),
10715                          FirstTemplate->getSourceRange(),
10716                          FunctionTemplateParameterDifferentKind)
10717                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10718             ODRDiagNote(SecondTemplate->getLocation(),
10719                         SecondTemplate->getSourceRange(),
10720                         FunctionTemplateParameterDifferentKind)
10721                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10722 
10723             ParameterMismatch = true;
10724             break;
10725           }
10726 
10727           if (FirstParam->getName() != SecondParam->getName()) {
10728             ODRDiagError(FirstTemplate->getLocation(),
10729                          FirstTemplate->getSourceRange(),
10730                          FunctionTemplateParameterName)
10731                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10732                 << FirstParam;
10733             ODRDiagNote(SecondTemplate->getLocation(),
10734                         SecondTemplate->getSourceRange(),
10735                         FunctionTemplateParameterName)
10736                 << SecondTemplate << (i + 1)
10737                 << (bool)SecondParam->getIdentifier() << SecondParam;
10738             ParameterMismatch = true;
10739             break;
10740           }
10741 
10742           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10743               isa<TemplateTypeParmDecl>(SecondParam)) {
10744             TemplateTypeParmDecl *FirstTTPD =
10745                 cast<TemplateTypeParmDecl>(FirstParam);
10746             TemplateTypeParmDecl *SecondTTPD =
10747                 cast<TemplateTypeParmDecl>(SecondParam);
10748             bool HasFirstDefaultArgument =
10749                 FirstTTPD->hasDefaultArgument() &&
10750                 !FirstTTPD->defaultArgumentWasInherited();
10751             bool HasSecondDefaultArgument =
10752                 SecondTTPD->hasDefaultArgument() &&
10753                 !SecondTTPD->defaultArgumentWasInherited();
10754             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10755               ODRDiagError(FirstTemplate->getLocation(),
10756                            FirstTemplate->getSourceRange(),
10757                            FunctionTemplateParameterSingleDefaultArgument)
10758                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10759               ODRDiagNote(SecondTemplate->getLocation(),
10760                           SecondTemplate->getSourceRange(),
10761                           FunctionTemplateParameterSingleDefaultArgument)
10762                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10763               ParameterMismatch = true;
10764               break;
10765             }
10766 
10767             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10768               QualType FirstType = FirstTTPD->getDefaultArgument();
10769               QualType SecondType = SecondTTPD->getDefaultArgument();
10770               if (ComputeQualTypeODRHash(FirstType) !=
10771                   ComputeQualTypeODRHash(SecondType)) {
10772                 ODRDiagError(FirstTemplate->getLocation(),
10773                              FirstTemplate->getSourceRange(),
10774                              FunctionTemplateParameterDifferentDefaultArgument)
10775                     << FirstTemplate << (i + 1) << FirstType;
10776                 ODRDiagNote(SecondTemplate->getLocation(),
10777                             SecondTemplate->getSourceRange(),
10778                             FunctionTemplateParameterDifferentDefaultArgument)
10779                     << SecondTemplate << (i + 1) << SecondType;
10780                 ParameterMismatch = true;
10781                 break;
10782               }
10783             }
10784 
10785             if (FirstTTPD->isParameterPack() !=
10786                 SecondTTPD->isParameterPack()) {
10787               ODRDiagError(FirstTemplate->getLocation(),
10788                            FirstTemplate->getSourceRange(),
10789                            FunctionTemplatePackParameter)
10790                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10791               ODRDiagNote(SecondTemplate->getLocation(),
10792                           SecondTemplate->getSourceRange(),
10793                           FunctionTemplatePackParameter)
10794                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10795               ParameterMismatch = true;
10796               break;
10797             }
10798           }
10799 
10800           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10801               isa<TemplateTemplateParmDecl>(SecondParam)) {
10802             TemplateTemplateParmDecl *FirstTTPD =
10803                 cast<TemplateTemplateParmDecl>(FirstParam);
10804             TemplateTemplateParmDecl *SecondTTPD =
10805                 cast<TemplateTemplateParmDecl>(SecondParam);
10806 
10807             TemplateParameterList *FirstTPL =
10808                 FirstTTPD->getTemplateParameters();
10809             TemplateParameterList *SecondTPL =
10810                 SecondTTPD->getTemplateParameters();
10811 
10812             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
10813                 ComputeTemplateParameterListODRHash(SecondTPL)) {
10814               ODRDiagError(FirstTemplate->getLocation(),
10815                            FirstTemplate->getSourceRange(),
10816                            FunctionTemplateParameterDifferentType)
10817                   << FirstTemplate << (i + 1);
10818               ODRDiagNote(SecondTemplate->getLocation(),
10819                           SecondTemplate->getSourceRange(),
10820                           FunctionTemplateParameterDifferentType)
10821                   << SecondTemplate << (i + 1);
10822               ParameterMismatch = true;
10823               break;
10824             }
10825 
10826             bool HasFirstDefaultArgument =
10827                 FirstTTPD->hasDefaultArgument() &&
10828                 !FirstTTPD->defaultArgumentWasInherited();
10829             bool HasSecondDefaultArgument =
10830                 SecondTTPD->hasDefaultArgument() &&
10831                 !SecondTTPD->defaultArgumentWasInherited();
10832             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10833               ODRDiagError(FirstTemplate->getLocation(),
10834                            FirstTemplate->getSourceRange(),
10835                            FunctionTemplateParameterSingleDefaultArgument)
10836                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10837               ODRDiagNote(SecondTemplate->getLocation(),
10838                           SecondTemplate->getSourceRange(),
10839                           FunctionTemplateParameterSingleDefaultArgument)
10840                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10841               ParameterMismatch = true;
10842               break;
10843             }
10844 
10845             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10846               TemplateArgument FirstTA =
10847                   FirstTTPD->getDefaultArgument().getArgument();
10848               TemplateArgument SecondTA =
10849                   SecondTTPD->getDefaultArgument().getArgument();
10850               if (ComputeTemplateArgumentODRHash(FirstTA) !=
10851                   ComputeTemplateArgumentODRHash(SecondTA)) {
10852                 ODRDiagError(FirstTemplate->getLocation(),
10853                              FirstTemplate->getSourceRange(),
10854                              FunctionTemplateParameterDifferentDefaultArgument)
10855                     << FirstTemplate << (i + 1) << FirstTA;
10856                 ODRDiagNote(SecondTemplate->getLocation(),
10857                             SecondTemplate->getSourceRange(),
10858                             FunctionTemplateParameterDifferentDefaultArgument)
10859                     << SecondTemplate << (i + 1) << SecondTA;
10860                 ParameterMismatch = true;
10861                 break;
10862               }
10863             }
10864 
10865             if (FirstTTPD->isParameterPack() !=
10866                 SecondTTPD->isParameterPack()) {
10867               ODRDiagError(FirstTemplate->getLocation(),
10868                            FirstTemplate->getSourceRange(),
10869                            FunctionTemplatePackParameter)
10870                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10871               ODRDiagNote(SecondTemplate->getLocation(),
10872                           SecondTemplate->getSourceRange(),
10873                           FunctionTemplatePackParameter)
10874                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10875               ParameterMismatch = true;
10876               break;
10877             }
10878           }
10879 
10880           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
10881               isa<NonTypeTemplateParmDecl>(SecondParam)) {
10882             NonTypeTemplateParmDecl *FirstNTTPD =
10883                 cast<NonTypeTemplateParmDecl>(FirstParam);
10884             NonTypeTemplateParmDecl *SecondNTTPD =
10885                 cast<NonTypeTemplateParmDecl>(SecondParam);
10886 
10887             QualType FirstType = FirstNTTPD->getType();
10888             QualType SecondType = SecondNTTPD->getType();
10889             if (ComputeQualTypeODRHash(FirstType) !=
10890                 ComputeQualTypeODRHash(SecondType)) {
10891               ODRDiagError(FirstTemplate->getLocation(),
10892                            FirstTemplate->getSourceRange(),
10893                            FunctionTemplateParameterDifferentType)
10894                   << FirstTemplate << (i + 1);
10895               ODRDiagNote(SecondTemplate->getLocation(),
10896                           SecondTemplate->getSourceRange(),
10897                           FunctionTemplateParameterDifferentType)
10898                   << SecondTemplate << (i + 1);
10899               ParameterMismatch = true;
10900               break;
10901             }
10902 
10903             bool HasFirstDefaultArgument =
10904                 FirstNTTPD->hasDefaultArgument() &&
10905                 !FirstNTTPD->defaultArgumentWasInherited();
10906             bool HasSecondDefaultArgument =
10907                 SecondNTTPD->hasDefaultArgument() &&
10908                 !SecondNTTPD->defaultArgumentWasInherited();
10909             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10910               ODRDiagError(FirstTemplate->getLocation(),
10911                            FirstTemplate->getSourceRange(),
10912                            FunctionTemplateParameterSingleDefaultArgument)
10913                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10914               ODRDiagNote(SecondTemplate->getLocation(),
10915                           SecondTemplate->getSourceRange(),
10916                           FunctionTemplateParameterSingleDefaultArgument)
10917                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10918               ParameterMismatch = true;
10919               break;
10920             }
10921 
10922             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10923               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
10924               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
10925               if (ComputeODRHash(FirstDefaultArgument) !=
10926                   ComputeODRHash(SecondDefaultArgument)) {
10927                 ODRDiagError(FirstTemplate->getLocation(),
10928                              FirstTemplate->getSourceRange(),
10929                              FunctionTemplateParameterDifferentDefaultArgument)
10930                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
10931                 ODRDiagNote(SecondTemplate->getLocation(),
10932                             SecondTemplate->getSourceRange(),
10933                             FunctionTemplateParameterDifferentDefaultArgument)
10934                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
10935                 ParameterMismatch = true;
10936                 break;
10937               }
10938             }
10939 
10940             if (FirstNTTPD->isParameterPack() !=
10941                 SecondNTTPD->isParameterPack()) {
10942               ODRDiagError(FirstTemplate->getLocation(),
10943                            FirstTemplate->getSourceRange(),
10944                            FunctionTemplatePackParameter)
10945                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
10946               ODRDiagNote(SecondTemplate->getLocation(),
10947                           SecondTemplate->getSourceRange(),
10948                           FunctionTemplatePackParameter)
10949                   << SecondTemplate << (i + 1)
10950                   << SecondNTTPD->isParameterPack();
10951               ParameterMismatch = true;
10952               break;
10953             }
10954           }
10955         }
10956 
10957         if (ParameterMismatch) {
10958           Diagnosed = true;
10959           break;
10960         }
10961 
10962         break;
10963       }
10964       }
10965 
10966       if (Diagnosed)
10967         continue;
10968 
10969       Diag(FirstDecl->getLocation(),
10970            diag::err_module_odr_violation_mismatch_decl_unknown)
10971           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
10972           << FirstDecl->getSourceRange();
10973       Diag(SecondDecl->getLocation(),
10974            diag::note_module_odr_violation_mismatch_decl_unknown)
10975           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
10976       Diagnosed = true;
10977     }
10978 
10979     if (!Diagnosed) {
10980       // All definitions are updates to the same declaration. This happens if a
10981       // module instantiates the declaration of a class template specialization
10982       // and two or more other modules instantiate its definition.
10983       //
10984       // FIXME: Indicate which modules had instantiations of this definition.
10985       // FIXME: How can this even happen?
10986       Diag(Merge.first->getLocation(),
10987            diag::err_module_odr_violation_different_instantiations)
10988         << Merge.first;
10989     }
10990   }
10991 
10992   // Issue ODR failures diagnostics for functions.
10993   for (auto &Merge : FunctionOdrMergeFailures) {
10994     enum ODRFunctionDifference {
10995       ReturnType,
10996       ParameterName,
10997       ParameterType,
10998       ParameterSingleDefaultArgument,
10999       ParameterDifferentDefaultArgument,
11000       FunctionBody,
11001     };
11002 
11003     FunctionDecl *FirstFunction = Merge.first;
11004     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11005 
11006     bool Diagnosed = false;
11007     for (auto &SecondFunction : Merge.second) {
11008 
11009       if (FirstFunction == SecondFunction)
11010         continue;
11011 
11012       std::string SecondModule =
11013           getOwningModuleNameForDiagnostic(SecondFunction);
11014 
11015       auto ODRDiagError = [FirstFunction, &FirstModule,
11016                            this](SourceLocation Loc, SourceRange Range,
11017                                  ODRFunctionDifference DiffType) {
11018         return Diag(Loc, diag::err_module_odr_violation_function)
11019                << FirstFunction << FirstModule.empty() << FirstModule << Range
11020                << DiffType;
11021       };
11022       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11023                                                SourceRange Range,
11024                                                ODRFunctionDifference DiffType) {
11025         return Diag(Loc, diag::note_module_odr_violation_function)
11026                << SecondModule << Range << DiffType;
11027       };
11028 
11029       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11030           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11031         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11032                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11033             << FirstFunction->getReturnType();
11034         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11035                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11036             << SecondFunction->getReturnType();
11037         Diagnosed = true;
11038         break;
11039       }
11040 
11041       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11042              "Merged functions with different number of parameters");
11043 
11044       auto ParamSize = FirstFunction->param_size();
11045       bool ParameterMismatch = false;
11046       for (unsigned I = 0; I < ParamSize; ++I) {
11047         auto *FirstParam = FirstFunction->getParamDecl(I);
11048         auto *SecondParam = SecondFunction->getParamDecl(I);
11049 
11050         assert(getContext().hasSameType(FirstParam->getType(),
11051                                       SecondParam->getType()) &&
11052                "Merged function has different parameter types.");
11053 
11054         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11055           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11056                        ParameterName)
11057               << I + 1 << FirstParam->getDeclName();
11058           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11059                       ParameterName)
11060               << I + 1 << SecondParam->getDeclName();
11061           ParameterMismatch = true;
11062           break;
11063         };
11064 
11065         QualType FirstParamType = FirstParam->getType();
11066         QualType SecondParamType = SecondParam->getType();
11067         if (FirstParamType != SecondParamType &&
11068             ComputeQualTypeODRHash(FirstParamType) !=
11069                 ComputeQualTypeODRHash(SecondParamType)) {
11070           if (const DecayedType *ParamDecayedType =
11071                   FirstParamType->getAs<DecayedType>()) {
11072             ODRDiagError(FirstParam->getLocation(),
11073                          FirstParam->getSourceRange(), ParameterType)
11074                 << (I + 1) << FirstParamType << true
11075                 << ParamDecayedType->getOriginalType();
11076           } else {
11077             ODRDiagError(FirstParam->getLocation(),
11078                          FirstParam->getSourceRange(), ParameterType)
11079                 << (I + 1) << FirstParamType << false;
11080           }
11081 
11082           if (const DecayedType *ParamDecayedType =
11083                   SecondParamType->getAs<DecayedType>()) {
11084             ODRDiagNote(SecondParam->getLocation(),
11085                         SecondParam->getSourceRange(), ParameterType)
11086                 << (I + 1) << SecondParamType << true
11087                 << ParamDecayedType->getOriginalType();
11088           } else {
11089             ODRDiagNote(SecondParam->getLocation(),
11090                         SecondParam->getSourceRange(), ParameterType)
11091                 << (I + 1) << SecondParamType << false;
11092           }
11093           ParameterMismatch = true;
11094           break;
11095         }
11096 
11097         const Expr *FirstInit = FirstParam->getInit();
11098         const Expr *SecondInit = SecondParam->getInit();
11099         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11100           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11101                        ParameterSingleDefaultArgument)
11102               << (I + 1) << (FirstInit == nullptr)
11103               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11104           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11105                       ParameterSingleDefaultArgument)
11106               << (I + 1) << (SecondInit == nullptr)
11107               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11108           ParameterMismatch = true;
11109           break;
11110         }
11111 
11112         if (FirstInit && SecondInit &&
11113             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11114           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11115                        ParameterDifferentDefaultArgument)
11116               << (I + 1) << FirstInit->getSourceRange();
11117           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11118                       ParameterDifferentDefaultArgument)
11119               << (I + 1) << SecondInit->getSourceRange();
11120           ParameterMismatch = true;
11121           break;
11122         }
11123 
11124         assert(ComputeSubDeclODRHash(FirstParam) ==
11125                    ComputeSubDeclODRHash(SecondParam) &&
11126                "Undiagnosed parameter difference.");
11127       }
11128 
11129       if (ParameterMismatch) {
11130         Diagnosed = true;
11131         break;
11132       }
11133 
11134       // If no error has been generated before now, assume the problem is in
11135       // the body and generate a message.
11136       ODRDiagError(FirstFunction->getLocation(),
11137                    FirstFunction->getSourceRange(), FunctionBody);
11138       ODRDiagNote(SecondFunction->getLocation(),
11139                   SecondFunction->getSourceRange(), FunctionBody);
11140       Diagnosed = true;
11141       break;
11142     }
11143     (void)Diagnosed;
11144     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11145   }
11146 
11147   // Issue ODR failures diagnostics for enums.
11148   for (auto &Merge : EnumOdrMergeFailures) {
11149     enum ODREnumDifference {
11150       SingleScopedEnum,
11151       EnumTagKeywordMismatch,
11152       SingleSpecifiedType,
11153       DifferentSpecifiedTypes,
11154       DifferentNumberEnumConstants,
11155       EnumConstantName,
11156       EnumConstantSingleInitilizer,
11157       EnumConstantDifferentInitilizer,
11158     };
11159 
11160     // If we've already pointed out a specific problem with this enum, don't
11161     // bother issuing a general "something's different" diagnostic.
11162     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11163       continue;
11164 
11165     EnumDecl *FirstEnum = Merge.first;
11166     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11167 
11168     using DeclHashes =
11169         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11170     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11171                               DeclHashes &Hashes, EnumDecl *Enum) {
11172       for (auto *D : Enum->decls()) {
11173         // Due to decl merging, the first EnumDecl is the parent of
11174         // Decls in both records.
11175         if (!ODRHash::isWhitelistedDecl(D, FirstEnum))
11176           continue;
11177         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11178         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11179                             ComputeSubDeclODRHash(D));
11180       }
11181     };
11182     DeclHashes FirstHashes;
11183     PopulateHashes(FirstHashes, FirstEnum);
11184     bool Diagnosed = false;
11185     for (auto &SecondEnum : Merge.second) {
11186 
11187       if (FirstEnum == SecondEnum)
11188         continue;
11189 
11190       std::string SecondModule =
11191           getOwningModuleNameForDiagnostic(SecondEnum);
11192 
11193       auto ODRDiagError = [FirstEnum, &FirstModule,
11194                            this](SourceLocation Loc, SourceRange Range,
11195                                  ODREnumDifference DiffType) {
11196         return Diag(Loc, diag::err_module_odr_violation_enum)
11197                << FirstEnum << FirstModule.empty() << FirstModule << Range
11198                << DiffType;
11199       };
11200       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11201                                                SourceRange Range,
11202                                                ODREnumDifference DiffType) {
11203         return Diag(Loc, diag::note_module_odr_violation_enum)
11204                << SecondModule << Range << DiffType;
11205       };
11206 
11207       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11208         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11209                      SingleScopedEnum)
11210             << FirstEnum->isScoped();
11211         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11212                     SingleScopedEnum)
11213             << SecondEnum->isScoped();
11214         Diagnosed = true;
11215         continue;
11216       }
11217 
11218       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11219         if (FirstEnum->isScopedUsingClassTag() !=
11220             SecondEnum->isScopedUsingClassTag()) {
11221           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11222                        EnumTagKeywordMismatch)
11223               << FirstEnum->isScopedUsingClassTag();
11224           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11225                       EnumTagKeywordMismatch)
11226               << SecondEnum->isScopedUsingClassTag();
11227           Diagnosed = true;
11228           continue;
11229         }
11230       }
11231 
11232       QualType FirstUnderlyingType =
11233           FirstEnum->getIntegerTypeSourceInfo()
11234               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11235               : QualType();
11236       QualType SecondUnderlyingType =
11237           SecondEnum->getIntegerTypeSourceInfo()
11238               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11239               : QualType();
11240       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11241           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11242                        SingleSpecifiedType)
11243               << !FirstUnderlyingType.isNull();
11244           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11245                       SingleSpecifiedType)
11246               << !SecondUnderlyingType.isNull();
11247           Diagnosed = true;
11248           continue;
11249       }
11250 
11251       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11252         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11253             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11254           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11255                        DifferentSpecifiedTypes)
11256               << FirstUnderlyingType;
11257           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11258                       DifferentSpecifiedTypes)
11259               << SecondUnderlyingType;
11260           Diagnosed = true;
11261           continue;
11262         }
11263       }
11264 
11265       DeclHashes SecondHashes;
11266       PopulateHashes(SecondHashes, SecondEnum);
11267 
11268       if (FirstHashes.size() != SecondHashes.size()) {
11269         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11270                      DifferentNumberEnumConstants)
11271             << (int)FirstHashes.size();
11272         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11273                     DifferentNumberEnumConstants)
11274             << (int)SecondHashes.size();
11275         Diagnosed = true;
11276         continue;
11277       }
11278 
11279       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11280         if (FirstHashes[I].second == SecondHashes[I].second)
11281           continue;
11282         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11283         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11284 
11285         if (FirstEnumConstant->getDeclName() !=
11286             SecondEnumConstant->getDeclName()) {
11287 
11288           ODRDiagError(FirstEnumConstant->getLocation(),
11289                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11290               << I + 1 << FirstEnumConstant;
11291           ODRDiagNote(SecondEnumConstant->getLocation(),
11292                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11293               << I + 1 << SecondEnumConstant;
11294           Diagnosed = true;
11295           break;
11296         }
11297 
11298         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11299         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11300         if (!FirstInit && !SecondInit)
11301           continue;
11302 
11303         if (!FirstInit || !SecondInit) {
11304           ODRDiagError(FirstEnumConstant->getLocation(),
11305                        FirstEnumConstant->getSourceRange(),
11306                        EnumConstantSingleInitilizer)
11307               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11308           ODRDiagNote(SecondEnumConstant->getLocation(),
11309                       SecondEnumConstant->getSourceRange(),
11310                       EnumConstantSingleInitilizer)
11311               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11312           Diagnosed = true;
11313           break;
11314         }
11315 
11316         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11317           ODRDiagError(FirstEnumConstant->getLocation(),
11318                        FirstEnumConstant->getSourceRange(),
11319                        EnumConstantDifferentInitilizer)
11320               << I + 1 << FirstEnumConstant;
11321           ODRDiagNote(SecondEnumConstant->getLocation(),
11322                       SecondEnumConstant->getSourceRange(),
11323                       EnumConstantDifferentInitilizer)
11324               << I + 1 << SecondEnumConstant;
11325           Diagnosed = true;
11326           break;
11327         }
11328       }
11329     }
11330 
11331     (void)Diagnosed;
11332     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11333   }
11334 }
11335 
11336 void ASTReader::StartedDeserializing() {
11337   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11338     ReadTimer->startTimer();
11339 }
11340 
11341 void ASTReader::FinishedDeserializing() {
11342   assert(NumCurrentElementsDeserializing &&
11343          "FinishedDeserializing not paired with StartedDeserializing");
11344   if (NumCurrentElementsDeserializing == 1) {
11345     // We decrease NumCurrentElementsDeserializing only after pending actions
11346     // are finished, to avoid recursively re-calling finishPendingActions().
11347     finishPendingActions();
11348   }
11349   --NumCurrentElementsDeserializing;
11350 
11351   if (NumCurrentElementsDeserializing == 0) {
11352     // Propagate exception specification and deduced type updates along
11353     // redeclaration chains.
11354     //
11355     // We do this now rather than in finishPendingActions because we want to
11356     // be able to walk the complete redeclaration chains of the updated decls.
11357     while (!PendingExceptionSpecUpdates.empty() ||
11358            !PendingDeducedTypeUpdates.empty()) {
11359       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11360       PendingExceptionSpecUpdates.clear();
11361       for (auto Update : ESUpdates) {
11362         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11363         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11364         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11365         if (auto *Listener = getContext().getASTMutationListener())
11366           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11367         for (auto *Redecl : Update.second->redecls())
11368           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11369       }
11370 
11371       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11372       PendingDeducedTypeUpdates.clear();
11373       for (auto Update : DTUpdates) {
11374         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11375         // FIXME: If the return type is already deduced, check that it matches.
11376         getContext().adjustDeducedFunctionResultType(Update.first,
11377                                                      Update.second);
11378       }
11379     }
11380 
11381     if (ReadTimer)
11382       ReadTimer->stopTimer();
11383 
11384     diagnoseOdrViolations();
11385 
11386     // We are not in recursive loading, so it's safe to pass the "interesting"
11387     // decls to the consumer.
11388     if (Consumer)
11389       PassInterestingDeclsToConsumer();
11390   }
11391 }
11392 
11393 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11394   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11395     // Remove any fake results before adding any real ones.
11396     auto It = PendingFakeLookupResults.find(II);
11397     if (It != PendingFakeLookupResults.end()) {
11398       for (auto *ND : It->second)
11399         SemaObj->IdResolver.RemoveDecl(ND);
11400       // FIXME: this works around module+PCH performance issue.
11401       // Rather than erase the result from the map, which is O(n), just clear
11402       // the vector of NamedDecls.
11403       It->second.clear();
11404     }
11405   }
11406 
11407   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11408     SemaObj->TUScope->AddDecl(D);
11409   } else if (SemaObj->TUScope) {
11410     // Adding the decl to IdResolver may have failed because it was already in
11411     // (even though it was not added in scope). If it is already in, make sure
11412     // it gets in the scope as well.
11413     if (std::find(SemaObj->IdResolver.begin(Name),
11414                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11415       SemaObj->TUScope->AddDecl(D);
11416   }
11417 }
11418 
11419 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11420                      ASTContext *Context,
11421                      const PCHContainerReader &PCHContainerRdr,
11422                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11423                      StringRef isysroot, bool DisableValidation,
11424                      bool AllowASTWithCompilerErrors,
11425                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11426                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11427                      std::unique_ptr<llvm::Timer> ReadTimer)
11428     : Listener(DisableValidation
11429                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11430                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11431       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11432       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11433       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11434                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11435       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11436       DisableValidation(DisableValidation),
11437       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11438       AllowConfigurationMismatch(AllowConfigurationMismatch),
11439       ValidateSystemInputs(ValidateSystemInputs),
11440       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11441       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11442   SourceMgr.setExternalSLocEntrySource(this);
11443 
11444   for (const auto &Ext : Extensions) {
11445     auto BlockName = Ext->getExtensionMetadata().BlockName;
11446     auto Known = ModuleFileExtensions.find(BlockName);
11447     if (Known != ModuleFileExtensions.end()) {
11448       Diags.Report(diag::warn_duplicate_module_file_extension)
11449         << BlockName;
11450       continue;
11451     }
11452 
11453     ModuleFileExtensions.insert({BlockName, Ext});
11454   }
11455 }
11456 
11457 ASTReader::~ASTReader() {
11458   if (OwnsDeserializationListener)
11459     delete DeserializationListener;
11460 }
11461 
11462 IdentifierResolver &ASTReader::getIdResolver() {
11463   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11464 }
11465 
11466 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11467                                                unsigned AbbrevID) {
11468   Idx = 0;
11469   Record.clear();
11470   return Cursor.readRecord(AbbrevID, Record);
11471 }
11472 //===----------------------------------------------------------------------===//
11473 //// OMPClauseReader implementation
11474 ////===----------------------------------------------------------------------===//
11475 
11476 // This has to be in namespace clang because it's friended by all
11477 // of the OMP clauses.
11478 namespace clang {
11479 
11480 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11481   ASTRecordReader &Record;
11482   ASTContext &Context;
11483 
11484 public:
11485   OMPClauseReader(ASTRecordReader &Record)
11486       : Record(Record), Context(Record.getContext()) {}
11487 
11488 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *C);
11489 #include "clang/Basic/OpenMPKinds.def"
11490   OMPClause *readClause();
11491   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11492   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11493 };
11494 
11495 } // end namespace clang
11496 
11497 OMPClause *ASTRecordReader::readOMPClause() {
11498   return OMPClauseReader(*this).readClause();
11499 }
11500 
11501 OMPClause *OMPClauseReader::readClause() {
11502   OMPClause *C = nullptr;
11503   switch (Record.readInt()) {
11504   case OMPC_if:
11505     C = new (Context) OMPIfClause();
11506     break;
11507   case OMPC_final:
11508     C = new (Context) OMPFinalClause();
11509     break;
11510   case OMPC_num_threads:
11511     C = new (Context) OMPNumThreadsClause();
11512     break;
11513   case OMPC_safelen:
11514     C = new (Context) OMPSafelenClause();
11515     break;
11516   case OMPC_simdlen:
11517     C = new (Context) OMPSimdlenClause();
11518     break;
11519   case OMPC_allocator:
11520     C = new (Context) OMPAllocatorClause();
11521     break;
11522   case OMPC_collapse:
11523     C = new (Context) OMPCollapseClause();
11524     break;
11525   case OMPC_default:
11526     C = new (Context) OMPDefaultClause();
11527     break;
11528   case OMPC_proc_bind:
11529     C = new (Context) OMPProcBindClause();
11530     break;
11531   case OMPC_schedule:
11532     C = new (Context) OMPScheduleClause();
11533     break;
11534   case OMPC_ordered:
11535     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11536     break;
11537   case OMPC_nowait:
11538     C = new (Context) OMPNowaitClause();
11539     break;
11540   case OMPC_untied:
11541     C = new (Context) OMPUntiedClause();
11542     break;
11543   case OMPC_mergeable:
11544     C = new (Context) OMPMergeableClause();
11545     break;
11546   case OMPC_read:
11547     C = new (Context) OMPReadClause();
11548     break;
11549   case OMPC_write:
11550     C = new (Context) OMPWriteClause();
11551     break;
11552   case OMPC_update:
11553     C = new (Context) OMPUpdateClause();
11554     break;
11555   case OMPC_capture:
11556     C = new (Context) OMPCaptureClause();
11557     break;
11558   case OMPC_seq_cst:
11559     C = new (Context) OMPSeqCstClause();
11560     break;
11561   case OMPC_threads:
11562     C = new (Context) OMPThreadsClause();
11563     break;
11564   case OMPC_simd:
11565     C = new (Context) OMPSIMDClause();
11566     break;
11567   case OMPC_nogroup:
11568     C = new (Context) OMPNogroupClause();
11569     break;
11570   case OMPC_unified_address:
11571     C = new (Context) OMPUnifiedAddressClause();
11572     break;
11573   case OMPC_unified_shared_memory:
11574     C = new (Context) OMPUnifiedSharedMemoryClause();
11575     break;
11576   case OMPC_reverse_offload:
11577     C = new (Context) OMPReverseOffloadClause();
11578     break;
11579   case OMPC_dynamic_allocators:
11580     C = new (Context) OMPDynamicAllocatorsClause();
11581     break;
11582   case OMPC_atomic_default_mem_order:
11583     C = new (Context) OMPAtomicDefaultMemOrderClause();
11584     break;
11585  case OMPC_private:
11586     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11587     break;
11588   case OMPC_firstprivate:
11589     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11590     break;
11591   case OMPC_lastprivate:
11592     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11593     break;
11594   case OMPC_shared:
11595     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11596     break;
11597   case OMPC_reduction:
11598     C = OMPReductionClause::CreateEmpty(Context, Record.readInt());
11599     break;
11600   case OMPC_task_reduction:
11601     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11602     break;
11603   case OMPC_in_reduction:
11604     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11605     break;
11606   case OMPC_linear:
11607     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11608     break;
11609   case OMPC_aligned:
11610     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11611     break;
11612   case OMPC_copyin:
11613     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11614     break;
11615   case OMPC_copyprivate:
11616     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11617     break;
11618   case OMPC_flush:
11619     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11620     break;
11621   case OMPC_depend: {
11622     unsigned NumVars = Record.readInt();
11623     unsigned NumLoops = Record.readInt();
11624     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11625     break;
11626   }
11627   case OMPC_device:
11628     C = new (Context) OMPDeviceClause();
11629     break;
11630   case OMPC_map: {
11631     OMPMappableExprListSizeTy Sizes;
11632     Sizes.NumVars = Record.readInt();
11633     Sizes.NumUniqueDeclarations = Record.readInt();
11634     Sizes.NumComponentLists = Record.readInt();
11635     Sizes.NumComponents = Record.readInt();
11636     C = OMPMapClause::CreateEmpty(Context, Sizes);
11637     break;
11638   }
11639   case OMPC_num_teams:
11640     C = new (Context) OMPNumTeamsClause();
11641     break;
11642   case OMPC_thread_limit:
11643     C = new (Context) OMPThreadLimitClause();
11644     break;
11645   case OMPC_priority:
11646     C = new (Context) OMPPriorityClause();
11647     break;
11648   case OMPC_grainsize:
11649     C = new (Context) OMPGrainsizeClause();
11650     break;
11651   case OMPC_num_tasks:
11652     C = new (Context) OMPNumTasksClause();
11653     break;
11654   case OMPC_hint:
11655     C = new (Context) OMPHintClause();
11656     break;
11657   case OMPC_dist_schedule:
11658     C = new (Context) OMPDistScheduleClause();
11659     break;
11660   case OMPC_defaultmap:
11661     C = new (Context) OMPDefaultmapClause();
11662     break;
11663   case OMPC_to: {
11664     OMPMappableExprListSizeTy Sizes;
11665     Sizes.NumVars = Record.readInt();
11666     Sizes.NumUniqueDeclarations = Record.readInt();
11667     Sizes.NumComponentLists = Record.readInt();
11668     Sizes.NumComponents = Record.readInt();
11669     C = OMPToClause::CreateEmpty(Context, Sizes);
11670     break;
11671   }
11672   case OMPC_from: {
11673     OMPMappableExprListSizeTy Sizes;
11674     Sizes.NumVars = Record.readInt();
11675     Sizes.NumUniqueDeclarations = Record.readInt();
11676     Sizes.NumComponentLists = Record.readInt();
11677     Sizes.NumComponents = Record.readInt();
11678     C = OMPFromClause::CreateEmpty(Context, Sizes);
11679     break;
11680   }
11681   case OMPC_use_device_ptr: {
11682     OMPMappableExprListSizeTy Sizes;
11683     Sizes.NumVars = Record.readInt();
11684     Sizes.NumUniqueDeclarations = Record.readInt();
11685     Sizes.NumComponentLists = Record.readInt();
11686     Sizes.NumComponents = Record.readInt();
11687     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11688     break;
11689   }
11690   case OMPC_is_device_ptr: {
11691     OMPMappableExprListSizeTy Sizes;
11692     Sizes.NumVars = Record.readInt();
11693     Sizes.NumUniqueDeclarations = Record.readInt();
11694     Sizes.NumComponentLists = Record.readInt();
11695     Sizes.NumComponents = Record.readInt();
11696     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11697     break;
11698   }
11699   case OMPC_allocate:
11700     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11701     break;
11702   case OMPC_nontemporal:
11703     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11704     break;
11705   }
11706   assert(C && "Unknown OMPClause type");
11707 
11708   Visit(C);
11709   C->setLocStart(Record.readSourceLocation());
11710   C->setLocEnd(Record.readSourceLocation());
11711 
11712   return C;
11713 }
11714 
11715 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11716   C->setPreInitStmt(Record.readSubStmt(),
11717                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11718 }
11719 
11720 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11721   VisitOMPClauseWithPreInit(C);
11722   C->setPostUpdateExpr(Record.readSubExpr());
11723 }
11724 
11725 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11726   VisitOMPClauseWithPreInit(C);
11727   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
11728   C->setNameModifierLoc(Record.readSourceLocation());
11729   C->setColonLoc(Record.readSourceLocation());
11730   C->setCondition(Record.readSubExpr());
11731   C->setLParenLoc(Record.readSourceLocation());
11732 }
11733 
11734 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
11735   VisitOMPClauseWithPreInit(C);
11736   C->setCondition(Record.readSubExpr());
11737   C->setLParenLoc(Record.readSourceLocation());
11738 }
11739 
11740 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
11741   VisitOMPClauseWithPreInit(C);
11742   C->setNumThreads(Record.readSubExpr());
11743   C->setLParenLoc(Record.readSourceLocation());
11744 }
11745 
11746 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
11747   C->setSafelen(Record.readSubExpr());
11748   C->setLParenLoc(Record.readSourceLocation());
11749 }
11750 
11751 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
11752   C->setSimdlen(Record.readSubExpr());
11753   C->setLParenLoc(Record.readSourceLocation());
11754 }
11755 
11756 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
11757   C->setAllocator(Record.readExpr());
11758   C->setLParenLoc(Record.readSourceLocation());
11759 }
11760 
11761 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
11762   C->setNumForLoops(Record.readSubExpr());
11763   C->setLParenLoc(Record.readSourceLocation());
11764 }
11765 
11766 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
11767   C->setDefaultKind(
11768        static_cast<OpenMPDefaultClauseKind>(Record.readInt()));
11769   C->setLParenLoc(Record.readSourceLocation());
11770   C->setDefaultKindKwLoc(Record.readSourceLocation());
11771 }
11772 
11773 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
11774   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
11775   C->setLParenLoc(Record.readSourceLocation());
11776   C->setProcBindKindKwLoc(Record.readSourceLocation());
11777 }
11778 
11779 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
11780   VisitOMPClauseWithPreInit(C);
11781   C->setScheduleKind(
11782        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
11783   C->setFirstScheduleModifier(
11784       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
11785   C->setSecondScheduleModifier(
11786       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
11787   C->setChunkSize(Record.readSubExpr());
11788   C->setLParenLoc(Record.readSourceLocation());
11789   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
11790   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
11791   C->setScheduleKindLoc(Record.readSourceLocation());
11792   C->setCommaLoc(Record.readSourceLocation());
11793 }
11794 
11795 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
11796   C->setNumForLoops(Record.readSubExpr());
11797   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
11798     C->setLoopNumIterations(I, Record.readSubExpr());
11799   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
11800     C->setLoopCounter(I, Record.readSubExpr());
11801   C->setLParenLoc(Record.readSourceLocation());
11802 }
11803 
11804 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
11805 
11806 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
11807 
11808 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
11809 
11810 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
11811 
11812 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
11813 
11814 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *) {}
11815 
11816 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
11817 
11818 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
11819 
11820 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
11821 
11822 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
11823 
11824 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
11825 
11826 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
11827 
11828 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
11829     OMPUnifiedSharedMemoryClause *) {}
11830 
11831 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
11832 
11833 void
11834 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
11835 }
11836 
11837 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
11838     OMPAtomicDefaultMemOrderClause *C) {
11839   C->setAtomicDefaultMemOrderKind(
11840       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
11841   C->setLParenLoc(Record.readSourceLocation());
11842   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
11843 }
11844 
11845 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
11846   C->setLParenLoc(Record.readSourceLocation());
11847   unsigned NumVars = C->varlist_size();
11848   SmallVector<Expr *, 16> Vars;
11849   Vars.reserve(NumVars);
11850   for (unsigned i = 0; i != NumVars; ++i)
11851     Vars.push_back(Record.readSubExpr());
11852   C->setVarRefs(Vars);
11853   Vars.clear();
11854   for (unsigned i = 0; i != NumVars; ++i)
11855     Vars.push_back(Record.readSubExpr());
11856   C->setPrivateCopies(Vars);
11857 }
11858 
11859 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
11860   VisitOMPClauseWithPreInit(C);
11861   C->setLParenLoc(Record.readSourceLocation());
11862   unsigned NumVars = C->varlist_size();
11863   SmallVector<Expr *, 16> Vars;
11864   Vars.reserve(NumVars);
11865   for (unsigned i = 0; i != NumVars; ++i)
11866     Vars.push_back(Record.readSubExpr());
11867   C->setVarRefs(Vars);
11868   Vars.clear();
11869   for (unsigned i = 0; i != NumVars; ++i)
11870     Vars.push_back(Record.readSubExpr());
11871   C->setPrivateCopies(Vars);
11872   Vars.clear();
11873   for (unsigned i = 0; i != NumVars; ++i)
11874     Vars.push_back(Record.readSubExpr());
11875   C->setInits(Vars);
11876 }
11877 
11878 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
11879   VisitOMPClauseWithPostUpdate(C);
11880   C->setLParenLoc(Record.readSourceLocation());
11881   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
11882   C->setKindLoc(Record.readSourceLocation());
11883   C->setColonLoc(Record.readSourceLocation());
11884   unsigned NumVars = C->varlist_size();
11885   SmallVector<Expr *, 16> Vars;
11886   Vars.reserve(NumVars);
11887   for (unsigned i = 0; i != NumVars; ++i)
11888     Vars.push_back(Record.readSubExpr());
11889   C->setVarRefs(Vars);
11890   Vars.clear();
11891   for (unsigned i = 0; i != NumVars; ++i)
11892     Vars.push_back(Record.readSubExpr());
11893   C->setPrivateCopies(Vars);
11894   Vars.clear();
11895   for (unsigned i = 0; i != NumVars; ++i)
11896     Vars.push_back(Record.readSubExpr());
11897   C->setSourceExprs(Vars);
11898   Vars.clear();
11899   for (unsigned i = 0; i != NumVars; ++i)
11900     Vars.push_back(Record.readSubExpr());
11901   C->setDestinationExprs(Vars);
11902   Vars.clear();
11903   for (unsigned i = 0; i != NumVars; ++i)
11904     Vars.push_back(Record.readSubExpr());
11905   C->setAssignmentOps(Vars);
11906 }
11907 
11908 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
11909   C->setLParenLoc(Record.readSourceLocation());
11910   unsigned NumVars = C->varlist_size();
11911   SmallVector<Expr *, 16> Vars;
11912   Vars.reserve(NumVars);
11913   for (unsigned i = 0; i != NumVars; ++i)
11914     Vars.push_back(Record.readSubExpr());
11915   C->setVarRefs(Vars);
11916 }
11917 
11918 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
11919   VisitOMPClauseWithPostUpdate(C);
11920   C->setLParenLoc(Record.readSourceLocation());
11921   C->setColonLoc(Record.readSourceLocation());
11922   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
11923   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
11924   C->setQualifierLoc(NNSL);
11925   C->setNameInfo(DNI);
11926 
11927   unsigned NumVars = C->varlist_size();
11928   SmallVector<Expr *, 16> Vars;
11929   Vars.reserve(NumVars);
11930   for (unsigned i = 0; i != NumVars; ++i)
11931     Vars.push_back(Record.readSubExpr());
11932   C->setVarRefs(Vars);
11933   Vars.clear();
11934   for (unsigned i = 0; i != NumVars; ++i)
11935     Vars.push_back(Record.readSubExpr());
11936   C->setPrivates(Vars);
11937   Vars.clear();
11938   for (unsigned i = 0; i != NumVars; ++i)
11939     Vars.push_back(Record.readSubExpr());
11940   C->setLHSExprs(Vars);
11941   Vars.clear();
11942   for (unsigned i = 0; i != NumVars; ++i)
11943     Vars.push_back(Record.readSubExpr());
11944   C->setRHSExprs(Vars);
11945   Vars.clear();
11946   for (unsigned i = 0; i != NumVars; ++i)
11947     Vars.push_back(Record.readSubExpr());
11948   C->setReductionOps(Vars);
11949 }
11950 
11951 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
11952   VisitOMPClauseWithPostUpdate(C);
11953   C->setLParenLoc(Record.readSourceLocation());
11954   C->setColonLoc(Record.readSourceLocation());
11955   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
11956   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
11957   C->setQualifierLoc(NNSL);
11958   C->setNameInfo(DNI);
11959 
11960   unsigned NumVars = C->varlist_size();
11961   SmallVector<Expr *, 16> Vars;
11962   Vars.reserve(NumVars);
11963   for (unsigned I = 0; I != NumVars; ++I)
11964     Vars.push_back(Record.readSubExpr());
11965   C->setVarRefs(Vars);
11966   Vars.clear();
11967   for (unsigned I = 0; I != NumVars; ++I)
11968     Vars.push_back(Record.readSubExpr());
11969   C->setPrivates(Vars);
11970   Vars.clear();
11971   for (unsigned I = 0; I != NumVars; ++I)
11972     Vars.push_back(Record.readSubExpr());
11973   C->setLHSExprs(Vars);
11974   Vars.clear();
11975   for (unsigned I = 0; I != NumVars; ++I)
11976     Vars.push_back(Record.readSubExpr());
11977   C->setRHSExprs(Vars);
11978   Vars.clear();
11979   for (unsigned I = 0; I != NumVars; ++I)
11980     Vars.push_back(Record.readSubExpr());
11981   C->setReductionOps(Vars);
11982 }
11983 
11984 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
11985   VisitOMPClauseWithPostUpdate(C);
11986   C->setLParenLoc(Record.readSourceLocation());
11987   C->setColonLoc(Record.readSourceLocation());
11988   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
11989   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
11990   C->setQualifierLoc(NNSL);
11991   C->setNameInfo(DNI);
11992 
11993   unsigned NumVars = C->varlist_size();
11994   SmallVector<Expr *, 16> Vars;
11995   Vars.reserve(NumVars);
11996   for (unsigned I = 0; I != NumVars; ++I)
11997     Vars.push_back(Record.readSubExpr());
11998   C->setVarRefs(Vars);
11999   Vars.clear();
12000   for (unsigned I = 0; I != NumVars; ++I)
12001     Vars.push_back(Record.readSubExpr());
12002   C->setPrivates(Vars);
12003   Vars.clear();
12004   for (unsigned I = 0; I != NumVars; ++I)
12005     Vars.push_back(Record.readSubExpr());
12006   C->setLHSExprs(Vars);
12007   Vars.clear();
12008   for (unsigned I = 0; I != NumVars; ++I)
12009     Vars.push_back(Record.readSubExpr());
12010   C->setRHSExprs(Vars);
12011   Vars.clear();
12012   for (unsigned I = 0; I != NumVars; ++I)
12013     Vars.push_back(Record.readSubExpr());
12014   C->setReductionOps(Vars);
12015   Vars.clear();
12016   for (unsigned I = 0; I != NumVars; ++I)
12017     Vars.push_back(Record.readSubExpr());
12018   C->setTaskgroupDescriptors(Vars);
12019 }
12020 
12021 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12022   VisitOMPClauseWithPostUpdate(C);
12023   C->setLParenLoc(Record.readSourceLocation());
12024   C->setColonLoc(Record.readSourceLocation());
12025   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12026   C->setModifierLoc(Record.readSourceLocation());
12027   unsigned NumVars = C->varlist_size();
12028   SmallVector<Expr *, 16> Vars;
12029   Vars.reserve(NumVars);
12030   for (unsigned i = 0; i != NumVars; ++i)
12031     Vars.push_back(Record.readSubExpr());
12032   C->setVarRefs(Vars);
12033   Vars.clear();
12034   for (unsigned i = 0; i != NumVars; ++i)
12035     Vars.push_back(Record.readSubExpr());
12036   C->setPrivates(Vars);
12037   Vars.clear();
12038   for (unsigned i = 0; i != NumVars; ++i)
12039     Vars.push_back(Record.readSubExpr());
12040   C->setInits(Vars);
12041   Vars.clear();
12042   for (unsigned i = 0; i != NumVars; ++i)
12043     Vars.push_back(Record.readSubExpr());
12044   C->setUpdates(Vars);
12045   Vars.clear();
12046   for (unsigned i = 0; i != NumVars; ++i)
12047     Vars.push_back(Record.readSubExpr());
12048   C->setFinals(Vars);
12049   C->setStep(Record.readSubExpr());
12050   C->setCalcStep(Record.readSubExpr());
12051   Vars.clear();
12052   for (unsigned I = 0; I != NumVars + 1; ++I)
12053     Vars.push_back(Record.readSubExpr());
12054   C->setUsedExprs(Vars);
12055 }
12056 
12057 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12058   C->setLParenLoc(Record.readSourceLocation());
12059   C->setColonLoc(Record.readSourceLocation());
12060   unsigned NumVars = C->varlist_size();
12061   SmallVector<Expr *, 16> Vars;
12062   Vars.reserve(NumVars);
12063   for (unsigned i = 0; i != NumVars; ++i)
12064     Vars.push_back(Record.readSubExpr());
12065   C->setVarRefs(Vars);
12066   C->setAlignment(Record.readSubExpr());
12067 }
12068 
12069 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12070   C->setLParenLoc(Record.readSourceLocation());
12071   unsigned NumVars = C->varlist_size();
12072   SmallVector<Expr *, 16> Exprs;
12073   Exprs.reserve(NumVars);
12074   for (unsigned i = 0; i != NumVars; ++i)
12075     Exprs.push_back(Record.readSubExpr());
12076   C->setVarRefs(Exprs);
12077   Exprs.clear();
12078   for (unsigned i = 0; i != NumVars; ++i)
12079     Exprs.push_back(Record.readSubExpr());
12080   C->setSourceExprs(Exprs);
12081   Exprs.clear();
12082   for (unsigned i = 0; i != NumVars; ++i)
12083     Exprs.push_back(Record.readSubExpr());
12084   C->setDestinationExprs(Exprs);
12085   Exprs.clear();
12086   for (unsigned i = 0; i != NumVars; ++i)
12087     Exprs.push_back(Record.readSubExpr());
12088   C->setAssignmentOps(Exprs);
12089 }
12090 
12091 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12092   C->setLParenLoc(Record.readSourceLocation());
12093   unsigned NumVars = C->varlist_size();
12094   SmallVector<Expr *, 16> Exprs;
12095   Exprs.reserve(NumVars);
12096   for (unsigned i = 0; i != NumVars; ++i)
12097     Exprs.push_back(Record.readSubExpr());
12098   C->setVarRefs(Exprs);
12099   Exprs.clear();
12100   for (unsigned i = 0; i != NumVars; ++i)
12101     Exprs.push_back(Record.readSubExpr());
12102   C->setSourceExprs(Exprs);
12103   Exprs.clear();
12104   for (unsigned i = 0; i != NumVars; ++i)
12105     Exprs.push_back(Record.readSubExpr());
12106   C->setDestinationExprs(Exprs);
12107   Exprs.clear();
12108   for (unsigned i = 0; i != NumVars; ++i)
12109     Exprs.push_back(Record.readSubExpr());
12110   C->setAssignmentOps(Exprs);
12111 }
12112 
12113 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12114   C->setLParenLoc(Record.readSourceLocation());
12115   unsigned NumVars = C->varlist_size();
12116   SmallVector<Expr *, 16> Vars;
12117   Vars.reserve(NumVars);
12118   for (unsigned i = 0; i != NumVars; ++i)
12119     Vars.push_back(Record.readSubExpr());
12120   C->setVarRefs(Vars);
12121 }
12122 
12123 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12124   C->setLParenLoc(Record.readSourceLocation());
12125   C->setDependencyKind(
12126       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12127   C->setDependencyLoc(Record.readSourceLocation());
12128   C->setColonLoc(Record.readSourceLocation());
12129   unsigned NumVars = C->varlist_size();
12130   SmallVector<Expr *, 16> Vars;
12131   Vars.reserve(NumVars);
12132   for (unsigned I = 0; I != NumVars; ++I)
12133     Vars.push_back(Record.readSubExpr());
12134   C->setVarRefs(Vars);
12135   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12136     C->setLoopData(I, Record.readSubExpr());
12137 }
12138 
12139 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12140   VisitOMPClauseWithPreInit(C);
12141   C->setDevice(Record.readSubExpr());
12142   C->setLParenLoc(Record.readSourceLocation());
12143 }
12144 
12145 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12146   C->setLParenLoc(Record.readSourceLocation());
12147   for (unsigned I = 0; I < OMPMapClause::NumberOfModifiers; ++I) {
12148     C->setMapTypeModifier(
12149         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12150     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12151   }
12152   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12153   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12154   C->setMapType(
12155      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12156   C->setMapLoc(Record.readSourceLocation());
12157   C->setColonLoc(Record.readSourceLocation());
12158   auto NumVars = C->varlist_size();
12159   auto UniqueDecls = C->getUniqueDeclarationsNum();
12160   auto TotalLists = C->getTotalComponentListNum();
12161   auto TotalComponents = C->getTotalComponentsNum();
12162 
12163   SmallVector<Expr *, 16> Vars;
12164   Vars.reserve(NumVars);
12165   for (unsigned i = 0; i != NumVars; ++i)
12166     Vars.push_back(Record.readExpr());
12167   C->setVarRefs(Vars);
12168 
12169   SmallVector<Expr *, 16> UDMappers;
12170   UDMappers.reserve(NumVars);
12171   for (unsigned I = 0; I < NumVars; ++I)
12172     UDMappers.push_back(Record.readExpr());
12173   C->setUDMapperRefs(UDMappers);
12174 
12175   SmallVector<ValueDecl *, 16> Decls;
12176   Decls.reserve(UniqueDecls);
12177   for (unsigned i = 0; i < UniqueDecls; ++i)
12178     Decls.push_back(Record.readDeclAs<ValueDecl>());
12179   C->setUniqueDecls(Decls);
12180 
12181   SmallVector<unsigned, 16> ListsPerDecl;
12182   ListsPerDecl.reserve(UniqueDecls);
12183   for (unsigned i = 0; i < UniqueDecls; ++i)
12184     ListsPerDecl.push_back(Record.readInt());
12185   C->setDeclNumLists(ListsPerDecl);
12186 
12187   SmallVector<unsigned, 32> ListSizes;
12188   ListSizes.reserve(TotalLists);
12189   for (unsigned i = 0; i < TotalLists; ++i)
12190     ListSizes.push_back(Record.readInt());
12191   C->setComponentListSizes(ListSizes);
12192 
12193   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12194   Components.reserve(TotalComponents);
12195   for (unsigned i = 0; i < TotalComponents; ++i) {
12196     Expr *AssociatedExpr = Record.readExpr();
12197     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12198     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12199         AssociatedExpr, AssociatedDecl));
12200   }
12201   C->setComponents(Components, ListSizes);
12202 }
12203 
12204 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12205   C->setLParenLoc(Record.readSourceLocation());
12206   C->setColonLoc(Record.readSourceLocation());
12207   C->setAllocator(Record.readSubExpr());
12208   unsigned NumVars = C->varlist_size();
12209   SmallVector<Expr *, 16> Vars;
12210   Vars.reserve(NumVars);
12211   for (unsigned i = 0; i != NumVars; ++i)
12212     Vars.push_back(Record.readSubExpr());
12213   C->setVarRefs(Vars);
12214 }
12215 
12216 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12217   VisitOMPClauseWithPreInit(C);
12218   C->setNumTeams(Record.readSubExpr());
12219   C->setLParenLoc(Record.readSourceLocation());
12220 }
12221 
12222 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12223   VisitOMPClauseWithPreInit(C);
12224   C->setThreadLimit(Record.readSubExpr());
12225   C->setLParenLoc(Record.readSourceLocation());
12226 }
12227 
12228 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12229   VisitOMPClauseWithPreInit(C);
12230   C->setPriority(Record.readSubExpr());
12231   C->setLParenLoc(Record.readSourceLocation());
12232 }
12233 
12234 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12235   VisitOMPClauseWithPreInit(C);
12236   C->setGrainsize(Record.readSubExpr());
12237   C->setLParenLoc(Record.readSourceLocation());
12238 }
12239 
12240 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12241   VisitOMPClauseWithPreInit(C);
12242   C->setNumTasks(Record.readSubExpr());
12243   C->setLParenLoc(Record.readSourceLocation());
12244 }
12245 
12246 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12247   C->setHint(Record.readSubExpr());
12248   C->setLParenLoc(Record.readSourceLocation());
12249 }
12250 
12251 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12252   VisitOMPClauseWithPreInit(C);
12253   C->setDistScheduleKind(
12254       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12255   C->setChunkSize(Record.readSubExpr());
12256   C->setLParenLoc(Record.readSourceLocation());
12257   C->setDistScheduleKindLoc(Record.readSourceLocation());
12258   C->setCommaLoc(Record.readSourceLocation());
12259 }
12260 
12261 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12262   C->setDefaultmapKind(
12263        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12264   C->setDefaultmapModifier(
12265       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12266   C->setLParenLoc(Record.readSourceLocation());
12267   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12268   C->setDefaultmapKindLoc(Record.readSourceLocation());
12269 }
12270 
12271 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12272   C->setLParenLoc(Record.readSourceLocation());
12273   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12274   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12275   auto NumVars = C->varlist_size();
12276   auto UniqueDecls = C->getUniqueDeclarationsNum();
12277   auto TotalLists = C->getTotalComponentListNum();
12278   auto TotalComponents = C->getTotalComponentsNum();
12279 
12280   SmallVector<Expr *, 16> Vars;
12281   Vars.reserve(NumVars);
12282   for (unsigned i = 0; i != NumVars; ++i)
12283     Vars.push_back(Record.readSubExpr());
12284   C->setVarRefs(Vars);
12285 
12286   SmallVector<Expr *, 16> UDMappers;
12287   UDMappers.reserve(NumVars);
12288   for (unsigned I = 0; I < NumVars; ++I)
12289     UDMappers.push_back(Record.readSubExpr());
12290   C->setUDMapperRefs(UDMappers);
12291 
12292   SmallVector<ValueDecl *, 16> Decls;
12293   Decls.reserve(UniqueDecls);
12294   for (unsigned i = 0; i < UniqueDecls; ++i)
12295     Decls.push_back(Record.readDeclAs<ValueDecl>());
12296   C->setUniqueDecls(Decls);
12297 
12298   SmallVector<unsigned, 16> ListsPerDecl;
12299   ListsPerDecl.reserve(UniqueDecls);
12300   for (unsigned i = 0; i < UniqueDecls; ++i)
12301     ListsPerDecl.push_back(Record.readInt());
12302   C->setDeclNumLists(ListsPerDecl);
12303 
12304   SmallVector<unsigned, 32> ListSizes;
12305   ListSizes.reserve(TotalLists);
12306   for (unsigned i = 0; i < TotalLists; ++i)
12307     ListSizes.push_back(Record.readInt());
12308   C->setComponentListSizes(ListSizes);
12309 
12310   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12311   Components.reserve(TotalComponents);
12312   for (unsigned i = 0; i < TotalComponents; ++i) {
12313     Expr *AssociatedExpr = Record.readSubExpr();
12314     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12315     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12316         AssociatedExpr, AssociatedDecl));
12317   }
12318   C->setComponents(Components, ListSizes);
12319 }
12320 
12321 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12322   C->setLParenLoc(Record.readSourceLocation());
12323   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12324   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12325   auto NumVars = C->varlist_size();
12326   auto UniqueDecls = C->getUniqueDeclarationsNum();
12327   auto TotalLists = C->getTotalComponentListNum();
12328   auto TotalComponents = C->getTotalComponentsNum();
12329 
12330   SmallVector<Expr *, 16> Vars;
12331   Vars.reserve(NumVars);
12332   for (unsigned i = 0; i != NumVars; ++i)
12333     Vars.push_back(Record.readSubExpr());
12334   C->setVarRefs(Vars);
12335 
12336   SmallVector<Expr *, 16> UDMappers;
12337   UDMappers.reserve(NumVars);
12338   for (unsigned I = 0; I < NumVars; ++I)
12339     UDMappers.push_back(Record.readSubExpr());
12340   C->setUDMapperRefs(UDMappers);
12341 
12342   SmallVector<ValueDecl *, 16> Decls;
12343   Decls.reserve(UniqueDecls);
12344   for (unsigned i = 0; i < UniqueDecls; ++i)
12345     Decls.push_back(Record.readDeclAs<ValueDecl>());
12346   C->setUniqueDecls(Decls);
12347 
12348   SmallVector<unsigned, 16> ListsPerDecl;
12349   ListsPerDecl.reserve(UniqueDecls);
12350   for (unsigned i = 0; i < UniqueDecls; ++i)
12351     ListsPerDecl.push_back(Record.readInt());
12352   C->setDeclNumLists(ListsPerDecl);
12353 
12354   SmallVector<unsigned, 32> ListSizes;
12355   ListSizes.reserve(TotalLists);
12356   for (unsigned i = 0; i < TotalLists; ++i)
12357     ListSizes.push_back(Record.readInt());
12358   C->setComponentListSizes(ListSizes);
12359 
12360   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12361   Components.reserve(TotalComponents);
12362   for (unsigned i = 0; i < TotalComponents; ++i) {
12363     Expr *AssociatedExpr = Record.readSubExpr();
12364     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12365     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12366         AssociatedExpr, AssociatedDecl));
12367   }
12368   C->setComponents(Components, ListSizes);
12369 }
12370 
12371 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12372   C->setLParenLoc(Record.readSourceLocation());
12373   auto NumVars = C->varlist_size();
12374   auto UniqueDecls = C->getUniqueDeclarationsNum();
12375   auto TotalLists = C->getTotalComponentListNum();
12376   auto TotalComponents = C->getTotalComponentsNum();
12377 
12378   SmallVector<Expr *, 16> Vars;
12379   Vars.reserve(NumVars);
12380   for (unsigned i = 0; i != NumVars; ++i)
12381     Vars.push_back(Record.readSubExpr());
12382   C->setVarRefs(Vars);
12383   Vars.clear();
12384   for (unsigned i = 0; i != NumVars; ++i)
12385     Vars.push_back(Record.readSubExpr());
12386   C->setPrivateCopies(Vars);
12387   Vars.clear();
12388   for (unsigned i = 0; i != NumVars; ++i)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setInits(Vars);
12391 
12392   SmallVector<ValueDecl *, 16> Decls;
12393   Decls.reserve(UniqueDecls);
12394   for (unsigned i = 0; i < UniqueDecls; ++i)
12395     Decls.push_back(Record.readDeclAs<ValueDecl>());
12396   C->setUniqueDecls(Decls);
12397 
12398   SmallVector<unsigned, 16> ListsPerDecl;
12399   ListsPerDecl.reserve(UniqueDecls);
12400   for (unsigned i = 0; i < UniqueDecls; ++i)
12401     ListsPerDecl.push_back(Record.readInt());
12402   C->setDeclNumLists(ListsPerDecl);
12403 
12404   SmallVector<unsigned, 32> ListSizes;
12405   ListSizes.reserve(TotalLists);
12406   for (unsigned i = 0; i < TotalLists; ++i)
12407     ListSizes.push_back(Record.readInt());
12408   C->setComponentListSizes(ListSizes);
12409 
12410   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12411   Components.reserve(TotalComponents);
12412   for (unsigned i = 0; i < TotalComponents; ++i) {
12413     Expr *AssociatedExpr = Record.readSubExpr();
12414     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12415     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12416         AssociatedExpr, AssociatedDecl));
12417   }
12418   C->setComponents(Components, ListSizes);
12419 }
12420 
12421 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12422   C->setLParenLoc(Record.readSourceLocation());
12423   auto NumVars = C->varlist_size();
12424   auto UniqueDecls = C->getUniqueDeclarationsNum();
12425   auto TotalLists = C->getTotalComponentListNum();
12426   auto TotalComponents = C->getTotalComponentsNum();
12427 
12428   SmallVector<Expr *, 16> Vars;
12429   Vars.reserve(NumVars);
12430   for (unsigned i = 0; i != NumVars; ++i)
12431     Vars.push_back(Record.readSubExpr());
12432   C->setVarRefs(Vars);
12433   Vars.clear();
12434 
12435   SmallVector<ValueDecl *, 16> Decls;
12436   Decls.reserve(UniqueDecls);
12437   for (unsigned i = 0; i < UniqueDecls; ++i)
12438     Decls.push_back(Record.readDeclAs<ValueDecl>());
12439   C->setUniqueDecls(Decls);
12440 
12441   SmallVector<unsigned, 16> ListsPerDecl;
12442   ListsPerDecl.reserve(UniqueDecls);
12443   for (unsigned i = 0; i < UniqueDecls; ++i)
12444     ListsPerDecl.push_back(Record.readInt());
12445   C->setDeclNumLists(ListsPerDecl);
12446 
12447   SmallVector<unsigned, 32> ListSizes;
12448   ListSizes.reserve(TotalLists);
12449   for (unsigned i = 0; i < TotalLists; ++i)
12450     ListSizes.push_back(Record.readInt());
12451   C->setComponentListSizes(ListSizes);
12452 
12453   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12454   Components.reserve(TotalComponents);
12455   for (unsigned i = 0; i < TotalComponents; ++i) {
12456     Expr *AssociatedExpr = Record.readSubExpr();
12457     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12458     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12459         AssociatedExpr, AssociatedDecl));
12460   }
12461   C->setComponents(Components, ListSizes);
12462 }
12463 
12464 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12465   C->setLParenLoc(Record.readSourceLocation());
12466   unsigned NumVars = C->varlist_size();
12467   SmallVector<Expr *, 16> Vars;
12468   Vars.reserve(NumVars);
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Vars.push_back(Record.readSubExpr());
12471   C->setVarRefs(Vars);
12472   Vars.clear();
12473   Vars.reserve(NumVars);
12474   for (unsigned i = 0; i != NumVars; ++i)
12475     Vars.push_back(Record.readSubExpr());
12476   C->setPrivateRefs(Vars);
12477 }
12478