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