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 #define SVE_TYPE(Name, Id, SingletonId) \
6964     case PREDEF_TYPE_##Id##_ID: \
6965       T = Context.SingletonId; \
6966       break;
6967 #include "clang/Basic/AArch64SVEACLETypes.def"
6968     }
6969 
6970     assert(!T.isNull() && "Unknown predefined type");
6971     return T.withFastQualifiers(FastQuals);
6972   }
6973 
6974   Index -= NUM_PREDEF_TYPE_IDS;
6975   assert(Index < TypesLoaded.size() && "Type index out-of-range");
6976   if (TypesLoaded[Index].isNull()) {
6977     TypesLoaded[Index] = readTypeRecord(Index);
6978     if (TypesLoaded[Index].isNull())
6979       return QualType();
6980 
6981     TypesLoaded[Index]->setFromAST();
6982     if (DeserializationListener)
6983       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
6984                                         TypesLoaded[Index]);
6985   }
6986 
6987   return TypesLoaded[Index].withFastQualifiers(FastQuals);
6988 }
6989 
6990 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
6991   return GetType(getGlobalTypeID(F, LocalID));
6992 }
6993 
6994 serialization::TypeID
6995 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
6996   unsigned FastQuals = LocalID & Qualifiers::FastMask;
6997   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
6998 
6999   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7000     return LocalID;
7001 
7002   if (!F.ModuleOffsetMap.empty())
7003     ReadModuleOffsetMap(F);
7004 
7005   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7006     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7007   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7008 
7009   unsigned GlobalIndex = LocalIndex + I->second;
7010   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7011 }
7012 
7013 TemplateArgumentLocInfo
7014 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7015   switch (Kind) {
7016   case TemplateArgument::Expression:
7017     return readExpr();
7018   case TemplateArgument::Type:
7019     return readTypeSourceInfo();
7020   case TemplateArgument::Template: {
7021     NestedNameSpecifierLoc QualifierLoc =
7022       readNestedNameSpecifierLoc();
7023     SourceLocation TemplateNameLoc = readSourceLocation();
7024     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7025                                    SourceLocation());
7026   }
7027   case TemplateArgument::TemplateExpansion: {
7028     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7029     SourceLocation TemplateNameLoc = readSourceLocation();
7030     SourceLocation EllipsisLoc = readSourceLocation();
7031     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7032                                    EllipsisLoc);
7033   }
7034   case TemplateArgument::Null:
7035   case TemplateArgument::Integral:
7036   case TemplateArgument::Declaration:
7037   case TemplateArgument::NullPtr:
7038   case TemplateArgument::Pack:
7039     // FIXME: Is this right?
7040     return TemplateArgumentLocInfo();
7041   }
7042   llvm_unreachable("unexpected template argument loc");
7043 }
7044 
7045 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7046   TemplateArgument Arg = readTemplateArgument();
7047 
7048   if (Arg.getKind() == TemplateArgument::Expression) {
7049     if (readBool()) // bool InfoHasSameExpr.
7050       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7051   }
7052   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7053 }
7054 
7055 const ASTTemplateArgumentListInfo *
7056 ASTRecordReader::readASTTemplateArgumentListInfo() {
7057   SourceLocation LAngleLoc = readSourceLocation();
7058   SourceLocation RAngleLoc = readSourceLocation();
7059   unsigned NumArgsAsWritten = readInt();
7060   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7061   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7062     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7063   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7064 }
7065 
7066 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7067   return GetDecl(ID);
7068 }
7069 
7070 void ASTReader::CompleteRedeclChain(const Decl *D) {
7071   if (NumCurrentElementsDeserializing) {
7072     // We arrange to not care about the complete redeclaration chain while we're
7073     // deserializing. Just remember that the AST has marked this one as complete
7074     // but that it's not actually complete yet, so we know we still need to
7075     // complete it later.
7076     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7077     return;
7078   }
7079 
7080   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7081 
7082   // If this is a named declaration, complete it by looking it up
7083   // within its context.
7084   //
7085   // FIXME: Merging a function definition should merge
7086   // all mergeable entities within it.
7087   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7088       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7089     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7090       if (!getContext().getLangOpts().CPlusPlus &&
7091           isa<TranslationUnitDecl>(DC)) {
7092         // Outside of C++, we don't have a lookup table for the TU, so update
7093         // the identifier instead. (For C++ modules, we don't store decls
7094         // in the serialized identifier table, so we do the lookup in the TU.)
7095         auto *II = Name.getAsIdentifierInfo();
7096         assert(II && "non-identifier name in C?");
7097         if (II->isOutOfDate())
7098           updateOutOfDateIdentifier(*II);
7099       } else
7100         DC->lookup(Name);
7101     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7102       // Find all declarations of this kind from the relevant context.
7103       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7104         auto *DC = cast<DeclContext>(DCDecl);
7105         SmallVector<Decl*, 8> Decls;
7106         FindExternalLexicalDecls(
7107             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7108       }
7109     }
7110   }
7111 
7112   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7113     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7114   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7115     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7116   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7117     if (auto *Template = FD->getPrimaryTemplate())
7118       Template->LoadLazySpecializations();
7119   }
7120 }
7121 
7122 CXXCtorInitializer **
7123 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7124   RecordLocation Loc = getLocalBitOffset(Offset);
7125   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7126   SavedStreamPosition SavedPosition(Cursor);
7127   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7128     Error(std::move(Err));
7129     return nullptr;
7130   }
7131   ReadingKindTracker ReadingKind(Read_Decl, *this);
7132 
7133   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7134   if (!MaybeCode) {
7135     Error(MaybeCode.takeError());
7136     return nullptr;
7137   }
7138   unsigned Code = MaybeCode.get();
7139 
7140   ASTRecordReader Record(*this, *Loc.F);
7141   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7142   if (!MaybeRecCode) {
7143     Error(MaybeRecCode.takeError());
7144     return nullptr;
7145   }
7146   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7147     Error("malformed AST file: missing C++ ctor initializers");
7148     return nullptr;
7149   }
7150 
7151   return Record.readCXXCtorInitializers();
7152 }
7153 
7154 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7155   assert(ContextObj && "reading base specifiers with no AST context");
7156   ASTContext &Context = *ContextObj;
7157 
7158   RecordLocation Loc = getLocalBitOffset(Offset);
7159   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7160   SavedStreamPosition SavedPosition(Cursor);
7161   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7162     Error(std::move(Err));
7163     return nullptr;
7164   }
7165   ReadingKindTracker ReadingKind(Read_Decl, *this);
7166 
7167   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7168   if (!MaybeCode) {
7169     Error(MaybeCode.takeError());
7170     return nullptr;
7171   }
7172   unsigned Code = MaybeCode.get();
7173 
7174   ASTRecordReader Record(*this, *Loc.F);
7175   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7176   if (!MaybeRecCode) {
7177     Error(MaybeCode.takeError());
7178     return nullptr;
7179   }
7180   unsigned RecCode = MaybeRecCode.get();
7181 
7182   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7183     Error("malformed AST file: missing C++ base specifiers");
7184     return nullptr;
7185   }
7186 
7187   unsigned NumBases = Record.readInt();
7188   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7189   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7190   for (unsigned I = 0; I != NumBases; ++I)
7191     Bases[I] = Record.readCXXBaseSpecifier();
7192   return Bases;
7193 }
7194 
7195 serialization::DeclID
7196 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7197   if (LocalID < NUM_PREDEF_DECL_IDS)
7198     return LocalID;
7199 
7200   if (!F.ModuleOffsetMap.empty())
7201     ReadModuleOffsetMap(F);
7202 
7203   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7204     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7205   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7206 
7207   return LocalID + I->second;
7208 }
7209 
7210 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7211                                    ModuleFile &M) const {
7212   // Predefined decls aren't from any module.
7213   if (ID < NUM_PREDEF_DECL_IDS)
7214     return false;
7215 
7216   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7217          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7218 }
7219 
7220 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7221   if (!D->isFromASTFile())
7222     return nullptr;
7223   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7224   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7225   return I->second;
7226 }
7227 
7228 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7229   if (ID < NUM_PREDEF_DECL_IDS)
7230     return SourceLocation();
7231 
7232   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7233 
7234   if (Index > DeclsLoaded.size()) {
7235     Error("declaration ID out-of-range for AST file");
7236     return SourceLocation();
7237   }
7238 
7239   if (Decl *D = DeclsLoaded[Index])
7240     return D->getLocation();
7241 
7242   SourceLocation Loc;
7243   DeclCursorForID(ID, Loc);
7244   return Loc;
7245 }
7246 
7247 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7248   switch (ID) {
7249   case PREDEF_DECL_NULL_ID:
7250     return nullptr;
7251 
7252   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7253     return Context.getTranslationUnitDecl();
7254 
7255   case PREDEF_DECL_OBJC_ID_ID:
7256     return Context.getObjCIdDecl();
7257 
7258   case PREDEF_DECL_OBJC_SEL_ID:
7259     return Context.getObjCSelDecl();
7260 
7261   case PREDEF_DECL_OBJC_CLASS_ID:
7262     return Context.getObjCClassDecl();
7263 
7264   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7265     return Context.getObjCProtocolDecl();
7266 
7267   case PREDEF_DECL_INT_128_ID:
7268     return Context.getInt128Decl();
7269 
7270   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7271     return Context.getUInt128Decl();
7272 
7273   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7274     return Context.getObjCInstanceTypeDecl();
7275 
7276   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7277     return Context.getBuiltinVaListDecl();
7278 
7279   case PREDEF_DECL_VA_LIST_TAG:
7280     return Context.getVaListTagDecl();
7281 
7282   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7283     return Context.getBuiltinMSVaListDecl();
7284 
7285   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7286     return Context.getExternCContextDecl();
7287 
7288   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7289     return Context.getMakeIntegerSeqDecl();
7290 
7291   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7292     return Context.getCFConstantStringDecl();
7293 
7294   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7295     return Context.getCFConstantStringTagDecl();
7296 
7297   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7298     return Context.getTypePackElementDecl();
7299   }
7300   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7301 }
7302 
7303 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7304   assert(ContextObj && "reading decl with no AST context");
7305   if (ID < NUM_PREDEF_DECL_IDS) {
7306     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7307     if (D) {
7308       // Track that we have merged the declaration with ID \p ID into the
7309       // pre-existing predefined declaration \p D.
7310       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7311       if (Merged.empty())
7312         Merged.push_back(ID);
7313     }
7314     return D;
7315   }
7316 
7317   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7318 
7319   if (Index >= DeclsLoaded.size()) {
7320     assert(0 && "declaration ID out-of-range for AST file");
7321     Error("declaration ID out-of-range for AST file");
7322     return nullptr;
7323   }
7324 
7325   return DeclsLoaded[Index];
7326 }
7327 
7328 Decl *ASTReader::GetDecl(DeclID ID) {
7329   if (ID < NUM_PREDEF_DECL_IDS)
7330     return GetExistingDecl(ID);
7331 
7332   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7333 
7334   if (Index >= DeclsLoaded.size()) {
7335     assert(0 && "declaration ID out-of-range for AST file");
7336     Error("declaration ID out-of-range for AST file");
7337     return nullptr;
7338   }
7339 
7340   if (!DeclsLoaded[Index]) {
7341     ReadDeclRecord(ID);
7342     if (DeserializationListener)
7343       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7344   }
7345 
7346   return DeclsLoaded[Index];
7347 }
7348 
7349 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7350                                                   DeclID GlobalID) {
7351   if (GlobalID < NUM_PREDEF_DECL_IDS)
7352     return GlobalID;
7353 
7354   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7355   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7356   ModuleFile *Owner = I->second;
7357 
7358   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7359     = M.GlobalToLocalDeclIDs.find(Owner);
7360   if (Pos == M.GlobalToLocalDeclIDs.end())
7361     return 0;
7362 
7363   return GlobalID - Owner->BaseDeclID + Pos->second;
7364 }
7365 
7366 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7367                                             const RecordData &Record,
7368                                             unsigned &Idx) {
7369   if (Idx >= Record.size()) {
7370     Error("Corrupted AST file");
7371     return 0;
7372   }
7373 
7374   return getGlobalDeclID(F, Record[Idx++]);
7375 }
7376 
7377 /// Resolve the offset of a statement into a statement.
7378 ///
7379 /// This operation will read a new statement from the external
7380 /// source each time it is called, and is meant to be used via a
7381 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7382 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7383   // Switch case IDs are per Decl.
7384   ClearSwitchCaseIDs();
7385 
7386   // Offset here is a global offset across the entire chain.
7387   RecordLocation Loc = getLocalBitOffset(Offset);
7388   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7389     Error(std::move(Err));
7390     return nullptr;
7391   }
7392   assert(NumCurrentElementsDeserializing == 0 &&
7393          "should not be called while already deserializing");
7394   Deserializing D(this);
7395   return ReadStmtFromStream(*Loc.F);
7396 }
7397 
7398 void ASTReader::FindExternalLexicalDecls(
7399     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7400     SmallVectorImpl<Decl *> &Decls) {
7401   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7402 
7403   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7404     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7405     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7406       auto K = (Decl::Kind)+LexicalDecls[I];
7407       if (!IsKindWeWant(K))
7408         continue;
7409 
7410       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7411 
7412       // Don't add predefined declarations to the lexical context more
7413       // than once.
7414       if (ID < NUM_PREDEF_DECL_IDS) {
7415         if (PredefsVisited[ID])
7416           continue;
7417 
7418         PredefsVisited[ID] = true;
7419       }
7420 
7421       if (Decl *D = GetLocalDecl(*M, ID)) {
7422         assert(D->getKind() == K && "wrong kind for lexical decl");
7423         if (!DC->isDeclInLexicalTraversal(D))
7424           Decls.push_back(D);
7425       }
7426     }
7427   };
7428 
7429   if (isa<TranslationUnitDecl>(DC)) {
7430     for (auto Lexical : TULexicalDecls)
7431       Visit(Lexical.first, Lexical.second);
7432   } else {
7433     auto I = LexicalDecls.find(DC);
7434     if (I != LexicalDecls.end())
7435       Visit(I->second.first, I->second.second);
7436   }
7437 
7438   ++NumLexicalDeclContextsRead;
7439 }
7440 
7441 namespace {
7442 
7443 class DeclIDComp {
7444   ASTReader &Reader;
7445   ModuleFile &Mod;
7446 
7447 public:
7448   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7449 
7450   bool operator()(LocalDeclID L, LocalDeclID R) const {
7451     SourceLocation LHS = getLocation(L);
7452     SourceLocation RHS = getLocation(R);
7453     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7454   }
7455 
7456   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7457     SourceLocation RHS = getLocation(R);
7458     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7459   }
7460 
7461   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7462     SourceLocation LHS = getLocation(L);
7463     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7464   }
7465 
7466   SourceLocation getLocation(LocalDeclID ID) const {
7467     return Reader.getSourceManager().getFileLoc(
7468             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7469   }
7470 };
7471 
7472 } // namespace
7473 
7474 void ASTReader::FindFileRegionDecls(FileID File,
7475                                     unsigned Offset, unsigned Length,
7476                                     SmallVectorImpl<Decl *> &Decls) {
7477   SourceManager &SM = getSourceManager();
7478 
7479   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7480   if (I == FileDeclIDs.end())
7481     return;
7482 
7483   FileDeclsInfo &DInfo = I->second;
7484   if (DInfo.Decls.empty())
7485     return;
7486 
7487   SourceLocation
7488     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7489   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7490 
7491   DeclIDComp DIDComp(*this, *DInfo.Mod);
7492   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7493       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7494   if (BeginIt != DInfo.Decls.begin())
7495     --BeginIt;
7496 
7497   // If we are pointing at a top-level decl inside an objc container, we need
7498   // to backtrack until we find it otherwise we will fail to report that the
7499   // region overlaps with an objc container.
7500   while (BeginIt != DInfo.Decls.begin() &&
7501          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7502              ->isTopLevelDeclInObjCContainer())
7503     --BeginIt;
7504 
7505   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7506       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7507   if (EndIt != DInfo.Decls.end())
7508     ++EndIt;
7509 
7510   for (ArrayRef<serialization::LocalDeclID>::iterator
7511          DIt = BeginIt; DIt != EndIt; ++DIt)
7512     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7513 }
7514 
7515 bool
7516 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7517                                           DeclarationName Name) {
7518   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7519          "DeclContext has no visible decls in storage");
7520   if (!Name)
7521     return false;
7522 
7523   auto It = Lookups.find(DC);
7524   if (It == Lookups.end())
7525     return false;
7526 
7527   Deserializing LookupResults(this);
7528 
7529   // Load the list of declarations.
7530   SmallVector<NamedDecl *, 64> Decls;
7531   for (DeclID ID : It->second.Table.find(Name)) {
7532     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7533     if (ND->getDeclName() == Name)
7534       Decls.push_back(ND);
7535   }
7536 
7537   ++NumVisibleDeclContextsRead;
7538   SetExternalVisibleDeclsForName(DC, Name, Decls);
7539   return !Decls.empty();
7540 }
7541 
7542 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7543   if (!DC->hasExternalVisibleStorage())
7544     return;
7545 
7546   auto It = Lookups.find(DC);
7547   assert(It != Lookups.end() &&
7548          "have external visible storage but no lookup tables");
7549 
7550   DeclsMap Decls;
7551 
7552   for (DeclID ID : It->second.Table.findAll()) {
7553     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7554     Decls[ND->getDeclName()].push_back(ND);
7555   }
7556 
7557   ++NumVisibleDeclContextsRead;
7558 
7559   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7560     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7561   }
7562   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7563 }
7564 
7565 const serialization::reader::DeclContextLookupTable *
7566 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7567   auto I = Lookups.find(Primary);
7568   return I == Lookups.end() ? nullptr : &I->second;
7569 }
7570 
7571 /// Under non-PCH compilation the consumer receives the objc methods
7572 /// before receiving the implementation, and codegen depends on this.
7573 /// We simulate this by deserializing and passing to consumer the methods of the
7574 /// implementation before passing the deserialized implementation decl.
7575 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7576                                        ASTConsumer *Consumer) {
7577   assert(ImplD && Consumer);
7578 
7579   for (auto *I : ImplD->methods())
7580     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7581 
7582   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7583 }
7584 
7585 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7586   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7587     PassObjCImplDeclToConsumer(ImplD, Consumer);
7588   else
7589     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7590 }
7591 
7592 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7593   this->Consumer = Consumer;
7594 
7595   if (Consumer)
7596     PassInterestingDeclsToConsumer();
7597 
7598   if (DeserializationListener)
7599     DeserializationListener->ReaderInitialized(this);
7600 }
7601 
7602 void ASTReader::PrintStats() {
7603   std::fprintf(stderr, "*** AST File Statistics:\n");
7604 
7605   unsigned NumTypesLoaded
7606     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7607                                       QualType());
7608   unsigned NumDeclsLoaded
7609     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7610                                       (Decl *)nullptr);
7611   unsigned NumIdentifiersLoaded
7612     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7613                                             IdentifiersLoaded.end(),
7614                                             (IdentifierInfo *)nullptr);
7615   unsigned NumMacrosLoaded
7616     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7617                                        MacrosLoaded.end(),
7618                                        (MacroInfo *)nullptr);
7619   unsigned NumSelectorsLoaded
7620     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7621                                           SelectorsLoaded.end(),
7622                                           Selector());
7623 
7624   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7625     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7626                  NumSLocEntriesRead, TotalNumSLocEntries,
7627                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7628   if (!TypesLoaded.empty())
7629     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7630                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7631                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7632   if (!DeclsLoaded.empty())
7633     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7634                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7635                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7636   if (!IdentifiersLoaded.empty())
7637     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7638                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7639                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7640   if (!MacrosLoaded.empty())
7641     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7642                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7643                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7644   if (!SelectorsLoaded.empty())
7645     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7646                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7647                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7648   if (TotalNumStatements)
7649     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7650                  NumStatementsRead, TotalNumStatements,
7651                  ((float)NumStatementsRead/TotalNumStatements * 100));
7652   if (TotalNumMacros)
7653     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7654                  NumMacrosRead, TotalNumMacros,
7655                  ((float)NumMacrosRead/TotalNumMacros * 100));
7656   if (TotalLexicalDeclContexts)
7657     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7658                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7659                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7660                   * 100));
7661   if (TotalVisibleDeclContexts)
7662     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7663                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7664                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7665                   * 100));
7666   if (TotalNumMethodPoolEntries)
7667     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7668                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7669                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7670                   * 100));
7671   if (NumMethodPoolLookups)
7672     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7673                  NumMethodPoolHits, NumMethodPoolLookups,
7674                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7675   if (NumMethodPoolTableLookups)
7676     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7677                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7678                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7679                   * 100.0));
7680   if (NumIdentifierLookupHits)
7681     std::fprintf(stderr,
7682                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7683                  NumIdentifierLookupHits, NumIdentifierLookups,
7684                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7685 
7686   if (GlobalIndex) {
7687     std::fprintf(stderr, "\n");
7688     GlobalIndex->printStats();
7689   }
7690 
7691   std::fprintf(stderr, "\n");
7692   dump();
7693   std::fprintf(stderr, "\n");
7694 }
7695 
7696 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7697 LLVM_DUMP_METHOD static void
7698 dumpModuleIDMap(StringRef Name,
7699                 const ContinuousRangeMap<Key, ModuleFile *,
7700                                          InitialCapacity> &Map) {
7701   if (Map.begin() == Map.end())
7702     return;
7703 
7704   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7705 
7706   llvm::errs() << Name << ":\n";
7707   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7708        I != IEnd; ++I) {
7709     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7710       << "\n";
7711   }
7712 }
7713 
7714 LLVM_DUMP_METHOD void ASTReader::dump() {
7715   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7716   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7717   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7718   dumpModuleIDMap("Global type map", GlobalTypeMap);
7719   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7720   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7721   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7722   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7723   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7724   dumpModuleIDMap("Global preprocessed entity map",
7725                   GlobalPreprocessedEntityMap);
7726 
7727   llvm::errs() << "\n*** PCH/Modules Loaded:";
7728   for (ModuleFile &M : ModuleMgr)
7729     M.dump();
7730 }
7731 
7732 /// Return the amount of memory used by memory buffers, breaking down
7733 /// by heap-backed versus mmap'ed memory.
7734 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7735   for (ModuleFile &I : ModuleMgr) {
7736     if (llvm::MemoryBuffer *buf = I.Buffer) {
7737       size_t bytes = buf->getBufferSize();
7738       switch (buf->getBufferKind()) {
7739         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7740           sizes.malloc_bytes += bytes;
7741           break;
7742         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7743           sizes.mmap_bytes += bytes;
7744           break;
7745       }
7746     }
7747   }
7748 }
7749 
7750 void ASTReader::InitializeSema(Sema &S) {
7751   SemaObj = &S;
7752   S.addExternalSource(this);
7753 
7754   // Makes sure any declarations that were deserialized "too early"
7755   // still get added to the identifier's declaration chains.
7756   for (uint64_t ID : PreloadedDeclIDs) {
7757     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7758     pushExternalDeclIntoScope(D, D->getDeclName());
7759   }
7760   PreloadedDeclIDs.clear();
7761 
7762   // FIXME: What happens if these are changed by a module import?
7763   if (!FPPragmaOptions.empty()) {
7764     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7765     SemaObj->FPFeatures = FPOptions(FPPragmaOptions[0]);
7766   }
7767 
7768   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7769   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7770   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7771 
7772   UpdateSema();
7773 }
7774 
7775 void ASTReader::UpdateSema() {
7776   assert(SemaObj && "no Sema to update");
7777 
7778   // Load the offsets of the declarations that Sema references.
7779   // They will be lazily deserialized when needed.
7780   if (!SemaDeclRefs.empty()) {
7781     assert(SemaDeclRefs.size() % 3 == 0);
7782     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7783       if (!SemaObj->StdNamespace)
7784         SemaObj->StdNamespace = SemaDeclRefs[I];
7785       if (!SemaObj->StdBadAlloc)
7786         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7787       if (!SemaObj->StdAlignValT)
7788         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7789     }
7790     SemaDeclRefs.clear();
7791   }
7792 
7793   // Update the state of pragmas. Use the same API as if we had encountered the
7794   // pragma in the source.
7795   if(OptimizeOffPragmaLocation.isValid())
7796     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7797   if (PragmaMSStructState != -1)
7798     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7799   if (PointersToMembersPragmaLocation.isValid()) {
7800     SemaObj->ActOnPragmaMSPointersToMembers(
7801         (LangOptions::PragmaMSPointersToMembersKind)
7802             PragmaMSPointersToMembersState,
7803         PointersToMembersPragmaLocation);
7804   }
7805   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7806 
7807   if (PragmaPackCurrentValue) {
7808     // The bottom of the stack might have a default value. It must be adjusted
7809     // to the current value to ensure that the packing state is preserved after
7810     // popping entries that were included/imported from a PCH/module.
7811     bool DropFirst = false;
7812     if (!PragmaPackStack.empty() &&
7813         PragmaPackStack.front().Location.isInvalid()) {
7814       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
7815              "Expected a default alignment value");
7816       SemaObj->PackStack.Stack.emplace_back(
7817           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
7818           SemaObj->PackStack.CurrentPragmaLocation,
7819           PragmaPackStack.front().PushLocation);
7820       DropFirst = true;
7821     }
7822     for (const auto &Entry :
7823          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
7824       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
7825                                             Entry.Location, Entry.PushLocation);
7826     if (PragmaPackCurrentLocation.isInvalid()) {
7827       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
7828              "Expected a default alignment value");
7829       // Keep the current values.
7830     } else {
7831       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
7832       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
7833     }
7834   }
7835 }
7836 
7837 IdentifierInfo *ASTReader::get(StringRef Name) {
7838   // Note that we are loading an identifier.
7839   Deserializing AnIdentifier(this);
7840 
7841   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7842                                   NumIdentifierLookups,
7843                                   NumIdentifierLookupHits);
7844 
7845   // We don't need to do identifier table lookups in C++ modules (we preload
7846   // all interesting declarations, and don't need to use the scope for name
7847   // lookups). Perform the lookup in PCH files, though, since we don't build
7848   // a complete initial identifier table if we're carrying on from a PCH.
7849   if (PP.getLangOpts().CPlusPlus) {
7850     for (auto F : ModuleMgr.pch_modules())
7851       if (Visitor(*F))
7852         break;
7853   } else {
7854     // If there is a global index, look there first to determine which modules
7855     // provably do not have any results for this identifier.
7856     GlobalModuleIndex::HitSet Hits;
7857     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7858     if (!loadGlobalIndex()) {
7859       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7860         HitsPtr = &Hits;
7861       }
7862     }
7863 
7864     ModuleMgr.visit(Visitor, HitsPtr);
7865   }
7866 
7867   IdentifierInfo *II = Visitor.getIdentifierInfo();
7868   markIdentifierUpToDate(II);
7869   return II;
7870 }
7871 
7872 namespace clang {
7873 
7874   /// An identifier-lookup iterator that enumerates all of the
7875   /// identifiers stored within a set of AST files.
7876   class ASTIdentifierIterator : public IdentifierIterator {
7877     /// The AST reader whose identifiers are being enumerated.
7878     const ASTReader &Reader;
7879 
7880     /// The current index into the chain of AST files stored in
7881     /// the AST reader.
7882     unsigned Index;
7883 
7884     /// The current position within the identifier lookup table
7885     /// of the current AST file.
7886     ASTIdentifierLookupTable::key_iterator Current;
7887 
7888     /// The end position within the identifier lookup table of
7889     /// the current AST file.
7890     ASTIdentifierLookupTable::key_iterator End;
7891 
7892     /// Whether to skip any modules in the ASTReader.
7893     bool SkipModules;
7894 
7895   public:
7896     explicit ASTIdentifierIterator(const ASTReader &Reader,
7897                                    bool SkipModules = false);
7898 
7899     StringRef Next() override;
7900   };
7901 
7902 } // namespace clang
7903 
7904 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
7905                                              bool SkipModules)
7906     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
7907 }
7908 
7909 StringRef ASTIdentifierIterator::Next() {
7910   while (Current == End) {
7911     // If we have exhausted all of our AST files, we're done.
7912     if (Index == 0)
7913       return StringRef();
7914 
7915     --Index;
7916     ModuleFile &F = Reader.ModuleMgr[Index];
7917     if (SkipModules && F.isModule())
7918       continue;
7919 
7920     ASTIdentifierLookupTable *IdTable =
7921         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
7922     Current = IdTable->key_begin();
7923     End = IdTable->key_end();
7924   }
7925 
7926   // We have any identifiers remaining in the current AST file; return
7927   // the next one.
7928   StringRef Result = *Current;
7929   ++Current;
7930   return Result;
7931 }
7932 
7933 namespace {
7934 
7935 /// A utility for appending two IdentifierIterators.
7936 class ChainedIdentifierIterator : public IdentifierIterator {
7937   std::unique_ptr<IdentifierIterator> Current;
7938   std::unique_ptr<IdentifierIterator> Queued;
7939 
7940 public:
7941   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
7942                             std::unique_ptr<IdentifierIterator> Second)
7943       : Current(std::move(First)), Queued(std::move(Second)) {}
7944 
7945   StringRef Next() override {
7946     if (!Current)
7947       return StringRef();
7948 
7949     StringRef result = Current->Next();
7950     if (!result.empty())
7951       return result;
7952 
7953     // Try the queued iterator, which may itself be empty.
7954     Current.reset();
7955     std::swap(Current, Queued);
7956     return Next();
7957   }
7958 };
7959 
7960 } // namespace
7961 
7962 IdentifierIterator *ASTReader::getIdentifiers() {
7963   if (!loadGlobalIndex()) {
7964     std::unique_ptr<IdentifierIterator> ReaderIter(
7965         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
7966     std::unique_ptr<IdentifierIterator> ModulesIter(
7967         GlobalIndex->createIdentifierIterator());
7968     return new ChainedIdentifierIterator(std::move(ReaderIter),
7969                                          std::move(ModulesIter));
7970   }
7971 
7972   return new ASTIdentifierIterator(*this);
7973 }
7974 
7975 namespace clang {
7976 namespace serialization {
7977 
7978   class ReadMethodPoolVisitor {
7979     ASTReader &Reader;
7980     Selector Sel;
7981     unsigned PriorGeneration;
7982     unsigned InstanceBits = 0;
7983     unsigned FactoryBits = 0;
7984     bool InstanceHasMoreThanOneDecl = false;
7985     bool FactoryHasMoreThanOneDecl = false;
7986     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7987     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7988 
7989   public:
7990     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7991                           unsigned PriorGeneration)
7992         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
7993 
7994     bool operator()(ModuleFile &M) {
7995       if (!M.SelectorLookupTable)
7996         return false;
7997 
7998       // If we've already searched this module file, skip it now.
7999       if (M.Generation <= PriorGeneration)
8000         return true;
8001 
8002       ++Reader.NumMethodPoolTableLookups;
8003       ASTSelectorLookupTable *PoolTable
8004         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8005       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8006       if (Pos == PoolTable->end())
8007         return false;
8008 
8009       ++Reader.NumMethodPoolTableHits;
8010       ++Reader.NumSelectorsRead;
8011       // FIXME: Not quite happy with the statistics here. We probably should
8012       // disable this tracking when called via LoadSelector.
8013       // Also, should entries without methods count as misses?
8014       ++Reader.NumMethodPoolEntriesRead;
8015       ASTSelectorLookupTrait::data_type Data = *Pos;
8016       if (Reader.DeserializationListener)
8017         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8018 
8019       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8020       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8021       InstanceBits = Data.InstanceBits;
8022       FactoryBits = Data.FactoryBits;
8023       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8024       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8025       return true;
8026     }
8027 
8028     /// Retrieve the instance methods found by this visitor.
8029     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8030       return InstanceMethods;
8031     }
8032 
8033     /// Retrieve the instance methods found by this visitor.
8034     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8035       return FactoryMethods;
8036     }
8037 
8038     unsigned getInstanceBits() const { return InstanceBits; }
8039     unsigned getFactoryBits() const { return FactoryBits; }
8040 
8041     bool instanceHasMoreThanOneDecl() const {
8042       return InstanceHasMoreThanOneDecl;
8043     }
8044 
8045     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8046   };
8047 
8048 } // namespace serialization
8049 } // namespace clang
8050 
8051 /// Add the given set of methods to the method list.
8052 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8053                              ObjCMethodList &List) {
8054   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8055     S.addMethodToGlobalList(&List, Methods[I]);
8056   }
8057 }
8058 
8059 void ASTReader::ReadMethodPool(Selector Sel) {
8060   // Get the selector generation and update it to the current generation.
8061   unsigned &Generation = SelectorGeneration[Sel];
8062   unsigned PriorGeneration = Generation;
8063   Generation = getGeneration();
8064   SelectorOutOfDate[Sel] = false;
8065 
8066   // Search for methods defined with this selector.
8067   ++NumMethodPoolLookups;
8068   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8069   ModuleMgr.visit(Visitor);
8070 
8071   if (Visitor.getInstanceMethods().empty() &&
8072       Visitor.getFactoryMethods().empty())
8073     return;
8074 
8075   ++NumMethodPoolHits;
8076 
8077   if (!getSema())
8078     return;
8079 
8080   Sema &S = *getSema();
8081   Sema::GlobalMethodPool::iterator Pos
8082     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8083 
8084   Pos->second.first.setBits(Visitor.getInstanceBits());
8085   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8086   Pos->second.second.setBits(Visitor.getFactoryBits());
8087   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8088 
8089   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8090   // when building a module we keep every method individually and may need to
8091   // update hasMoreThanOneDecl as we add the methods.
8092   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8093   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8094 }
8095 
8096 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8097   if (SelectorOutOfDate[Sel])
8098     ReadMethodPool(Sel);
8099 }
8100 
8101 void ASTReader::ReadKnownNamespaces(
8102                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8103   Namespaces.clear();
8104 
8105   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8106     if (NamespaceDecl *Namespace
8107                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8108       Namespaces.push_back(Namespace);
8109   }
8110 }
8111 
8112 void ASTReader::ReadUndefinedButUsed(
8113     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8114   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8115     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8116     SourceLocation Loc =
8117         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8118     Undefined.insert(std::make_pair(D, Loc));
8119   }
8120 }
8121 
8122 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8123     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8124                                                      Exprs) {
8125   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8126     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8127     uint64_t Count = DelayedDeleteExprs[Idx++];
8128     for (uint64_t C = 0; C < Count; ++C) {
8129       SourceLocation DeleteLoc =
8130           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8131       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8132       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8133     }
8134   }
8135 }
8136 
8137 void ASTReader::ReadTentativeDefinitions(
8138                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8139   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8140     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8141     if (Var)
8142       TentativeDefs.push_back(Var);
8143   }
8144   TentativeDefinitions.clear();
8145 }
8146 
8147 void ASTReader::ReadUnusedFileScopedDecls(
8148                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8149   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8150     DeclaratorDecl *D
8151       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8152     if (D)
8153       Decls.push_back(D);
8154   }
8155   UnusedFileScopedDecls.clear();
8156 }
8157 
8158 void ASTReader::ReadDelegatingConstructors(
8159                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8160   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8161     CXXConstructorDecl *D
8162       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8163     if (D)
8164       Decls.push_back(D);
8165   }
8166   DelegatingCtorDecls.clear();
8167 }
8168 
8169 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8170   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8171     TypedefNameDecl *D
8172       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8173     if (D)
8174       Decls.push_back(D);
8175   }
8176   ExtVectorDecls.clear();
8177 }
8178 
8179 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8180     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8181   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8182        ++I) {
8183     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8184         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8185     if (D)
8186       Decls.insert(D);
8187   }
8188   UnusedLocalTypedefNameCandidates.clear();
8189 }
8190 
8191 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8192     llvm::SmallVector<Decl *, 4> &Decls) {
8193   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8194        ++I) {
8195     auto *D = dyn_cast_or_null<Decl>(
8196         GetDecl(DeclsToCheckForDeferredDiags[I]));
8197     if (D)
8198       Decls.push_back(D);
8199   }
8200   DeclsToCheckForDeferredDiags.clear();
8201 }
8202 
8203 
8204 void ASTReader::ReadReferencedSelectors(
8205        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8206   if (ReferencedSelectorsData.empty())
8207     return;
8208 
8209   // If there are @selector references added them to its pool. This is for
8210   // implementation of -Wselector.
8211   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8212   unsigned I = 0;
8213   while (I < DataSize) {
8214     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8215     SourceLocation SelLoc
8216       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8217     Sels.push_back(std::make_pair(Sel, SelLoc));
8218   }
8219   ReferencedSelectorsData.clear();
8220 }
8221 
8222 void ASTReader::ReadWeakUndeclaredIdentifiers(
8223        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8224   if (WeakUndeclaredIdentifiers.empty())
8225     return;
8226 
8227   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8228     IdentifierInfo *WeakId
8229       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8230     IdentifierInfo *AliasId
8231       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8232     SourceLocation Loc
8233       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8234     bool Used = WeakUndeclaredIdentifiers[I++];
8235     WeakInfo WI(AliasId, Loc);
8236     WI.setUsed(Used);
8237     WeakIDs.push_back(std::make_pair(WeakId, WI));
8238   }
8239   WeakUndeclaredIdentifiers.clear();
8240 }
8241 
8242 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8243   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8244     ExternalVTableUse VT;
8245     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8246     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8247     VT.DefinitionRequired = VTableUses[Idx++];
8248     VTables.push_back(VT);
8249   }
8250 
8251   VTableUses.clear();
8252 }
8253 
8254 void ASTReader::ReadPendingInstantiations(
8255        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8256   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8257     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8258     SourceLocation Loc
8259       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8260 
8261     Pending.push_back(std::make_pair(D, Loc));
8262   }
8263   PendingInstantiations.clear();
8264 }
8265 
8266 void ASTReader::ReadLateParsedTemplates(
8267     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8268         &LPTMap) {
8269   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8270        /* In loop */) {
8271     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8272 
8273     auto LT = std::make_unique<LateParsedTemplate>();
8274     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8275 
8276     ModuleFile *F = getOwningModuleFile(LT->D);
8277     assert(F && "No module");
8278 
8279     unsigned TokN = LateParsedTemplates[Idx++];
8280     LT->Toks.reserve(TokN);
8281     for (unsigned T = 0; T < TokN; ++T)
8282       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8283 
8284     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8285   }
8286 
8287   LateParsedTemplates.clear();
8288 }
8289 
8290 void ASTReader::LoadSelector(Selector Sel) {
8291   // It would be complicated to avoid reading the methods anyway. So don't.
8292   ReadMethodPool(Sel);
8293 }
8294 
8295 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8296   assert(ID && "Non-zero identifier ID required");
8297   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8298   IdentifiersLoaded[ID - 1] = II;
8299   if (DeserializationListener)
8300     DeserializationListener->IdentifierRead(ID, II);
8301 }
8302 
8303 /// Set the globally-visible declarations associated with the given
8304 /// identifier.
8305 ///
8306 /// If the AST reader is currently in a state where the given declaration IDs
8307 /// cannot safely be resolved, they are queued until it is safe to resolve
8308 /// them.
8309 ///
8310 /// \param II an IdentifierInfo that refers to one or more globally-visible
8311 /// declarations.
8312 ///
8313 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8314 /// visible at global scope.
8315 ///
8316 /// \param Decls if non-null, this vector will be populated with the set of
8317 /// deserialized declarations. These declarations will not be pushed into
8318 /// scope.
8319 void
8320 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8321                               const SmallVectorImpl<uint32_t> &DeclIDs,
8322                                    SmallVectorImpl<Decl *> *Decls) {
8323   if (NumCurrentElementsDeserializing && !Decls) {
8324     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8325     return;
8326   }
8327 
8328   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8329     if (!SemaObj) {
8330       // Queue this declaration so that it will be added to the
8331       // translation unit scope and identifier's declaration chain
8332       // once a Sema object is known.
8333       PreloadedDeclIDs.push_back(DeclIDs[I]);
8334       continue;
8335     }
8336 
8337     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8338 
8339     // If we're simply supposed to record the declarations, do so now.
8340     if (Decls) {
8341       Decls->push_back(D);
8342       continue;
8343     }
8344 
8345     // Introduce this declaration into the translation-unit scope
8346     // and add it to the declaration chain for this identifier, so
8347     // that (unqualified) name lookup will find it.
8348     pushExternalDeclIntoScope(D, II);
8349   }
8350 }
8351 
8352 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8353   if (ID == 0)
8354     return nullptr;
8355 
8356   if (IdentifiersLoaded.empty()) {
8357     Error("no identifier table in AST file");
8358     return nullptr;
8359   }
8360 
8361   ID -= 1;
8362   if (!IdentifiersLoaded[ID]) {
8363     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8364     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8365     ModuleFile *M = I->second;
8366     unsigned Index = ID - M->BaseIdentifierID;
8367     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8368 
8369     // All of the strings in the AST file are preceded by a 16-bit length.
8370     // Extract that 16-bit length to avoid having to execute strlen().
8371     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8372     //  unsigned integers.  This is important to avoid integer overflow when
8373     //  we cast them to 'unsigned'.
8374     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8375     unsigned StrLen = (((unsigned) StrLenPtr[0])
8376                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8377     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8378     IdentifiersLoaded[ID] = &II;
8379     markIdentifierFromAST(*this,  II);
8380     if (DeserializationListener)
8381       DeserializationListener->IdentifierRead(ID + 1, &II);
8382   }
8383 
8384   return IdentifiersLoaded[ID];
8385 }
8386 
8387 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8388   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8389 }
8390 
8391 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8392   if (LocalID < NUM_PREDEF_IDENT_IDS)
8393     return LocalID;
8394 
8395   if (!M.ModuleOffsetMap.empty())
8396     ReadModuleOffsetMap(M);
8397 
8398   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8399     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8400   assert(I != M.IdentifierRemap.end()
8401          && "Invalid index into identifier index remap");
8402 
8403   return LocalID + I->second;
8404 }
8405 
8406 MacroInfo *ASTReader::getMacro(MacroID ID) {
8407   if (ID == 0)
8408     return nullptr;
8409 
8410   if (MacrosLoaded.empty()) {
8411     Error("no macro table in AST file");
8412     return nullptr;
8413   }
8414 
8415   ID -= NUM_PREDEF_MACRO_IDS;
8416   if (!MacrosLoaded[ID]) {
8417     GlobalMacroMapType::iterator I
8418       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8419     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8420     ModuleFile *M = I->second;
8421     unsigned Index = ID - M->BaseMacroID;
8422     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
8423 
8424     if (DeserializationListener)
8425       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8426                                          MacrosLoaded[ID]);
8427   }
8428 
8429   return MacrosLoaded[ID];
8430 }
8431 
8432 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8433   if (LocalID < NUM_PREDEF_MACRO_IDS)
8434     return LocalID;
8435 
8436   if (!M.ModuleOffsetMap.empty())
8437     ReadModuleOffsetMap(M);
8438 
8439   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8440     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8441   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8442 
8443   return LocalID + I->second;
8444 }
8445 
8446 serialization::SubmoduleID
8447 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8448   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8449     return LocalID;
8450 
8451   if (!M.ModuleOffsetMap.empty())
8452     ReadModuleOffsetMap(M);
8453 
8454   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8455     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8456   assert(I != M.SubmoduleRemap.end()
8457          && "Invalid index into submodule index remap");
8458 
8459   return LocalID + I->second;
8460 }
8461 
8462 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8463   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8464     assert(GlobalID == 0 && "Unhandled global submodule ID");
8465     return nullptr;
8466   }
8467 
8468   if (GlobalID > SubmodulesLoaded.size()) {
8469     Error("submodule ID out of range in AST file");
8470     return nullptr;
8471   }
8472 
8473   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8474 }
8475 
8476 Module *ASTReader::getModule(unsigned ID) {
8477   return getSubmodule(ID);
8478 }
8479 
8480 bool ASTReader::DeclIsFromPCHWithObjectFile(const Decl *D) {
8481   ModuleFile *MF = getOwningModuleFile(D);
8482   return MF && MF->PCHHasObjectFile;
8483 }
8484 
8485 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8486   if (ID & 1) {
8487     // It's a module, look it up by submodule ID.
8488     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8489     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8490   } else {
8491     // It's a prefix (preamble, PCH, ...). Look it up by index.
8492     unsigned IndexFromEnd = ID >> 1;
8493     assert(IndexFromEnd && "got reference to unknown module file");
8494     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8495   }
8496 }
8497 
8498 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8499   if (!F)
8500     return 1;
8501 
8502   // For a file representing a module, use the submodule ID of the top-level
8503   // module as the file ID. For any other kind of file, the number of such
8504   // files loaded beforehand will be the same on reload.
8505   // FIXME: Is this true even if we have an explicit module file and a PCH?
8506   if (F->isModule())
8507     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8508 
8509   auto PCHModules = getModuleManager().pch_modules();
8510   auto I = llvm::find(PCHModules, F);
8511   assert(I != PCHModules.end() && "emitting reference to unknown file");
8512   return (I - PCHModules.end()) << 1;
8513 }
8514 
8515 llvm::Optional<ASTSourceDescriptor>
8516 ASTReader::getSourceDescriptor(unsigned ID) {
8517   if (const Module *M = getSubmodule(ID))
8518     return ASTSourceDescriptor(*M);
8519 
8520   // If there is only a single PCH, return it instead.
8521   // Chained PCH are not supported.
8522   const auto &PCHChain = ModuleMgr.pch_modules();
8523   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8524     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8525     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8526     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8527     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8528                                MF.Signature);
8529   }
8530   return None;
8531 }
8532 
8533 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8534   auto I = DefinitionSource.find(FD);
8535   if (I == DefinitionSource.end())
8536     return EK_ReplyHazy;
8537   return I->second ? EK_Never : EK_Always;
8538 }
8539 
8540 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8541   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8542 }
8543 
8544 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8545   if (ID == 0)
8546     return Selector();
8547 
8548   if (ID > SelectorsLoaded.size()) {
8549     Error("selector ID out of range in AST file");
8550     return Selector();
8551   }
8552 
8553   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8554     // Load this selector from the selector table.
8555     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8556     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8557     ModuleFile &M = *I->second;
8558     ASTSelectorLookupTrait Trait(*this, M);
8559     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8560     SelectorsLoaded[ID - 1] =
8561       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8562     if (DeserializationListener)
8563       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8564   }
8565 
8566   return SelectorsLoaded[ID - 1];
8567 }
8568 
8569 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8570   return DecodeSelector(ID);
8571 }
8572 
8573 uint32_t ASTReader::GetNumExternalSelectors() {
8574   // ID 0 (the null selector) is considered an external selector.
8575   return getTotalNumSelectors() + 1;
8576 }
8577 
8578 serialization::SelectorID
8579 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8580   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8581     return LocalID;
8582 
8583   if (!M.ModuleOffsetMap.empty())
8584     ReadModuleOffsetMap(M);
8585 
8586   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8587     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8588   assert(I != M.SelectorRemap.end()
8589          && "Invalid index into selector index remap");
8590 
8591   return LocalID + I->second;
8592 }
8593 
8594 DeclarationNameLoc
8595 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8596   DeclarationNameLoc DNLoc;
8597   switch (Name.getNameKind()) {
8598   case DeclarationName::CXXConstructorName:
8599   case DeclarationName::CXXDestructorName:
8600   case DeclarationName::CXXConversionFunctionName:
8601     DNLoc.NamedType.TInfo = readTypeSourceInfo();
8602     break;
8603 
8604   case DeclarationName::CXXOperatorName:
8605     DNLoc.CXXOperatorName.BeginOpNameLoc
8606       = readSourceLocation().getRawEncoding();
8607     DNLoc.CXXOperatorName.EndOpNameLoc
8608       = readSourceLocation().getRawEncoding();
8609     break;
8610 
8611   case DeclarationName::CXXLiteralOperatorName:
8612     DNLoc.CXXLiteralOperatorName.OpNameLoc
8613       = readSourceLocation().getRawEncoding();
8614     break;
8615 
8616   case DeclarationName::Identifier:
8617   case DeclarationName::ObjCZeroArgSelector:
8618   case DeclarationName::ObjCOneArgSelector:
8619   case DeclarationName::ObjCMultiArgSelector:
8620   case DeclarationName::CXXUsingDirective:
8621   case DeclarationName::CXXDeductionGuideName:
8622     break;
8623   }
8624   return DNLoc;
8625 }
8626 
8627 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8628   DeclarationNameInfo NameInfo;
8629   NameInfo.setName(readDeclarationName());
8630   NameInfo.setLoc(readSourceLocation());
8631   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8632   return NameInfo;
8633 }
8634 
8635 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8636   Info.QualifierLoc = readNestedNameSpecifierLoc();
8637   unsigned NumTPLists = readInt();
8638   Info.NumTemplParamLists = NumTPLists;
8639   if (NumTPLists) {
8640     Info.TemplParamLists =
8641         new (getContext()) TemplateParameterList *[NumTPLists];
8642     for (unsigned i = 0; i != NumTPLists; ++i)
8643       Info.TemplParamLists[i] = readTemplateParameterList();
8644   }
8645 }
8646 
8647 TemplateParameterList *
8648 ASTRecordReader::readTemplateParameterList() {
8649   SourceLocation TemplateLoc = readSourceLocation();
8650   SourceLocation LAngleLoc = readSourceLocation();
8651   SourceLocation RAngleLoc = readSourceLocation();
8652 
8653   unsigned NumParams = readInt();
8654   SmallVector<NamedDecl *, 16> Params;
8655   Params.reserve(NumParams);
8656   while (NumParams--)
8657     Params.push_back(readDeclAs<NamedDecl>());
8658 
8659   bool HasRequiresClause = readBool();
8660   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8661 
8662   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8663       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8664   return TemplateParams;
8665 }
8666 
8667 void ASTRecordReader::readTemplateArgumentList(
8668                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8669                         bool Canonicalize) {
8670   unsigned NumTemplateArgs = readInt();
8671   TemplArgs.reserve(NumTemplateArgs);
8672   while (NumTemplateArgs--)
8673     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8674 }
8675 
8676 /// Read a UnresolvedSet structure.
8677 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8678   unsigned NumDecls = readInt();
8679   Set.reserve(getContext(), NumDecls);
8680   while (NumDecls--) {
8681     DeclID ID = readDeclID();
8682     AccessSpecifier AS = (AccessSpecifier) readInt();
8683     Set.addLazyDecl(getContext(), ID, AS);
8684   }
8685 }
8686 
8687 CXXBaseSpecifier
8688 ASTRecordReader::readCXXBaseSpecifier() {
8689   bool isVirtual = readBool();
8690   bool isBaseOfClass = readBool();
8691   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8692   bool inheritConstructors = readBool();
8693   TypeSourceInfo *TInfo = readTypeSourceInfo();
8694   SourceRange Range = readSourceRange();
8695   SourceLocation EllipsisLoc = readSourceLocation();
8696   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8697                           EllipsisLoc);
8698   Result.setInheritConstructors(inheritConstructors);
8699   return Result;
8700 }
8701 
8702 CXXCtorInitializer **
8703 ASTRecordReader::readCXXCtorInitializers() {
8704   ASTContext &Context = getContext();
8705   unsigned NumInitializers = readInt();
8706   assert(NumInitializers && "wrote ctor initializers but have no inits");
8707   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8708   for (unsigned i = 0; i != NumInitializers; ++i) {
8709     TypeSourceInfo *TInfo = nullptr;
8710     bool IsBaseVirtual = false;
8711     FieldDecl *Member = nullptr;
8712     IndirectFieldDecl *IndirectMember = nullptr;
8713 
8714     CtorInitializerType Type = (CtorInitializerType) readInt();
8715     switch (Type) {
8716     case CTOR_INITIALIZER_BASE:
8717       TInfo = readTypeSourceInfo();
8718       IsBaseVirtual = readBool();
8719       break;
8720 
8721     case CTOR_INITIALIZER_DELEGATING:
8722       TInfo = readTypeSourceInfo();
8723       break;
8724 
8725      case CTOR_INITIALIZER_MEMBER:
8726       Member = readDeclAs<FieldDecl>();
8727       break;
8728 
8729      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8730       IndirectMember = readDeclAs<IndirectFieldDecl>();
8731       break;
8732     }
8733 
8734     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8735     Expr *Init = readExpr();
8736     SourceLocation LParenLoc = readSourceLocation();
8737     SourceLocation RParenLoc = readSourceLocation();
8738 
8739     CXXCtorInitializer *BOMInit;
8740     if (Type == CTOR_INITIALIZER_BASE)
8741       BOMInit = new (Context)
8742           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8743                              RParenLoc, MemberOrEllipsisLoc);
8744     else if (Type == CTOR_INITIALIZER_DELEGATING)
8745       BOMInit = new (Context)
8746           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8747     else if (Member)
8748       BOMInit = new (Context)
8749           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8750                              Init, RParenLoc);
8751     else
8752       BOMInit = new (Context)
8753           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8754                              LParenLoc, Init, RParenLoc);
8755 
8756     if (/*IsWritten*/readBool()) {
8757       unsigned SourceOrder = readInt();
8758       BOMInit->setSourceOrder(SourceOrder);
8759     }
8760 
8761     CtorInitializers[i] = BOMInit;
8762   }
8763 
8764   return CtorInitializers;
8765 }
8766 
8767 NestedNameSpecifierLoc
8768 ASTRecordReader::readNestedNameSpecifierLoc() {
8769   ASTContext &Context = getContext();
8770   unsigned N = readInt();
8771   NestedNameSpecifierLocBuilder Builder;
8772   for (unsigned I = 0; I != N; ++I) {
8773     auto Kind = readNestedNameSpecifierKind();
8774     switch (Kind) {
8775     case NestedNameSpecifier::Identifier: {
8776       IdentifierInfo *II = readIdentifier();
8777       SourceRange Range = readSourceRange();
8778       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8779       break;
8780     }
8781 
8782     case NestedNameSpecifier::Namespace: {
8783       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8784       SourceRange Range = readSourceRange();
8785       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8786       break;
8787     }
8788 
8789     case NestedNameSpecifier::NamespaceAlias: {
8790       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8791       SourceRange Range = readSourceRange();
8792       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8793       break;
8794     }
8795 
8796     case NestedNameSpecifier::TypeSpec:
8797     case NestedNameSpecifier::TypeSpecWithTemplate: {
8798       bool Template = readBool();
8799       TypeSourceInfo *T = readTypeSourceInfo();
8800       if (!T)
8801         return NestedNameSpecifierLoc();
8802       SourceLocation ColonColonLoc = readSourceLocation();
8803 
8804       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8805       Builder.Extend(Context,
8806                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8807                      T->getTypeLoc(), ColonColonLoc);
8808       break;
8809     }
8810 
8811     case NestedNameSpecifier::Global: {
8812       SourceLocation ColonColonLoc = readSourceLocation();
8813       Builder.MakeGlobal(Context, ColonColonLoc);
8814       break;
8815     }
8816 
8817     case NestedNameSpecifier::Super: {
8818       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8819       SourceRange Range = readSourceRange();
8820       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8821       break;
8822     }
8823     }
8824   }
8825 
8826   return Builder.getWithLocInContext(Context);
8827 }
8828 
8829 SourceRange
8830 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8831                            unsigned &Idx) {
8832   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8833   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8834   return SourceRange(beg, end);
8835 }
8836 
8837 static FixedPointSemantics
8838 ReadFixedPointSemantics(const SmallVectorImpl<uint64_t> &Record,
8839                         unsigned &Idx) {
8840   unsigned Width = Record[Idx++];
8841   unsigned Scale = Record[Idx++];
8842   uint64_t Tmp = Record[Idx++];
8843   bool IsSigned = Tmp & 0x1;
8844   bool IsSaturated = Tmp & 0x2;
8845   bool HasUnsignedPadding = Tmp & 0x4;
8846   return FixedPointSemantics(Width, Scale, IsSigned, IsSaturated,
8847                              HasUnsignedPadding);
8848 }
8849 
8850 static const llvm::fltSemantics &
8851 readAPFloatSemantics(ASTRecordReader &reader) {
8852   return llvm::APFloatBase::EnumToSemantics(
8853     static_cast<llvm::APFloatBase::Semantics>(reader.readInt()));
8854 }
8855 
8856 APValue ASTRecordReader::readAPValue() {
8857   unsigned Kind = readInt();
8858   switch ((APValue::ValueKind) Kind) {
8859   case APValue::None:
8860     return APValue();
8861   case APValue::Indeterminate:
8862     return APValue::IndeterminateValue();
8863   case APValue::Int:
8864     return APValue(readAPSInt());
8865   case APValue::Float: {
8866     const llvm::fltSemantics &FloatSema = readAPFloatSemantics(*this);
8867     return APValue(readAPFloat(FloatSema));
8868   }
8869   case APValue::FixedPoint: {
8870     FixedPointSemantics FPSema = ReadFixedPointSemantics(Record, Idx);
8871     return APValue(APFixedPoint(readAPInt(), FPSema));
8872   }
8873   case APValue::ComplexInt: {
8874     llvm::APSInt First = readAPSInt();
8875     return APValue(std::move(First), readAPSInt());
8876   }
8877   case APValue::ComplexFloat: {
8878     const llvm::fltSemantics &FloatSema1 = readAPFloatSemantics(*this);
8879     llvm::APFloat First = readAPFloat(FloatSema1);
8880     const llvm::fltSemantics &FloatSema2 = readAPFloatSemantics(*this);
8881     return APValue(std::move(First), readAPFloat(FloatSema2));
8882   }
8883   case APValue::LValue:
8884   case APValue::Vector:
8885   case APValue::Array:
8886   case APValue::Struct:
8887   case APValue::Union:
8888   case APValue::MemberPointer:
8889   case APValue::AddrLabelDiff:
8890     // TODO : Handle all these APValue::ValueKind.
8891     return APValue();
8892   }
8893   llvm_unreachable("Invalid APValue::ValueKind");
8894 }
8895 
8896 /// Read a floating-point value
8897 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8898   return llvm::APFloat(Sem, readAPInt());
8899 }
8900 
8901 // Read a string
8902 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8903   unsigned Len = Record[Idx++];
8904   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8905   Idx += Len;
8906   return Result;
8907 }
8908 
8909 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8910                                 unsigned &Idx) {
8911   std::string Filename = ReadString(Record, Idx);
8912   ResolveImportedPath(F, Filename);
8913   return Filename;
8914 }
8915 
8916 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8917                                 const RecordData &Record, unsigned &Idx) {
8918   std::string Filename = ReadString(Record, Idx);
8919   if (!BaseDirectory.empty())
8920     ResolveImportedPath(Filename, BaseDirectory);
8921   return Filename;
8922 }
8923 
8924 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8925                                          unsigned &Idx) {
8926   unsigned Major = Record[Idx++];
8927   unsigned Minor = Record[Idx++];
8928   unsigned Subminor = Record[Idx++];
8929   if (Minor == 0)
8930     return VersionTuple(Major);
8931   if (Subminor == 0)
8932     return VersionTuple(Major, Minor - 1);
8933   return VersionTuple(Major, Minor - 1, Subminor - 1);
8934 }
8935 
8936 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8937                                           const RecordData &Record,
8938                                           unsigned &Idx) {
8939   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8940   return CXXTemporary::Create(getContext(), Decl);
8941 }
8942 
8943 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
8944   return Diag(CurrentImportLoc, DiagID);
8945 }
8946 
8947 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
8948   return Diags.Report(Loc, DiagID);
8949 }
8950 
8951 /// Retrieve the identifier table associated with the
8952 /// preprocessor.
8953 IdentifierTable &ASTReader::getIdentifierTable() {
8954   return PP.getIdentifierTable();
8955 }
8956 
8957 /// Record that the given ID maps to the given switch-case
8958 /// statement.
8959 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8960   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8961          "Already have a SwitchCase with this ID");
8962   (*CurrSwitchCaseStmts)[ID] = SC;
8963 }
8964 
8965 /// Retrieve the switch-case statement with the given ID.
8966 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8967   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8968   return (*CurrSwitchCaseStmts)[ID];
8969 }
8970 
8971 void ASTReader::ClearSwitchCaseIDs() {
8972   CurrSwitchCaseStmts->clear();
8973 }
8974 
8975 void ASTReader::ReadComments() {
8976   ASTContext &Context = getContext();
8977   std::vector<RawComment *> Comments;
8978   for (SmallVectorImpl<std::pair<BitstreamCursor,
8979                                  serialization::ModuleFile *>>::iterator
8980        I = CommentsCursors.begin(),
8981        E = CommentsCursors.end();
8982        I != E; ++I) {
8983     Comments.clear();
8984     BitstreamCursor &Cursor = I->first;
8985     serialization::ModuleFile &F = *I->second;
8986     SavedStreamPosition SavedPosition(Cursor);
8987 
8988     RecordData Record;
8989     while (true) {
8990       Expected<llvm::BitstreamEntry> MaybeEntry =
8991           Cursor.advanceSkippingSubblocks(
8992               BitstreamCursor::AF_DontPopBlockAtEnd);
8993       if (!MaybeEntry) {
8994         Error(MaybeEntry.takeError());
8995         return;
8996       }
8997       llvm::BitstreamEntry Entry = MaybeEntry.get();
8998 
8999       switch (Entry.Kind) {
9000       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9001       case llvm::BitstreamEntry::Error:
9002         Error("malformed block record in AST file");
9003         return;
9004       case llvm::BitstreamEntry::EndBlock:
9005         goto NextCursor;
9006       case llvm::BitstreamEntry::Record:
9007         // The interesting case.
9008         break;
9009       }
9010 
9011       // Read a record.
9012       Record.clear();
9013       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9014       if (!MaybeComment) {
9015         Error(MaybeComment.takeError());
9016         return;
9017       }
9018       switch ((CommentRecordTypes)MaybeComment.get()) {
9019       case COMMENTS_RAW_COMMENT: {
9020         unsigned Idx = 0;
9021         SourceRange SR = ReadSourceRange(F, Record, Idx);
9022         RawComment::CommentKind Kind =
9023             (RawComment::CommentKind) Record[Idx++];
9024         bool IsTrailingComment = Record[Idx++];
9025         bool IsAlmostTrailingComment = Record[Idx++];
9026         Comments.push_back(new (Context) RawComment(
9027             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9028         break;
9029       }
9030       }
9031     }
9032   NextCursor:
9033     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9034         FileToOffsetToComment;
9035     for (RawComment *C : Comments) {
9036       SourceLocation CommentLoc = C->getBeginLoc();
9037       if (CommentLoc.isValid()) {
9038         std::pair<FileID, unsigned> Loc =
9039             SourceMgr.getDecomposedLoc(CommentLoc);
9040         if (Loc.first.isValid())
9041           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9042       }
9043     }
9044   }
9045 }
9046 
9047 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9048                                 bool IncludeSystem, bool Complain,
9049                     llvm::function_ref<void(const serialization::InputFile &IF,
9050                                             bool isSystem)> Visitor) {
9051   unsigned NumUserInputs = MF.NumUserInputFiles;
9052   unsigned NumInputs = MF.InputFilesLoaded.size();
9053   assert(NumUserInputs <= NumInputs);
9054   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9055   for (unsigned I = 0; I < N; ++I) {
9056     bool IsSystem = I >= NumUserInputs;
9057     InputFile IF = getInputFile(MF, I+1, Complain);
9058     Visitor(IF, IsSystem);
9059   }
9060 }
9061 
9062 void ASTReader::visitTopLevelModuleMaps(
9063     serialization::ModuleFile &MF,
9064     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9065   unsigned NumInputs = MF.InputFilesLoaded.size();
9066   for (unsigned I = 0; I < NumInputs; ++I) {
9067     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9068     if (IFI.TopLevelModuleMap)
9069       // FIXME: This unnecessarily re-reads the InputFileInfo.
9070       if (auto *FE = getInputFile(MF, I + 1).getFile())
9071         Visitor(FE);
9072   }
9073 }
9074 
9075 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9076   // If we know the owning module, use it.
9077   if (Module *M = D->getImportedOwningModule())
9078     return M->getFullModuleName();
9079 
9080   // Otherwise, use the name of the top-level module the decl is within.
9081   if (ModuleFile *M = getOwningModuleFile(D))
9082     return M->ModuleName;
9083 
9084   // Not from a module.
9085   return {};
9086 }
9087 
9088 void ASTReader::finishPendingActions() {
9089   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9090          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9091          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9092          !PendingUpdateRecords.empty()) {
9093     // If any identifiers with corresponding top-level declarations have
9094     // been loaded, load those declarations now.
9095     using TopLevelDeclsMap =
9096         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9097     TopLevelDeclsMap TopLevelDecls;
9098 
9099     while (!PendingIdentifierInfos.empty()) {
9100       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9101       SmallVector<uint32_t, 4> DeclIDs =
9102           std::move(PendingIdentifierInfos.back().second);
9103       PendingIdentifierInfos.pop_back();
9104 
9105       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9106     }
9107 
9108     // Load each function type that we deferred loading because it was a
9109     // deduced type that might refer to a local type declared within itself.
9110     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9111       auto *FD = PendingFunctionTypes[I].first;
9112       FD->setType(GetType(PendingFunctionTypes[I].second));
9113 
9114       // If we gave a function a deduced return type, remember that we need to
9115       // propagate that along the redeclaration chain.
9116       auto *DT = FD->getReturnType()->getContainedDeducedType();
9117       if (DT && DT->isDeduced())
9118         PendingDeducedTypeUpdates.insert(
9119             {FD->getCanonicalDecl(), FD->getReturnType()});
9120     }
9121     PendingFunctionTypes.clear();
9122 
9123     // For each decl chain that we wanted to complete while deserializing, mark
9124     // it as "still needs to be completed".
9125     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9126       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9127     }
9128     PendingIncompleteDeclChains.clear();
9129 
9130     // Load pending declaration chains.
9131     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9132       loadPendingDeclChain(PendingDeclChains[I].first,
9133                            PendingDeclChains[I].second);
9134     PendingDeclChains.clear();
9135 
9136     // Make the most recent of the top-level declarations visible.
9137     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9138            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9139       IdentifierInfo *II = TLD->first;
9140       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9141         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9142       }
9143     }
9144 
9145     // Load any pending macro definitions.
9146     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9147       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9148       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9149       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9150       // Initialize the macro history from chained-PCHs ahead of module imports.
9151       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9152            ++IDIdx) {
9153         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9154         if (!Info.M->isModule())
9155           resolvePendingMacro(II, Info);
9156       }
9157       // Handle module imports.
9158       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9159            ++IDIdx) {
9160         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9161         if (Info.M->isModule())
9162           resolvePendingMacro(II, Info);
9163       }
9164     }
9165     PendingMacroIDs.clear();
9166 
9167     // Wire up the DeclContexts for Decls that we delayed setting until
9168     // recursive loading is completed.
9169     while (!PendingDeclContextInfos.empty()) {
9170       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9171       PendingDeclContextInfos.pop_front();
9172       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9173       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9174       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9175     }
9176 
9177     // Perform any pending declaration updates.
9178     while (!PendingUpdateRecords.empty()) {
9179       auto Update = PendingUpdateRecords.pop_back_val();
9180       ReadingKindTracker ReadingKind(Read_Decl, *this);
9181       loadDeclUpdateRecords(Update);
9182     }
9183   }
9184 
9185   // At this point, all update records for loaded decls are in place, so any
9186   // fake class definitions should have become real.
9187   assert(PendingFakeDefinitionData.empty() &&
9188          "faked up a class definition but never saw the real one");
9189 
9190   // If we deserialized any C++ or Objective-C class definitions, any
9191   // Objective-C protocol definitions, or any redeclarable templates, make sure
9192   // that all redeclarations point to the definitions. Note that this can only
9193   // happen now, after the redeclaration chains have been fully wired.
9194   for (Decl *D : PendingDefinitions) {
9195     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9196       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9197         // Make sure that the TagType points at the definition.
9198         const_cast<TagType*>(TagT)->decl = TD;
9199       }
9200 
9201       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9202         for (auto *R = getMostRecentExistingDecl(RD); R;
9203              R = R->getPreviousDecl()) {
9204           assert((R == D) ==
9205                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9206                  "declaration thinks it's the definition but it isn't");
9207           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9208         }
9209       }
9210 
9211       continue;
9212     }
9213 
9214     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9215       // Make sure that the ObjCInterfaceType points at the definition.
9216       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9217         ->Decl = ID;
9218 
9219       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9220         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9221 
9222       continue;
9223     }
9224 
9225     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9226       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9227         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9228 
9229       continue;
9230     }
9231 
9232     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9233     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9234       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9235   }
9236   PendingDefinitions.clear();
9237 
9238   // Load the bodies of any functions or methods we've encountered. We do
9239   // this now (delayed) so that we can be sure that the declaration chains
9240   // have been fully wired up (hasBody relies on this).
9241   // FIXME: We shouldn't require complete redeclaration chains here.
9242   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9243                                PBEnd = PendingBodies.end();
9244        PB != PBEnd; ++PB) {
9245     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9246       // For a function defined inline within a class template, force the
9247       // canonical definition to be the one inside the canonical definition of
9248       // the template. This ensures that we instantiate from a correct view
9249       // of the template.
9250       //
9251       // Sadly we can't do this more generally: we can't be sure that all
9252       // copies of an arbitrary class definition will have the same members
9253       // defined (eg, some member functions may not be instantiated, and some
9254       // special members may or may not have been implicitly defined).
9255       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9256         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9257           continue;
9258 
9259       // FIXME: Check for =delete/=default?
9260       // FIXME: Complain about ODR violations here?
9261       const FunctionDecl *Defn = nullptr;
9262       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9263         FD->setLazyBody(PB->second);
9264       } else {
9265         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9266         mergeDefinitionVisibility(NonConstDefn, FD);
9267 
9268         if (!FD->isLateTemplateParsed() &&
9269             !NonConstDefn->isLateTemplateParsed() &&
9270             FD->getODRHash() != NonConstDefn->getODRHash()) {
9271           if (!isa<CXXMethodDecl>(FD)) {
9272             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9273           } else if (FD->getLexicalParent()->isFileContext() &&
9274                      NonConstDefn->getLexicalParent()->isFileContext()) {
9275             // Only diagnose out-of-line method definitions.  If they are
9276             // in class definitions, then an error will be generated when
9277             // processing the class bodies.
9278             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9279           }
9280         }
9281       }
9282       continue;
9283     }
9284 
9285     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9286     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9287       MD->setLazyBody(PB->second);
9288   }
9289   PendingBodies.clear();
9290 
9291   // Do some cleanup.
9292   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9293     getContext().deduplicateMergedDefinitonsFor(ND);
9294   PendingMergedDefinitionsToDeduplicate.clear();
9295 }
9296 
9297 void ASTReader::diagnoseOdrViolations() {
9298   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9299       PendingFunctionOdrMergeFailures.empty() &&
9300       PendingEnumOdrMergeFailures.empty())
9301     return;
9302 
9303   // Trigger the import of the full definition of each class that had any
9304   // odr-merging problems, so we can produce better diagnostics for them.
9305   // These updates may in turn find and diagnose some ODR failures, so take
9306   // ownership of the set first.
9307   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9308   PendingOdrMergeFailures.clear();
9309   for (auto &Merge : OdrMergeFailures) {
9310     Merge.first->buildLookup();
9311     Merge.first->decls_begin();
9312     Merge.first->bases_begin();
9313     Merge.first->vbases_begin();
9314     for (auto &RecordPair : Merge.second) {
9315       auto *RD = RecordPair.first;
9316       RD->decls_begin();
9317       RD->bases_begin();
9318       RD->vbases_begin();
9319     }
9320   }
9321 
9322   // Trigger the import of functions.
9323   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9324   PendingFunctionOdrMergeFailures.clear();
9325   for (auto &Merge : FunctionOdrMergeFailures) {
9326     Merge.first->buildLookup();
9327     Merge.first->decls_begin();
9328     Merge.first->getBody();
9329     for (auto &FD : Merge.second) {
9330       FD->buildLookup();
9331       FD->decls_begin();
9332       FD->getBody();
9333     }
9334   }
9335 
9336   // Trigger the import of enums.
9337   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9338   PendingEnumOdrMergeFailures.clear();
9339   for (auto &Merge : EnumOdrMergeFailures) {
9340     Merge.first->decls_begin();
9341     for (auto &Enum : Merge.second) {
9342       Enum->decls_begin();
9343     }
9344   }
9345 
9346   // For each declaration from a merged context, check that the canonical
9347   // definition of that context also contains a declaration of the same
9348   // entity.
9349   //
9350   // Caution: this loop does things that might invalidate iterators into
9351   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9352   while (!PendingOdrMergeChecks.empty()) {
9353     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9354 
9355     // FIXME: Skip over implicit declarations for now. This matters for things
9356     // like implicitly-declared special member functions. This isn't entirely
9357     // correct; we can end up with multiple unmerged declarations of the same
9358     // implicit entity.
9359     if (D->isImplicit())
9360       continue;
9361 
9362     DeclContext *CanonDef = D->getDeclContext();
9363 
9364     bool Found = false;
9365     const Decl *DCanon = D->getCanonicalDecl();
9366 
9367     for (auto RI : D->redecls()) {
9368       if (RI->getLexicalDeclContext() == CanonDef) {
9369         Found = true;
9370         break;
9371       }
9372     }
9373     if (Found)
9374       continue;
9375 
9376     // Quick check failed, time to do the slow thing. Note, we can't just
9377     // look up the name of D in CanonDef here, because the member that is
9378     // in CanonDef might not be found by name lookup (it might have been
9379     // replaced by a more recent declaration in the lookup table), and we
9380     // can't necessarily find it in the redeclaration chain because it might
9381     // be merely mergeable, not redeclarable.
9382     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9383     for (auto *CanonMember : CanonDef->decls()) {
9384       if (CanonMember->getCanonicalDecl() == DCanon) {
9385         // This can happen if the declaration is merely mergeable and not
9386         // actually redeclarable (we looked for redeclarations earlier).
9387         //
9388         // FIXME: We should be able to detect this more efficiently, without
9389         // pulling in all of the members of CanonDef.
9390         Found = true;
9391         break;
9392       }
9393       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9394         if (ND->getDeclName() == D->getDeclName())
9395           Candidates.push_back(ND);
9396     }
9397 
9398     if (!Found) {
9399       // The AST doesn't like TagDecls becoming invalid after they've been
9400       // completed. We only really need to mark FieldDecls as invalid here.
9401       if (!isa<TagDecl>(D))
9402         D->setInvalidDecl();
9403 
9404       // Ensure we don't accidentally recursively enter deserialization while
9405       // we're producing our diagnostic.
9406       Deserializing RecursionGuard(this);
9407 
9408       std::string CanonDefModule =
9409           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9410       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9411         << D << getOwningModuleNameForDiagnostic(D)
9412         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9413 
9414       if (Candidates.empty())
9415         Diag(cast<Decl>(CanonDef)->getLocation(),
9416              diag::note_module_odr_violation_no_possible_decls) << D;
9417       else {
9418         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9419           Diag(Candidates[I]->getLocation(),
9420                diag::note_module_odr_violation_possible_decl)
9421             << Candidates[I];
9422       }
9423 
9424       DiagnosedOdrMergeFailures.insert(CanonDef);
9425     }
9426   }
9427 
9428   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9429       EnumOdrMergeFailures.empty())
9430     return;
9431 
9432   // Ensure we don't accidentally recursively enter deserialization while
9433   // we're producing our diagnostics.
9434   Deserializing RecursionGuard(this);
9435 
9436   // Common code for hashing helpers.
9437   ODRHash Hash;
9438   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9439     Hash.clear();
9440     Hash.AddQualType(Ty);
9441     return Hash.CalculateHash();
9442   };
9443 
9444   auto ComputeODRHash = [&Hash](const Stmt *S) {
9445     assert(S);
9446     Hash.clear();
9447     Hash.AddStmt(S);
9448     return Hash.CalculateHash();
9449   };
9450 
9451   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9452     assert(D);
9453     Hash.clear();
9454     Hash.AddSubDecl(D);
9455     return Hash.CalculateHash();
9456   };
9457 
9458   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9459     Hash.clear();
9460     Hash.AddTemplateArgument(TA);
9461     return Hash.CalculateHash();
9462   };
9463 
9464   auto ComputeTemplateParameterListODRHash =
9465       [&Hash](const TemplateParameterList *TPL) {
9466         assert(TPL);
9467         Hash.clear();
9468         Hash.AddTemplateParameterList(TPL);
9469         return Hash.CalculateHash();
9470       };
9471 
9472   // Used with err_module_odr_violation_mismatch_decl and
9473   // note_module_odr_violation_mismatch_decl
9474   // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9475   enum ODRMismatchDecl {
9476     EndOfClass,
9477     PublicSpecifer,
9478     PrivateSpecifer,
9479     ProtectedSpecifer,
9480     StaticAssert,
9481     Field,
9482     CXXMethod,
9483     TypeAlias,
9484     TypeDef,
9485     Var,
9486     Friend,
9487     FunctionTemplate,
9488     Other
9489   };
9490 
9491   // Used with err_module_odr_violation_mismatch_decl_diff and
9492   // note_module_odr_violation_mismatch_decl_diff
9493   enum ODRMismatchDeclDifference {
9494     StaticAssertCondition,
9495     StaticAssertMessage,
9496     StaticAssertOnlyMessage,
9497     FieldName,
9498     FieldTypeName,
9499     FieldSingleBitField,
9500     FieldDifferentWidthBitField,
9501     FieldSingleMutable,
9502     FieldSingleInitializer,
9503     FieldDifferentInitializers,
9504     MethodName,
9505     MethodDeleted,
9506     MethodDefaulted,
9507     MethodVirtual,
9508     MethodStatic,
9509     MethodVolatile,
9510     MethodConst,
9511     MethodInline,
9512     MethodNumberParameters,
9513     MethodParameterType,
9514     MethodParameterName,
9515     MethodParameterSingleDefaultArgument,
9516     MethodParameterDifferentDefaultArgument,
9517     MethodNoTemplateArguments,
9518     MethodDifferentNumberTemplateArguments,
9519     MethodDifferentTemplateArgument,
9520     MethodSingleBody,
9521     MethodDifferentBody,
9522     TypedefName,
9523     TypedefType,
9524     VarName,
9525     VarType,
9526     VarSingleInitializer,
9527     VarDifferentInitializer,
9528     VarConstexpr,
9529     FriendTypeFunction,
9530     FriendType,
9531     FriendFunction,
9532     FunctionTemplateDifferentNumberParameters,
9533     FunctionTemplateParameterDifferentKind,
9534     FunctionTemplateParameterName,
9535     FunctionTemplateParameterSingleDefaultArgument,
9536     FunctionTemplateParameterDifferentDefaultArgument,
9537     FunctionTemplateParameterDifferentType,
9538     FunctionTemplatePackParameter,
9539   };
9540 
9541   // These lambdas have the common portions of the ODR diagnostics.  This
9542   // has the same return as Diag(), so addition parameters can be passed
9543   // in with operator<<
9544   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9545                                  SourceLocation Loc, SourceRange Range,
9546                                  ODRMismatchDeclDifference DiffType) {
9547     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9548            << FirstRecord << FirstModule.empty() << FirstModule << Range
9549            << DiffType;
9550   };
9551   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9552                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9553     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9554            << SecondModule << Range << DiffType;
9555   };
9556 
9557   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9558                        &ComputeQualTypeODRHash, &ComputeODRHash](
9559                           NamedDecl *FirstRecord, StringRef FirstModule,
9560                           StringRef SecondModule, FieldDecl *FirstField,
9561                           FieldDecl *SecondField) {
9562     IdentifierInfo *FirstII = FirstField->getIdentifier();
9563     IdentifierInfo *SecondII = SecondField->getIdentifier();
9564     if (FirstII->getName() != SecondII->getName()) {
9565       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9566                        FirstField->getSourceRange(), FieldName)
9567           << FirstII;
9568       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9569                       SecondField->getSourceRange(), FieldName)
9570           << SecondII;
9571 
9572       return true;
9573     }
9574 
9575     assert(getContext().hasSameType(FirstField->getType(),
9576                                     SecondField->getType()));
9577 
9578     QualType FirstType = FirstField->getType();
9579     QualType SecondType = SecondField->getType();
9580     if (ComputeQualTypeODRHash(FirstType) !=
9581         ComputeQualTypeODRHash(SecondType)) {
9582       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9583                        FirstField->getSourceRange(), FieldTypeName)
9584           << FirstII << FirstType;
9585       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9586                       SecondField->getSourceRange(), FieldTypeName)
9587           << SecondII << SecondType;
9588 
9589       return true;
9590     }
9591 
9592     const bool IsFirstBitField = FirstField->isBitField();
9593     const bool IsSecondBitField = SecondField->isBitField();
9594     if (IsFirstBitField != IsSecondBitField) {
9595       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9596                        FirstField->getSourceRange(), FieldSingleBitField)
9597           << FirstII << IsFirstBitField;
9598       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9599                       SecondField->getSourceRange(), FieldSingleBitField)
9600           << SecondII << IsSecondBitField;
9601       return true;
9602     }
9603 
9604     if (IsFirstBitField && IsSecondBitField) {
9605       unsigned FirstBitWidthHash =
9606           ComputeODRHash(FirstField->getBitWidth());
9607       unsigned SecondBitWidthHash =
9608           ComputeODRHash(SecondField->getBitWidth());
9609       if (FirstBitWidthHash != SecondBitWidthHash) {
9610         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9611                          FirstField->getSourceRange(),
9612                          FieldDifferentWidthBitField)
9613             << FirstII << FirstField->getBitWidth()->getSourceRange();
9614         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9615                         SecondField->getSourceRange(),
9616                         FieldDifferentWidthBitField)
9617             << SecondII << SecondField->getBitWidth()->getSourceRange();
9618         return true;
9619       }
9620     }
9621 
9622     if (!PP.getLangOpts().CPlusPlus)
9623       return false;
9624 
9625     const bool IsFirstMutable = FirstField->isMutable();
9626     const bool IsSecondMutable = SecondField->isMutable();
9627     if (IsFirstMutable != IsSecondMutable) {
9628       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9629                        FirstField->getSourceRange(), FieldSingleMutable)
9630           << FirstII << IsFirstMutable;
9631       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9632                       SecondField->getSourceRange(), FieldSingleMutable)
9633           << SecondII << IsSecondMutable;
9634       return true;
9635     }
9636 
9637     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9638     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9639     if ((!FirstInitializer && SecondInitializer) ||
9640         (FirstInitializer && !SecondInitializer)) {
9641       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9642                        FirstField->getSourceRange(), FieldSingleInitializer)
9643           << FirstII << (FirstInitializer != nullptr);
9644       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9645                       SecondField->getSourceRange(), FieldSingleInitializer)
9646           << SecondII << (SecondInitializer != nullptr);
9647       return true;
9648     }
9649 
9650     if (FirstInitializer && SecondInitializer) {
9651       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9652       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9653       if (FirstInitHash != SecondInitHash) {
9654         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9655                          FirstField->getSourceRange(),
9656                          FieldDifferentInitializers)
9657             << FirstII << FirstInitializer->getSourceRange();
9658         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9659                         SecondField->getSourceRange(),
9660                         FieldDifferentInitializers)
9661             << SecondII << SecondInitializer->getSourceRange();
9662         return true;
9663       }
9664     }
9665 
9666     return false;
9667   };
9668 
9669   auto ODRDiagTypeDefOrAlias =
9670       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9671           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9672           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9673           bool IsTypeAlias) {
9674         auto FirstName = FirstTD->getDeclName();
9675         auto SecondName = SecondTD->getDeclName();
9676         if (FirstName != SecondName) {
9677           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9678                            FirstTD->getSourceRange(), TypedefName)
9679               << IsTypeAlias << FirstName;
9680           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9681                           SecondTD->getSourceRange(), TypedefName)
9682               << IsTypeAlias << SecondName;
9683           return true;
9684         }
9685 
9686         QualType FirstType = FirstTD->getUnderlyingType();
9687         QualType SecondType = SecondTD->getUnderlyingType();
9688         if (ComputeQualTypeODRHash(FirstType) !=
9689             ComputeQualTypeODRHash(SecondType)) {
9690           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9691                            FirstTD->getSourceRange(), TypedefType)
9692               << IsTypeAlias << FirstName << FirstType;
9693           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9694                           SecondTD->getSourceRange(), TypedefType)
9695               << IsTypeAlias << SecondName << SecondType;
9696           return true;
9697         }
9698 
9699         return false;
9700   };
9701 
9702   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9703                      &ComputeQualTypeODRHash, &ComputeODRHash,
9704                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9705                            StringRef SecondModule, VarDecl *FirstVD,
9706                            VarDecl *SecondVD) {
9707     auto FirstName = FirstVD->getDeclName();
9708     auto SecondName = SecondVD->getDeclName();
9709     if (FirstName != SecondName) {
9710       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9711                        FirstVD->getSourceRange(), VarName)
9712           << FirstName;
9713       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9714                       SecondVD->getSourceRange(), VarName)
9715           << SecondName;
9716       return true;
9717     }
9718 
9719     QualType FirstType = FirstVD->getType();
9720     QualType SecondType = SecondVD->getType();
9721     if (ComputeQualTypeODRHash(FirstType) !=
9722         ComputeQualTypeODRHash(SecondType)) {
9723       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9724                        FirstVD->getSourceRange(), VarType)
9725           << FirstName << FirstType;
9726       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9727                       SecondVD->getSourceRange(), VarType)
9728           << SecondName << SecondType;
9729       return true;
9730     }
9731 
9732     if (!PP.getLangOpts().CPlusPlus)
9733       return false;
9734 
9735     const Expr *FirstInit = FirstVD->getInit();
9736     const Expr *SecondInit = SecondVD->getInit();
9737     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9738       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9739                        FirstVD->getSourceRange(), VarSingleInitializer)
9740           << FirstName << (FirstInit == nullptr)
9741           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9742       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9743                       SecondVD->getSourceRange(), VarSingleInitializer)
9744           << SecondName << (SecondInit == nullptr)
9745           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9746       return true;
9747     }
9748 
9749     if (FirstInit && SecondInit &&
9750         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9751       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9752                        FirstVD->getSourceRange(), VarDifferentInitializer)
9753           << FirstName << FirstInit->getSourceRange();
9754       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9755                       SecondVD->getSourceRange(), VarDifferentInitializer)
9756           << SecondName << SecondInit->getSourceRange();
9757       return true;
9758     }
9759 
9760     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9761     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9762     if (FirstIsConstexpr != SecondIsConstexpr) {
9763       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9764                        FirstVD->getSourceRange(), VarConstexpr)
9765           << FirstName << FirstIsConstexpr;
9766       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9767                       SecondVD->getSourceRange(), VarConstexpr)
9768           << SecondName << SecondIsConstexpr;
9769       return true;
9770     }
9771     return false;
9772   };
9773 
9774   auto DifferenceSelector = [](Decl *D) {
9775     assert(D && "valid Decl required");
9776     switch (D->getKind()) {
9777     default:
9778       return Other;
9779     case Decl::AccessSpec:
9780       switch (D->getAccess()) {
9781       case AS_public:
9782         return PublicSpecifer;
9783       case AS_private:
9784         return PrivateSpecifer;
9785       case AS_protected:
9786         return ProtectedSpecifer;
9787       case AS_none:
9788         break;
9789       }
9790       llvm_unreachable("Invalid access specifier");
9791     case Decl::StaticAssert:
9792       return StaticAssert;
9793     case Decl::Field:
9794       return Field;
9795     case Decl::CXXMethod:
9796     case Decl::CXXConstructor:
9797     case Decl::CXXDestructor:
9798       return CXXMethod;
9799     case Decl::TypeAlias:
9800       return TypeAlias;
9801     case Decl::Typedef:
9802       return TypeDef;
9803     case Decl::Var:
9804       return Var;
9805     case Decl::Friend:
9806       return Friend;
9807     case Decl::FunctionTemplate:
9808       return FunctionTemplate;
9809     }
9810   };
9811 
9812   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9813   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9814                                                  RecordDecl *Record,
9815                                                  const DeclContext *DC) {
9816     for (auto *D : Record->decls()) {
9817       if (!ODRHash::isWhitelistedDecl(D, DC))
9818         continue;
9819       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9820     }
9821   };
9822 
9823   struct DiffResult {
9824     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9825     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9826   };
9827 
9828   // If there is a diagnoseable difference, FirstDiffType and
9829   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9830   // filled in if not EndOfClass.
9831   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9832                                              DeclHashes &SecondHashes) {
9833     DiffResult DR;
9834     auto FirstIt = FirstHashes.begin();
9835     auto SecondIt = SecondHashes.begin();
9836     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9837       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9838           FirstIt->second == SecondIt->second) {
9839         ++FirstIt;
9840         ++SecondIt;
9841         continue;
9842       }
9843 
9844       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9845       DR.SecondDecl =
9846           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9847 
9848       DR.FirstDiffType =
9849           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9850       DR.SecondDiffType =
9851           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9852       return DR;
9853     }
9854     return DR;
9855   };
9856 
9857   // Use this to diagnose that an unexpected Decl was encountered
9858   // or no difference was detected. This causes a generic error
9859   // message to be emitted.
9860   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9861                                       StringRef FirstModule,
9862                                       NamedDecl *SecondRecord,
9863                                       StringRef SecondModule) {
9864     Diag(FirstRecord->getLocation(),
9865          diag::err_module_odr_violation_different_definitions)
9866         << FirstRecord << FirstModule.empty() << FirstModule;
9867 
9868     if (DR.FirstDecl) {
9869       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9870           << FirstRecord << DR.FirstDecl->getSourceRange();
9871     }
9872 
9873     Diag(SecondRecord->getLocation(),
9874          diag::note_module_odr_violation_different_definitions)
9875         << SecondModule;
9876 
9877     if (DR.SecondDecl) {
9878       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9879           << DR.SecondDecl->getSourceRange();
9880     }
9881   };
9882 
9883   auto DiagnoseODRMismatch =
9884       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9885              NamedDecl *SecondRecord, StringRef SecondModule) {
9886         SourceLocation FirstLoc;
9887         SourceRange FirstRange;
9888         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9889         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9890           FirstLoc = FirstTag->getBraceRange().getEnd();
9891         } else {
9892           FirstLoc = DR.FirstDecl->getLocation();
9893           FirstRange = DR.FirstDecl->getSourceRange();
9894         }
9895         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9896             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9897             << DR.FirstDiffType;
9898 
9899         SourceLocation SecondLoc;
9900         SourceRange SecondRange;
9901         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9902         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9903           SecondLoc = SecondTag->getBraceRange().getEnd();
9904         } else {
9905           SecondLoc = DR.SecondDecl->getLocation();
9906           SecondRange = DR.SecondDecl->getSourceRange();
9907         }
9908         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9909             << SecondModule << SecondRange << DR.SecondDiffType;
9910       };
9911 
9912   // Issue any pending ODR-failure diagnostics.
9913   for (auto &Merge : OdrMergeFailures) {
9914     // If we've already pointed out a specific problem with this class, don't
9915     // bother issuing a general "something's different" diagnostic.
9916     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9917       continue;
9918 
9919     bool Diagnosed = false;
9920     CXXRecordDecl *FirstRecord = Merge.first;
9921     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9922     for (auto &RecordPair : Merge.second) {
9923       CXXRecordDecl *SecondRecord = RecordPair.first;
9924       // Multiple different declarations got merged together; tell the user
9925       // where they came from.
9926       if (FirstRecord == SecondRecord)
9927         continue;
9928 
9929       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9930 
9931       auto *FirstDD = FirstRecord->DefinitionData;
9932       auto *SecondDD = RecordPair.second;
9933 
9934       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
9935 
9936       // Diagnostics from DefinitionData are emitted here.
9937       if (FirstDD != SecondDD) {
9938         enum ODRDefinitionDataDifference {
9939           NumBases,
9940           NumVBases,
9941           BaseType,
9942           BaseVirtual,
9943           BaseAccess,
9944         };
9945         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
9946                                  this](SourceLocation Loc, SourceRange Range,
9947                                        ODRDefinitionDataDifference DiffType) {
9948           return Diag(Loc, diag::err_module_odr_violation_definition_data)
9949                  << FirstRecord << FirstModule.empty() << FirstModule << Range
9950                  << DiffType;
9951         };
9952         auto ODRDiagBaseNote = [&SecondModule,
9953                                 this](SourceLocation Loc, SourceRange Range,
9954                                       ODRDefinitionDataDifference DiffType) {
9955           return Diag(Loc, diag::note_module_odr_violation_definition_data)
9956                  << SecondModule << Range << DiffType;
9957         };
9958 
9959         unsigned FirstNumBases = FirstDD->NumBases;
9960         unsigned FirstNumVBases = FirstDD->NumVBases;
9961         unsigned SecondNumBases = SecondDD->NumBases;
9962         unsigned SecondNumVBases = SecondDD->NumVBases;
9963 
9964         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
9965           unsigned NumBases = DD->NumBases;
9966           if (NumBases == 0) return SourceRange();
9967           auto bases = DD->bases();
9968           return SourceRange(bases[0].getBeginLoc(),
9969                              bases[NumBases - 1].getEndLoc());
9970         };
9971 
9972         if (FirstNumBases != SecondNumBases) {
9973           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9974                            NumBases)
9975               << FirstNumBases;
9976           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9977                           NumBases)
9978               << SecondNumBases;
9979           Diagnosed = true;
9980           break;
9981         }
9982 
9983         if (FirstNumVBases != SecondNumVBases) {
9984           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9985                            NumVBases)
9986               << FirstNumVBases;
9987           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9988                           NumVBases)
9989               << SecondNumVBases;
9990           Diagnosed = true;
9991           break;
9992         }
9993 
9994         auto FirstBases = FirstDD->bases();
9995         auto SecondBases = SecondDD->bases();
9996         unsigned i = 0;
9997         for (i = 0; i < FirstNumBases; ++i) {
9998           auto FirstBase = FirstBases[i];
9999           auto SecondBase = SecondBases[i];
10000           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10001               ComputeQualTypeODRHash(SecondBase.getType())) {
10002             ODRDiagBaseError(FirstRecord->getLocation(),
10003                              FirstBase.getSourceRange(), BaseType)
10004                 << (i + 1) << FirstBase.getType();
10005             ODRDiagBaseNote(SecondRecord->getLocation(),
10006                             SecondBase.getSourceRange(), BaseType)
10007                 << (i + 1) << SecondBase.getType();
10008             break;
10009           }
10010 
10011           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10012             ODRDiagBaseError(FirstRecord->getLocation(),
10013                              FirstBase.getSourceRange(), BaseVirtual)
10014                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10015             ODRDiagBaseNote(SecondRecord->getLocation(),
10016                             SecondBase.getSourceRange(), BaseVirtual)
10017                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10018             break;
10019           }
10020 
10021           if (FirstBase.getAccessSpecifierAsWritten() !=
10022               SecondBase.getAccessSpecifierAsWritten()) {
10023             ODRDiagBaseError(FirstRecord->getLocation(),
10024                              FirstBase.getSourceRange(), BaseAccess)
10025                 << (i + 1) << FirstBase.getType()
10026                 << (int)FirstBase.getAccessSpecifierAsWritten();
10027             ODRDiagBaseNote(SecondRecord->getLocation(),
10028                             SecondBase.getSourceRange(), BaseAccess)
10029                 << (i + 1) << SecondBase.getType()
10030                 << (int)SecondBase.getAccessSpecifierAsWritten();
10031             break;
10032           }
10033         }
10034 
10035         if (i != FirstNumBases) {
10036           Diagnosed = true;
10037           break;
10038         }
10039       }
10040 
10041       const ClassTemplateDecl *FirstTemplate =
10042           FirstRecord->getDescribedClassTemplate();
10043       const ClassTemplateDecl *SecondTemplate =
10044           SecondRecord->getDescribedClassTemplate();
10045 
10046       assert(!FirstTemplate == !SecondTemplate &&
10047              "Both pointers should be null or non-null");
10048 
10049       enum ODRTemplateDifference {
10050         ParamEmptyName,
10051         ParamName,
10052         ParamSingleDefaultArgument,
10053         ParamDifferentDefaultArgument,
10054       };
10055 
10056       if (FirstTemplate && SecondTemplate) {
10057         DeclHashes FirstTemplateHashes;
10058         DeclHashes SecondTemplateHashes;
10059 
10060         auto PopulateTemplateParameterHashs =
10061             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10062                                      const ClassTemplateDecl *TD) {
10063               for (auto *D : TD->getTemplateParameters()->asArray()) {
10064                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10065               }
10066             };
10067 
10068         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10069         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10070 
10071         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10072                "Number of template parameters should be equal.");
10073 
10074         auto FirstIt = FirstTemplateHashes.begin();
10075         auto FirstEnd = FirstTemplateHashes.end();
10076         auto SecondIt = SecondTemplateHashes.begin();
10077         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10078           if (FirstIt->second == SecondIt->second)
10079             continue;
10080 
10081           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10082                                           SourceLocation Loc, SourceRange Range,
10083                                           ODRTemplateDifference DiffType) {
10084             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10085                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10086                    << DiffType;
10087           };
10088           auto ODRDiagTemplateNote = [&SecondModule, this](
10089                                          SourceLocation Loc, SourceRange Range,
10090                                          ODRTemplateDifference DiffType) {
10091             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10092                    << SecondModule << Range << DiffType;
10093           };
10094 
10095           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10096           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10097 
10098           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10099                  "Parameter Decl's should be the same kind.");
10100 
10101           DeclarationName FirstName = FirstDecl->getDeclName();
10102           DeclarationName SecondName = SecondDecl->getDeclName();
10103 
10104           if (FirstName != SecondName) {
10105             const bool FirstNameEmpty =
10106                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10107             const bool SecondNameEmpty =
10108                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10109             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10110                    "Both template parameters cannot be unnamed.");
10111             ODRDiagTemplateError(FirstDecl->getLocation(),
10112                                  FirstDecl->getSourceRange(),
10113                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10114                 << FirstName;
10115             ODRDiagTemplateNote(SecondDecl->getLocation(),
10116                                 SecondDecl->getSourceRange(),
10117                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10118                 << SecondName;
10119             break;
10120           }
10121 
10122           switch (FirstDecl->getKind()) {
10123           default:
10124             llvm_unreachable("Invalid template parameter type.");
10125           case Decl::TemplateTypeParm: {
10126             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10127             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10128             const bool HasFirstDefaultArgument =
10129                 FirstParam->hasDefaultArgument() &&
10130                 !FirstParam->defaultArgumentWasInherited();
10131             const bool HasSecondDefaultArgument =
10132                 SecondParam->hasDefaultArgument() &&
10133                 !SecondParam->defaultArgumentWasInherited();
10134 
10135             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10136               ODRDiagTemplateError(FirstDecl->getLocation(),
10137                                    FirstDecl->getSourceRange(),
10138                                    ParamSingleDefaultArgument)
10139                   << HasFirstDefaultArgument;
10140               ODRDiagTemplateNote(SecondDecl->getLocation(),
10141                                   SecondDecl->getSourceRange(),
10142                                   ParamSingleDefaultArgument)
10143                   << HasSecondDefaultArgument;
10144               break;
10145             }
10146 
10147             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10148                    "Expecting default arguments.");
10149 
10150             ODRDiagTemplateError(FirstDecl->getLocation(),
10151                                  FirstDecl->getSourceRange(),
10152                                  ParamDifferentDefaultArgument);
10153             ODRDiagTemplateNote(SecondDecl->getLocation(),
10154                                 SecondDecl->getSourceRange(),
10155                                 ParamDifferentDefaultArgument);
10156 
10157             break;
10158           }
10159           case Decl::NonTypeTemplateParm: {
10160             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10161             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10162             const bool HasFirstDefaultArgument =
10163                 FirstParam->hasDefaultArgument() &&
10164                 !FirstParam->defaultArgumentWasInherited();
10165             const bool HasSecondDefaultArgument =
10166                 SecondParam->hasDefaultArgument() &&
10167                 !SecondParam->defaultArgumentWasInherited();
10168 
10169             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10170               ODRDiagTemplateError(FirstDecl->getLocation(),
10171                                    FirstDecl->getSourceRange(),
10172                                    ParamSingleDefaultArgument)
10173                   << HasFirstDefaultArgument;
10174               ODRDiagTemplateNote(SecondDecl->getLocation(),
10175                                   SecondDecl->getSourceRange(),
10176                                   ParamSingleDefaultArgument)
10177                   << HasSecondDefaultArgument;
10178               break;
10179             }
10180 
10181             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10182                    "Expecting default arguments.");
10183 
10184             ODRDiagTemplateError(FirstDecl->getLocation(),
10185                                  FirstDecl->getSourceRange(),
10186                                  ParamDifferentDefaultArgument);
10187             ODRDiagTemplateNote(SecondDecl->getLocation(),
10188                                 SecondDecl->getSourceRange(),
10189                                 ParamDifferentDefaultArgument);
10190 
10191             break;
10192           }
10193           case Decl::TemplateTemplateParm: {
10194             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10195             const auto *SecondParam =
10196                 cast<TemplateTemplateParmDecl>(SecondDecl);
10197             const bool HasFirstDefaultArgument =
10198                 FirstParam->hasDefaultArgument() &&
10199                 !FirstParam->defaultArgumentWasInherited();
10200             const bool HasSecondDefaultArgument =
10201                 SecondParam->hasDefaultArgument() &&
10202                 !SecondParam->defaultArgumentWasInherited();
10203 
10204             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10205               ODRDiagTemplateError(FirstDecl->getLocation(),
10206                                    FirstDecl->getSourceRange(),
10207                                    ParamSingleDefaultArgument)
10208                   << HasFirstDefaultArgument;
10209               ODRDiagTemplateNote(SecondDecl->getLocation(),
10210                                   SecondDecl->getSourceRange(),
10211                                   ParamSingleDefaultArgument)
10212                   << HasSecondDefaultArgument;
10213               break;
10214             }
10215 
10216             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10217                    "Expecting default arguments.");
10218 
10219             ODRDiagTemplateError(FirstDecl->getLocation(),
10220                                  FirstDecl->getSourceRange(),
10221                                  ParamDifferentDefaultArgument);
10222             ODRDiagTemplateNote(SecondDecl->getLocation(),
10223                                 SecondDecl->getSourceRange(),
10224                                 ParamDifferentDefaultArgument);
10225 
10226             break;
10227           }
10228           }
10229 
10230           break;
10231         }
10232 
10233         if (FirstIt != FirstEnd) {
10234           Diagnosed = true;
10235           break;
10236         }
10237       }
10238 
10239       DeclHashes FirstHashes;
10240       DeclHashes SecondHashes;
10241       const DeclContext *DC = FirstRecord;
10242       PopulateHashes(FirstHashes, FirstRecord, DC);
10243       PopulateHashes(SecondHashes, SecondRecord, DC);
10244 
10245       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10246       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10247       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10248       Decl *FirstDecl = DR.FirstDecl;
10249       Decl *SecondDecl = DR.SecondDecl;
10250 
10251       if (FirstDiffType == Other || SecondDiffType == Other) {
10252         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10253                               SecondModule);
10254         Diagnosed = true;
10255         break;
10256       }
10257 
10258       if (FirstDiffType != SecondDiffType) {
10259         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10260                             SecondModule);
10261         Diagnosed = true;
10262         break;
10263       }
10264 
10265       assert(FirstDiffType == SecondDiffType);
10266 
10267       switch (FirstDiffType) {
10268       case Other:
10269       case EndOfClass:
10270       case PublicSpecifer:
10271       case PrivateSpecifer:
10272       case ProtectedSpecifer:
10273         llvm_unreachable("Invalid diff type");
10274 
10275       case StaticAssert: {
10276         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10277         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10278 
10279         Expr *FirstExpr = FirstSA->getAssertExpr();
10280         Expr *SecondExpr = SecondSA->getAssertExpr();
10281         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10282         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10283         if (FirstODRHash != SecondODRHash) {
10284           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10285                            FirstExpr->getSourceRange(), StaticAssertCondition);
10286           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10287                           SecondExpr->getSourceRange(), StaticAssertCondition);
10288           Diagnosed = true;
10289           break;
10290         }
10291 
10292         StringLiteral *FirstStr = FirstSA->getMessage();
10293         StringLiteral *SecondStr = SecondSA->getMessage();
10294         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10295         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10296           SourceLocation FirstLoc, SecondLoc;
10297           SourceRange FirstRange, SecondRange;
10298           if (FirstStr) {
10299             FirstLoc = FirstStr->getBeginLoc();
10300             FirstRange = FirstStr->getSourceRange();
10301           } else {
10302             FirstLoc = FirstSA->getBeginLoc();
10303             FirstRange = FirstSA->getSourceRange();
10304           }
10305           if (SecondStr) {
10306             SecondLoc = SecondStr->getBeginLoc();
10307             SecondRange = SecondStr->getSourceRange();
10308           } else {
10309             SecondLoc = SecondSA->getBeginLoc();
10310             SecondRange = SecondSA->getSourceRange();
10311           }
10312           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10313                            StaticAssertOnlyMessage)
10314               << (FirstStr == nullptr);
10315           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10316                           StaticAssertOnlyMessage)
10317               << (SecondStr == nullptr);
10318           Diagnosed = true;
10319           break;
10320         }
10321 
10322         if (FirstStr && SecondStr &&
10323             FirstStr->getString() != SecondStr->getString()) {
10324           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10325                            FirstStr->getSourceRange(), StaticAssertMessage);
10326           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10327                           SecondStr->getSourceRange(), StaticAssertMessage);
10328           Diagnosed = true;
10329           break;
10330         }
10331         break;
10332       }
10333       case Field: {
10334         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10335                                  cast<FieldDecl>(FirstDecl),
10336                                  cast<FieldDecl>(SecondDecl));
10337         break;
10338       }
10339       case CXXMethod: {
10340         enum {
10341           DiagMethod,
10342           DiagConstructor,
10343           DiagDestructor,
10344         } FirstMethodType,
10345             SecondMethodType;
10346         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10347           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10348           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10349           return DiagMethod;
10350         };
10351         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10352         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10353         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10354         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10355         auto FirstName = FirstMethod->getDeclName();
10356         auto SecondName = SecondMethod->getDeclName();
10357         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10358           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10359                            FirstMethod->getSourceRange(), MethodName)
10360               << FirstMethodType << FirstName;
10361           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10362                           SecondMethod->getSourceRange(), MethodName)
10363               << SecondMethodType << SecondName;
10364 
10365           Diagnosed = true;
10366           break;
10367         }
10368 
10369         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10370         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10371         if (FirstDeleted != SecondDeleted) {
10372           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10373                            FirstMethod->getSourceRange(), MethodDeleted)
10374               << FirstMethodType << FirstName << FirstDeleted;
10375 
10376           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10377                           SecondMethod->getSourceRange(), MethodDeleted)
10378               << SecondMethodType << SecondName << SecondDeleted;
10379           Diagnosed = true;
10380           break;
10381         }
10382 
10383         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10384         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10385         if (FirstDefaulted != SecondDefaulted) {
10386           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10387                            FirstMethod->getSourceRange(), MethodDefaulted)
10388               << FirstMethodType << FirstName << FirstDefaulted;
10389 
10390           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10391                           SecondMethod->getSourceRange(), MethodDefaulted)
10392               << SecondMethodType << SecondName << SecondDefaulted;
10393           Diagnosed = true;
10394           break;
10395         }
10396 
10397         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10398         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10399         const bool FirstPure = FirstMethod->isPure();
10400         const bool SecondPure = SecondMethod->isPure();
10401         if ((FirstVirtual || SecondVirtual) &&
10402             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10403           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10404                            FirstMethod->getSourceRange(), MethodVirtual)
10405               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10406           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10407                           SecondMethod->getSourceRange(), MethodVirtual)
10408               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10409           Diagnosed = true;
10410           break;
10411         }
10412 
10413         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10414         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10415         // class needs to be checked instead.
10416         const auto FirstStorage = FirstMethod->getStorageClass();
10417         const auto SecondStorage = SecondMethod->getStorageClass();
10418         const bool FirstStatic = FirstStorage == SC_Static;
10419         const bool SecondStatic = SecondStorage == SC_Static;
10420         if (FirstStatic != SecondStatic) {
10421           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10422                            FirstMethod->getSourceRange(), MethodStatic)
10423               << FirstMethodType << FirstName << FirstStatic;
10424           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10425                           SecondMethod->getSourceRange(), MethodStatic)
10426               << SecondMethodType << SecondName << SecondStatic;
10427           Diagnosed = true;
10428           break;
10429         }
10430 
10431         const bool FirstVolatile = FirstMethod->isVolatile();
10432         const bool SecondVolatile = SecondMethod->isVolatile();
10433         if (FirstVolatile != SecondVolatile) {
10434           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10435                            FirstMethod->getSourceRange(), MethodVolatile)
10436               << FirstMethodType << FirstName << FirstVolatile;
10437           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10438                           SecondMethod->getSourceRange(), MethodVolatile)
10439               << SecondMethodType << SecondName << SecondVolatile;
10440           Diagnosed = true;
10441           break;
10442         }
10443 
10444         const bool FirstConst = FirstMethod->isConst();
10445         const bool SecondConst = SecondMethod->isConst();
10446         if (FirstConst != SecondConst) {
10447           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10448                            FirstMethod->getSourceRange(), MethodConst)
10449               << FirstMethodType << FirstName << FirstConst;
10450           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10451                           SecondMethod->getSourceRange(), MethodConst)
10452               << SecondMethodType << SecondName << SecondConst;
10453           Diagnosed = true;
10454           break;
10455         }
10456 
10457         const bool FirstInline = FirstMethod->isInlineSpecified();
10458         const bool SecondInline = SecondMethod->isInlineSpecified();
10459         if (FirstInline != SecondInline) {
10460           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10461                            FirstMethod->getSourceRange(), MethodInline)
10462               << FirstMethodType << FirstName << FirstInline;
10463           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10464                           SecondMethod->getSourceRange(), MethodInline)
10465               << SecondMethodType << SecondName << SecondInline;
10466           Diagnosed = true;
10467           break;
10468         }
10469 
10470         const unsigned FirstNumParameters = FirstMethod->param_size();
10471         const unsigned SecondNumParameters = SecondMethod->param_size();
10472         if (FirstNumParameters != SecondNumParameters) {
10473           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10474                            FirstMethod->getSourceRange(),
10475                            MethodNumberParameters)
10476               << FirstMethodType << FirstName << FirstNumParameters;
10477           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10478                           SecondMethod->getSourceRange(),
10479                           MethodNumberParameters)
10480               << SecondMethodType << SecondName << SecondNumParameters;
10481           Diagnosed = true;
10482           break;
10483         }
10484 
10485         // Need this status boolean to know when break out of the switch.
10486         bool ParameterMismatch = false;
10487         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10488           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10489           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10490 
10491           QualType FirstParamType = FirstParam->getType();
10492           QualType SecondParamType = SecondParam->getType();
10493           if (FirstParamType != SecondParamType &&
10494               ComputeQualTypeODRHash(FirstParamType) !=
10495                   ComputeQualTypeODRHash(SecondParamType)) {
10496             if (const DecayedType *ParamDecayedType =
10497                     FirstParamType->getAs<DecayedType>()) {
10498               ODRDiagDeclError(
10499                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10500                   FirstMethod->getSourceRange(), MethodParameterType)
10501                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10502                   << true << ParamDecayedType->getOriginalType();
10503             } else {
10504               ODRDiagDeclError(
10505                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10506                   FirstMethod->getSourceRange(), MethodParameterType)
10507                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10508                   << false;
10509             }
10510 
10511             if (const DecayedType *ParamDecayedType =
10512                     SecondParamType->getAs<DecayedType>()) {
10513               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10514                               SecondMethod->getSourceRange(),
10515                               MethodParameterType)
10516                   << SecondMethodType << SecondName << (I + 1)
10517                   << SecondParamType << true
10518                   << ParamDecayedType->getOriginalType();
10519             } else {
10520               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10521                               SecondMethod->getSourceRange(),
10522                               MethodParameterType)
10523                   << SecondMethodType << SecondName << (I + 1)
10524                   << SecondParamType << false;
10525             }
10526             ParameterMismatch = true;
10527             break;
10528           }
10529 
10530           DeclarationName FirstParamName = FirstParam->getDeclName();
10531           DeclarationName SecondParamName = SecondParam->getDeclName();
10532           if (FirstParamName != SecondParamName) {
10533             ODRDiagDeclError(FirstRecord, FirstModule,
10534                              FirstMethod->getLocation(),
10535                              FirstMethod->getSourceRange(), MethodParameterName)
10536                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10537             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10538                             SecondMethod->getSourceRange(), MethodParameterName)
10539                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10540             ParameterMismatch = true;
10541             break;
10542           }
10543 
10544           const Expr *FirstInit = FirstParam->getInit();
10545           const Expr *SecondInit = SecondParam->getInit();
10546           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10547             ODRDiagDeclError(FirstRecord, FirstModule,
10548                              FirstMethod->getLocation(),
10549                              FirstMethod->getSourceRange(),
10550                              MethodParameterSingleDefaultArgument)
10551                 << FirstMethodType << FirstName << (I + 1)
10552                 << (FirstInit == nullptr)
10553                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10554             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10555                             SecondMethod->getSourceRange(),
10556                             MethodParameterSingleDefaultArgument)
10557                 << SecondMethodType << SecondName << (I + 1)
10558                 << (SecondInit == nullptr)
10559                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10560             ParameterMismatch = true;
10561             break;
10562           }
10563 
10564           if (FirstInit && SecondInit &&
10565               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10566             ODRDiagDeclError(FirstRecord, FirstModule,
10567                              FirstMethod->getLocation(),
10568                              FirstMethod->getSourceRange(),
10569                              MethodParameterDifferentDefaultArgument)
10570                 << FirstMethodType << FirstName << (I + 1)
10571                 << FirstInit->getSourceRange();
10572             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10573                             SecondMethod->getSourceRange(),
10574                             MethodParameterDifferentDefaultArgument)
10575                 << SecondMethodType << SecondName << (I + 1)
10576                 << SecondInit->getSourceRange();
10577             ParameterMismatch = true;
10578             break;
10579 
10580           }
10581         }
10582 
10583         if (ParameterMismatch) {
10584           Diagnosed = true;
10585           break;
10586         }
10587 
10588         const auto *FirstTemplateArgs =
10589             FirstMethod->getTemplateSpecializationArgs();
10590         const auto *SecondTemplateArgs =
10591             SecondMethod->getTemplateSpecializationArgs();
10592 
10593         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10594             (!FirstTemplateArgs && SecondTemplateArgs)) {
10595           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10596                            FirstMethod->getSourceRange(),
10597                            MethodNoTemplateArguments)
10598               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10599           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10600                           SecondMethod->getSourceRange(),
10601                           MethodNoTemplateArguments)
10602               << SecondMethodType << SecondName
10603               << (SecondTemplateArgs != nullptr);
10604 
10605           Diagnosed = true;
10606           break;
10607         }
10608 
10609         if (FirstTemplateArgs && SecondTemplateArgs) {
10610           // Remove pack expansions from argument list.
10611           auto ExpandTemplateArgumentList =
10612               [](const TemplateArgumentList *TAL) {
10613                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10614                 for (const TemplateArgument &TA : TAL->asArray()) {
10615                   if (TA.getKind() != TemplateArgument::Pack) {
10616                     ExpandedList.push_back(&TA);
10617                     continue;
10618                   }
10619                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10620                     ExpandedList.push_back(&PackTA);
10621                   }
10622                 }
10623                 return ExpandedList;
10624               };
10625           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10626               ExpandTemplateArgumentList(FirstTemplateArgs);
10627           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10628               ExpandTemplateArgumentList(SecondTemplateArgs);
10629 
10630           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10631             ODRDiagDeclError(FirstRecord, FirstModule,
10632                              FirstMethod->getLocation(),
10633                              FirstMethod->getSourceRange(),
10634                              MethodDifferentNumberTemplateArguments)
10635                 << FirstMethodType << FirstName
10636                 << (unsigned)FirstExpandedList.size();
10637             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10638                             SecondMethod->getSourceRange(),
10639                             MethodDifferentNumberTemplateArguments)
10640                 << SecondMethodType << SecondName
10641                 << (unsigned)SecondExpandedList.size();
10642 
10643             Diagnosed = true;
10644             break;
10645           }
10646 
10647           bool TemplateArgumentMismatch = false;
10648           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10649             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10650                                    &SecondTA = *SecondExpandedList[i];
10651             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10652                 ComputeTemplateArgumentODRHash(SecondTA)) {
10653               continue;
10654             }
10655 
10656             ODRDiagDeclError(
10657                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10658                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10659                 << FirstMethodType << FirstName << FirstTA << i + 1;
10660             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10661                             SecondMethod->getSourceRange(),
10662                             MethodDifferentTemplateArgument)
10663                 << SecondMethodType << SecondName << SecondTA << i + 1;
10664 
10665             TemplateArgumentMismatch = true;
10666             break;
10667           }
10668 
10669           if (TemplateArgumentMismatch) {
10670             Diagnosed = true;
10671             break;
10672           }
10673         }
10674 
10675         // Compute the hash of the method as if it has no body.
10676         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10677           Hash.clear();
10678           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10679           return Hash.CalculateHash();
10680         };
10681 
10682         // Compare the hash generated to the hash stored.  A difference means
10683         // that a body was present in the original source.  Due to merging,
10684         // the stardard way of detecting a body will not work.
10685         const bool HasFirstBody =
10686             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10687         const bool HasSecondBody =
10688             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10689 
10690         if (HasFirstBody != HasSecondBody) {
10691           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10692                            FirstMethod->getSourceRange(), MethodSingleBody)
10693               << FirstMethodType << FirstName << HasFirstBody;
10694           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10695                           SecondMethod->getSourceRange(), MethodSingleBody)
10696               << SecondMethodType << SecondName << HasSecondBody;
10697           Diagnosed = true;
10698           break;
10699         }
10700 
10701         if (HasFirstBody && HasSecondBody) {
10702           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10703                            FirstMethod->getSourceRange(), MethodDifferentBody)
10704               << FirstMethodType << FirstName;
10705           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10706                           SecondMethod->getSourceRange(), MethodDifferentBody)
10707               << SecondMethodType << SecondName;
10708           Diagnosed = true;
10709           break;
10710         }
10711 
10712         break;
10713       }
10714       case TypeAlias:
10715       case TypeDef: {
10716         Diagnosed = ODRDiagTypeDefOrAlias(
10717             FirstRecord, FirstModule, SecondModule,
10718             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10719             FirstDiffType == TypeAlias);
10720         break;
10721       }
10722       case Var: {
10723         Diagnosed =
10724             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10725                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10726         break;
10727       }
10728       case Friend: {
10729         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10730         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10731 
10732         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10733         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10734 
10735         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10736         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10737 
10738         if (FirstND && SecondND) {
10739           ODRDiagDeclError(FirstRecord, FirstModule,
10740                            FirstFriend->getFriendLoc(),
10741                            FirstFriend->getSourceRange(), FriendFunction)
10742               << FirstND;
10743           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10744                           SecondFriend->getSourceRange(), FriendFunction)
10745               << SecondND;
10746 
10747           Diagnosed = true;
10748           break;
10749         }
10750 
10751         if (FirstTSI && SecondTSI) {
10752           QualType FirstFriendType = FirstTSI->getType();
10753           QualType SecondFriendType = SecondTSI->getType();
10754           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10755                  ComputeQualTypeODRHash(SecondFriendType));
10756           ODRDiagDeclError(FirstRecord, FirstModule,
10757                            FirstFriend->getFriendLoc(),
10758                            FirstFriend->getSourceRange(), FriendType)
10759               << FirstFriendType;
10760           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10761                           SecondFriend->getSourceRange(), FriendType)
10762               << SecondFriendType;
10763           Diagnosed = true;
10764           break;
10765         }
10766 
10767         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10768                          FirstFriend->getSourceRange(), FriendTypeFunction)
10769             << (FirstTSI == nullptr);
10770         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10771                         SecondFriend->getSourceRange(), FriendTypeFunction)
10772             << (SecondTSI == nullptr);
10773 
10774         Diagnosed = true;
10775         break;
10776       }
10777       case FunctionTemplate: {
10778         FunctionTemplateDecl *FirstTemplate =
10779             cast<FunctionTemplateDecl>(FirstDecl);
10780         FunctionTemplateDecl *SecondTemplate =
10781             cast<FunctionTemplateDecl>(SecondDecl);
10782 
10783         TemplateParameterList *FirstTPL =
10784             FirstTemplate->getTemplateParameters();
10785         TemplateParameterList *SecondTPL =
10786             SecondTemplate->getTemplateParameters();
10787 
10788         if (FirstTPL->size() != SecondTPL->size()) {
10789           ODRDiagDeclError(FirstRecord, FirstModule,
10790                            FirstTemplate->getLocation(),
10791                            FirstTemplate->getSourceRange(),
10792                            FunctionTemplateDifferentNumberParameters)
10793               << FirstTemplate << FirstTPL->size();
10794           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10795                           SecondTemplate->getSourceRange(),
10796                           FunctionTemplateDifferentNumberParameters)
10797               << SecondTemplate << SecondTPL->size();
10798 
10799           Diagnosed = true;
10800           break;
10801         }
10802 
10803         bool ParameterMismatch = false;
10804         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10805           NamedDecl *FirstParam = FirstTPL->getParam(i);
10806           NamedDecl *SecondParam = SecondTPL->getParam(i);
10807 
10808           if (FirstParam->getKind() != SecondParam->getKind()) {
10809             enum {
10810               TemplateTypeParameter,
10811               NonTypeTemplateParameter,
10812               TemplateTemplateParameter,
10813             };
10814             auto GetParamType = [](NamedDecl *D) {
10815               switch (D->getKind()) {
10816                 default:
10817                   llvm_unreachable("Unexpected template parameter type");
10818                 case Decl::TemplateTypeParm:
10819                   return TemplateTypeParameter;
10820                 case Decl::NonTypeTemplateParm:
10821                   return NonTypeTemplateParameter;
10822                 case Decl::TemplateTemplateParm:
10823                   return TemplateTemplateParameter;
10824               }
10825             };
10826 
10827             ODRDiagDeclError(FirstRecord, FirstModule,
10828                              FirstTemplate->getLocation(),
10829                              FirstTemplate->getSourceRange(),
10830                              FunctionTemplateParameterDifferentKind)
10831                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10832             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10833                             SecondTemplate->getSourceRange(),
10834                             FunctionTemplateParameterDifferentKind)
10835                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10836 
10837             ParameterMismatch = true;
10838             break;
10839           }
10840 
10841           if (FirstParam->getName() != SecondParam->getName()) {
10842             ODRDiagDeclError(
10843                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10844                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10845                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10846                 << FirstParam;
10847             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10848                             SecondTemplate->getSourceRange(),
10849                             FunctionTemplateParameterName)
10850                 << SecondTemplate << (i + 1)
10851                 << (bool)SecondParam->getIdentifier() << SecondParam;
10852             ParameterMismatch = true;
10853             break;
10854           }
10855 
10856           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10857               isa<TemplateTypeParmDecl>(SecondParam)) {
10858             TemplateTypeParmDecl *FirstTTPD =
10859                 cast<TemplateTypeParmDecl>(FirstParam);
10860             TemplateTypeParmDecl *SecondTTPD =
10861                 cast<TemplateTypeParmDecl>(SecondParam);
10862             bool HasFirstDefaultArgument =
10863                 FirstTTPD->hasDefaultArgument() &&
10864                 !FirstTTPD->defaultArgumentWasInherited();
10865             bool HasSecondDefaultArgument =
10866                 SecondTTPD->hasDefaultArgument() &&
10867                 !SecondTTPD->defaultArgumentWasInherited();
10868             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10869               ODRDiagDeclError(FirstRecord, FirstModule,
10870                                FirstTemplate->getLocation(),
10871                                FirstTemplate->getSourceRange(),
10872                                FunctionTemplateParameterSingleDefaultArgument)
10873                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10874               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10875                               SecondTemplate->getSourceRange(),
10876                               FunctionTemplateParameterSingleDefaultArgument)
10877                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10878               ParameterMismatch = true;
10879               break;
10880             }
10881 
10882             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10883               QualType FirstType = FirstTTPD->getDefaultArgument();
10884               QualType SecondType = SecondTTPD->getDefaultArgument();
10885               if (ComputeQualTypeODRHash(FirstType) !=
10886                   ComputeQualTypeODRHash(SecondType)) {
10887                 ODRDiagDeclError(
10888                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10889                     FirstTemplate->getSourceRange(),
10890                     FunctionTemplateParameterDifferentDefaultArgument)
10891                     << FirstTemplate << (i + 1) << FirstType;
10892                 ODRDiagDeclNote(
10893                     SecondModule, SecondTemplate->getLocation(),
10894                     SecondTemplate->getSourceRange(),
10895                     FunctionTemplateParameterDifferentDefaultArgument)
10896                     << SecondTemplate << (i + 1) << SecondType;
10897                 ParameterMismatch = true;
10898                 break;
10899               }
10900             }
10901 
10902             if (FirstTTPD->isParameterPack() !=
10903                 SecondTTPD->isParameterPack()) {
10904               ODRDiagDeclError(FirstRecord, FirstModule,
10905                                FirstTemplate->getLocation(),
10906                                FirstTemplate->getSourceRange(),
10907                                FunctionTemplatePackParameter)
10908                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10909               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10910                               SecondTemplate->getSourceRange(),
10911                               FunctionTemplatePackParameter)
10912                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10913               ParameterMismatch = true;
10914               break;
10915             }
10916           }
10917 
10918           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10919               isa<TemplateTemplateParmDecl>(SecondParam)) {
10920             TemplateTemplateParmDecl *FirstTTPD =
10921                 cast<TemplateTemplateParmDecl>(FirstParam);
10922             TemplateTemplateParmDecl *SecondTTPD =
10923                 cast<TemplateTemplateParmDecl>(SecondParam);
10924 
10925             TemplateParameterList *FirstTPL =
10926                 FirstTTPD->getTemplateParameters();
10927             TemplateParameterList *SecondTPL =
10928                 SecondTTPD->getTemplateParameters();
10929 
10930             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
10931                 ComputeTemplateParameterListODRHash(SecondTPL)) {
10932               ODRDiagDeclError(FirstRecord, FirstModule,
10933                                FirstTemplate->getLocation(),
10934                                FirstTemplate->getSourceRange(),
10935                                FunctionTemplateParameterDifferentType)
10936                   << FirstTemplate << (i + 1);
10937               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10938                               SecondTemplate->getSourceRange(),
10939                               FunctionTemplateParameterDifferentType)
10940                   << SecondTemplate << (i + 1);
10941               ParameterMismatch = true;
10942               break;
10943             }
10944 
10945             bool HasFirstDefaultArgument =
10946                 FirstTTPD->hasDefaultArgument() &&
10947                 !FirstTTPD->defaultArgumentWasInherited();
10948             bool HasSecondDefaultArgument =
10949                 SecondTTPD->hasDefaultArgument() &&
10950                 !SecondTTPD->defaultArgumentWasInherited();
10951             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10952               ODRDiagDeclError(FirstRecord, FirstModule,
10953                                FirstTemplate->getLocation(),
10954                                FirstTemplate->getSourceRange(),
10955                                FunctionTemplateParameterSingleDefaultArgument)
10956                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10957               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10958                               SecondTemplate->getSourceRange(),
10959                               FunctionTemplateParameterSingleDefaultArgument)
10960                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10961               ParameterMismatch = true;
10962               break;
10963             }
10964 
10965             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10966               TemplateArgument FirstTA =
10967                   FirstTTPD->getDefaultArgument().getArgument();
10968               TemplateArgument SecondTA =
10969                   SecondTTPD->getDefaultArgument().getArgument();
10970               if (ComputeTemplateArgumentODRHash(FirstTA) !=
10971                   ComputeTemplateArgumentODRHash(SecondTA)) {
10972                 ODRDiagDeclError(
10973                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10974                     FirstTemplate->getSourceRange(),
10975                     FunctionTemplateParameterDifferentDefaultArgument)
10976                     << FirstTemplate << (i + 1) << FirstTA;
10977                 ODRDiagDeclNote(
10978                     SecondModule, SecondTemplate->getLocation(),
10979                     SecondTemplate->getSourceRange(),
10980                     FunctionTemplateParameterDifferentDefaultArgument)
10981                     << SecondTemplate << (i + 1) << SecondTA;
10982                 ParameterMismatch = true;
10983                 break;
10984               }
10985             }
10986 
10987             if (FirstTTPD->isParameterPack() !=
10988                 SecondTTPD->isParameterPack()) {
10989               ODRDiagDeclError(FirstRecord, FirstModule,
10990                                FirstTemplate->getLocation(),
10991                                FirstTemplate->getSourceRange(),
10992                                FunctionTemplatePackParameter)
10993                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10994               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10995                               SecondTemplate->getSourceRange(),
10996                               FunctionTemplatePackParameter)
10997                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10998               ParameterMismatch = true;
10999               break;
11000             }
11001           }
11002 
11003           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11004               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11005             NonTypeTemplateParmDecl *FirstNTTPD =
11006                 cast<NonTypeTemplateParmDecl>(FirstParam);
11007             NonTypeTemplateParmDecl *SecondNTTPD =
11008                 cast<NonTypeTemplateParmDecl>(SecondParam);
11009 
11010             QualType FirstType = FirstNTTPD->getType();
11011             QualType SecondType = SecondNTTPD->getType();
11012             if (ComputeQualTypeODRHash(FirstType) !=
11013                 ComputeQualTypeODRHash(SecondType)) {
11014               ODRDiagDeclError(FirstRecord, FirstModule,
11015                                FirstTemplate->getLocation(),
11016                                FirstTemplate->getSourceRange(),
11017                                FunctionTemplateParameterDifferentType)
11018                   << FirstTemplate << (i + 1);
11019               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11020                               SecondTemplate->getSourceRange(),
11021                               FunctionTemplateParameterDifferentType)
11022                   << SecondTemplate << (i + 1);
11023               ParameterMismatch = true;
11024               break;
11025             }
11026 
11027             bool HasFirstDefaultArgument =
11028                 FirstNTTPD->hasDefaultArgument() &&
11029                 !FirstNTTPD->defaultArgumentWasInherited();
11030             bool HasSecondDefaultArgument =
11031                 SecondNTTPD->hasDefaultArgument() &&
11032                 !SecondNTTPD->defaultArgumentWasInherited();
11033             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11034               ODRDiagDeclError(FirstRecord, FirstModule,
11035                                FirstTemplate->getLocation(),
11036                                FirstTemplate->getSourceRange(),
11037                                FunctionTemplateParameterSingleDefaultArgument)
11038                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11039               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11040                               SecondTemplate->getSourceRange(),
11041                               FunctionTemplateParameterSingleDefaultArgument)
11042                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11043               ParameterMismatch = true;
11044               break;
11045             }
11046 
11047             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11048               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11049               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11050               if (ComputeODRHash(FirstDefaultArgument) !=
11051                   ComputeODRHash(SecondDefaultArgument)) {
11052                 ODRDiagDeclError(
11053                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11054                     FirstTemplate->getSourceRange(),
11055                     FunctionTemplateParameterDifferentDefaultArgument)
11056                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11057                 ODRDiagDeclNote(
11058                     SecondModule, SecondTemplate->getLocation(),
11059                     SecondTemplate->getSourceRange(),
11060                     FunctionTemplateParameterDifferentDefaultArgument)
11061                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11062                 ParameterMismatch = true;
11063                 break;
11064               }
11065             }
11066 
11067             if (FirstNTTPD->isParameterPack() !=
11068                 SecondNTTPD->isParameterPack()) {
11069               ODRDiagDeclError(FirstRecord, FirstModule,
11070                                FirstTemplate->getLocation(),
11071                                FirstTemplate->getSourceRange(),
11072                                FunctionTemplatePackParameter)
11073                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11074               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11075                               SecondTemplate->getSourceRange(),
11076                               FunctionTemplatePackParameter)
11077                   << SecondTemplate << (i + 1)
11078                   << SecondNTTPD->isParameterPack();
11079               ParameterMismatch = true;
11080               break;
11081             }
11082           }
11083         }
11084 
11085         if (ParameterMismatch) {
11086           Diagnosed = true;
11087           break;
11088         }
11089 
11090         break;
11091       }
11092       }
11093 
11094       if (Diagnosed)
11095         continue;
11096 
11097       Diag(FirstDecl->getLocation(),
11098            diag::err_module_odr_violation_mismatch_decl_unknown)
11099           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11100           << FirstDecl->getSourceRange();
11101       Diag(SecondDecl->getLocation(),
11102            diag::note_module_odr_violation_mismatch_decl_unknown)
11103           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11104       Diagnosed = true;
11105     }
11106 
11107     if (!Diagnosed) {
11108       // All definitions are updates to the same declaration. This happens if a
11109       // module instantiates the declaration of a class template specialization
11110       // and two or more other modules instantiate its definition.
11111       //
11112       // FIXME: Indicate which modules had instantiations of this definition.
11113       // FIXME: How can this even happen?
11114       Diag(Merge.first->getLocation(),
11115            diag::err_module_odr_violation_different_instantiations)
11116         << Merge.first;
11117     }
11118   }
11119 
11120   // Issue ODR failures diagnostics for functions.
11121   for (auto &Merge : FunctionOdrMergeFailures) {
11122     enum ODRFunctionDifference {
11123       ReturnType,
11124       ParameterName,
11125       ParameterType,
11126       ParameterSingleDefaultArgument,
11127       ParameterDifferentDefaultArgument,
11128       FunctionBody,
11129     };
11130 
11131     FunctionDecl *FirstFunction = Merge.first;
11132     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11133 
11134     bool Diagnosed = false;
11135     for (auto &SecondFunction : Merge.second) {
11136 
11137       if (FirstFunction == SecondFunction)
11138         continue;
11139 
11140       std::string SecondModule =
11141           getOwningModuleNameForDiagnostic(SecondFunction);
11142 
11143       auto ODRDiagError = [FirstFunction, &FirstModule,
11144                            this](SourceLocation Loc, SourceRange Range,
11145                                  ODRFunctionDifference DiffType) {
11146         return Diag(Loc, diag::err_module_odr_violation_function)
11147                << FirstFunction << FirstModule.empty() << FirstModule << Range
11148                << DiffType;
11149       };
11150       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11151                                                SourceRange Range,
11152                                                ODRFunctionDifference DiffType) {
11153         return Diag(Loc, diag::note_module_odr_violation_function)
11154                << SecondModule << Range << DiffType;
11155       };
11156 
11157       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11158           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11159         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11160                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11161             << FirstFunction->getReturnType();
11162         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11163                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11164             << SecondFunction->getReturnType();
11165         Diagnosed = true;
11166         break;
11167       }
11168 
11169       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11170              "Merged functions with different number of parameters");
11171 
11172       auto ParamSize = FirstFunction->param_size();
11173       bool ParameterMismatch = false;
11174       for (unsigned I = 0; I < ParamSize; ++I) {
11175         auto *FirstParam = FirstFunction->getParamDecl(I);
11176         auto *SecondParam = SecondFunction->getParamDecl(I);
11177 
11178         assert(getContext().hasSameType(FirstParam->getType(),
11179                                       SecondParam->getType()) &&
11180                "Merged function has different parameter types.");
11181 
11182         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11183           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11184                        ParameterName)
11185               << I + 1 << FirstParam->getDeclName();
11186           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11187                       ParameterName)
11188               << I + 1 << SecondParam->getDeclName();
11189           ParameterMismatch = true;
11190           break;
11191         };
11192 
11193         QualType FirstParamType = FirstParam->getType();
11194         QualType SecondParamType = SecondParam->getType();
11195         if (FirstParamType != SecondParamType &&
11196             ComputeQualTypeODRHash(FirstParamType) !=
11197                 ComputeQualTypeODRHash(SecondParamType)) {
11198           if (const DecayedType *ParamDecayedType =
11199                   FirstParamType->getAs<DecayedType>()) {
11200             ODRDiagError(FirstParam->getLocation(),
11201                          FirstParam->getSourceRange(), ParameterType)
11202                 << (I + 1) << FirstParamType << true
11203                 << ParamDecayedType->getOriginalType();
11204           } else {
11205             ODRDiagError(FirstParam->getLocation(),
11206                          FirstParam->getSourceRange(), ParameterType)
11207                 << (I + 1) << FirstParamType << false;
11208           }
11209 
11210           if (const DecayedType *ParamDecayedType =
11211                   SecondParamType->getAs<DecayedType>()) {
11212             ODRDiagNote(SecondParam->getLocation(),
11213                         SecondParam->getSourceRange(), ParameterType)
11214                 << (I + 1) << SecondParamType << true
11215                 << ParamDecayedType->getOriginalType();
11216           } else {
11217             ODRDiagNote(SecondParam->getLocation(),
11218                         SecondParam->getSourceRange(), ParameterType)
11219                 << (I + 1) << SecondParamType << false;
11220           }
11221           ParameterMismatch = true;
11222           break;
11223         }
11224 
11225         const Expr *FirstInit = FirstParam->getInit();
11226         const Expr *SecondInit = SecondParam->getInit();
11227         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11228           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11229                        ParameterSingleDefaultArgument)
11230               << (I + 1) << (FirstInit == nullptr)
11231               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11232           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11233                       ParameterSingleDefaultArgument)
11234               << (I + 1) << (SecondInit == nullptr)
11235               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11236           ParameterMismatch = true;
11237           break;
11238         }
11239 
11240         if (FirstInit && SecondInit &&
11241             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11242           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11243                        ParameterDifferentDefaultArgument)
11244               << (I + 1) << FirstInit->getSourceRange();
11245           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11246                       ParameterDifferentDefaultArgument)
11247               << (I + 1) << SecondInit->getSourceRange();
11248           ParameterMismatch = true;
11249           break;
11250         }
11251 
11252         assert(ComputeSubDeclODRHash(FirstParam) ==
11253                    ComputeSubDeclODRHash(SecondParam) &&
11254                "Undiagnosed parameter difference.");
11255       }
11256 
11257       if (ParameterMismatch) {
11258         Diagnosed = true;
11259         break;
11260       }
11261 
11262       // If no error has been generated before now, assume the problem is in
11263       // the body and generate a message.
11264       ODRDiagError(FirstFunction->getLocation(),
11265                    FirstFunction->getSourceRange(), FunctionBody);
11266       ODRDiagNote(SecondFunction->getLocation(),
11267                   SecondFunction->getSourceRange(), FunctionBody);
11268       Diagnosed = true;
11269       break;
11270     }
11271     (void)Diagnosed;
11272     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11273   }
11274 
11275   // Issue ODR failures diagnostics for enums.
11276   for (auto &Merge : EnumOdrMergeFailures) {
11277     enum ODREnumDifference {
11278       SingleScopedEnum,
11279       EnumTagKeywordMismatch,
11280       SingleSpecifiedType,
11281       DifferentSpecifiedTypes,
11282       DifferentNumberEnumConstants,
11283       EnumConstantName,
11284       EnumConstantSingleInitilizer,
11285       EnumConstantDifferentInitilizer,
11286     };
11287 
11288     // If we've already pointed out a specific problem with this enum, don't
11289     // bother issuing a general "something's different" diagnostic.
11290     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11291       continue;
11292 
11293     EnumDecl *FirstEnum = Merge.first;
11294     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11295 
11296     using DeclHashes =
11297         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11298     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11299                               DeclHashes &Hashes, EnumDecl *Enum) {
11300       for (auto *D : Enum->decls()) {
11301         // Due to decl merging, the first EnumDecl is the parent of
11302         // Decls in both records.
11303         if (!ODRHash::isWhitelistedDecl(D, FirstEnum))
11304           continue;
11305         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11306         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11307                             ComputeSubDeclODRHash(D));
11308       }
11309     };
11310     DeclHashes FirstHashes;
11311     PopulateHashes(FirstHashes, FirstEnum);
11312     bool Diagnosed = false;
11313     for (auto &SecondEnum : Merge.second) {
11314 
11315       if (FirstEnum == SecondEnum)
11316         continue;
11317 
11318       std::string SecondModule =
11319           getOwningModuleNameForDiagnostic(SecondEnum);
11320 
11321       auto ODRDiagError = [FirstEnum, &FirstModule,
11322                            this](SourceLocation Loc, SourceRange Range,
11323                                  ODREnumDifference DiffType) {
11324         return Diag(Loc, diag::err_module_odr_violation_enum)
11325                << FirstEnum << FirstModule.empty() << FirstModule << Range
11326                << DiffType;
11327       };
11328       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11329                                                SourceRange Range,
11330                                                ODREnumDifference DiffType) {
11331         return Diag(Loc, diag::note_module_odr_violation_enum)
11332                << SecondModule << Range << DiffType;
11333       };
11334 
11335       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11336         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11337                      SingleScopedEnum)
11338             << FirstEnum->isScoped();
11339         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11340                     SingleScopedEnum)
11341             << SecondEnum->isScoped();
11342         Diagnosed = true;
11343         continue;
11344       }
11345 
11346       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11347         if (FirstEnum->isScopedUsingClassTag() !=
11348             SecondEnum->isScopedUsingClassTag()) {
11349           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11350                        EnumTagKeywordMismatch)
11351               << FirstEnum->isScopedUsingClassTag();
11352           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11353                       EnumTagKeywordMismatch)
11354               << SecondEnum->isScopedUsingClassTag();
11355           Diagnosed = true;
11356           continue;
11357         }
11358       }
11359 
11360       QualType FirstUnderlyingType =
11361           FirstEnum->getIntegerTypeSourceInfo()
11362               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11363               : QualType();
11364       QualType SecondUnderlyingType =
11365           SecondEnum->getIntegerTypeSourceInfo()
11366               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11367               : QualType();
11368       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11369           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11370                        SingleSpecifiedType)
11371               << !FirstUnderlyingType.isNull();
11372           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11373                       SingleSpecifiedType)
11374               << !SecondUnderlyingType.isNull();
11375           Diagnosed = true;
11376           continue;
11377       }
11378 
11379       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11380         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11381             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11382           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11383                        DifferentSpecifiedTypes)
11384               << FirstUnderlyingType;
11385           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11386                       DifferentSpecifiedTypes)
11387               << SecondUnderlyingType;
11388           Diagnosed = true;
11389           continue;
11390         }
11391       }
11392 
11393       DeclHashes SecondHashes;
11394       PopulateHashes(SecondHashes, SecondEnum);
11395 
11396       if (FirstHashes.size() != SecondHashes.size()) {
11397         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11398                      DifferentNumberEnumConstants)
11399             << (int)FirstHashes.size();
11400         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11401                     DifferentNumberEnumConstants)
11402             << (int)SecondHashes.size();
11403         Diagnosed = true;
11404         continue;
11405       }
11406 
11407       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11408         if (FirstHashes[I].second == SecondHashes[I].second)
11409           continue;
11410         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11411         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11412 
11413         if (FirstEnumConstant->getDeclName() !=
11414             SecondEnumConstant->getDeclName()) {
11415 
11416           ODRDiagError(FirstEnumConstant->getLocation(),
11417                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11418               << I + 1 << FirstEnumConstant;
11419           ODRDiagNote(SecondEnumConstant->getLocation(),
11420                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11421               << I + 1 << SecondEnumConstant;
11422           Diagnosed = true;
11423           break;
11424         }
11425 
11426         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11427         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11428         if (!FirstInit && !SecondInit)
11429           continue;
11430 
11431         if (!FirstInit || !SecondInit) {
11432           ODRDiagError(FirstEnumConstant->getLocation(),
11433                        FirstEnumConstant->getSourceRange(),
11434                        EnumConstantSingleInitilizer)
11435               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11436           ODRDiagNote(SecondEnumConstant->getLocation(),
11437                       SecondEnumConstant->getSourceRange(),
11438                       EnumConstantSingleInitilizer)
11439               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11440           Diagnosed = true;
11441           break;
11442         }
11443 
11444         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11445           ODRDiagError(FirstEnumConstant->getLocation(),
11446                        FirstEnumConstant->getSourceRange(),
11447                        EnumConstantDifferentInitilizer)
11448               << I + 1 << FirstEnumConstant;
11449           ODRDiagNote(SecondEnumConstant->getLocation(),
11450                       SecondEnumConstant->getSourceRange(),
11451                       EnumConstantDifferentInitilizer)
11452               << I + 1 << SecondEnumConstant;
11453           Diagnosed = true;
11454           break;
11455         }
11456       }
11457     }
11458 
11459     (void)Diagnosed;
11460     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11461   }
11462 }
11463 
11464 void ASTReader::StartedDeserializing() {
11465   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11466     ReadTimer->startTimer();
11467 }
11468 
11469 void ASTReader::FinishedDeserializing() {
11470   assert(NumCurrentElementsDeserializing &&
11471          "FinishedDeserializing not paired with StartedDeserializing");
11472   if (NumCurrentElementsDeserializing == 1) {
11473     // We decrease NumCurrentElementsDeserializing only after pending actions
11474     // are finished, to avoid recursively re-calling finishPendingActions().
11475     finishPendingActions();
11476   }
11477   --NumCurrentElementsDeserializing;
11478 
11479   if (NumCurrentElementsDeserializing == 0) {
11480     // Propagate exception specification and deduced type updates along
11481     // redeclaration chains.
11482     //
11483     // We do this now rather than in finishPendingActions because we want to
11484     // be able to walk the complete redeclaration chains of the updated decls.
11485     while (!PendingExceptionSpecUpdates.empty() ||
11486            !PendingDeducedTypeUpdates.empty()) {
11487       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11488       PendingExceptionSpecUpdates.clear();
11489       for (auto Update : ESUpdates) {
11490         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11491         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11492         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11493         if (auto *Listener = getContext().getASTMutationListener())
11494           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11495         for (auto *Redecl : Update.second->redecls())
11496           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11497       }
11498 
11499       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11500       PendingDeducedTypeUpdates.clear();
11501       for (auto Update : DTUpdates) {
11502         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11503         // FIXME: If the return type is already deduced, check that it matches.
11504         getContext().adjustDeducedFunctionResultType(Update.first,
11505                                                      Update.second);
11506       }
11507     }
11508 
11509     if (ReadTimer)
11510       ReadTimer->stopTimer();
11511 
11512     diagnoseOdrViolations();
11513 
11514     // We are not in recursive loading, so it's safe to pass the "interesting"
11515     // decls to the consumer.
11516     if (Consumer)
11517       PassInterestingDeclsToConsumer();
11518   }
11519 }
11520 
11521 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11522   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11523     // Remove any fake results before adding any real ones.
11524     auto It = PendingFakeLookupResults.find(II);
11525     if (It != PendingFakeLookupResults.end()) {
11526       for (auto *ND : It->second)
11527         SemaObj->IdResolver.RemoveDecl(ND);
11528       // FIXME: this works around module+PCH performance issue.
11529       // Rather than erase the result from the map, which is O(n), just clear
11530       // the vector of NamedDecls.
11531       It->second.clear();
11532     }
11533   }
11534 
11535   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11536     SemaObj->TUScope->AddDecl(D);
11537   } else if (SemaObj->TUScope) {
11538     // Adding the decl to IdResolver may have failed because it was already in
11539     // (even though it was not added in scope). If it is already in, make sure
11540     // it gets in the scope as well.
11541     if (std::find(SemaObj->IdResolver.begin(Name),
11542                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11543       SemaObj->TUScope->AddDecl(D);
11544   }
11545 }
11546 
11547 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11548                      ASTContext *Context,
11549                      const PCHContainerReader &PCHContainerRdr,
11550                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11551                      StringRef isysroot, bool DisableValidation,
11552                      bool AllowASTWithCompilerErrors,
11553                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11554                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11555                      std::unique_ptr<llvm::Timer> ReadTimer)
11556     : Listener(DisableValidation
11557                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11558                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11559       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11560       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11561       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11562                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11563       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11564       DisableValidation(DisableValidation),
11565       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11566       AllowConfigurationMismatch(AllowConfigurationMismatch),
11567       ValidateSystemInputs(ValidateSystemInputs),
11568       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11569       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11570   SourceMgr.setExternalSLocEntrySource(this);
11571 
11572   for (const auto &Ext : Extensions) {
11573     auto BlockName = Ext->getExtensionMetadata().BlockName;
11574     auto Known = ModuleFileExtensions.find(BlockName);
11575     if (Known != ModuleFileExtensions.end()) {
11576       Diags.Report(diag::warn_duplicate_module_file_extension)
11577         << BlockName;
11578       continue;
11579     }
11580 
11581     ModuleFileExtensions.insert({BlockName, Ext});
11582   }
11583 }
11584 
11585 ASTReader::~ASTReader() {
11586   if (OwnsDeserializationListener)
11587     delete DeserializationListener;
11588 }
11589 
11590 IdentifierResolver &ASTReader::getIdResolver() {
11591   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11592 }
11593 
11594 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11595                                                unsigned AbbrevID) {
11596   Idx = 0;
11597   Record.clear();
11598   return Cursor.readRecord(AbbrevID, Record);
11599 }
11600 //===----------------------------------------------------------------------===//
11601 //// OMPClauseReader implementation
11602 ////===----------------------------------------------------------------------===//
11603 
11604 // This has to be in namespace clang because it's friended by all
11605 // of the OMP clauses.
11606 namespace clang {
11607 
11608 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11609   ASTRecordReader &Record;
11610   ASTContext &Context;
11611 
11612 public:
11613   OMPClauseReader(ASTRecordReader &Record)
11614       : Record(Record), Context(Record.getContext()) {}
11615 
11616 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *C);
11617 #include "clang/Basic/OpenMPKinds.def"
11618   OMPClause *readClause();
11619   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11620   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11621 };
11622 
11623 } // end namespace clang
11624 
11625 OMPClause *ASTRecordReader::readOMPClause() {
11626   return OMPClauseReader(*this).readClause();
11627 }
11628 
11629 OMPClause *OMPClauseReader::readClause() {
11630   OMPClause *C = nullptr;
11631   switch (Record.readInt()) {
11632   case OMPC_if:
11633     C = new (Context) OMPIfClause();
11634     break;
11635   case OMPC_final:
11636     C = new (Context) OMPFinalClause();
11637     break;
11638   case OMPC_num_threads:
11639     C = new (Context) OMPNumThreadsClause();
11640     break;
11641   case OMPC_safelen:
11642     C = new (Context) OMPSafelenClause();
11643     break;
11644   case OMPC_simdlen:
11645     C = new (Context) OMPSimdlenClause();
11646     break;
11647   case OMPC_allocator:
11648     C = new (Context) OMPAllocatorClause();
11649     break;
11650   case OMPC_collapse:
11651     C = new (Context) OMPCollapseClause();
11652     break;
11653   case OMPC_default:
11654     C = new (Context) OMPDefaultClause();
11655     break;
11656   case OMPC_proc_bind:
11657     C = new (Context) OMPProcBindClause();
11658     break;
11659   case OMPC_schedule:
11660     C = new (Context) OMPScheduleClause();
11661     break;
11662   case OMPC_ordered:
11663     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11664     break;
11665   case OMPC_nowait:
11666     C = new (Context) OMPNowaitClause();
11667     break;
11668   case OMPC_untied:
11669     C = new (Context) OMPUntiedClause();
11670     break;
11671   case OMPC_mergeable:
11672     C = new (Context) OMPMergeableClause();
11673     break;
11674   case OMPC_read:
11675     C = new (Context) OMPReadClause();
11676     break;
11677   case OMPC_write:
11678     C = new (Context) OMPWriteClause();
11679     break;
11680   case OMPC_update:
11681     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11682     break;
11683   case OMPC_capture:
11684     C = new (Context) OMPCaptureClause();
11685     break;
11686   case OMPC_seq_cst:
11687     C = new (Context) OMPSeqCstClause();
11688     break;
11689   case OMPC_acq_rel:
11690     C = new (Context) OMPAcqRelClause();
11691     break;
11692   case OMPC_acquire:
11693     C = new (Context) OMPAcquireClause();
11694     break;
11695   case OMPC_release:
11696     C = new (Context) OMPReleaseClause();
11697     break;
11698   case OMPC_relaxed:
11699     C = new (Context) OMPRelaxedClause();
11700     break;
11701   case OMPC_threads:
11702     C = new (Context) OMPThreadsClause();
11703     break;
11704   case OMPC_simd:
11705     C = new (Context) OMPSIMDClause();
11706     break;
11707   case OMPC_nogroup:
11708     C = new (Context) OMPNogroupClause();
11709     break;
11710   case OMPC_unified_address:
11711     C = new (Context) OMPUnifiedAddressClause();
11712     break;
11713   case OMPC_unified_shared_memory:
11714     C = new (Context) OMPUnifiedSharedMemoryClause();
11715     break;
11716   case OMPC_reverse_offload:
11717     C = new (Context) OMPReverseOffloadClause();
11718     break;
11719   case OMPC_dynamic_allocators:
11720     C = new (Context) OMPDynamicAllocatorsClause();
11721     break;
11722   case OMPC_atomic_default_mem_order:
11723     C = new (Context) OMPAtomicDefaultMemOrderClause();
11724     break;
11725  case OMPC_private:
11726     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11727     break;
11728   case OMPC_firstprivate:
11729     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11730     break;
11731   case OMPC_lastprivate:
11732     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11733     break;
11734   case OMPC_shared:
11735     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11736     break;
11737   case OMPC_reduction:
11738     C = OMPReductionClause::CreateEmpty(Context, Record.readInt());
11739     break;
11740   case OMPC_task_reduction:
11741     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11742     break;
11743   case OMPC_in_reduction:
11744     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11745     break;
11746   case OMPC_linear:
11747     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11748     break;
11749   case OMPC_aligned:
11750     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11751     break;
11752   case OMPC_copyin:
11753     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11754     break;
11755   case OMPC_copyprivate:
11756     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11757     break;
11758   case OMPC_flush:
11759     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11760     break;
11761   case OMPC_depobj:
11762     C = OMPDepobjClause::CreateEmpty(Context);
11763     break;
11764   case OMPC_depend: {
11765     unsigned NumVars = Record.readInt();
11766     unsigned NumLoops = Record.readInt();
11767     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11768     break;
11769   }
11770   case OMPC_device:
11771     C = new (Context) OMPDeviceClause();
11772     break;
11773   case OMPC_map: {
11774     OMPMappableExprListSizeTy Sizes;
11775     Sizes.NumVars = Record.readInt();
11776     Sizes.NumUniqueDeclarations = Record.readInt();
11777     Sizes.NumComponentLists = Record.readInt();
11778     Sizes.NumComponents = Record.readInt();
11779     C = OMPMapClause::CreateEmpty(Context, Sizes);
11780     break;
11781   }
11782   case OMPC_num_teams:
11783     C = new (Context) OMPNumTeamsClause();
11784     break;
11785   case OMPC_thread_limit:
11786     C = new (Context) OMPThreadLimitClause();
11787     break;
11788   case OMPC_priority:
11789     C = new (Context) OMPPriorityClause();
11790     break;
11791   case OMPC_grainsize:
11792     C = new (Context) OMPGrainsizeClause();
11793     break;
11794   case OMPC_num_tasks:
11795     C = new (Context) OMPNumTasksClause();
11796     break;
11797   case OMPC_hint:
11798     C = new (Context) OMPHintClause();
11799     break;
11800   case OMPC_dist_schedule:
11801     C = new (Context) OMPDistScheduleClause();
11802     break;
11803   case OMPC_defaultmap:
11804     C = new (Context) OMPDefaultmapClause();
11805     break;
11806   case OMPC_to: {
11807     OMPMappableExprListSizeTy Sizes;
11808     Sizes.NumVars = Record.readInt();
11809     Sizes.NumUniqueDeclarations = Record.readInt();
11810     Sizes.NumComponentLists = Record.readInt();
11811     Sizes.NumComponents = Record.readInt();
11812     C = OMPToClause::CreateEmpty(Context, Sizes);
11813     break;
11814   }
11815   case OMPC_from: {
11816     OMPMappableExprListSizeTy Sizes;
11817     Sizes.NumVars = Record.readInt();
11818     Sizes.NumUniqueDeclarations = Record.readInt();
11819     Sizes.NumComponentLists = Record.readInt();
11820     Sizes.NumComponents = Record.readInt();
11821     C = OMPFromClause::CreateEmpty(Context, Sizes);
11822     break;
11823   }
11824   case OMPC_use_device_ptr: {
11825     OMPMappableExprListSizeTy Sizes;
11826     Sizes.NumVars = Record.readInt();
11827     Sizes.NumUniqueDeclarations = Record.readInt();
11828     Sizes.NumComponentLists = Record.readInt();
11829     Sizes.NumComponents = Record.readInt();
11830     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11831     break;
11832   }
11833   case OMPC_is_device_ptr: {
11834     OMPMappableExprListSizeTy Sizes;
11835     Sizes.NumVars = Record.readInt();
11836     Sizes.NumUniqueDeclarations = Record.readInt();
11837     Sizes.NumComponentLists = Record.readInt();
11838     Sizes.NumComponents = Record.readInt();
11839     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11840     break;
11841   }
11842   case OMPC_allocate:
11843     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11844     break;
11845   case OMPC_nontemporal:
11846     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11847     break;
11848   case OMPC_inclusive:
11849     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11850     break;
11851   case OMPC_exclusive:
11852     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11853     break;
11854   case OMPC_order:
11855     C = new (Context) OMPOrderClause();
11856     break;
11857   case OMPC_destroy:
11858     C = new (Context) OMPDestroyClause();
11859     break;
11860   case OMPC_detach:
11861     C = new (Context) OMPDetachClause();
11862     break;
11863   }
11864   assert(C && "Unknown OMPClause type");
11865 
11866   Visit(C);
11867   C->setLocStart(Record.readSourceLocation());
11868   C->setLocEnd(Record.readSourceLocation());
11869 
11870   return C;
11871 }
11872 
11873 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11874   C->setPreInitStmt(Record.readSubStmt(),
11875                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11876 }
11877 
11878 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11879   VisitOMPClauseWithPreInit(C);
11880   C->setPostUpdateExpr(Record.readSubExpr());
11881 }
11882 
11883 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11884   VisitOMPClauseWithPreInit(C);
11885   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
11886   C->setNameModifierLoc(Record.readSourceLocation());
11887   C->setColonLoc(Record.readSourceLocation());
11888   C->setCondition(Record.readSubExpr());
11889   C->setLParenLoc(Record.readSourceLocation());
11890 }
11891 
11892 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
11893   VisitOMPClauseWithPreInit(C);
11894   C->setCondition(Record.readSubExpr());
11895   C->setLParenLoc(Record.readSourceLocation());
11896 }
11897 
11898 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
11899   VisitOMPClauseWithPreInit(C);
11900   C->setNumThreads(Record.readSubExpr());
11901   C->setLParenLoc(Record.readSourceLocation());
11902 }
11903 
11904 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
11905   C->setSafelen(Record.readSubExpr());
11906   C->setLParenLoc(Record.readSourceLocation());
11907 }
11908 
11909 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
11910   C->setSimdlen(Record.readSubExpr());
11911   C->setLParenLoc(Record.readSourceLocation());
11912 }
11913 
11914 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
11915   C->setAllocator(Record.readExpr());
11916   C->setLParenLoc(Record.readSourceLocation());
11917 }
11918 
11919 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
11920   C->setNumForLoops(Record.readSubExpr());
11921   C->setLParenLoc(Record.readSourceLocation());
11922 }
11923 
11924 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
11925   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
11926   C->setLParenLoc(Record.readSourceLocation());
11927   C->setDefaultKindKwLoc(Record.readSourceLocation());
11928 }
11929 
11930 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
11931   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
11932   C->setLParenLoc(Record.readSourceLocation());
11933   C->setProcBindKindKwLoc(Record.readSourceLocation());
11934 }
11935 
11936 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
11937   VisitOMPClauseWithPreInit(C);
11938   C->setScheduleKind(
11939        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
11940   C->setFirstScheduleModifier(
11941       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
11942   C->setSecondScheduleModifier(
11943       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
11944   C->setChunkSize(Record.readSubExpr());
11945   C->setLParenLoc(Record.readSourceLocation());
11946   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
11947   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
11948   C->setScheduleKindLoc(Record.readSourceLocation());
11949   C->setCommaLoc(Record.readSourceLocation());
11950 }
11951 
11952 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
11953   C->setNumForLoops(Record.readSubExpr());
11954   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
11955     C->setLoopNumIterations(I, Record.readSubExpr());
11956   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
11957     C->setLoopCounter(I, Record.readSubExpr());
11958   C->setLParenLoc(Record.readSourceLocation());
11959 }
11960 
11961 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
11962   C->setEventHandler(Record.readSubExpr());
11963   C->setLParenLoc(Record.readSourceLocation());
11964 }
11965 
11966 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
11967 
11968 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
11969 
11970 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
11971 
11972 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
11973 
11974 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
11975 
11976 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
11977   if (C->isExtended()) {
11978     C->setLParenLoc(Record.readSourceLocation());
11979     C->setArgumentLoc(Record.readSourceLocation());
11980     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
11981   }
11982 }
11983 
11984 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
11985 
11986 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
11987 
11988 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
11989 
11990 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
11991 
11992 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
11993 
11994 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
11995 
11996 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
11997 
11998 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
11999 
12000 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12001 
12002 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *) {}
12003 
12004 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12005 
12006 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12007     OMPUnifiedSharedMemoryClause *) {}
12008 
12009 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12010 
12011 void
12012 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12013 }
12014 
12015 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12016     OMPAtomicDefaultMemOrderClause *C) {
12017   C->setAtomicDefaultMemOrderKind(
12018       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12019   C->setLParenLoc(Record.readSourceLocation());
12020   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12021 }
12022 
12023 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12024   C->setLParenLoc(Record.readSourceLocation());
12025   unsigned NumVars = C->varlist_size();
12026   SmallVector<Expr *, 16> Vars;
12027   Vars.reserve(NumVars);
12028   for (unsigned i = 0; i != NumVars; ++i)
12029     Vars.push_back(Record.readSubExpr());
12030   C->setVarRefs(Vars);
12031   Vars.clear();
12032   for (unsigned i = 0; i != NumVars; ++i)
12033     Vars.push_back(Record.readSubExpr());
12034   C->setPrivateCopies(Vars);
12035 }
12036 
12037 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12038   VisitOMPClauseWithPreInit(C);
12039   C->setLParenLoc(Record.readSourceLocation());
12040   unsigned NumVars = C->varlist_size();
12041   SmallVector<Expr *, 16> Vars;
12042   Vars.reserve(NumVars);
12043   for (unsigned i = 0; i != NumVars; ++i)
12044     Vars.push_back(Record.readSubExpr());
12045   C->setVarRefs(Vars);
12046   Vars.clear();
12047   for (unsigned i = 0; i != NumVars; ++i)
12048     Vars.push_back(Record.readSubExpr());
12049   C->setPrivateCopies(Vars);
12050   Vars.clear();
12051   for (unsigned i = 0; i != NumVars; ++i)
12052     Vars.push_back(Record.readSubExpr());
12053   C->setInits(Vars);
12054 }
12055 
12056 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12057   VisitOMPClauseWithPostUpdate(C);
12058   C->setLParenLoc(Record.readSourceLocation());
12059   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12060   C->setKindLoc(Record.readSourceLocation());
12061   C->setColonLoc(Record.readSourceLocation());
12062   unsigned NumVars = C->varlist_size();
12063   SmallVector<Expr *, 16> Vars;
12064   Vars.reserve(NumVars);
12065   for (unsigned i = 0; i != NumVars; ++i)
12066     Vars.push_back(Record.readSubExpr());
12067   C->setVarRefs(Vars);
12068   Vars.clear();
12069   for (unsigned i = 0; i != NumVars; ++i)
12070     Vars.push_back(Record.readSubExpr());
12071   C->setPrivateCopies(Vars);
12072   Vars.clear();
12073   for (unsigned i = 0; i != NumVars; ++i)
12074     Vars.push_back(Record.readSubExpr());
12075   C->setSourceExprs(Vars);
12076   Vars.clear();
12077   for (unsigned i = 0; i != NumVars; ++i)
12078     Vars.push_back(Record.readSubExpr());
12079   C->setDestinationExprs(Vars);
12080   Vars.clear();
12081   for (unsigned i = 0; i != NumVars; ++i)
12082     Vars.push_back(Record.readSubExpr());
12083   C->setAssignmentOps(Vars);
12084 }
12085 
12086 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12087   C->setLParenLoc(Record.readSourceLocation());
12088   unsigned NumVars = C->varlist_size();
12089   SmallVector<Expr *, 16> Vars;
12090   Vars.reserve(NumVars);
12091   for (unsigned i = 0; i != NumVars; ++i)
12092     Vars.push_back(Record.readSubExpr());
12093   C->setVarRefs(Vars);
12094 }
12095 
12096 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12097   VisitOMPClauseWithPostUpdate(C);
12098   C->setLParenLoc(Record.readSourceLocation());
12099   C->setModifierLoc(Record.readSourceLocation());
12100   C->setColonLoc(Record.readSourceLocation());
12101   C->setModifier(Record.readEnum<OpenMPReductionClauseModifier>());
12102   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12103   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12104   C->setQualifierLoc(NNSL);
12105   C->setNameInfo(DNI);
12106 
12107   unsigned NumVars = C->varlist_size();
12108   SmallVector<Expr *, 16> Vars;
12109   Vars.reserve(NumVars);
12110   for (unsigned i = 0; i != NumVars; ++i)
12111     Vars.push_back(Record.readSubExpr());
12112   C->setVarRefs(Vars);
12113   Vars.clear();
12114   for (unsigned i = 0; i != NumVars; ++i)
12115     Vars.push_back(Record.readSubExpr());
12116   C->setPrivates(Vars);
12117   Vars.clear();
12118   for (unsigned i = 0; i != NumVars; ++i)
12119     Vars.push_back(Record.readSubExpr());
12120   C->setLHSExprs(Vars);
12121   Vars.clear();
12122   for (unsigned i = 0; i != NumVars; ++i)
12123     Vars.push_back(Record.readSubExpr());
12124   C->setRHSExprs(Vars);
12125   Vars.clear();
12126   for (unsigned i = 0; i != NumVars; ++i)
12127     Vars.push_back(Record.readSubExpr());
12128   C->setReductionOps(Vars);
12129 }
12130 
12131 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12132   VisitOMPClauseWithPostUpdate(C);
12133   C->setLParenLoc(Record.readSourceLocation());
12134   C->setColonLoc(Record.readSourceLocation());
12135   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12136   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12137   C->setQualifierLoc(NNSL);
12138   C->setNameInfo(DNI);
12139 
12140   unsigned NumVars = C->varlist_size();
12141   SmallVector<Expr *, 16> Vars;
12142   Vars.reserve(NumVars);
12143   for (unsigned I = 0; I != NumVars; ++I)
12144     Vars.push_back(Record.readSubExpr());
12145   C->setVarRefs(Vars);
12146   Vars.clear();
12147   for (unsigned I = 0; I != NumVars; ++I)
12148     Vars.push_back(Record.readSubExpr());
12149   C->setPrivates(Vars);
12150   Vars.clear();
12151   for (unsigned I = 0; I != NumVars; ++I)
12152     Vars.push_back(Record.readSubExpr());
12153   C->setLHSExprs(Vars);
12154   Vars.clear();
12155   for (unsigned I = 0; I != NumVars; ++I)
12156     Vars.push_back(Record.readSubExpr());
12157   C->setRHSExprs(Vars);
12158   Vars.clear();
12159   for (unsigned I = 0; I != NumVars; ++I)
12160     Vars.push_back(Record.readSubExpr());
12161   C->setReductionOps(Vars);
12162 }
12163 
12164 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12165   VisitOMPClauseWithPostUpdate(C);
12166   C->setLParenLoc(Record.readSourceLocation());
12167   C->setColonLoc(Record.readSourceLocation());
12168   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12169   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12170   C->setQualifierLoc(NNSL);
12171   C->setNameInfo(DNI);
12172 
12173   unsigned NumVars = C->varlist_size();
12174   SmallVector<Expr *, 16> Vars;
12175   Vars.reserve(NumVars);
12176   for (unsigned I = 0; I != NumVars; ++I)
12177     Vars.push_back(Record.readSubExpr());
12178   C->setVarRefs(Vars);
12179   Vars.clear();
12180   for (unsigned I = 0; I != NumVars; ++I)
12181     Vars.push_back(Record.readSubExpr());
12182   C->setPrivates(Vars);
12183   Vars.clear();
12184   for (unsigned I = 0; I != NumVars; ++I)
12185     Vars.push_back(Record.readSubExpr());
12186   C->setLHSExprs(Vars);
12187   Vars.clear();
12188   for (unsigned I = 0; I != NumVars; ++I)
12189     Vars.push_back(Record.readSubExpr());
12190   C->setRHSExprs(Vars);
12191   Vars.clear();
12192   for (unsigned I = 0; I != NumVars; ++I)
12193     Vars.push_back(Record.readSubExpr());
12194   C->setReductionOps(Vars);
12195   Vars.clear();
12196   for (unsigned I = 0; I != NumVars; ++I)
12197     Vars.push_back(Record.readSubExpr());
12198   C->setTaskgroupDescriptors(Vars);
12199 }
12200 
12201 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12202   VisitOMPClauseWithPostUpdate(C);
12203   C->setLParenLoc(Record.readSourceLocation());
12204   C->setColonLoc(Record.readSourceLocation());
12205   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12206   C->setModifierLoc(Record.readSourceLocation());
12207   unsigned NumVars = C->varlist_size();
12208   SmallVector<Expr *, 16> Vars;
12209   Vars.reserve(NumVars);
12210   for (unsigned i = 0; i != NumVars; ++i)
12211     Vars.push_back(Record.readSubExpr());
12212   C->setVarRefs(Vars);
12213   Vars.clear();
12214   for (unsigned i = 0; i != NumVars; ++i)
12215     Vars.push_back(Record.readSubExpr());
12216   C->setPrivates(Vars);
12217   Vars.clear();
12218   for (unsigned i = 0; i != NumVars; ++i)
12219     Vars.push_back(Record.readSubExpr());
12220   C->setInits(Vars);
12221   Vars.clear();
12222   for (unsigned i = 0; i != NumVars; ++i)
12223     Vars.push_back(Record.readSubExpr());
12224   C->setUpdates(Vars);
12225   Vars.clear();
12226   for (unsigned i = 0; i != NumVars; ++i)
12227     Vars.push_back(Record.readSubExpr());
12228   C->setFinals(Vars);
12229   C->setStep(Record.readSubExpr());
12230   C->setCalcStep(Record.readSubExpr());
12231   Vars.clear();
12232   for (unsigned I = 0; I != NumVars + 1; ++I)
12233     Vars.push_back(Record.readSubExpr());
12234   C->setUsedExprs(Vars);
12235 }
12236 
12237 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12238   C->setLParenLoc(Record.readSourceLocation());
12239   C->setColonLoc(Record.readSourceLocation());
12240   unsigned NumVars = C->varlist_size();
12241   SmallVector<Expr *, 16> Vars;
12242   Vars.reserve(NumVars);
12243   for (unsigned i = 0; i != NumVars; ++i)
12244     Vars.push_back(Record.readSubExpr());
12245   C->setVarRefs(Vars);
12246   C->setAlignment(Record.readSubExpr());
12247 }
12248 
12249 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12250   C->setLParenLoc(Record.readSourceLocation());
12251   unsigned NumVars = C->varlist_size();
12252   SmallVector<Expr *, 16> Exprs;
12253   Exprs.reserve(NumVars);
12254   for (unsigned i = 0; i != NumVars; ++i)
12255     Exprs.push_back(Record.readSubExpr());
12256   C->setVarRefs(Exprs);
12257   Exprs.clear();
12258   for (unsigned i = 0; i != NumVars; ++i)
12259     Exprs.push_back(Record.readSubExpr());
12260   C->setSourceExprs(Exprs);
12261   Exprs.clear();
12262   for (unsigned i = 0; i != NumVars; ++i)
12263     Exprs.push_back(Record.readSubExpr());
12264   C->setDestinationExprs(Exprs);
12265   Exprs.clear();
12266   for (unsigned i = 0; i != NumVars; ++i)
12267     Exprs.push_back(Record.readSubExpr());
12268   C->setAssignmentOps(Exprs);
12269 }
12270 
12271 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12272   C->setLParenLoc(Record.readSourceLocation());
12273   unsigned NumVars = C->varlist_size();
12274   SmallVector<Expr *, 16> Exprs;
12275   Exprs.reserve(NumVars);
12276   for (unsigned i = 0; i != NumVars; ++i)
12277     Exprs.push_back(Record.readSubExpr());
12278   C->setVarRefs(Exprs);
12279   Exprs.clear();
12280   for (unsigned i = 0; i != NumVars; ++i)
12281     Exprs.push_back(Record.readSubExpr());
12282   C->setSourceExprs(Exprs);
12283   Exprs.clear();
12284   for (unsigned i = 0; i != NumVars; ++i)
12285     Exprs.push_back(Record.readSubExpr());
12286   C->setDestinationExprs(Exprs);
12287   Exprs.clear();
12288   for (unsigned i = 0; i != NumVars; ++i)
12289     Exprs.push_back(Record.readSubExpr());
12290   C->setAssignmentOps(Exprs);
12291 }
12292 
12293 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12294   C->setLParenLoc(Record.readSourceLocation());
12295   unsigned NumVars = C->varlist_size();
12296   SmallVector<Expr *, 16> Vars;
12297   Vars.reserve(NumVars);
12298   for (unsigned i = 0; i != NumVars; ++i)
12299     Vars.push_back(Record.readSubExpr());
12300   C->setVarRefs(Vars);
12301 }
12302 
12303 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12304   C->setDepobj(Record.readSubExpr());
12305   C->setLParenLoc(Record.readSourceLocation());
12306 }
12307 
12308 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12309   C->setLParenLoc(Record.readSourceLocation());
12310   C->setDependencyKind(
12311       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12312   C->setDependencyLoc(Record.readSourceLocation());
12313   C->setColonLoc(Record.readSourceLocation());
12314   unsigned NumVars = C->varlist_size();
12315   SmallVector<Expr *, 16> Vars;
12316   Vars.reserve(NumVars);
12317   for (unsigned I = 0; I != NumVars; ++I)
12318     Vars.push_back(Record.readSubExpr());
12319   C->setVarRefs(Vars);
12320   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12321     C->setLoopData(I, Record.readSubExpr());
12322 }
12323 
12324 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12325   VisitOMPClauseWithPreInit(C);
12326   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12327   C->setDevice(Record.readSubExpr());
12328   C->setModifierLoc(Record.readSourceLocation());
12329   C->setLParenLoc(Record.readSourceLocation());
12330 }
12331 
12332 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12333   C->setLParenLoc(Record.readSourceLocation());
12334   for (unsigned I = 0; I < OMPMapClause::NumberOfModifiers; ++I) {
12335     C->setMapTypeModifier(
12336         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12337     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12338   }
12339   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12340   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12341   C->setMapType(
12342      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12343   C->setMapLoc(Record.readSourceLocation());
12344   C->setColonLoc(Record.readSourceLocation());
12345   auto NumVars = C->varlist_size();
12346   auto UniqueDecls = C->getUniqueDeclarationsNum();
12347   auto TotalLists = C->getTotalComponentListNum();
12348   auto TotalComponents = C->getTotalComponentsNum();
12349 
12350   SmallVector<Expr *, 16> Vars;
12351   Vars.reserve(NumVars);
12352   for (unsigned i = 0; i != NumVars; ++i)
12353     Vars.push_back(Record.readExpr());
12354   C->setVarRefs(Vars);
12355 
12356   SmallVector<Expr *, 16> UDMappers;
12357   UDMappers.reserve(NumVars);
12358   for (unsigned I = 0; I < NumVars; ++I)
12359     UDMappers.push_back(Record.readExpr());
12360   C->setUDMapperRefs(UDMappers);
12361 
12362   SmallVector<ValueDecl *, 16> Decls;
12363   Decls.reserve(UniqueDecls);
12364   for (unsigned i = 0; i < UniqueDecls; ++i)
12365     Decls.push_back(Record.readDeclAs<ValueDecl>());
12366   C->setUniqueDecls(Decls);
12367 
12368   SmallVector<unsigned, 16> ListsPerDecl;
12369   ListsPerDecl.reserve(UniqueDecls);
12370   for (unsigned i = 0; i < UniqueDecls; ++i)
12371     ListsPerDecl.push_back(Record.readInt());
12372   C->setDeclNumLists(ListsPerDecl);
12373 
12374   SmallVector<unsigned, 32> ListSizes;
12375   ListSizes.reserve(TotalLists);
12376   for (unsigned i = 0; i < TotalLists; ++i)
12377     ListSizes.push_back(Record.readInt());
12378   C->setComponentListSizes(ListSizes);
12379 
12380   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12381   Components.reserve(TotalComponents);
12382   for (unsigned i = 0; i < TotalComponents; ++i) {
12383     Expr *AssociatedExpr = Record.readExpr();
12384     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12385     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12386         AssociatedExpr, AssociatedDecl));
12387   }
12388   C->setComponents(Components, ListSizes);
12389 }
12390 
12391 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12392   C->setLParenLoc(Record.readSourceLocation());
12393   C->setColonLoc(Record.readSourceLocation());
12394   C->setAllocator(Record.readSubExpr());
12395   unsigned NumVars = C->varlist_size();
12396   SmallVector<Expr *, 16> Vars;
12397   Vars.reserve(NumVars);
12398   for (unsigned i = 0; i != NumVars; ++i)
12399     Vars.push_back(Record.readSubExpr());
12400   C->setVarRefs(Vars);
12401 }
12402 
12403 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12404   VisitOMPClauseWithPreInit(C);
12405   C->setNumTeams(Record.readSubExpr());
12406   C->setLParenLoc(Record.readSourceLocation());
12407 }
12408 
12409 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12410   VisitOMPClauseWithPreInit(C);
12411   C->setThreadLimit(Record.readSubExpr());
12412   C->setLParenLoc(Record.readSourceLocation());
12413 }
12414 
12415 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12416   VisitOMPClauseWithPreInit(C);
12417   C->setPriority(Record.readSubExpr());
12418   C->setLParenLoc(Record.readSourceLocation());
12419 }
12420 
12421 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12422   VisitOMPClauseWithPreInit(C);
12423   C->setGrainsize(Record.readSubExpr());
12424   C->setLParenLoc(Record.readSourceLocation());
12425 }
12426 
12427 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12428   VisitOMPClauseWithPreInit(C);
12429   C->setNumTasks(Record.readSubExpr());
12430   C->setLParenLoc(Record.readSourceLocation());
12431 }
12432 
12433 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12434   C->setHint(Record.readSubExpr());
12435   C->setLParenLoc(Record.readSourceLocation());
12436 }
12437 
12438 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12439   VisitOMPClauseWithPreInit(C);
12440   C->setDistScheduleKind(
12441       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12442   C->setChunkSize(Record.readSubExpr());
12443   C->setLParenLoc(Record.readSourceLocation());
12444   C->setDistScheduleKindLoc(Record.readSourceLocation());
12445   C->setCommaLoc(Record.readSourceLocation());
12446 }
12447 
12448 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12449   C->setDefaultmapKind(
12450        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12451   C->setDefaultmapModifier(
12452       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12453   C->setLParenLoc(Record.readSourceLocation());
12454   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12455   C->setDefaultmapKindLoc(Record.readSourceLocation());
12456 }
12457 
12458 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12459   C->setLParenLoc(Record.readSourceLocation());
12460   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12461   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12462   auto NumVars = C->varlist_size();
12463   auto UniqueDecls = C->getUniqueDeclarationsNum();
12464   auto TotalLists = C->getTotalComponentListNum();
12465   auto TotalComponents = C->getTotalComponentsNum();
12466 
12467   SmallVector<Expr *, 16> Vars;
12468   Vars.reserve(NumVars);
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Vars.push_back(Record.readSubExpr());
12471   C->setVarRefs(Vars);
12472 
12473   SmallVector<Expr *, 16> UDMappers;
12474   UDMappers.reserve(NumVars);
12475   for (unsigned I = 0; I < NumVars; ++I)
12476     UDMappers.push_back(Record.readSubExpr());
12477   C->setUDMapperRefs(UDMappers);
12478 
12479   SmallVector<ValueDecl *, 16> Decls;
12480   Decls.reserve(UniqueDecls);
12481   for (unsigned i = 0; i < UniqueDecls; ++i)
12482     Decls.push_back(Record.readDeclAs<ValueDecl>());
12483   C->setUniqueDecls(Decls);
12484 
12485   SmallVector<unsigned, 16> ListsPerDecl;
12486   ListsPerDecl.reserve(UniqueDecls);
12487   for (unsigned i = 0; i < UniqueDecls; ++i)
12488     ListsPerDecl.push_back(Record.readInt());
12489   C->setDeclNumLists(ListsPerDecl);
12490 
12491   SmallVector<unsigned, 32> ListSizes;
12492   ListSizes.reserve(TotalLists);
12493   for (unsigned i = 0; i < TotalLists; ++i)
12494     ListSizes.push_back(Record.readInt());
12495   C->setComponentListSizes(ListSizes);
12496 
12497   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12498   Components.reserve(TotalComponents);
12499   for (unsigned i = 0; i < TotalComponents; ++i) {
12500     Expr *AssociatedExpr = Record.readSubExpr();
12501     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12502     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12503         AssociatedExpr, AssociatedDecl));
12504   }
12505   C->setComponents(Components, ListSizes);
12506 }
12507 
12508 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12509   C->setLParenLoc(Record.readSourceLocation());
12510   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12511   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12512   auto NumVars = C->varlist_size();
12513   auto UniqueDecls = C->getUniqueDeclarationsNum();
12514   auto TotalLists = C->getTotalComponentListNum();
12515   auto TotalComponents = C->getTotalComponentsNum();
12516 
12517   SmallVector<Expr *, 16> Vars;
12518   Vars.reserve(NumVars);
12519   for (unsigned i = 0; i != NumVars; ++i)
12520     Vars.push_back(Record.readSubExpr());
12521   C->setVarRefs(Vars);
12522 
12523   SmallVector<Expr *, 16> UDMappers;
12524   UDMappers.reserve(NumVars);
12525   for (unsigned I = 0; I < NumVars; ++I)
12526     UDMappers.push_back(Record.readSubExpr());
12527   C->setUDMapperRefs(UDMappers);
12528 
12529   SmallVector<ValueDecl *, 16> Decls;
12530   Decls.reserve(UniqueDecls);
12531   for (unsigned i = 0; i < UniqueDecls; ++i)
12532     Decls.push_back(Record.readDeclAs<ValueDecl>());
12533   C->setUniqueDecls(Decls);
12534 
12535   SmallVector<unsigned, 16> ListsPerDecl;
12536   ListsPerDecl.reserve(UniqueDecls);
12537   for (unsigned i = 0; i < UniqueDecls; ++i)
12538     ListsPerDecl.push_back(Record.readInt());
12539   C->setDeclNumLists(ListsPerDecl);
12540 
12541   SmallVector<unsigned, 32> ListSizes;
12542   ListSizes.reserve(TotalLists);
12543   for (unsigned i = 0; i < TotalLists; ++i)
12544     ListSizes.push_back(Record.readInt());
12545   C->setComponentListSizes(ListSizes);
12546 
12547   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12548   Components.reserve(TotalComponents);
12549   for (unsigned i = 0; i < TotalComponents; ++i) {
12550     Expr *AssociatedExpr = Record.readSubExpr();
12551     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12552     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12553         AssociatedExpr, AssociatedDecl));
12554   }
12555   C->setComponents(Components, ListSizes);
12556 }
12557 
12558 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12559   C->setLParenLoc(Record.readSourceLocation());
12560   auto NumVars = C->varlist_size();
12561   auto UniqueDecls = C->getUniqueDeclarationsNum();
12562   auto TotalLists = C->getTotalComponentListNum();
12563   auto TotalComponents = C->getTotalComponentsNum();
12564 
12565   SmallVector<Expr *, 16> Vars;
12566   Vars.reserve(NumVars);
12567   for (unsigned i = 0; i != NumVars; ++i)
12568     Vars.push_back(Record.readSubExpr());
12569   C->setVarRefs(Vars);
12570   Vars.clear();
12571   for (unsigned i = 0; i != NumVars; ++i)
12572     Vars.push_back(Record.readSubExpr());
12573   C->setPrivateCopies(Vars);
12574   Vars.clear();
12575   for (unsigned i = 0; i != NumVars; ++i)
12576     Vars.push_back(Record.readSubExpr());
12577   C->setInits(Vars);
12578 
12579   SmallVector<ValueDecl *, 16> Decls;
12580   Decls.reserve(UniqueDecls);
12581   for (unsigned i = 0; i < UniqueDecls; ++i)
12582     Decls.push_back(Record.readDeclAs<ValueDecl>());
12583   C->setUniqueDecls(Decls);
12584 
12585   SmallVector<unsigned, 16> ListsPerDecl;
12586   ListsPerDecl.reserve(UniqueDecls);
12587   for (unsigned i = 0; i < UniqueDecls; ++i)
12588     ListsPerDecl.push_back(Record.readInt());
12589   C->setDeclNumLists(ListsPerDecl);
12590 
12591   SmallVector<unsigned, 32> ListSizes;
12592   ListSizes.reserve(TotalLists);
12593   for (unsigned i = 0; i < TotalLists; ++i)
12594     ListSizes.push_back(Record.readInt());
12595   C->setComponentListSizes(ListSizes);
12596 
12597   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12598   Components.reserve(TotalComponents);
12599   for (unsigned i = 0; i < TotalComponents; ++i) {
12600     Expr *AssociatedExpr = Record.readSubExpr();
12601     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12602     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12603         AssociatedExpr, AssociatedDecl));
12604   }
12605   C->setComponents(Components, ListSizes);
12606 }
12607 
12608 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12609   C->setLParenLoc(Record.readSourceLocation());
12610   auto NumVars = C->varlist_size();
12611   auto UniqueDecls = C->getUniqueDeclarationsNum();
12612   auto TotalLists = C->getTotalComponentListNum();
12613   auto TotalComponents = C->getTotalComponentsNum();
12614 
12615   SmallVector<Expr *, 16> Vars;
12616   Vars.reserve(NumVars);
12617   for (unsigned i = 0; i != NumVars; ++i)
12618     Vars.push_back(Record.readSubExpr());
12619   C->setVarRefs(Vars);
12620   Vars.clear();
12621 
12622   SmallVector<ValueDecl *, 16> Decls;
12623   Decls.reserve(UniqueDecls);
12624   for (unsigned i = 0; i < UniqueDecls; ++i)
12625     Decls.push_back(Record.readDeclAs<ValueDecl>());
12626   C->setUniqueDecls(Decls);
12627 
12628   SmallVector<unsigned, 16> ListsPerDecl;
12629   ListsPerDecl.reserve(UniqueDecls);
12630   for (unsigned i = 0; i < UniqueDecls; ++i)
12631     ListsPerDecl.push_back(Record.readInt());
12632   C->setDeclNumLists(ListsPerDecl);
12633 
12634   SmallVector<unsigned, 32> ListSizes;
12635   ListSizes.reserve(TotalLists);
12636   for (unsigned i = 0; i < TotalLists; ++i)
12637     ListSizes.push_back(Record.readInt());
12638   C->setComponentListSizes(ListSizes);
12639 
12640   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12641   Components.reserve(TotalComponents);
12642   for (unsigned i = 0; i < TotalComponents; ++i) {
12643     Expr *AssociatedExpr = Record.readSubExpr();
12644     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12645     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12646         AssociatedExpr, AssociatedDecl));
12647   }
12648   C->setComponents(Components, ListSizes);
12649 }
12650 
12651 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12652   C->setLParenLoc(Record.readSourceLocation());
12653   unsigned NumVars = C->varlist_size();
12654   SmallVector<Expr *, 16> Vars;
12655   Vars.reserve(NumVars);
12656   for (unsigned i = 0; i != NumVars; ++i)
12657     Vars.push_back(Record.readSubExpr());
12658   C->setVarRefs(Vars);
12659   Vars.clear();
12660   Vars.reserve(NumVars);
12661   for (unsigned i = 0; i != NumVars; ++i)
12662     Vars.push_back(Record.readSubExpr());
12663   C->setPrivateRefs(Vars);
12664 }
12665 
12666 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12667   C->setLParenLoc(Record.readSourceLocation());
12668   unsigned NumVars = C->varlist_size();
12669   SmallVector<Expr *, 16> Vars;
12670   Vars.reserve(NumVars);
12671   for (unsigned i = 0; i != NumVars; ++i)
12672     Vars.push_back(Record.readSubExpr());
12673   C->setVarRefs(Vars);
12674 }
12675 
12676 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12677   C->setLParenLoc(Record.readSourceLocation());
12678   unsigned NumVars = C->varlist_size();
12679   SmallVector<Expr *, 16> Vars;
12680   Vars.reserve(NumVars);
12681   for (unsigned i = 0; i != NumVars; ++i)
12682     Vars.push_back(Record.readSubExpr());
12683   C->setVarRefs(Vars);
12684 }
12685 
12686 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12687   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12688   C->setLParenLoc(Record.readSourceLocation());
12689   C->setKindKwLoc(Record.readSourceLocation());
12690 }
12691 
12692 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12693   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12694   TI.Sets.resize(readUInt32());
12695   for (auto &Set : TI.Sets) {
12696     Set.Kind = readEnum<llvm::omp::TraitSet>();
12697     Set.Selectors.resize(readUInt32());
12698     for (auto &Selector : Set.Selectors) {
12699       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12700       Selector.ScoreOrCondition = nullptr;
12701       if (readBool())
12702         Selector.ScoreOrCondition = readExprRef();
12703       Selector.Properties.resize(readUInt32());
12704       for (auto &Property : Selector.Properties)
12705         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12706     }
12707   }
12708   return &TI;
12709 }
12710