xref: /freebsd/contrib/llvm-project/clang/lib/Serialization/ASTReader.cpp (revision 85868e8a1daeaae7a0e48effb2ea2310ae3b02c6)
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/Serialization/ASTReader.h"
14 #include "ASTCommon.h"
15 #include "ASTReaderInternals.h"
16 #include "clang/AST/ASTConsumer.h"
17 #include "clang/AST/ASTContext.h"
18 #include "clang/AST/ASTMutationListener.h"
19 #include "clang/AST/ASTUnresolvedSet.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclBase.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclFriend.h"
24 #include "clang/AST/DeclGroup.h"
25 #include "clang/AST/DeclObjC.h"
26 #include "clang/AST/DeclTemplate.h"
27 #include "clang/AST/DeclarationName.h"
28 #include "clang/AST/Expr.h"
29 #include "clang/AST/ExprCXX.h"
30 #include "clang/AST/ExternalASTSource.h"
31 #include "clang/AST/NestedNameSpecifier.h"
32 #include "clang/AST/ODRHash.h"
33 #include "clang/AST/RawCommentList.h"
34 #include "clang/AST/TemplateBase.h"
35 #include "clang/AST/TemplateName.h"
36 #include "clang/AST/Type.h"
37 #include "clang/AST/TypeLoc.h"
38 #include "clang/AST/TypeLocVisitor.h"
39 #include "clang/AST/UnresolvedSet.h"
40 #include "clang/Basic/CommentOptions.h"
41 #include "clang/Basic/Diagnostic.h"
42 #include "clang/Basic/DiagnosticOptions.h"
43 #include "clang/Basic/ExceptionSpecificationType.h"
44 #include "clang/Basic/FileManager.h"
45 #include "clang/Basic/FileSystemOptions.h"
46 #include "clang/Basic/IdentifierTable.h"
47 #include "clang/Basic/LLVM.h"
48 #include "clang/Basic/LangOptions.h"
49 #include "clang/Basic/Module.h"
50 #include "clang/Basic/ObjCRuntime.h"
51 #include "clang/Basic/OperatorKinds.h"
52 #include "clang/Basic/PragmaKinds.h"
53 #include "clang/Basic/Sanitizers.h"
54 #include "clang/Basic/SourceLocation.h"
55 #include "clang/Basic/SourceManager.h"
56 #include "clang/Basic/SourceManagerInternals.h"
57 #include "clang/Basic/Specifiers.h"
58 #include "clang/Basic/TargetInfo.h"
59 #include "clang/Basic/TargetOptions.h"
60 #include "clang/Basic/TokenKinds.h"
61 #include "clang/Basic/Version.h"
62 #include "clang/Lex/HeaderSearch.h"
63 #include "clang/Lex/HeaderSearchOptions.h"
64 #include "clang/Lex/MacroInfo.h"
65 #include "clang/Lex/ModuleMap.h"
66 #include "clang/Lex/PreprocessingRecord.h"
67 #include "clang/Lex/Preprocessor.h"
68 #include "clang/Lex/PreprocessorOptions.h"
69 #include "clang/Lex/Token.h"
70 #include "clang/Sema/ObjCMethodList.h"
71 #include "clang/Sema/Scope.h"
72 #include "clang/Sema/Sema.h"
73 #include "clang/Sema/Weak.h"
74 #include "clang/Serialization/ASTBitCodes.h"
75 #include "clang/Serialization/ASTDeserializationListener.h"
76 #include "clang/Serialization/ContinuousRangeMap.h"
77 #include "clang/Serialization/GlobalModuleIndex.h"
78 #include "clang/Serialization/InMemoryModuleCache.h"
79 #include "clang/Serialization/Module.h"
80 #include "clang/Serialization/ModuleFileExtension.h"
81 #include "clang/Serialization/ModuleManager.h"
82 #include "clang/Serialization/PCHContainerOperations.h"
83 #include "clang/Serialization/SerializationDiagnostic.h"
84 #include "llvm/ADT/APFloat.h"
85 #include "llvm/ADT/APInt.h"
86 #include "llvm/ADT/APSInt.h"
87 #include "llvm/ADT/ArrayRef.h"
88 #include "llvm/ADT/DenseMap.h"
89 #include "llvm/ADT/FoldingSet.h"
90 #include "llvm/ADT/Hashing.h"
91 #include "llvm/ADT/IntrusiveRefCntPtr.h"
92 #include "llvm/ADT/None.h"
93 #include "llvm/ADT/Optional.h"
94 #include "llvm/ADT/STLExtras.h"
95 #include "llvm/ADT/ScopeExit.h"
96 #include "llvm/ADT/SmallPtrSet.h"
97 #include "llvm/ADT/SmallString.h"
98 #include "llvm/ADT/SmallVector.h"
99 #include "llvm/ADT/StringExtras.h"
100 #include "llvm/ADT/StringMap.h"
101 #include "llvm/ADT/StringRef.h"
102 #include "llvm/ADT/Triple.h"
103 #include "llvm/ADT/iterator_range.h"
104 #include "llvm/Bitstream/BitstreamReader.h"
105 #include "llvm/Support/Casting.h"
106 #include "llvm/Support/Compiler.h"
107 #include "llvm/Support/Compression.h"
108 #include "llvm/Support/DJB.h"
109 #include "llvm/Support/Endian.h"
110 #include "llvm/Support/Error.h"
111 #include "llvm/Support/ErrorHandling.h"
112 #include "llvm/Support/FileSystem.h"
113 #include "llvm/Support/MemoryBuffer.h"
114 #include "llvm/Support/Path.h"
115 #include "llvm/Support/SaveAndRestore.h"
116 #include "llvm/Support/Timer.h"
117 #include "llvm/Support/VersionTuple.h"
118 #include "llvm/Support/raw_ostream.h"
119 #include <algorithm>
120 #include <cassert>
121 #include <cstddef>
122 #include <cstdint>
123 #include <cstdio>
124 #include <ctime>
125 #include <iterator>
126 #include <limits>
127 #include <map>
128 #include <memory>
129 #include <string>
130 #include <system_error>
131 #include <tuple>
132 #include <utility>
133 #include <vector>
134 
135 using namespace clang;
136 using namespace clang::serialization;
137 using namespace clang::serialization::reader;
138 using llvm::BitstreamCursor;
139 
140 //===----------------------------------------------------------------------===//
141 // ChainedASTReaderListener implementation
142 //===----------------------------------------------------------------------===//
143 
144 bool
145 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
146   return First->ReadFullVersionInformation(FullVersion) ||
147          Second->ReadFullVersionInformation(FullVersion);
148 }
149 
150 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
151   First->ReadModuleName(ModuleName);
152   Second->ReadModuleName(ModuleName);
153 }
154 
155 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
156   First->ReadModuleMapFile(ModuleMapPath);
157   Second->ReadModuleMapFile(ModuleMapPath);
158 }
159 
160 bool
161 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
162                                               bool Complain,
163                                               bool AllowCompatibleDifferences) {
164   return First->ReadLanguageOptions(LangOpts, Complain,
165                                     AllowCompatibleDifferences) ||
166          Second->ReadLanguageOptions(LangOpts, Complain,
167                                      AllowCompatibleDifferences);
168 }
169 
170 bool ChainedASTReaderListener::ReadTargetOptions(
171     const TargetOptions &TargetOpts, bool Complain,
172     bool AllowCompatibleDifferences) {
173   return First->ReadTargetOptions(TargetOpts, Complain,
174                                   AllowCompatibleDifferences) ||
175          Second->ReadTargetOptions(TargetOpts, Complain,
176                                    AllowCompatibleDifferences);
177 }
178 
179 bool ChainedASTReaderListener::ReadDiagnosticOptions(
180     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
181   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
182          Second->ReadDiagnosticOptions(DiagOpts, Complain);
183 }
184 
185 bool
186 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
187                                                 bool Complain) {
188   return First->ReadFileSystemOptions(FSOpts, Complain) ||
189          Second->ReadFileSystemOptions(FSOpts, Complain);
190 }
191 
192 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
193     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
194     bool Complain) {
195   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
196                                         Complain) ||
197          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
198                                          Complain);
199 }
200 
201 bool ChainedASTReaderListener::ReadPreprocessorOptions(
202     const PreprocessorOptions &PPOpts, bool Complain,
203     std::string &SuggestedPredefines) {
204   return First->ReadPreprocessorOptions(PPOpts, Complain,
205                                         SuggestedPredefines) ||
206          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
207 }
208 
209 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
210                                            unsigned Value) {
211   First->ReadCounter(M, Value);
212   Second->ReadCounter(M, Value);
213 }
214 
215 bool ChainedASTReaderListener::needsInputFileVisitation() {
216   return First->needsInputFileVisitation() ||
217          Second->needsInputFileVisitation();
218 }
219 
220 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
221   return First->needsSystemInputFileVisitation() ||
222   Second->needsSystemInputFileVisitation();
223 }
224 
225 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
226                                                ModuleKind Kind) {
227   First->visitModuleFile(Filename, Kind);
228   Second->visitModuleFile(Filename, Kind);
229 }
230 
231 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
232                                               bool isSystem,
233                                               bool isOverridden,
234                                               bool isExplicitModule) {
235   bool Continue = false;
236   if (First->needsInputFileVisitation() &&
237       (!isSystem || First->needsSystemInputFileVisitation()))
238     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
239                                       isExplicitModule);
240   if (Second->needsInputFileVisitation() &&
241       (!isSystem || Second->needsSystemInputFileVisitation()))
242     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
243                                        isExplicitModule);
244   return Continue;
245 }
246 
247 void ChainedASTReaderListener::readModuleFileExtension(
248        const ModuleFileExtensionMetadata &Metadata) {
249   First->readModuleFileExtension(Metadata);
250   Second->readModuleFileExtension(Metadata);
251 }
252 
253 //===----------------------------------------------------------------------===//
254 // PCH validator implementation
255 //===----------------------------------------------------------------------===//
256 
257 ASTReaderListener::~ASTReaderListener() = default;
258 
259 /// Compare the given set of language options against an existing set of
260 /// language options.
261 ///
262 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
263 /// \param AllowCompatibleDifferences If true, differences between compatible
264 ///        language options will be permitted.
265 ///
266 /// \returns true if the languagae options mis-match, false otherwise.
267 static bool checkLanguageOptions(const LangOptions &LangOpts,
268                                  const LangOptions &ExistingLangOpts,
269                                  DiagnosticsEngine *Diags,
270                                  bool AllowCompatibleDifferences = true) {
271 #define LANGOPT(Name, Bits, Default, Description)                 \
272   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
273     if (Diags)                                                    \
274       Diags->Report(diag::err_pch_langopt_mismatch)               \
275         << Description << LangOpts.Name << ExistingLangOpts.Name; \
276     return true;                                                  \
277   }
278 
279 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
280   if (ExistingLangOpts.Name != LangOpts.Name) {           \
281     if (Diags)                                            \
282       Diags->Report(diag::err_pch_langopt_value_mismatch) \
283         << Description;                                   \
284     return true;                                          \
285   }
286 
287 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
288   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
289     if (Diags)                                                 \
290       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
291         << Description;                                        \
292     return true;                                               \
293   }
294 
295 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
296   if (!AllowCompatibleDifferences)                            \
297     LANGOPT(Name, Bits, Default, Description)
298 
299 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
300   if (!AllowCompatibleDifferences)                                 \
301     ENUM_LANGOPT(Name, Bits, Default, Description)
302 
303 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
304   if (!AllowCompatibleDifferences)                                 \
305     VALUE_LANGOPT(Name, Bits, Default, Description)
306 
307 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
308 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
309 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
310 #include "clang/Basic/LangOptions.def"
311 
312   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
313     if (Diags)
314       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
315     return true;
316   }
317 
318   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
319     if (Diags)
320       Diags->Report(diag::err_pch_langopt_value_mismatch)
321       << "target Objective-C runtime";
322     return true;
323   }
324 
325   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
326       LangOpts.CommentOpts.BlockCommandNames) {
327     if (Diags)
328       Diags->Report(diag::err_pch_langopt_value_mismatch)
329         << "block command names";
330     return true;
331   }
332 
333   // Sanitizer feature mismatches are treated as compatible differences. If
334   // compatible differences aren't allowed, we still only want to check for
335   // mismatches of non-modular sanitizers (the only ones which can affect AST
336   // generation).
337   if (!AllowCompatibleDifferences) {
338     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
339     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
340     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
341     ExistingSanitizers.clear(ModularSanitizers);
342     ImportedSanitizers.clear(ModularSanitizers);
343     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
344       const std::string Flag = "-fsanitize=";
345       if (Diags) {
346 #define SANITIZER(NAME, ID)                                                    \
347   {                                                                            \
348     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
349     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
350     if (InExistingModule != InImportedModule)                                  \
351       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
352           << InExistingModule << (Flag + NAME);                                \
353   }
354 #include "clang/Basic/Sanitizers.def"
355       }
356       return true;
357     }
358   }
359 
360   return false;
361 }
362 
363 /// Compare the given set of target options against an existing set of
364 /// target options.
365 ///
366 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
367 ///
368 /// \returns true if the target options mis-match, false otherwise.
369 static bool checkTargetOptions(const TargetOptions &TargetOpts,
370                                const TargetOptions &ExistingTargetOpts,
371                                DiagnosticsEngine *Diags,
372                                bool AllowCompatibleDifferences = true) {
373 #define CHECK_TARGET_OPT(Field, Name)                             \
374   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
375     if (Diags)                                                    \
376       Diags->Report(diag::err_pch_targetopt_mismatch)             \
377         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
378     return true;                                                  \
379   }
380 
381   // The triple and ABI must match exactly.
382   CHECK_TARGET_OPT(Triple, "target");
383   CHECK_TARGET_OPT(ABI, "target ABI");
384 
385   // We can tolerate different CPUs in many cases, notably when one CPU
386   // supports a strict superset of another. When allowing compatible
387   // differences skip this check.
388   if (!AllowCompatibleDifferences)
389     CHECK_TARGET_OPT(CPU, "target CPU");
390 
391 #undef CHECK_TARGET_OPT
392 
393   // Compare feature sets.
394   SmallVector<StringRef, 4> ExistingFeatures(
395                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
396                                              ExistingTargetOpts.FeaturesAsWritten.end());
397   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
398                                          TargetOpts.FeaturesAsWritten.end());
399   llvm::sort(ExistingFeatures);
400   llvm::sort(ReadFeatures);
401 
402   // We compute the set difference in both directions explicitly so that we can
403   // diagnose the differences differently.
404   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
405   std::set_difference(
406       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
407       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
408   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
409                       ExistingFeatures.begin(), ExistingFeatures.end(),
410                       std::back_inserter(UnmatchedReadFeatures));
411 
412   // If we are allowing compatible differences and the read feature set is
413   // a strict subset of the existing feature set, there is nothing to diagnose.
414   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
415     return false;
416 
417   if (Diags) {
418     for (StringRef Feature : UnmatchedReadFeatures)
419       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
420           << /* is-existing-feature */ false << Feature;
421     for (StringRef Feature : UnmatchedExistingFeatures)
422       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
423           << /* is-existing-feature */ true << Feature;
424   }
425 
426   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
427 }
428 
429 bool
430 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
431                                   bool Complain,
432                                   bool AllowCompatibleDifferences) {
433   const LangOptions &ExistingLangOpts = PP.getLangOpts();
434   return checkLanguageOptions(LangOpts, ExistingLangOpts,
435                               Complain ? &Reader.Diags : nullptr,
436                               AllowCompatibleDifferences);
437 }
438 
439 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
440                                      bool Complain,
441                                      bool AllowCompatibleDifferences) {
442   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
443   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
444                             Complain ? &Reader.Diags : nullptr,
445                             AllowCompatibleDifferences);
446 }
447 
448 namespace {
449 
450 using MacroDefinitionsMap =
451     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
452 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
453 
454 } // namespace
455 
456 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
457                                          DiagnosticsEngine &Diags,
458                                          bool Complain) {
459   using Level = DiagnosticsEngine::Level;
460 
461   // Check current mappings for new -Werror mappings, and the stored mappings
462   // for cases that were explicitly mapped to *not* be errors that are now
463   // errors because of options like -Werror.
464   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
465 
466   for (DiagnosticsEngine *MappingSource : MappingSources) {
467     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
468       diag::kind DiagID = DiagIDMappingPair.first;
469       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
470       if (CurLevel < DiagnosticsEngine::Error)
471         continue; // not significant
472       Level StoredLevel =
473           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
474       if (StoredLevel < DiagnosticsEngine::Error) {
475         if (Complain)
476           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
477               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
478         return true;
479       }
480     }
481   }
482 
483   return false;
484 }
485 
486 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
487   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
488   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
489     return true;
490   return Ext >= diag::Severity::Error;
491 }
492 
493 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
494                                     DiagnosticsEngine &Diags,
495                                     bool IsSystem, bool Complain) {
496   // Top-level options
497   if (IsSystem) {
498     if (Diags.getSuppressSystemWarnings())
499       return false;
500     // If -Wsystem-headers was not enabled before, be conservative
501     if (StoredDiags.getSuppressSystemWarnings()) {
502       if (Complain)
503         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
504       return true;
505     }
506   }
507 
508   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
509     if (Complain)
510       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
511     return true;
512   }
513 
514   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
515       !StoredDiags.getEnableAllWarnings()) {
516     if (Complain)
517       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
518     return true;
519   }
520 
521   if (isExtHandlingFromDiagsError(Diags) &&
522       !isExtHandlingFromDiagsError(StoredDiags)) {
523     if (Complain)
524       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
525     return true;
526   }
527 
528   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
529 }
530 
531 /// Return the top import module if it is implicit, nullptr otherwise.
532 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
533                                           Preprocessor &PP) {
534   // If the original import came from a file explicitly generated by the user,
535   // don't check the diagnostic mappings.
536   // FIXME: currently this is approximated by checking whether this is not a
537   // module import of an implicitly-loaded module file.
538   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
539   // the transitive closure of its imports, since unrelated modules cannot be
540   // imported until after this module finishes validation.
541   ModuleFile *TopImport = &*ModuleMgr.rbegin();
542   while (!TopImport->ImportedBy.empty())
543     TopImport = TopImport->ImportedBy[0];
544   if (TopImport->Kind != MK_ImplicitModule)
545     return nullptr;
546 
547   StringRef ModuleName = TopImport->ModuleName;
548   assert(!ModuleName.empty() && "diagnostic options read before module name");
549 
550   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
551   assert(M && "missing module");
552   return M;
553 }
554 
555 bool PCHValidator::ReadDiagnosticOptions(
556     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
557   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
558   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
559   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
560       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
561   // This should never fail, because we would have processed these options
562   // before writing them to an ASTFile.
563   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
564 
565   ModuleManager &ModuleMgr = Reader.getModuleManager();
566   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
567 
568   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
569   if (!TopM)
570     return false;
571 
572   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
573   // contains the union of their flags.
574   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
575                                  Complain);
576 }
577 
578 /// Collect the macro definitions provided by the given preprocessor
579 /// options.
580 static void
581 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
582                         MacroDefinitionsMap &Macros,
583                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
584   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
585     StringRef Macro = PPOpts.Macros[I].first;
586     bool IsUndef = PPOpts.Macros[I].second;
587 
588     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
589     StringRef MacroName = MacroPair.first;
590     StringRef MacroBody = MacroPair.second;
591 
592     // For an #undef'd macro, we only care about the name.
593     if (IsUndef) {
594       if (MacroNames && !Macros.count(MacroName))
595         MacroNames->push_back(MacroName);
596 
597       Macros[MacroName] = std::make_pair("", true);
598       continue;
599     }
600 
601     // For a #define'd macro, figure out the actual definition.
602     if (MacroName.size() == Macro.size())
603       MacroBody = "1";
604     else {
605       // Note: GCC drops anything following an end-of-line character.
606       StringRef::size_type End = MacroBody.find_first_of("\n\r");
607       MacroBody = MacroBody.substr(0, End);
608     }
609 
610     if (MacroNames && !Macros.count(MacroName))
611       MacroNames->push_back(MacroName);
612     Macros[MacroName] = std::make_pair(MacroBody, false);
613   }
614 }
615 
616 /// Check the preprocessor options deserialized from the control block
617 /// against the preprocessor options in an existing preprocessor.
618 ///
619 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
620 /// \param Validate If true, validate preprocessor options. If false, allow
621 ///        macros defined by \p ExistingPPOpts to override those defined by
622 ///        \p PPOpts in SuggestedPredefines.
623 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
624                                      const PreprocessorOptions &ExistingPPOpts,
625                                      DiagnosticsEngine *Diags,
626                                      FileManager &FileMgr,
627                                      std::string &SuggestedPredefines,
628                                      const LangOptions &LangOpts,
629                                      bool Validate = true) {
630   // Check macro definitions.
631   MacroDefinitionsMap ASTFileMacros;
632   collectMacroDefinitions(PPOpts, ASTFileMacros);
633   MacroDefinitionsMap ExistingMacros;
634   SmallVector<StringRef, 4> ExistingMacroNames;
635   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
636 
637   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
638     // Dig out the macro definition in the existing preprocessor options.
639     StringRef MacroName = ExistingMacroNames[I];
640     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
641 
642     // Check whether we know anything about this macro name or not.
643     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
644         ASTFileMacros.find(MacroName);
645     if (!Validate || Known == ASTFileMacros.end()) {
646       // FIXME: Check whether this identifier was referenced anywhere in the
647       // AST file. If so, we should reject the AST file. Unfortunately, this
648       // information isn't in the control block. What shall we do about it?
649 
650       if (Existing.second) {
651         SuggestedPredefines += "#undef ";
652         SuggestedPredefines += MacroName.str();
653         SuggestedPredefines += '\n';
654       } else {
655         SuggestedPredefines += "#define ";
656         SuggestedPredefines += MacroName.str();
657         SuggestedPredefines += ' ';
658         SuggestedPredefines += Existing.first.str();
659         SuggestedPredefines += '\n';
660       }
661       continue;
662     }
663 
664     // If the macro was defined in one but undef'd in the other, we have a
665     // conflict.
666     if (Existing.second != Known->second.second) {
667       if (Diags) {
668         Diags->Report(diag::err_pch_macro_def_undef)
669           << MacroName << Known->second.second;
670       }
671       return true;
672     }
673 
674     // If the macro was #undef'd in both, or if the macro bodies are identical,
675     // it's fine.
676     if (Existing.second || Existing.first == Known->second.first)
677       continue;
678 
679     // The macro bodies differ; complain.
680     if (Diags) {
681       Diags->Report(diag::err_pch_macro_def_conflict)
682         << MacroName << Known->second.first << Existing.first;
683     }
684     return true;
685   }
686 
687   // Check whether we're using predefines.
688   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
689     if (Diags) {
690       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
691     }
692     return true;
693   }
694 
695   // Detailed record is important since it is used for the module cache hash.
696   if (LangOpts.Modules &&
697       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
698     if (Diags) {
699       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
700     }
701     return true;
702   }
703 
704   // Compute the #include and #include_macros lines we need.
705   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
706     StringRef File = ExistingPPOpts.Includes[I];
707 
708     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
709         !ExistingPPOpts.PCHThroughHeader.empty()) {
710       // In case the through header is an include, we must add all the includes
711       // to the predefines so the start point can be determined.
712       SuggestedPredefines += "#include \"";
713       SuggestedPredefines += File;
714       SuggestedPredefines += "\"\n";
715       continue;
716     }
717 
718     if (File == ExistingPPOpts.ImplicitPCHInclude)
719       continue;
720 
721     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
722           != PPOpts.Includes.end())
723       continue;
724 
725     SuggestedPredefines += "#include \"";
726     SuggestedPredefines += File;
727     SuggestedPredefines += "\"\n";
728   }
729 
730   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
731     StringRef File = ExistingPPOpts.MacroIncludes[I];
732     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
733                   File)
734         != PPOpts.MacroIncludes.end())
735       continue;
736 
737     SuggestedPredefines += "#__include_macros \"";
738     SuggestedPredefines += File;
739     SuggestedPredefines += "\"\n##\n";
740   }
741 
742   return false;
743 }
744 
745 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
746                                            bool Complain,
747                                            std::string &SuggestedPredefines) {
748   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
749 
750   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
751                                   Complain? &Reader.Diags : nullptr,
752                                   PP.getFileManager(),
753                                   SuggestedPredefines,
754                                   PP.getLangOpts());
755 }
756 
757 bool SimpleASTReaderListener::ReadPreprocessorOptions(
758                                   const PreprocessorOptions &PPOpts,
759                                   bool Complain,
760                                   std::string &SuggestedPredefines) {
761   return checkPreprocessorOptions(PPOpts,
762                                   PP.getPreprocessorOpts(),
763                                   nullptr,
764                                   PP.getFileManager(),
765                                   SuggestedPredefines,
766                                   PP.getLangOpts(),
767                                   false);
768 }
769 
770 /// Check the header search options deserialized from the control block
771 /// against the header search options in an existing preprocessor.
772 ///
773 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
774 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
775                                      StringRef SpecificModuleCachePath,
776                                      StringRef ExistingModuleCachePath,
777                                      DiagnosticsEngine *Diags,
778                                      const LangOptions &LangOpts) {
779   if (LangOpts.Modules) {
780     if (SpecificModuleCachePath != ExistingModuleCachePath) {
781       if (Diags)
782         Diags->Report(diag::err_pch_modulecache_mismatch)
783           << SpecificModuleCachePath << ExistingModuleCachePath;
784       return true;
785     }
786   }
787 
788   return false;
789 }
790 
791 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
792                                            StringRef SpecificModuleCachePath,
793                                            bool Complain) {
794   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
795                                   PP.getHeaderSearchInfo().getModuleCachePath(),
796                                   Complain ? &Reader.Diags : nullptr,
797                                   PP.getLangOpts());
798 }
799 
800 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
801   PP.setCounterValue(Value);
802 }
803 
804 //===----------------------------------------------------------------------===//
805 // AST reader implementation
806 //===----------------------------------------------------------------------===//
807 
808 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
809                                            bool TakeOwnership) {
810   DeserializationListener = Listener;
811   OwnsDeserializationListener = TakeOwnership;
812 }
813 
814 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
815   return serialization::ComputeHash(Sel);
816 }
817 
818 std::pair<unsigned, unsigned>
819 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
820   using namespace llvm::support;
821 
822   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
823   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
824   return std::make_pair(KeyLen, DataLen);
825 }
826 
827 ASTSelectorLookupTrait::internal_key_type
828 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
829   using namespace llvm::support;
830 
831   SelectorTable &SelTable = Reader.getContext().Selectors;
832   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
833   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
834       F, endian::readNext<uint32_t, little, unaligned>(d));
835   if (N == 0)
836     return SelTable.getNullarySelector(FirstII);
837   else if (N == 1)
838     return SelTable.getUnarySelector(FirstII);
839 
840   SmallVector<IdentifierInfo *, 16> Args;
841   Args.push_back(FirstII);
842   for (unsigned I = 1; I != N; ++I)
843     Args.push_back(Reader.getLocalIdentifier(
844         F, endian::readNext<uint32_t, little, unaligned>(d)));
845 
846   return SelTable.getSelector(N, Args.data());
847 }
848 
849 ASTSelectorLookupTrait::data_type
850 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
851                                  unsigned DataLen) {
852   using namespace llvm::support;
853 
854   data_type Result;
855 
856   Result.ID = Reader.getGlobalSelectorID(
857       F, endian::readNext<uint32_t, little, unaligned>(d));
858   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
859   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
860   Result.InstanceBits = FullInstanceBits & 0x3;
861   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
862   Result.FactoryBits = FullFactoryBits & 0x3;
863   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
864   unsigned NumInstanceMethods = FullInstanceBits >> 3;
865   unsigned NumFactoryMethods = FullFactoryBits >> 3;
866 
867   // Load instance methods
868   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
869     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
870             F, endian::readNext<uint32_t, little, unaligned>(d)))
871       Result.Instance.push_back(Method);
872   }
873 
874   // Load factory methods
875   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
876     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
877             F, endian::readNext<uint32_t, little, unaligned>(d)))
878       Result.Factory.push_back(Method);
879   }
880 
881   return Result;
882 }
883 
884 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
885   return llvm::djbHash(a);
886 }
887 
888 std::pair<unsigned, unsigned>
889 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
890   using namespace llvm::support;
891 
892   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
893   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
894   return std::make_pair(KeyLen, DataLen);
895 }
896 
897 ASTIdentifierLookupTraitBase::internal_key_type
898 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
899   assert(n >= 2 && d[n-1] == '\0');
900   return StringRef((const char*) d, n-1);
901 }
902 
903 /// Whether the given identifier is "interesting".
904 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
905                                     bool IsModule) {
906   return II.hadMacroDefinition() ||
907          II.isPoisoned() ||
908          (IsModule ? II.hasRevertedBuiltin() : II.getObjCOrBuiltinID()) ||
909          II.hasRevertedTokenIDToIdentifier() ||
910          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
911           II.getFETokenInfo());
912 }
913 
914 static bool readBit(unsigned &Bits) {
915   bool Value = Bits & 0x1;
916   Bits >>= 1;
917   return Value;
918 }
919 
920 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
921   using namespace llvm::support;
922 
923   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
924   return Reader.getGlobalIdentifierID(F, RawID >> 1);
925 }
926 
927 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
928   if (!II.isFromAST()) {
929     II.setIsFromAST();
930     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
931     if (isInterestingIdentifier(Reader, II, IsModule))
932       II.setChangedSinceDeserialization();
933   }
934 }
935 
936 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
937                                                    const unsigned char* d,
938                                                    unsigned DataLen) {
939   using namespace llvm::support;
940 
941   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
942   bool IsInteresting = RawID & 0x01;
943 
944   // Wipe out the "is interesting" bit.
945   RawID = RawID >> 1;
946 
947   // Build the IdentifierInfo and link the identifier ID with it.
948   IdentifierInfo *II = KnownII;
949   if (!II) {
950     II = &Reader.getIdentifierTable().getOwn(k);
951     KnownII = II;
952   }
953   markIdentifierFromAST(Reader, *II);
954   Reader.markIdentifierUpToDate(II);
955 
956   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
957   if (!IsInteresting) {
958     // For uninteresting identifiers, there's nothing else to do. Just notify
959     // the reader that we've finished loading this identifier.
960     Reader.SetIdentifierInfo(ID, II);
961     return II;
962   }
963 
964   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
965   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
966   bool CPlusPlusOperatorKeyword = readBit(Bits);
967   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
968   bool HasRevertedBuiltin = readBit(Bits);
969   bool Poisoned = readBit(Bits);
970   bool ExtensionToken = readBit(Bits);
971   bool HadMacroDefinition = readBit(Bits);
972 
973   assert(Bits == 0 && "Extra bits in the identifier?");
974   DataLen -= 8;
975 
976   // Set or check the various bits in the IdentifierInfo structure.
977   // Token IDs are read-only.
978   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
979     II->revertTokenIDToIdentifier();
980   if (!F.isModule())
981     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
982   else if (HasRevertedBuiltin && II->getBuiltinID()) {
983     II->revertBuiltin();
984     assert((II->hasRevertedBuiltin() ||
985             II->getObjCOrBuiltinID() == ObjCOrBuiltinID) &&
986            "Incorrect ObjC keyword or builtin ID");
987   }
988   assert(II->isExtensionToken() == ExtensionToken &&
989          "Incorrect extension token flag");
990   (void)ExtensionToken;
991   if (Poisoned)
992     II->setIsPoisoned(true);
993   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
994          "Incorrect C++ operator keyword flag");
995   (void)CPlusPlusOperatorKeyword;
996 
997   // If this identifier is a macro, deserialize the macro
998   // definition.
999   if (HadMacroDefinition) {
1000     uint32_t MacroDirectivesOffset =
1001         endian::readNext<uint32_t, little, unaligned>(d);
1002     DataLen -= 4;
1003 
1004     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1005   }
1006 
1007   Reader.SetIdentifierInfo(ID, II);
1008 
1009   // Read all of the declarations visible at global scope with this
1010   // name.
1011   if (DataLen > 0) {
1012     SmallVector<uint32_t, 4> DeclIDs;
1013     for (; DataLen > 0; DataLen -= 4)
1014       DeclIDs.push_back(Reader.getGlobalDeclID(
1015           F, endian::readNext<uint32_t, little, unaligned>(d)));
1016     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1017   }
1018 
1019   return II;
1020 }
1021 
1022 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1023     : Kind(Name.getNameKind()) {
1024   switch (Kind) {
1025   case DeclarationName::Identifier:
1026     Data = (uint64_t)Name.getAsIdentifierInfo();
1027     break;
1028   case DeclarationName::ObjCZeroArgSelector:
1029   case DeclarationName::ObjCOneArgSelector:
1030   case DeclarationName::ObjCMultiArgSelector:
1031     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1032     break;
1033   case DeclarationName::CXXOperatorName:
1034     Data = Name.getCXXOverloadedOperator();
1035     break;
1036   case DeclarationName::CXXLiteralOperatorName:
1037     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1038     break;
1039   case DeclarationName::CXXDeductionGuideName:
1040     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1041                ->getDeclName().getAsIdentifierInfo();
1042     break;
1043   case DeclarationName::CXXConstructorName:
1044   case DeclarationName::CXXDestructorName:
1045   case DeclarationName::CXXConversionFunctionName:
1046   case DeclarationName::CXXUsingDirective:
1047     Data = 0;
1048     break;
1049   }
1050 }
1051 
1052 unsigned DeclarationNameKey::getHash() const {
1053   llvm::FoldingSetNodeID ID;
1054   ID.AddInteger(Kind);
1055 
1056   switch (Kind) {
1057   case DeclarationName::Identifier:
1058   case DeclarationName::CXXLiteralOperatorName:
1059   case DeclarationName::CXXDeductionGuideName:
1060     ID.AddString(((IdentifierInfo*)Data)->getName());
1061     break;
1062   case DeclarationName::ObjCZeroArgSelector:
1063   case DeclarationName::ObjCOneArgSelector:
1064   case DeclarationName::ObjCMultiArgSelector:
1065     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1066     break;
1067   case DeclarationName::CXXOperatorName:
1068     ID.AddInteger((OverloadedOperatorKind)Data);
1069     break;
1070   case DeclarationName::CXXConstructorName:
1071   case DeclarationName::CXXDestructorName:
1072   case DeclarationName::CXXConversionFunctionName:
1073   case DeclarationName::CXXUsingDirective:
1074     break;
1075   }
1076 
1077   return ID.ComputeHash();
1078 }
1079 
1080 ModuleFile *
1081 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1082   using namespace llvm::support;
1083 
1084   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1085   return Reader.getLocalModuleFile(F, ModuleFileID);
1086 }
1087 
1088 std::pair<unsigned, unsigned>
1089 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1090   using namespace llvm::support;
1091 
1092   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
1093   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
1094   return std::make_pair(KeyLen, DataLen);
1095 }
1096 
1097 ASTDeclContextNameLookupTrait::internal_key_type
1098 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1099   using namespace llvm::support;
1100 
1101   auto Kind = (DeclarationName::NameKind)*d++;
1102   uint64_t Data;
1103   switch (Kind) {
1104   case DeclarationName::Identifier:
1105   case DeclarationName::CXXLiteralOperatorName:
1106   case DeclarationName::CXXDeductionGuideName:
1107     Data = (uint64_t)Reader.getLocalIdentifier(
1108         F, endian::readNext<uint32_t, little, unaligned>(d));
1109     break;
1110   case DeclarationName::ObjCZeroArgSelector:
1111   case DeclarationName::ObjCOneArgSelector:
1112   case DeclarationName::ObjCMultiArgSelector:
1113     Data =
1114         (uint64_t)Reader.getLocalSelector(
1115                              F, endian::readNext<uint32_t, little, unaligned>(
1116                                     d)).getAsOpaquePtr();
1117     break;
1118   case DeclarationName::CXXOperatorName:
1119     Data = *d++; // OverloadedOperatorKind
1120     break;
1121   case DeclarationName::CXXConstructorName:
1122   case DeclarationName::CXXDestructorName:
1123   case DeclarationName::CXXConversionFunctionName:
1124   case DeclarationName::CXXUsingDirective:
1125     Data = 0;
1126     break;
1127   }
1128 
1129   return DeclarationNameKey(Kind, Data);
1130 }
1131 
1132 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1133                                                  const unsigned char *d,
1134                                                  unsigned DataLen,
1135                                                  data_type_builder &Val) {
1136   using namespace llvm::support;
1137 
1138   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1139     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1140     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1141   }
1142 }
1143 
1144 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1145                                               BitstreamCursor &Cursor,
1146                                               uint64_t Offset,
1147                                               DeclContext *DC) {
1148   assert(Offset != 0);
1149 
1150   SavedStreamPosition SavedPosition(Cursor);
1151   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1152     Error(std::move(Err));
1153     return true;
1154   }
1155 
1156   RecordData Record;
1157   StringRef Blob;
1158   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1159   if (!MaybeCode) {
1160     Error(MaybeCode.takeError());
1161     return true;
1162   }
1163   unsigned Code = MaybeCode.get();
1164 
1165   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1166   if (!MaybeRecCode) {
1167     Error(MaybeRecCode.takeError());
1168     return true;
1169   }
1170   unsigned RecCode = MaybeRecCode.get();
1171   if (RecCode != DECL_CONTEXT_LEXICAL) {
1172     Error("Expected lexical block");
1173     return true;
1174   }
1175 
1176   assert(!isa<TranslationUnitDecl>(DC) &&
1177          "expected a TU_UPDATE_LEXICAL record for TU");
1178   // If we are handling a C++ class template instantiation, we can see multiple
1179   // lexical updates for the same record. It's important that we select only one
1180   // of them, so that field numbering works properly. Just pick the first one we
1181   // see.
1182   auto &Lex = LexicalDecls[DC];
1183   if (!Lex.first) {
1184     Lex = std::make_pair(
1185         &M, llvm::makeArrayRef(
1186                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1187                     Blob.data()),
1188                 Blob.size() / 4));
1189   }
1190   DC->setHasExternalLexicalStorage(true);
1191   return false;
1192 }
1193 
1194 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1195                                               BitstreamCursor &Cursor,
1196                                               uint64_t Offset,
1197                                               DeclID ID) {
1198   assert(Offset != 0);
1199 
1200   SavedStreamPosition SavedPosition(Cursor);
1201   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1202     Error(std::move(Err));
1203     return true;
1204   }
1205 
1206   RecordData Record;
1207   StringRef Blob;
1208   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1209   if (!MaybeCode) {
1210     Error(MaybeCode.takeError());
1211     return true;
1212   }
1213   unsigned Code = MaybeCode.get();
1214 
1215   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1216   if (!MaybeRecCode) {
1217     Error(MaybeRecCode.takeError());
1218     return true;
1219   }
1220   unsigned RecCode = MaybeRecCode.get();
1221   if (RecCode != DECL_CONTEXT_VISIBLE) {
1222     Error("Expected visible lookup table block");
1223     return true;
1224   }
1225 
1226   // We can't safely determine the primary context yet, so delay attaching the
1227   // lookup table until we're done with recursive deserialization.
1228   auto *Data = (const unsigned char*)Blob.data();
1229   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1230   return false;
1231 }
1232 
1233 void ASTReader::Error(StringRef Msg) const {
1234   Error(diag::err_fe_pch_malformed, Msg);
1235   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1236       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1237     Diag(diag::note_module_cache_path)
1238       << PP.getHeaderSearchInfo().getModuleCachePath();
1239   }
1240 }
1241 
1242 void ASTReader::Error(unsigned DiagID,
1243                       StringRef Arg1, StringRef Arg2) const {
1244   if (Diags.isDiagnosticInFlight())
1245     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2);
1246   else
1247     Diag(DiagID) << Arg1 << Arg2;
1248 }
1249 
1250 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1251                       unsigned Select) const {
1252   if (!Diags.isDiagnosticInFlight())
1253     Diag(DiagID) << Arg1 << Arg2 << Select;
1254 }
1255 
1256 void ASTReader::Error(llvm::Error &&Err) const {
1257   Error(toString(std::move(Err)));
1258 }
1259 
1260 //===----------------------------------------------------------------------===//
1261 // Source Manager Deserialization
1262 //===----------------------------------------------------------------------===//
1263 
1264 /// Read the line table in the source manager block.
1265 /// \returns true if there was an error.
1266 bool ASTReader::ParseLineTable(ModuleFile &F,
1267                                const RecordData &Record) {
1268   unsigned Idx = 0;
1269   LineTableInfo &LineTable = SourceMgr.getLineTable();
1270 
1271   // Parse the file names
1272   std::map<int, int> FileIDs;
1273   FileIDs[-1] = -1; // For unspecified filenames.
1274   for (unsigned I = 0; Record[Idx]; ++I) {
1275     // Extract the file name
1276     auto Filename = ReadPath(F, Record, Idx);
1277     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1278   }
1279   ++Idx;
1280 
1281   // Parse the line entries
1282   std::vector<LineEntry> Entries;
1283   while (Idx < Record.size()) {
1284     int FID = Record[Idx++];
1285     assert(FID >= 0 && "Serialized line entries for non-local file.");
1286     // Remap FileID from 1-based old view.
1287     FID += F.SLocEntryBaseID - 1;
1288 
1289     // Extract the line entries
1290     unsigned NumEntries = Record[Idx++];
1291     assert(NumEntries && "no line entries for file ID");
1292     Entries.clear();
1293     Entries.reserve(NumEntries);
1294     for (unsigned I = 0; I != NumEntries; ++I) {
1295       unsigned FileOffset = Record[Idx++];
1296       unsigned LineNo = Record[Idx++];
1297       int FilenameID = FileIDs[Record[Idx++]];
1298       SrcMgr::CharacteristicKind FileKind
1299         = (SrcMgr::CharacteristicKind)Record[Idx++];
1300       unsigned IncludeOffset = Record[Idx++];
1301       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1302                                        FileKind, IncludeOffset));
1303     }
1304     LineTable.AddEntry(FileID::get(FID), Entries);
1305   }
1306 
1307   return false;
1308 }
1309 
1310 /// Read a source manager block
1311 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1312   using namespace SrcMgr;
1313 
1314   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1315 
1316   // Set the source-location entry cursor to the current position in
1317   // the stream. This cursor will be used to read the contents of the
1318   // source manager block initially, and then lazily read
1319   // source-location entries as needed.
1320   SLocEntryCursor = F.Stream;
1321 
1322   // The stream itself is going to skip over the source manager block.
1323   if (llvm::Error Err = F.Stream.SkipBlock()) {
1324     Error(std::move(Err));
1325     return true;
1326   }
1327 
1328   // Enter the source manager block.
1329   if (llvm::Error Err =
1330           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1331     Error(std::move(Err));
1332     return true;
1333   }
1334 
1335   RecordData Record;
1336   while (true) {
1337     Expected<llvm::BitstreamEntry> MaybeE =
1338         SLocEntryCursor.advanceSkippingSubblocks();
1339     if (!MaybeE) {
1340       Error(MaybeE.takeError());
1341       return true;
1342     }
1343     llvm::BitstreamEntry E = MaybeE.get();
1344 
1345     switch (E.Kind) {
1346     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1347     case llvm::BitstreamEntry::Error:
1348       Error("malformed block record in AST file");
1349       return true;
1350     case llvm::BitstreamEntry::EndBlock:
1351       return false;
1352     case llvm::BitstreamEntry::Record:
1353       // The interesting case.
1354       break;
1355     }
1356 
1357     // Read a record.
1358     Record.clear();
1359     StringRef Blob;
1360     Expected<unsigned> MaybeRecord =
1361         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1362     if (!MaybeRecord) {
1363       Error(MaybeRecord.takeError());
1364       return true;
1365     }
1366     switch (MaybeRecord.get()) {
1367     default:  // Default behavior: ignore.
1368       break;
1369 
1370     case SM_SLOC_FILE_ENTRY:
1371     case SM_SLOC_BUFFER_ENTRY:
1372     case SM_SLOC_EXPANSION_ENTRY:
1373       // Once we hit one of the source location entries, we're done.
1374       return false;
1375     }
1376   }
1377 }
1378 
1379 /// If a header file is not found at the path that we expect it to be
1380 /// and the PCH file was moved from its original location, try to resolve the
1381 /// file by assuming that header+PCH were moved together and the header is in
1382 /// the same place relative to the PCH.
1383 static std::string
1384 resolveFileRelativeToOriginalDir(const std::string &Filename,
1385                                  const std::string &OriginalDir,
1386                                  const std::string &CurrDir) {
1387   assert(OriginalDir != CurrDir &&
1388          "No point trying to resolve the file if the PCH dir didn't change");
1389 
1390   using namespace llvm::sys;
1391 
1392   SmallString<128> filePath(Filename);
1393   fs::make_absolute(filePath);
1394   assert(path::is_absolute(OriginalDir));
1395   SmallString<128> currPCHPath(CurrDir);
1396 
1397   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1398                        fileDirE = path::end(path::parent_path(filePath));
1399   path::const_iterator origDirI = path::begin(OriginalDir),
1400                        origDirE = path::end(OriginalDir);
1401   // Skip the common path components from filePath and OriginalDir.
1402   while (fileDirI != fileDirE && origDirI != origDirE &&
1403          *fileDirI == *origDirI) {
1404     ++fileDirI;
1405     ++origDirI;
1406   }
1407   for (; origDirI != origDirE; ++origDirI)
1408     path::append(currPCHPath, "..");
1409   path::append(currPCHPath, fileDirI, fileDirE);
1410   path::append(currPCHPath, path::filename(Filename));
1411   return currPCHPath.str();
1412 }
1413 
1414 bool ASTReader::ReadSLocEntry(int ID) {
1415   if (ID == 0)
1416     return false;
1417 
1418   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1419     Error("source location entry ID out-of-range for AST file");
1420     return true;
1421   }
1422 
1423   // Local helper to read the (possibly-compressed) buffer data following the
1424   // entry record.
1425   auto ReadBuffer = [this](
1426       BitstreamCursor &SLocEntryCursor,
1427       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1428     RecordData Record;
1429     StringRef Blob;
1430     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1431     if (!MaybeCode) {
1432       Error(MaybeCode.takeError());
1433       return nullptr;
1434     }
1435     unsigned Code = MaybeCode.get();
1436 
1437     Expected<unsigned> MaybeRecCode =
1438         SLocEntryCursor.readRecord(Code, Record, &Blob);
1439     if (!MaybeRecCode) {
1440       Error(MaybeRecCode.takeError());
1441       return nullptr;
1442     }
1443     unsigned RecCode = MaybeRecCode.get();
1444 
1445     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1446       if (!llvm::zlib::isAvailable()) {
1447         Error("zlib is not available");
1448         return nullptr;
1449       }
1450       SmallString<0> Uncompressed;
1451       if (llvm::Error E =
1452               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1453         Error("could not decompress embedded file contents: " +
1454               llvm::toString(std::move(E)));
1455         return nullptr;
1456       }
1457       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1458     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1459       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1460     } else {
1461       Error("AST record has invalid code");
1462       return nullptr;
1463     }
1464   };
1465 
1466   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1467   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1468           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1469     Error(std::move(Err));
1470     return true;
1471   }
1472 
1473   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1474   unsigned BaseOffset = F->SLocEntryBaseOffset;
1475 
1476   ++NumSLocEntriesRead;
1477   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1478   if (!MaybeEntry) {
1479     Error(MaybeEntry.takeError());
1480     return true;
1481   }
1482   llvm::BitstreamEntry Entry = MaybeEntry.get();
1483 
1484   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1485     Error("incorrectly-formatted source location entry in AST file");
1486     return true;
1487   }
1488 
1489   RecordData Record;
1490   StringRef Blob;
1491   Expected<unsigned> MaybeSLOC =
1492       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1493   if (!MaybeSLOC) {
1494     Error(MaybeSLOC.takeError());
1495     return true;
1496   }
1497   switch (MaybeSLOC.get()) {
1498   default:
1499     Error("incorrectly-formatted source location entry in AST file");
1500     return true;
1501 
1502   case SM_SLOC_FILE_ENTRY: {
1503     // We will detect whether a file changed and return 'Failure' for it, but
1504     // we will also try to fail gracefully by setting up the SLocEntry.
1505     unsigned InputID = Record[4];
1506     InputFile IF = getInputFile(*F, InputID);
1507     const FileEntry *File = IF.getFile();
1508     bool OverriddenBuffer = IF.isOverridden();
1509 
1510     // Note that we only check if a File was returned. If it was out-of-date
1511     // we have complained but we will continue creating a FileID to recover
1512     // gracefully.
1513     if (!File)
1514       return true;
1515 
1516     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1517     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1518       // This is the module's main file.
1519       IncludeLoc = getImportLocation(F);
1520     }
1521     SrcMgr::CharacteristicKind
1522       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1523     // FIXME: The FileID should be created from the FileEntryRef.
1524     FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1525                                         ID, BaseOffset + Record[0]);
1526     SrcMgr::FileInfo &FileInfo =
1527           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1528     FileInfo.NumCreatedFIDs = Record[5];
1529     if (Record[3])
1530       FileInfo.setHasLineDirectives();
1531 
1532     unsigned NumFileDecls = Record[7];
1533     if (NumFileDecls && ContextObj) {
1534       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1535       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1536       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1537                                                              NumFileDecls));
1538     }
1539 
1540     const SrcMgr::ContentCache *ContentCache
1541       = SourceMgr.getOrCreateContentCache(File, isSystem(FileCharacter));
1542     if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1543         ContentCache->ContentsEntry == ContentCache->OrigEntry &&
1544         !ContentCache->getRawBuffer()) {
1545       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1546       if (!Buffer)
1547         return true;
1548       SourceMgr.overrideFileContents(File, std::move(Buffer));
1549     }
1550 
1551     break;
1552   }
1553 
1554   case SM_SLOC_BUFFER_ENTRY: {
1555     const char *Name = Blob.data();
1556     unsigned Offset = Record[0];
1557     SrcMgr::CharacteristicKind
1558       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1559     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1560     if (IncludeLoc.isInvalid() && F->isModule()) {
1561       IncludeLoc = getImportLocation(F);
1562     }
1563 
1564     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1565     if (!Buffer)
1566       return true;
1567     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1568                            BaseOffset + Offset, IncludeLoc);
1569     break;
1570   }
1571 
1572   case SM_SLOC_EXPANSION_ENTRY: {
1573     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1574     SourceMgr.createExpansionLoc(SpellingLoc,
1575                                      ReadSourceLocation(*F, Record[2]),
1576                                      ReadSourceLocation(*F, Record[3]),
1577                                      Record[5],
1578                                      Record[4],
1579                                      ID,
1580                                      BaseOffset + Record[0]);
1581     break;
1582   }
1583   }
1584 
1585   return false;
1586 }
1587 
1588 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1589   if (ID == 0)
1590     return std::make_pair(SourceLocation(), "");
1591 
1592   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1593     Error("source location entry ID out-of-range for AST file");
1594     return std::make_pair(SourceLocation(), "");
1595   }
1596 
1597   // Find which module file this entry lands in.
1598   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1599   if (!M->isModule())
1600     return std::make_pair(SourceLocation(), "");
1601 
1602   // FIXME: Can we map this down to a particular submodule? That would be
1603   // ideal.
1604   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1605 }
1606 
1607 /// Find the location where the module F is imported.
1608 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1609   if (F->ImportLoc.isValid())
1610     return F->ImportLoc;
1611 
1612   // Otherwise we have a PCH. It's considered to be "imported" at the first
1613   // location of its includer.
1614   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1615     // Main file is the importer.
1616     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1617     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1618   }
1619   return F->ImportedBy[0]->FirstLoc;
1620 }
1621 
1622 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1623 /// the abbreviations that are at the top of the block and then leave the cursor
1624 /// pointing into the block.
1625 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) {
1626   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1627     // FIXME this drops errors on the floor.
1628     consumeError(std::move(Err));
1629     return true;
1630   }
1631 
1632   while (true) {
1633     uint64_t Offset = Cursor.GetCurrentBitNo();
1634     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1635     if (!MaybeCode) {
1636       // FIXME this drops errors on the floor.
1637       consumeError(MaybeCode.takeError());
1638       return true;
1639     }
1640     unsigned Code = MaybeCode.get();
1641 
1642     // We expect all abbrevs to be at the start of the block.
1643     if (Code != llvm::bitc::DEFINE_ABBREV) {
1644       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1645         // FIXME this drops errors on the floor.
1646         consumeError(std::move(Err));
1647         return true;
1648       }
1649       return false;
1650     }
1651     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1652       // FIXME this drops errors on the floor.
1653       consumeError(std::move(Err));
1654       return true;
1655     }
1656   }
1657 }
1658 
1659 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1660                            unsigned &Idx) {
1661   Token Tok;
1662   Tok.startToken();
1663   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1664   Tok.setLength(Record[Idx++]);
1665   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1666     Tok.setIdentifierInfo(II);
1667   Tok.setKind((tok::TokenKind)Record[Idx++]);
1668   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1669   return Tok;
1670 }
1671 
1672 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1673   BitstreamCursor &Stream = F.MacroCursor;
1674 
1675   // Keep track of where we are in the stream, then jump back there
1676   // after reading this macro.
1677   SavedStreamPosition SavedPosition(Stream);
1678 
1679   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1680     // FIXME this drops errors on the floor.
1681     consumeError(std::move(Err));
1682     return nullptr;
1683   }
1684   RecordData Record;
1685   SmallVector<IdentifierInfo*, 16> MacroParams;
1686   MacroInfo *Macro = nullptr;
1687 
1688   while (true) {
1689     // Advance to the next record, but if we get to the end of the block, don't
1690     // pop it (removing all the abbreviations from the cursor) since we want to
1691     // be able to reseek within the block and read entries.
1692     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1693     Expected<llvm::BitstreamEntry> MaybeEntry =
1694         Stream.advanceSkippingSubblocks(Flags);
1695     if (!MaybeEntry) {
1696       Error(MaybeEntry.takeError());
1697       return Macro;
1698     }
1699     llvm::BitstreamEntry Entry = MaybeEntry.get();
1700 
1701     switch (Entry.Kind) {
1702     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1703     case llvm::BitstreamEntry::Error:
1704       Error("malformed block record in AST file");
1705       return Macro;
1706     case llvm::BitstreamEntry::EndBlock:
1707       return Macro;
1708     case llvm::BitstreamEntry::Record:
1709       // The interesting case.
1710       break;
1711     }
1712 
1713     // Read a record.
1714     Record.clear();
1715     PreprocessorRecordTypes RecType;
1716     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1717       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1718     else {
1719       Error(MaybeRecType.takeError());
1720       return Macro;
1721     }
1722     switch (RecType) {
1723     case PP_MODULE_MACRO:
1724     case PP_MACRO_DIRECTIVE_HISTORY:
1725       return Macro;
1726 
1727     case PP_MACRO_OBJECT_LIKE:
1728     case PP_MACRO_FUNCTION_LIKE: {
1729       // If we already have a macro, that means that we've hit the end
1730       // of the definition of the macro we were looking for. We're
1731       // done.
1732       if (Macro)
1733         return Macro;
1734 
1735       unsigned NextIndex = 1; // Skip identifier ID.
1736       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1737       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1738       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1739       MI->setIsUsed(Record[NextIndex++]);
1740       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1741 
1742       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1743         // Decode function-like macro info.
1744         bool isC99VarArgs = Record[NextIndex++];
1745         bool isGNUVarArgs = Record[NextIndex++];
1746         bool hasCommaPasting = Record[NextIndex++];
1747         MacroParams.clear();
1748         unsigned NumArgs = Record[NextIndex++];
1749         for (unsigned i = 0; i != NumArgs; ++i)
1750           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1751 
1752         // Install function-like macro info.
1753         MI->setIsFunctionLike();
1754         if (isC99VarArgs) MI->setIsC99Varargs();
1755         if (isGNUVarArgs) MI->setIsGNUVarargs();
1756         if (hasCommaPasting) MI->setHasCommaPasting();
1757         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1758       }
1759 
1760       // Remember that we saw this macro last so that we add the tokens that
1761       // form its body to it.
1762       Macro = MI;
1763 
1764       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1765           Record[NextIndex]) {
1766         // We have a macro definition. Register the association
1767         PreprocessedEntityID
1768             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1769         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1770         PreprocessingRecord::PPEntityID PPID =
1771             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1772         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1773             PPRec.getPreprocessedEntity(PPID));
1774         if (PPDef)
1775           PPRec.RegisterMacroDefinition(Macro, PPDef);
1776       }
1777 
1778       ++NumMacrosRead;
1779       break;
1780     }
1781 
1782     case PP_TOKEN: {
1783       // If we see a TOKEN before a PP_MACRO_*, then the file is
1784       // erroneous, just pretend we didn't see this.
1785       if (!Macro) break;
1786 
1787       unsigned Idx = 0;
1788       Token Tok = ReadToken(F, Record, Idx);
1789       Macro->AddTokenToBody(Tok);
1790       break;
1791     }
1792     }
1793   }
1794 }
1795 
1796 PreprocessedEntityID
1797 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1798                                          unsigned LocalID) const {
1799   if (!M.ModuleOffsetMap.empty())
1800     ReadModuleOffsetMap(M);
1801 
1802   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1803     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1804   assert(I != M.PreprocessedEntityRemap.end()
1805          && "Invalid index into preprocessed entity index remap");
1806 
1807   return LocalID + I->second;
1808 }
1809 
1810 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1811   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1812 }
1813 
1814 HeaderFileInfoTrait::internal_key_type
1815 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1816   internal_key_type ikey = {FE->getSize(),
1817                             M.HasTimestamps ? FE->getModificationTime() : 0,
1818                             FE->getName(), /*Imported*/ false};
1819   return ikey;
1820 }
1821 
1822 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1823   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1824     return false;
1825 
1826   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1827     return true;
1828 
1829   // Determine whether the actual files are equivalent.
1830   FileManager &FileMgr = Reader.getFileManager();
1831   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1832     if (!Key.Imported) {
1833       if (auto File = FileMgr.getFile(Key.Filename))
1834         return *File;
1835       return nullptr;
1836     }
1837 
1838     std::string Resolved = Key.Filename;
1839     Reader.ResolveImportedPath(M, Resolved);
1840     if (auto File = FileMgr.getFile(Resolved))
1841       return *File;
1842     return nullptr;
1843   };
1844 
1845   const FileEntry *FEA = GetFile(a);
1846   const FileEntry *FEB = GetFile(b);
1847   return FEA && FEA == FEB;
1848 }
1849 
1850 std::pair<unsigned, unsigned>
1851 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1852   using namespace llvm::support;
1853 
1854   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1855   unsigned DataLen = (unsigned) *d++;
1856   return std::make_pair(KeyLen, DataLen);
1857 }
1858 
1859 HeaderFileInfoTrait::internal_key_type
1860 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1861   using namespace llvm::support;
1862 
1863   internal_key_type ikey;
1864   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1865   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1866   ikey.Filename = (const char *)d;
1867   ikey.Imported = true;
1868   return ikey;
1869 }
1870 
1871 HeaderFileInfoTrait::data_type
1872 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1873                               unsigned DataLen) {
1874   using namespace llvm::support;
1875 
1876   const unsigned char *End = d + DataLen;
1877   HeaderFileInfo HFI;
1878   unsigned Flags = *d++;
1879   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1880   HFI.isImport |= (Flags >> 5) & 0x01;
1881   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1882   HFI.DirInfo = (Flags >> 1) & 0x07;
1883   HFI.IndexHeaderMapHeader = Flags & 0x01;
1884   // FIXME: Find a better way to handle this. Maybe just store a
1885   // "has been included" flag?
1886   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1887                              HFI.NumIncludes);
1888   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1889       M, endian::readNext<uint32_t, little, unaligned>(d));
1890   if (unsigned FrameworkOffset =
1891           endian::readNext<uint32_t, little, unaligned>(d)) {
1892     // The framework offset is 1 greater than the actual offset,
1893     // since 0 is used as an indicator for "no framework name".
1894     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1895     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1896   }
1897 
1898   assert((End - d) % 4 == 0 &&
1899          "Wrong data length in HeaderFileInfo deserialization");
1900   while (d != End) {
1901     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1902     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1903     LocalSMID >>= 2;
1904 
1905     // This header is part of a module. Associate it with the module to enable
1906     // implicit module import.
1907     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1908     Module *Mod = Reader.getSubmodule(GlobalSMID);
1909     FileManager &FileMgr = Reader.getFileManager();
1910     ModuleMap &ModMap =
1911         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1912 
1913     std::string Filename = key.Filename;
1914     if (key.Imported)
1915       Reader.ResolveImportedPath(M, Filename);
1916     // FIXME: This is not always the right filename-as-written, but we're not
1917     // going to use this information to rebuild the module, so it doesn't make
1918     // a lot of difference.
1919     Module::Header H = { key.Filename, *FileMgr.getFile(Filename) };
1920     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1921     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1922   }
1923 
1924   // This HeaderFileInfo was externally loaded.
1925   HFI.External = true;
1926   HFI.IsValid = true;
1927   return HFI;
1928 }
1929 
1930 void ASTReader::addPendingMacro(IdentifierInfo *II,
1931                                 ModuleFile *M,
1932                                 uint64_t MacroDirectivesOffset) {
1933   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1934   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1935 }
1936 
1937 void ASTReader::ReadDefinedMacros() {
1938   // Note that we are loading defined macros.
1939   Deserializing Macros(this);
1940 
1941   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1942     BitstreamCursor &MacroCursor = I.MacroCursor;
1943 
1944     // If there was no preprocessor block, skip this file.
1945     if (MacroCursor.getBitcodeBytes().empty())
1946       continue;
1947 
1948     BitstreamCursor Cursor = MacroCursor;
1949     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1950       Error(std::move(Err));
1951       return;
1952     }
1953 
1954     RecordData Record;
1955     while (true) {
1956       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1957       if (!MaybeE) {
1958         Error(MaybeE.takeError());
1959         return;
1960       }
1961       llvm::BitstreamEntry E = MaybeE.get();
1962 
1963       switch (E.Kind) {
1964       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1965       case llvm::BitstreamEntry::Error:
1966         Error("malformed block record in AST file");
1967         return;
1968       case llvm::BitstreamEntry::EndBlock:
1969         goto NextCursor;
1970 
1971       case llvm::BitstreamEntry::Record: {
1972         Record.clear();
1973         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1974         if (!MaybeRecord) {
1975           Error(MaybeRecord.takeError());
1976           return;
1977         }
1978         switch (MaybeRecord.get()) {
1979         default:  // Default behavior: ignore.
1980           break;
1981 
1982         case PP_MACRO_OBJECT_LIKE:
1983         case PP_MACRO_FUNCTION_LIKE: {
1984           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1985           if (II->isOutOfDate())
1986             updateOutOfDateIdentifier(*II);
1987           break;
1988         }
1989 
1990         case PP_TOKEN:
1991           // Ignore tokens.
1992           break;
1993         }
1994         break;
1995       }
1996       }
1997     }
1998     NextCursor:  ;
1999   }
2000 }
2001 
2002 namespace {
2003 
2004   /// Visitor class used to look up identifirs in an AST file.
2005   class IdentifierLookupVisitor {
2006     StringRef Name;
2007     unsigned NameHash;
2008     unsigned PriorGeneration;
2009     unsigned &NumIdentifierLookups;
2010     unsigned &NumIdentifierLookupHits;
2011     IdentifierInfo *Found = nullptr;
2012 
2013   public:
2014     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2015                             unsigned &NumIdentifierLookups,
2016                             unsigned &NumIdentifierLookupHits)
2017       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2018         PriorGeneration(PriorGeneration),
2019         NumIdentifierLookups(NumIdentifierLookups),
2020         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2021 
2022     bool operator()(ModuleFile &M) {
2023       // If we've already searched this module file, skip it now.
2024       if (M.Generation <= PriorGeneration)
2025         return true;
2026 
2027       ASTIdentifierLookupTable *IdTable
2028         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2029       if (!IdTable)
2030         return false;
2031 
2032       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2033                                      Found);
2034       ++NumIdentifierLookups;
2035       ASTIdentifierLookupTable::iterator Pos =
2036           IdTable->find_hashed(Name, NameHash, &Trait);
2037       if (Pos == IdTable->end())
2038         return false;
2039 
2040       // Dereferencing the iterator has the effect of building the
2041       // IdentifierInfo node and populating it with the various
2042       // declarations it needs.
2043       ++NumIdentifierLookupHits;
2044       Found = *Pos;
2045       return true;
2046     }
2047 
2048     // Retrieve the identifier info found within the module
2049     // files.
2050     IdentifierInfo *getIdentifierInfo() const { return Found; }
2051   };
2052 
2053 } // namespace
2054 
2055 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2056   // Note that we are loading an identifier.
2057   Deserializing AnIdentifier(this);
2058 
2059   unsigned PriorGeneration = 0;
2060   if (getContext().getLangOpts().Modules)
2061     PriorGeneration = IdentifierGeneration[&II];
2062 
2063   // If there is a global index, look there first to determine which modules
2064   // provably do not have any results for this identifier.
2065   GlobalModuleIndex::HitSet Hits;
2066   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2067   if (!loadGlobalIndex()) {
2068     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2069       HitsPtr = &Hits;
2070     }
2071   }
2072 
2073   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2074                                   NumIdentifierLookups,
2075                                   NumIdentifierLookupHits);
2076   ModuleMgr.visit(Visitor, HitsPtr);
2077   markIdentifierUpToDate(&II);
2078 }
2079 
2080 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2081   if (!II)
2082     return;
2083 
2084   II->setOutOfDate(false);
2085 
2086   // Update the generation for this identifier.
2087   if (getContext().getLangOpts().Modules)
2088     IdentifierGeneration[II] = getGeneration();
2089 }
2090 
2091 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2092                                     const PendingMacroInfo &PMInfo) {
2093   ModuleFile &M = *PMInfo.M;
2094 
2095   BitstreamCursor &Cursor = M.MacroCursor;
2096   SavedStreamPosition SavedPosition(Cursor);
2097   if (llvm::Error Err = Cursor.JumpToBit(PMInfo.MacroDirectivesOffset)) {
2098     Error(std::move(Err));
2099     return;
2100   }
2101 
2102   struct ModuleMacroRecord {
2103     SubmoduleID SubModID;
2104     MacroInfo *MI;
2105     SmallVector<SubmoduleID, 8> Overrides;
2106   };
2107   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2108 
2109   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2110   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2111   // macro histroy.
2112   RecordData Record;
2113   while (true) {
2114     Expected<llvm::BitstreamEntry> MaybeEntry =
2115         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2116     if (!MaybeEntry) {
2117       Error(MaybeEntry.takeError());
2118       return;
2119     }
2120     llvm::BitstreamEntry Entry = MaybeEntry.get();
2121 
2122     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2123       Error("malformed block record in AST file");
2124       return;
2125     }
2126 
2127     Record.clear();
2128     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2129     if (!MaybePP) {
2130       Error(MaybePP.takeError());
2131       return;
2132     }
2133     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2134     case PP_MACRO_DIRECTIVE_HISTORY:
2135       break;
2136 
2137     case PP_MODULE_MACRO: {
2138       ModuleMacros.push_back(ModuleMacroRecord());
2139       auto &Info = ModuleMacros.back();
2140       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2141       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2142       for (int I = 2, N = Record.size(); I != N; ++I)
2143         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2144       continue;
2145     }
2146 
2147     default:
2148       Error("malformed block record in AST file");
2149       return;
2150     }
2151 
2152     // We found the macro directive history; that's the last record
2153     // for this macro.
2154     break;
2155   }
2156 
2157   // Module macros are listed in reverse dependency order.
2158   {
2159     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2160     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2161     for (auto &MMR : ModuleMacros) {
2162       Overrides.clear();
2163       for (unsigned ModID : MMR.Overrides) {
2164         Module *Mod = getSubmodule(ModID);
2165         auto *Macro = PP.getModuleMacro(Mod, II);
2166         assert(Macro && "missing definition for overridden macro");
2167         Overrides.push_back(Macro);
2168       }
2169 
2170       bool Inserted = false;
2171       Module *Owner = getSubmodule(MMR.SubModID);
2172       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2173     }
2174   }
2175 
2176   // Don't read the directive history for a module; we don't have anywhere
2177   // to put it.
2178   if (M.isModule())
2179     return;
2180 
2181   // Deserialize the macro directives history in reverse source-order.
2182   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2183   unsigned Idx = 0, N = Record.size();
2184   while (Idx < N) {
2185     MacroDirective *MD = nullptr;
2186     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2187     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2188     switch (K) {
2189     case MacroDirective::MD_Define: {
2190       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2191       MD = PP.AllocateDefMacroDirective(MI, Loc);
2192       break;
2193     }
2194     case MacroDirective::MD_Undefine:
2195       MD = PP.AllocateUndefMacroDirective(Loc);
2196       break;
2197     case MacroDirective::MD_Visibility:
2198       bool isPublic = Record[Idx++];
2199       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2200       break;
2201     }
2202 
2203     if (!Latest)
2204       Latest = MD;
2205     if (Earliest)
2206       Earliest->setPrevious(MD);
2207     Earliest = MD;
2208   }
2209 
2210   if (Latest)
2211     PP.setLoadedMacroDirective(II, Earliest, Latest);
2212 }
2213 
2214 ASTReader::InputFileInfo
2215 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2216   // Go find this input file.
2217   BitstreamCursor &Cursor = F.InputFilesCursor;
2218   SavedStreamPosition SavedPosition(Cursor);
2219   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2220     // FIXME this drops errors on the floor.
2221     consumeError(std::move(Err));
2222   }
2223 
2224   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2225   if (!MaybeCode) {
2226     // FIXME this drops errors on the floor.
2227     consumeError(MaybeCode.takeError());
2228   }
2229   unsigned Code = MaybeCode.get();
2230   RecordData Record;
2231   StringRef Blob;
2232 
2233   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2234     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2235            "invalid record type for input file");
2236   else {
2237     // FIXME this drops errors on the floor.
2238     consumeError(Maybe.takeError());
2239   }
2240 
2241   assert(Record[0] == ID && "Bogus stored ID or offset");
2242   InputFileInfo R;
2243   R.StoredSize = static_cast<off_t>(Record[1]);
2244   R.StoredTime = static_cast<time_t>(Record[2]);
2245   R.Overridden = static_cast<bool>(Record[3]);
2246   R.Transient = static_cast<bool>(Record[4]);
2247   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2248   R.Filename = Blob;
2249   ResolveImportedPath(F, R.Filename);
2250 
2251   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2252   if (!MaybeEntry) // FIXME this drops errors on the floor.
2253     consumeError(MaybeEntry.takeError());
2254   llvm::BitstreamEntry Entry = MaybeEntry.get();
2255   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2256          "expected record type for input file hash");
2257 
2258   Record.clear();
2259   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2260     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2261            "invalid record type for input file hash");
2262   else {
2263     // FIXME this drops errors on the floor.
2264     consumeError(Maybe.takeError());
2265   }
2266   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2267                   static_cast<uint64_t>(Record[0]);
2268   return R;
2269 }
2270 
2271 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2272 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2273   // If this ID is bogus, just return an empty input file.
2274   if (ID == 0 || ID > F.InputFilesLoaded.size())
2275     return InputFile();
2276 
2277   // If we've already loaded this input file, return it.
2278   if (F.InputFilesLoaded[ID-1].getFile())
2279     return F.InputFilesLoaded[ID-1];
2280 
2281   if (F.InputFilesLoaded[ID-1].isNotFound())
2282     return InputFile();
2283 
2284   // Go find this input file.
2285   BitstreamCursor &Cursor = F.InputFilesCursor;
2286   SavedStreamPosition SavedPosition(Cursor);
2287   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2288     // FIXME this drops errors on the floor.
2289     consumeError(std::move(Err));
2290   }
2291 
2292   InputFileInfo FI = readInputFileInfo(F, ID);
2293   off_t StoredSize = FI.StoredSize;
2294   time_t StoredTime = FI.StoredTime;
2295   bool Overridden = FI.Overridden;
2296   bool Transient = FI.Transient;
2297   StringRef Filename = FI.Filename;
2298   uint64_t StoredContentHash = FI.ContentHash;
2299 
2300   const FileEntry *File = nullptr;
2301   if (auto FE = FileMgr.getFile(Filename, /*OpenFile=*/false))
2302     File = *FE;
2303 
2304   // If we didn't find the file, resolve it relative to the
2305   // original directory from which this AST file was created.
2306   if (File == nullptr && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2307       F.OriginalDir != F.BaseDirectory) {
2308     std::string Resolved = resolveFileRelativeToOriginalDir(
2309         Filename, F.OriginalDir, F.BaseDirectory);
2310     if (!Resolved.empty())
2311       if (auto FE = FileMgr.getFile(Resolved))
2312         File = *FE;
2313   }
2314 
2315   // For an overridden file, create a virtual file with the stored
2316   // size/timestamp.
2317   if ((Overridden || Transient) && File == nullptr)
2318     File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
2319 
2320   if (File == nullptr) {
2321     if (Complain) {
2322       std::string ErrorStr = "could not find file '";
2323       ErrorStr += Filename;
2324       ErrorStr += "' referenced by AST file '";
2325       ErrorStr += F.FileName;
2326       ErrorStr += "'";
2327       Error(ErrorStr);
2328     }
2329     // Record that we didn't find the file.
2330     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2331     return InputFile();
2332   }
2333 
2334   // Check if there was a request to override the contents of the file
2335   // that was part of the precompiled header. Overriding such a file
2336   // can lead to problems when lexing using the source locations from the
2337   // PCH.
2338   SourceManager &SM = getSourceManager();
2339   // FIXME: Reject if the overrides are different.
2340   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2341     if (Complain)
2342       Error(diag::err_fe_pch_file_overridden, Filename);
2343 
2344     // After emitting the diagnostic, bypass the overriding file to recover
2345     // (this creates a separate FileEntry).
2346     File = SM.bypassFileContentsOverride(*File);
2347     if (!File) {
2348       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2349       return InputFile();
2350     }
2351   }
2352 
2353   enum ModificationType {
2354     Size,
2355     ModTime,
2356     Content,
2357     None,
2358   };
2359   auto HasInputFileChanged = [&]() {
2360     if (StoredSize != File->getSize())
2361       return ModificationType::Size;
2362     if (!DisableValidation && StoredTime &&
2363         StoredTime != File->getModificationTime()) {
2364       // In case the modification time changes but not the content,
2365       // accept the cached file as legit.
2366       if (ValidateASTInputFilesContent &&
2367           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2368         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2369         if (!MemBuffOrError) {
2370           if (!Complain)
2371             return ModificationType::ModTime;
2372           std::string ErrorStr = "could not get buffer for file '";
2373           ErrorStr += File->getName();
2374           ErrorStr += "'";
2375           Error(ErrorStr);
2376           return ModificationType::ModTime;
2377         }
2378 
2379         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2380         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2381           return ModificationType::None;
2382         return ModificationType::Content;
2383       }
2384       return ModificationType::ModTime;
2385     }
2386     return ModificationType::None;
2387   };
2388 
2389   bool IsOutOfDate = false;
2390   auto FileChange = HasInputFileChanged();
2391   // For an overridden file, there is nothing to validate.
2392   if (!Overridden && FileChange != ModificationType::None) {
2393     if (Complain) {
2394       // Build a list of the PCH imports that got us here (in reverse).
2395       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2396       while (!ImportStack.back()->ImportedBy.empty())
2397         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2398 
2399       // The top-level PCH is stale.
2400       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2401       unsigned DiagnosticKind =
2402           moduleKindForDiagnostic(ImportStack.back()->Kind);
2403       if (DiagnosticKind == 0)
2404         Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName,
2405               (unsigned)FileChange);
2406       else if (DiagnosticKind == 1)
2407         Error(diag::err_fe_module_file_modified, Filename, TopLevelPCHName,
2408               (unsigned)FileChange);
2409       else
2410         Error(diag::err_fe_ast_file_modified, Filename, TopLevelPCHName,
2411               (unsigned)FileChange);
2412 
2413       // Print the import stack.
2414       if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) {
2415         Diag(diag::note_pch_required_by)
2416           << Filename << ImportStack[0]->FileName;
2417         for (unsigned I = 1; I < ImportStack.size(); ++I)
2418           Diag(diag::note_pch_required_by)
2419             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2420       }
2421 
2422       if (!Diags.isDiagnosticInFlight())
2423         Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2424     }
2425 
2426     IsOutOfDate = true;
2427   }
2428   // FIXME: If the file is overridden and we've already opened it,
2429   // issue an error (or split it into a separate FileEntry).
2430 
2431   InputFile IF = InputFile(File, Overridden || Transient, IsOutOfDate);
2432 
2433   // Note that we've loaded this input file.
2434   F.InputFilesLoaded[ID-1] = IF;
2435   return IF;
2436 }
2437 
2438 /// If we are loading a relocatable PCH or module file, and the filename
2439 /// is not an absolute path, add the system or module root to the beginning of
2440 /// the file name.
2441 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2442   // Resolve relative to the base directory, if we have one.
2443   if (!M.BaseDirectory.empty())
2444     return ResolveImportedPath(Filename, M.BaseDirectory);
2445 }
2446 
2447 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2448   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2449     return;
2450 
2451   SmallString<128> Buffer;
2452   llvm::sys::path::append(Buffer, Prefix, Filename);
2453   Filename.assign(Buffer.begin(), Buffer.end());
2454 }
2455 
2456 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2457   switch (ARR) {
2458   case ASTReader::Failure: return true;
2459   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2460   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2461   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2462   case ASTReader::ConfigurationMismatch:
2463     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2464   case ASTReader::HadErrors: return true;
2465   case ASTReader::Success: return false;
2466   }
2467 
2468   llvm_unreachable("unknown ASTReadResult");
2469 }
2470 
2471 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2472     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2473     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2474     std::string &SuggestedPredefines) {
2475   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2476     // FIXME this drops errors on the floor.
2477     consumeError(std::move(Err));
2478     return Failure;
2479   }
2480 
2481   // Read all of the records in the options block.
2482   RecordData Record;
2483   ASTReadResult Result = Success;
2484   while (true) {
2485     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2486     if (!MaybeEntry) {
2487       // FIXME this drops errors on the floor.
2488       consumeError(MaybeEntry.takeError());
2489       return Failure;
2490     }
2491     llvm::BitstreamEntry Entry = MaybeEntry.get();
2492 
2493     switch (Entry.Kind) {
2494     case llvm::BitstreamEntry::Error:
2495     case llvm::BitstreamEntry::SubBlock:
2496       return Failure;
2497 
2498     case llvm::BitstreamEntry::EndBlock:
2499       return Result;
2500 
2501     case llvm::BitstreamEntry::Record:
2502       // The interesting case.
2503       break;
2504     }
2505 
2506     // Read and process a record.
2507     Record.clear();
2508     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2509     if (!MaybeRecordType) {
2510       // FIXME this drops errors on the floor.
2511       consumeError(MaybeRecordType.takeError());
2512       return Failure;
2513     }
2514     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2515     case LANGUAGE_OPTIONS: {
2516       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2517       if (ParseLanguageOptions(Record, Complain, Listener,
2518                                AllowCompatibleConfigurationMismatch))
2519         Result = ConfigurationMismatch;
2520       break;
2521     }
2522 
2523     case TARGET_OPTIONS: {
2524       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2525       if (ParseTargetOptions(Record, Complain, Listener,
2526                              AllowCompatibleConfigurationMismatch))
2527         Result = ConfigurationMismatch;
2528       break;
2529     }
2530 
2531     case FILE_SYSTEM_OPTIONS: {
2532       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2533       if (!AllowCompatibleConfigurationMismatch &&
2534           ParseFileSystemOptions(Record, Complain, Listener))
2535         Result = ConfigurationMismatch;
2536       break;
2537     }
2538 
2539     case HEADER_SEARCH_OPTIONS: {
2540       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2541       if (!AllowCompatibleConfigurationMismatch &&
2542           ParseHeaderSearchOptions(Record, Complain, Listener))
2543         Result = ConfigurationMismatch;
2544       break;
2545     }
2546 
2547     case PREPROCESSOR_OPTIONS:
2548       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2549       if (!AllowCompatibleConfigurationMismatch &&
2550           ParsePreprocessorOptions(Record, Complain, Listener,
2551                                    SuggestedPredefines))
2552         Result = ConfigurationMismatch;
2553       break;
2554     }
2555   }
2556 }
2557 
2558 ASTReader::ASTReadResult
2559 ASTReader::ReadControlBlock(ModuleFile &F,
2560                             SmallVectorImpl<ImportedModule> &Loaded,
2561                             const ModuleFile *ImportedBy,
2562                             unsigned ClientLoadCapabilities) {
2563   BitstreamCursor &Stream = F.Stream;
2564   ASTReadResult Result = Success;
2565 
2566   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2567     Error(std::move(Err));
2568     return Failure;
2569   }
2570 
2571   // Lambda to read the unhashed control block the first time it's called.
2572   //
2573   // For PCM files, the unhashed control block cannot be read until after the
2574   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2575   // need to look ahead before reading the IMPORTS record.  For consistency,
2576   // this block is always read somehow (see BitstreamEntry::EndBlock).
2577   bool HasReadUnhashedControlBlock = false;
2578   auto readUnhashedControlBlockOnce = [&]() {
2579     if (!HasReadUnhashedControlBlock) {
2580       HasReadUnhashedControlBlock = true;
2581       if (ASTReadResult Result =
2582               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2583         return Result;
2584     }
2585     return Success;
2586   };
2587 
2588   // Read all of the records and blocks in the control block.
2589   RecordData Record;
2590   unsigned NumInputs = 0;
2591   unsigned NumUserInputs = 0;
2592   StringRef BaseDirectoryAsWritten;
2593   while (true) {
2594     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2595     if (!MaybeEntry) {
2596       Error(MaybeEntry.takeError());
2597       return Failure;
2598     }
2599     llvm::BitstreamEntry Entry = MaybeEntry.get();
2600 
2601     switch (Entry.Kind) {
2602     case llvm::BitstreamEntry::Error:
2603       Error("malformed block record in AST file");
2604       return Failure;
2605     case llvm::BitstreamEntry::EndBlock: {
2606       // Validate the module before returning.  This call catches an AST with
2607       // no module name and no imports.
2608       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2609         return Result;
2610 
2611       // Validate input files.
2612       const HeaderSearchOptions &HSOpts =
2613           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2614 
2615       // All user input files reside at the index range [0, NumUserInputs), and
2616       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2617       // loaded module files, ignore missing inputs.
2618       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2619           F.Kind != MK_PrebuiltModule) {
2620         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2621 
2622         // If we are reading a module, we will create a verification timestamp,
2623         // so we verify all input files.  Otherwise, verify only user input
2624         // files.
2625 
2626         unsigned N = NumUserInputs;
2627         if (ValidateSystemInputs ||
2628             (HSOpts.ModulesValidateOncePerBuildSession &&
2629              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2630              F.Kind == MK_ImplicitModule))
2631           N = NumInputs;
2632 
2633         for (unsigned I = 0; I < N; ++I) {
2634           InputFile IF = getInputFile(F, I+1, Complain);
2635           if (!IF.getFile() || IF.isOutOfDate())
2636             return OutOfDate;
2637         }
2638       }
2639 
2640       if (Listener)
2641         Listener->visitModuleFile(F.FileName, F.Kind);
2642 
2643       if (Listener && Listener->needsInputFileVisitation()) {
2644         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2645                                                                 : NumUserInputs;
2646         for (unsigned I = 0; I < N; ++I) {
2647           bool IsSystem = I >= NumUserInputs;
2648           InputFileInfo FI = readInputFileInfo(F, I+1);
2649           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2650                                    F.Kind == MK_ExplicitModule ||
2651                                    F.Kind == MK_PrebuiltModule);
2652         }
2653       }
2654 
2655       return Result;
2656     }
2657 
2658     case llvm::BitstreamEntry::SubBlock:
2659       switch (Entry.ID) {
2660       case INPUT_FILES_BLOCK_ID:
2661         F.InputFilesCursor = Stream;
2662         if (llvm::Error Err = Stream.SkipBlock()) {
2663           Error(std::move(Err));
2664           return Failure;
2665         }
2666         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2667           Error("malformed block record in AST file");
2668           return Failure;
2669         }
2670         continue;
2671 
2672       case OPTIONS_BLOCK_ID:
2673         // If we're reading the first module for this group, check its options
2674         // are compatible with ours. For modules it imports, no further checking
2675         // is required, because we checked them when we built it.
2676         if (Listener && !ImportedBy) {
2677           // Should we allow the configuration of the module file to differ from
2678           // the configuration of the current translation unit in a compatible
2679           // way?
2680           //
2681           // FIXME: Allow this for files explicitly specified with -include-pch.
2682           bool AllowCompatibleConfigurationMismatch =
2683               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2684 
2685           Result = ReadOptionsBlock(Stream, ClientLoadCapabilities,
2686                                     AllowCompatibleConfigurationMismatch,
2687                                     *Listener, SuggestedPredefines);
2688           if (Result == Failure) {
2689             Error("malformed block record in AST file");
2690             return Result;
2691           }
2692 
2693           if (DisableValidation ||
2694               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2695             Result = Success;
2696 
2697           // If we can't load the module, exit early since we likely
2698           // will rebuild the module anyway. The stream may be in the
2699           // middle of a block.
2700           if (Result != Success)
2701             return Result;
2702         } else if (llvm::Error Err = Stream.SkipBlock()) {
2703           Error(std::move(Err));
2704           return Failure;
2705         }
2706         continue;
2707 
2708       default:
2709         if (llvm::Error Err = Stream.SkipBlock()) {
2710           Error(std::move(Err));
2711           return Failure;
2712         }
2713         continue;
2714       }
2715 
2716     case llvm::BitstreamEntry::Record:
2717       // The interesting case.
2718       break;
2719     }
2720 
2721     // Read and process a record.
2722     Record.clear();
2723     StringRef Blob;
2724     Expected<unsigned> MaybeRecordType =
2725         Stream.readRecord(Entry.ID, Record, &Blob);
2726     if (!MaybeRecordType) {
2727       Error(MaybeRecordType.takeError());
2728       return Failure;
2729     }
2730     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2731     case METADATA: {
2732       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2733         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2734           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2735                                         : diag::err_pch_version_too_new);
2736         return VersionMismatch;
2737       }
2738 
2739       bool hasErrors = Record[7];
2740       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2741         Diag(diag::err_pch_with_compiler_errors);
2742         return HadErrors;
2743       }
2744       if (hasErrors) {
2745         Diags.ErrorOccurred = true;
2746         Diags.UncompilableErrorOccurred = true;
2747         Diags.UnrecoverableErrorOccurred = true;
2748       }
2749 
2750       F.RelocatablePCH = Record[4];
2751       // Relative paths in a relocatable PCH are relative to our sysroot.
2752       if (F.RelocatablePCH)
2753         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2754 
2755       F.HasTimestamps = Record[5];
2756 
2757       F.PCHHasObjectFile = Record[6];
2758 
2759       const std::string &CurBranch = getClangFullRepositoryVersion();
2760       StringRef ASTBranch = Blob;
2761       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2762         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2763           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2764         return VersionMismatch;
2765       }
2766       break;
2767     }
2768 
2769     case IMPORTS: {
2770       // Validate the AST before processing any imports (otherwise, untangling
2771       // them can be error-prone and expensive).  A module will have a name and
2772       // will already have been validated, but this catches the PCH case.
2773       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2774         return Result;
2775 
2776       // Load each of the imported PCH files.
2777       unsigned Idx = 0, N = Record.size();
2778       while (Idx < N) {
2779         // Read information about the AST file.
2780         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2781         // The import location will be the local one for now; we will adjust
2782         // all import locations of module imports after the global source
2783         // location info are setup, in ReadAST.
2784         SourceLocation ImportLoc =
2785             ReadUntranslatedSourceLocation(Record[Idx++]);
2786         off_t StoredSize = (off_t)Record[Idx++];
2787         time_t StoredModTime = (time_t)Record[Idx++];
2788         ASTFileSignature StoredSignature = {
2789             {{(uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2790               (uint32_t)Record[Idx++], (uint32_t)Record[Idx++],
2791               (uint32_t)Record[Idx++]}}};
2792 
2793         std::string ImportedName = ReadString(Record, Idx);
2794         std::string ImportedFile;
2795 
2796         // For prebuilt and explicit modules first consult the file map for
2797         // an override. Note that here we don't search prebuilt module
2798         // directories, only the explicit name to file mappings. Also, we will
2799         // still verify the size/signature making sure it is essentially the
2800         // same file but perhaps in a different location.
2801         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2802           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2803             ImportedName, /*FileMapOnly*/ true);
2804 
2805         if (ImportedFile.empty())
2806           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2807           // ModuleCache as when writing.
2808           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2809         else
2810           SkipPath(Record, Idx);
2811 
2812         // If our client can't cope with us being out of date, we can't cope with
2813         // our dependency being missing.
2814         unsigned Capabilities = ClientLoadCapabilities;
2815         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2816           Capabilities &= ~ARR_Missing;
2817 
2818         // Load the AST file.
2819         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2820                                   Loaded, StoredSize, StoredModTime,
2821                                   StoredSignature, Capabilities);
2822 
2823         // If we diagnosed a problem, produce a backtrace.
2824         if (isDiagnosedResult(Result, Capabilities))
2825           Diag(diag::note_module_file_imported_by)
2826               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2827 
2828         switch (Result) {
2829         case Failure: return Failure;
2830           // If we have to ignore the dependency, we'll have to ignore this too.
2831         case Missing:
2832         case OutOfDate: return OutOfDate;
2833         case VersionMismatch: return VersionMismatch;
2834         case ConfigurationMismatch: return ConfigurationMismatch;
2835         case HadErrors: return HadErrors;
2836         case Success: break;
2837         }
2838       }
2839       break;
2840     }
2841 
2842     case ORIGINAL_FILE:
2843       F.OriginalSourceFileID = FileID::get(Record[0]);
2844       F.ActualOriginalSourceFileName = Blob;
2845       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2846       ResolveImportedPath(F, F.OriginalSourceFileName);
2847       break;
2848 
2849     case ORIGINAL_FILE_ID:
2850       F.OriginalSourceFileID = FileID::get(Record[0]);
2851       break;
2852 
2853     case ORIGINAL_PCH_DIR:
2854       F.OriginalDir = Blob;
2855       break;
2856 
2857     case MODULE_NAME:
2858       F.ModuleName = Blob;
2859       Diag(diag::remark_module_import)
2860           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2861           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2862       if (Listener)
2863         Listener->ReadModuleName(F.ModuleName);
2864 
2865       // Validate the AST as soon as we have a name so we can exit early on
2866       // failure.
2867       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2868         return Result;
2869 
2870       break;
2871 
2872     case MODULE_DIRECTORY: {
2873       // Save the BaseDirectory as written in the PCM for computing the module
2874       // filename for the ModuleCache.
2875       BaseDirectoryAsWritten = Blob;
2876       assert(!F.ModuleName.empty() &&
2877              "MODULE_DIRECTORY found before MODULE_NAME");
2878       // If we've already loaded a module map file covering this module, we may
2879       // have a better path for it (relative to the current build).
2880       Module *M = PP.getHeaderSearchInfo().lookupModule(
2881           F.ModuleName, /*AllowSearch*/ true,
2882           /*AllowExtraModuleMapSearch*/ true);
2883       if (M && M->Directory) {
2884         // If we're implicitly loading a module, the base directory can't
2885         // change between the build and use.
2886         // Don't emit module relocation error if we have -fno-validate-pch
2887         if (!PP.getPreprocessorOpts().DisablePCHValidation &&
2888             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2889           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2890           if (!BuildDir || *BuildDir != M->Directory) {
2891             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2892               Diag(diag::err_imported_module_relocated)
2893                   << F.ModuleName << Blob << M->Directory->getName();
2894             return OutOfDate;
2895           }
2896         }
2897         F.BaseDirectory = M->Directory->getName();
2898       } else {
2899         F.BaseDirectory = Blob;
2900       }
2901       break;
2902     }
2903 
2904     case MODULE_MAP_FILE:
2905       if (ASTReadResult Result =
2906               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2907         return Result;
2908       break;
2909 
2910     case INPUT_FILE_OFFSETS:
2911       NumInputs = Record[0];
2912       NumUserInputs = Record[1];
2913       F.InputFileOffsets =
2914           (const llvm::support::unaligned_uint64_t *)Blob.data();
2915       F.InputFilesLoaded.resize(NumInputs);
2916       F.NumUserInputFiles = NumUserInputs;
2917       break;
2918     }
2919   }
2920 }
2921 
2922 ASTReader::ASTReadResult
2923 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2924   BitstreamCursor &Stream = F.Stream;
2925 
2926   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2927     Error(std::move(Err));
2928     return Failure;
2929   }
2930 
2931   // Read all of the records and blocks for the AST file.
2932   RecordData Record;
2933   while (true) {
2934     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2935     if (!MaybeEntry) {
2936       Error(MaybeEntry.takeError());
2937       return Failure;
2938     }
2939     llvm::BitstreamEntry Entry = MaybeEntry.get();
2940 
2941     switch (Entry.Kind) {
2942     case llvm::BitstreamEntry::Error:
2943       Error("error at end of module block in AST file");
2944       return Failure;
2945     case llvm::BitstreamEntry::EndBlock:
2946       // Outside of C++, we do not store a lookup map for the translation unit.
2947       // Instead, mark it as needing a lookup map to be built if this module
2948       // contains any declarations lexically within it (which it always does!).
2949       // This usually has no cost, since we very rarely need the lookup map for
2950       // the translation unit outside C++.
2951       if (ASTContext *Ctx = ContextObj) {
2952         DeclContext *DC = Ctx->getTranslationUnitDecl();
2953         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2954           DC->setMustBuildLookupTable();
2955       }
2956 
2957       return Success;
2958     case llvm::BitstreamEntry::SubBlock:
2959       switch (Entry.ID) {
2960       case DECLTYPES_BLOCK_ID:
2961         // We lazily load the decls block, but we want to set up the
2962         // DeclsCursor cursor to point into it.  Clone our current bitcode
2963         // cursor to it, enter the block and read the abbrevs in that block.
2964         // With the main cursor, we just skip over it.
2965         F.DeclsCursor = Stream;
2966         if (llvm::Error Err = Stream.SkipBlock()) {
2967           Error(std::move(Err));
2968           return Failure;
2969         }
2970         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
2971           Error("malformed block record in AST file");
2972           return Failure;
2973         }
2974         break;
2975 
2976       case PREPROCESSOR_BLOCK_ID:
2977         F.MacroCursor = Stream;
2978         if (!PP.getExternalSource())
2979           PP.setExternalSource(this);
2980 
2981         if (llvm::Error Err = Stream.SkipBlock()) {
2982           Error(std::move(Err));
2983           return Failure;
2984         }
2985         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2986           Error("malformed block record in AST file");
2987           return Failure;
2988         }
2989         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
2990         break;
2991 
2992       case PREPROCESSOR_DETAIL_BLOCK_ID:
2993         F.PreprocessorDetailCursor = Stream;
2994 
2995         if (llvm::Error Err = Stream.SkipBlock()) {
2996           Error(std::move(Err));
2997           return Failure;
2998         }
2999         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3000                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3001           Error("malformed preprocessor detail record in AST file");
3002           return Failure;
3003         }
3004         F.PreprocessorDetailStartOffset
3005         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3006 
3007         if (!PP.getPreprocessingRecord())
3008           PP.createPreprocessingRecord();
3009         if (!PP.getPreprocessingRecord()->getExternalSource())
3010           PP.getPreprocessingRecord()->SetExternalSource(*this);
3011         break;
3012 
3013       case SOURCE_MANAGER_BLOCK_ID:
3014         if (ReadSourceManagerBlock(F))
3015           return Failure;
3016         break;
3017 
3018       case SUBMODULE_BLOCK_ID:
3019         if (ASTReadResult Result =
3020                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3021           return Result;
3022         break;
3023 
3024       case COMMENTS_BLOCK_ID: {
3025         BitstreamCursor C = Stream;
3026 
3027         if (llvm::Error Err = Stream.SkipBlock()) {
3028           Error(std::move(Err));
3029           return Failure;
3030         }
3031         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3032           Error("malformed comments block in AST file");
3033           return Failure;
3034         }
3035         CommentsCursors.push_back(std::make_pair(C, &F));
3036         break;
3037       }
3038 
3039       default:
3040         if (llvm::Error Err = Stream.SkipBlock()) {
3041           Error(std::move(Err));
3042           return Failure;
3043         }
3044         break;
3045       }
3046       continue;
3047 
3048     case llvm::BitstreamEntry::Record:
3049       // The interesting case.
3050       break;
3051     }
3052 
3053     // Read and process a record.
3054     Record.clear();
3055     StringRef Blob;
3056     Expected<unsigned> MaybeRecordType =
3057         Stream.readRecord(Entry.ID, Record, &Blob);
3058     if (!MaybeRecordType) {
3059       Error(MaybeRecordType.takeError());
3060       return Failure;
3061     }
3062     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3063 
3064     // If we're not loading an AST context, we don't care about most records.
3065     if (!ContextObj) {
3066       switch (RecordType) {
3067       case IDENTIFIER_TABLE:
3068       case IDENTIFIER_OFFSET:
3069       case INTERESTING_IDENTIFIERS:
3070       case STATISTICS:
3071       case PP_CONDITIONAL_STACK:
3072       case PP_COUNTER_VALUE:
3073       case SOURCE_LOCATION_OFFSETS:
3074       case MODULE_OFFSET_MAP:
3075       case SOURCE_MANAGER_LINE_TABLE:
3076       case SOURCE_LOCATION_PRELOADS:
3077       case PPD_ENTITIES_OFFSETS:
3078       case HEADER_SEARCH_TABLE:
3079       case IMPORTED_MODULES:
3080       case MACRO_OFFSET:
3081         break;
3082       default:
3083         continue;
3084       }
3085     }
3086 
3087     switch (RecordType) {
3088     default:  // Default behavior: ignore.
3089       break;
3090 
3091     case TYPE_OFFSET: {
3092       if (F.LocalNumTypes != 0) {
3093         Error("duplicate TYPE_OFFSET record in AST file");
3094         return Failure;
3095       }
3096       F.TypeOffsets = (const uint32_t *)Blob.data();
3097       F.LocalNumTypes = Record[0];
3098       unsigned LocalBaseTypeIndex = Record[1];
3099       F.BaseTypeIndex = getTotalNumTypes();
3100 
3101       if (F.LocalNumTypes > 0) {
3102         // Introduce the global -> local mapping for types within this module.
3103         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3104 
3105         // Introduce the local -> global mapping for types within this module.
3106         F.TypeRemap.insertOrReplace(
3107           std::make_pair(LocalBaseTypeIndex,
3108                          F.BaseTypeIndex - LocalBaseTypeIndex));
3109 
3110         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3111       }
3112       break;
3113     }
3114 
3115     case DECL_OFFSET: {
3116       if (F.LocalNumDecls != 0) {
3117         Error("duplicate DECL_OFFSET record in AST file");
3118         return Failure;
3119       }
3120       F.DeclOffsets = (const DeclOffset *)Blob.data();
3121       F.LocalNumDecls = Record[0];
3122       unsigned LocalBaseDeclID = Record[1];
3123       F.BaseDeclID = getTotalNumDecls();
3124 
3125       if (F.LocalNumDecls > 0) {
3126         // Introduce the global -> local mapping for declarations within this
3127         // module.
3128         GlobalDeclMap.insert(
3129           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3130 
3131         // Introduce the local -> global mapping for declarations within this
3132         // module.
3133         F.DeclRemap.insertOrReplace(
3134           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3135 
3136         // Introduce the global -> local mapping for declarations within this
3137         // module.
3138         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3139 
3140         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3141       }
3142       break;
3143     }
3144 
3145     case TU_UPDATE_LEXICAL: {
3146       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3147       LexicalContents Contents(
3148           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3149               Blob.data()),
3150           static_cast<unsigned int>(Blob.size() / 4));
3151       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3152       TU->setHasExternalLexicalStorage(true);
3153       break;
3154     }
3155 
3156     case UPDATE_VISIBLE: {
3157       unsigned Idx = 0;
3158       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3159       auto *Data = (const unsigned char*)Blob.data();
3160       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3161       // If we've already loaded the decl, perform the updates when we finish
3162       // loading this block.
3163       if (Decl *D = GetExistingDecl(ID))
3164         PendingUpdateRecords.push_back(
3165             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3166       break;
3167     }
3168 
3169     case IDENTIFIER_TABLE:
3170       F.IdentifierTableData = Blob.data();
3171       if (Record[0]) {
3172         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3173             (const unsigned char *)F.IdentifierTableData + Record[0],
3174             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
3175             (const unsigned char *)F.IdentifierTableData,
3176             ASTIdentifierLookupTrait(*this, F));
3177 
3178         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3179       }
3180       break;
3181 
3182     case IDENTIFIER_OFFSET: {
3183       if (F.LocalNumIdentifiers != 0) {
3184         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3185         return Failure;
3186       }
3187       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3188       F.LocalNumIdentifiers = Record[0];
3189       unsigned LocalBaseIdentifierID = Record[1];
3190       F.BaseIdentifierID = getTotalNumIdentifiers();
3191 
3192       if (F.LocalNumIdentifiers > 0) {
3193         // Introduce the global -> local mapping for identifiers within this
3194         // module.
3195         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3196                                                   &F));
3197 
3198         // Introduce the local -> global mapping for identifiers within this
3199         // module.
3200         F.IdentifierRemap.insertOrReplace(
3201           std::make_pair(LocalBaseIdentifierID,
3202                          F.BaseIdentifierID - LocalBaseIdentifierID));
3203 
3204         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3205                                  + F.LocalNumIdentifiers);
3206       }
3207       break;
3208     }
3209 
3210     case INTERESTING_IDENTIFIERS:
3211       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3212       break;
3213 
3214     case EAGERLY_DESERIALIZED_DECLS:
3215       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3216       // about "interesting" decls (for instance, if we're building a module).
3217       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3218         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3219       break;
3220 
3221     case MODULAR_CODEGEN_DECLS:
3222       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3223       // them (ie: if we're not codegenerating this module).
3224       if (F.Kind == MK_MainFile)
3225         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3226           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3227       break;
3228 
3229     case SPECIAL_TYPES:
3230       if (SpecialTypes.empty()) {
3231         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3232           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3233         break;
3234       }
3235 
3236       if (SpecialTypes.size() != Record.size()) {
3237         Error("invalid special-types record");
3238         return Failure;
3239       }
3240 
3241       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3242         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3243         if (!SpecialTypes[I])
3244           SpecialTypes[I] = ID;
3245         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3246         // merge step?
3247       }
3248       break;
3249 
3250     case STATISTICS:
3251       TotalNumStatements += Record[0];
3252       TotalNumMacros += Record[1];
3253       TotalLexicalDeclContexts += Record[2];
3254       TotalVisibleDeclContexts += Record[3];
3255       break;
3256 
3257     case UNUSED_FILESCOPED_DECLS:
3258       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3259         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3260       break;
3261 
3262     case DELEGATING_CTORS:
3263       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3264         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3265       break;
3266 
3267     case WEAK_UNDECLARED_IDENTIFIERS:
3268       if (Record.size() % 4 != 0) {
3269         Error("invalid weak identifiers record");
3270         return Failure;
3271       }
3272 
3273       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3274       // files. This isn't the way to do it :)
3275       WeakUndeclaredIdentifiers.clear();
3276 
3277       // Translate the weak, undeclared identifiers into global IDs.
3278       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3279         WeakUndeclaredIdentifiers.push_back(
3280           getGlobalIdentifierID(F, Record[I++]));
3281         WeakUndeclaredIdentifiers.push_back(
3282           getGlobalIdentifierID(F, Record[I++]));
3283         WeakUndeclaredIdentifiers.push_back(
3284           ReadSourceLocation(F, Record, I).getRawEncoding());
3285         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3286       }
3287       break;
3288 
3289     case SELECTOR_OFFSETS: {
3290       F.SelectorOffsets = (const uint32_t *)Blob.data();
3291       F.LocalNumSelectors = Record[0];
3292       unsigned LocalBaseSelectorID = Record[1];
3293       F.BaseSelectorID = getTotalNumSelectors();
3294 
3295       if (F.LocalNumSelectors > 0) {
3296         // Introduce the global -> local mapping for selectors within this
3297         // module.
3298         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3299 
3300         // Introduce the local -> global mapping for selectors within this
3301         // module.
3302         F.SelectorRemap.insertOrReplace(
3303           std::make_pair(LocalBaseSelectorID,
3304                          F.BaseSelectorID - LocalBaseSelectorID));
3305 
3306         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3307       }
3308       break;
3309     }
3310 
3311     case METHOD_POOL:
3312       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3313       if (Record[0])
3314         F.SelectorLookupTable
3315           = ASTSelectorLookupTable::Create(
3316                         F.SelectorLookupTableData + Record[0],
3317                         F.SelectorLookupTableData,
3318                         ASTSelectorLookupTrait(*this, F));
3319       TotalNumMethodPoolEntries += Record[1];
3320       break;
3321 
3322     case REFERENCED_SELECTOR_POOL:
3323       if (!Record.empty()) {
3324         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3325           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3326                                                                 Record[Idx++]));
3327           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3328                                               getRawEncoding());
3329         }
3330       }
3331       break;
3332 
3333     case PP_CONDITIONAL_STACK:
3334       if (!Record.empty()) {
3335         unsigned Idx = 0, End = Record.size() - 1;
3336         bool ReachedEOFWhileSkipping = Record[Idx++];
3337         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3338         if (ReachedEOFWhileSkipping) {
3339           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3340           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3341           bool FoundNonSkipPortion = Record[Idx++];
3342           bool FoundElse = Record[Idx++];
3343           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3344           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3345                            FoundElse, ElseLoc);
3346         }
3347         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3348         while (Idx < End) {
3349           auto Loc = ReadSourceLocation(F, Record, Idx);
3350           bool WasSkipping = Record[Idx++];
3351           bool FoundNonSkip = Record[Idx++];
3352           bool FoundElse = Record[Idx++];
3353           ConditionalStack.push_back(
3354               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3355         }
3356         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3357       }
3358       break;
3359 
3360     case PP_COUNTER_VALUE:
3361       if (!Record.empty() && Listener)
3362         Listener->ReadCounter(F, Record[0]);
3363       break;
3364 
3365     case FILE_SORTED_DECLS:
3366       F.FileSortedDecls = (const DeclID *)Blob.data();
3367       F.NumFileSortedDecls = Record[0];
3368       break;
3369 
3370     case SOURCE_LOCATION_OFFSETS: {
3371       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3372       F.LocalNumSLocEntries = Record[0];
3373       unsigned SLocSpaceSize = Record[1];
3374       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3375           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3376                                               SLocSpaceSize);
3377       if (!F.SLocEntryBaseID) {
3378         Error("ran out of source locations");
3379         break;
3380       }
3381       // Make our entry in the range map. BaseID is negative and growing, so
3382       // we invert it. Because we invert it, though, we need the other end of
3383       // the range.
3384       unsigned RangeStart =
3385           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3386       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3387       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3388 
3389       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3390       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3391       GlobalSLocOffsetMap.insert(
3392           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3393                            - SLocSpaceSize,&F));
3394 
3395       // Initialize the remapping table.
3396       // Invalid stays invalid.
3397       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3398       // This module. Base was 2 when being compiled.
3399       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3400                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3401 
3402       TotalNumSLocEntries += F.LocalNumSLocEntries;
3403       break;
3404     }
3405 
3406     case MODULE_OFFSET_MAP:
3407       F.ModuleOffsetMap = Blob;
3408       break;
3409 
3410     case SOURCE_MANAGER_LINE_TABLE:
3411       if (ParseLineTable(F, Record))
3412         return Failure;
3413       break;
3414 
3415     case SOURCE_LOCATION_PRELOADS: {
3416       // Need to transform from the local view (1-based IDs) to the global view,
3417       // which is based off F.SLocEntryBaseID.
3418       if (!F.PreloadSLocEntries.empty()) {
3419         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3420         return Failure;
3421       }
3422 
3423       F.PreloadSLocEntries.swap(Record);
3424       break;
3425     }
3426 
3427     case EXT_VECTOR_DECLS:
3428       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3429         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3430       break;
3431 
3432     case VTABLE_USES:
3433       if (Record.size() % 3 != 0) {
3434         Error("Invalid VTABLE_USES record");
3435         return Failure;
3436       }
3437 
3438       // Later tables overwrite earlier ones.
3439       // FIXME: Modules will have some trouble with this. This is clearly not
3440       // the right way to do this.
3441       VTableUses.clear();
3442 
3443       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3444         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3445         VTableUses.push_back(
3446           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3447         VTableUses.push_back(Record[Idx++]);
3448       }
3449       break;
3450 
3451     case PENDING_IMPLICIT_INSTANTIATIONS:
3452       if (PendingInstantiations.size() % 2 != 0) {
3453         Error("Invalid existing PendingInstantiations");
3454         return Failure;
3455       }
3456 
3457       if (Record.size() % 2 != 0) {
3458         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3459         return Failure;
3460       }
3461 
3462       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3463         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3464         PendingInstantiations.push_back(
3465           ReadSourceLocation(F, Record, I).getRawEncoding());
3466       }
3467       break;
3468 
3469     case SEMA_DECL_REFS:
3470       if (Record.size() != 3) {
3471         Error("Invalid SEMA_DECL_REFS block");
3472         return Failure;
3473       }
3474       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3475         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3476       break;
3477 
3478     case PPD_ENTITIES_OFFSETS: {
3479       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3480       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3481       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3482 
3483       unsigned LocalBasePreprocessedEntityID = Record[0];
3484 
3485       unsigned StartingID;
3486       if (!PP.getPreprocessingRecord())
3487         PP.createPreprocessingRecord();
3488       if (!PP.getPreprocessingRecord()->getExternalSource())
3489         PP.getPreprocessingRecord()->SetExternalSource(*this);
3490       StartingID
3491         = PP.getPreprocessingRecord()
3492             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3493       F.BasePreprocessedEntityID = StartingID;
3494 
3495       if (F.NumPreprocessedEntities > 0) {
3496         // Introduce the global -> local mapping for preprocessed entities in
3497         // this module.
3498         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3499 
3500         // Introduce the local -> global mapping for preprocessed entities in
3501         // this module.
3502         F.PreprocessedEntityRemap.insertOrReplace(
3503           std::make_pair(LocalBasePreprocessedEntityID,
3504             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3505       }
3506 
3507       break;
3508     }
3509 
3510     case PPD_SKIPPED_RANGES: {
3511       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3512       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3513       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3514 
3515       if (!PP.getPreprocessingRecord())
3516         PP.createPreprocessingRecord();
3517       if (!PP.getPreprocessingRecord()->getExternalSource())
3518         PP.getPreprocessingRecord()->SetExternalSource(*this);
3519       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3520           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3521 
3522       if (F.NumPreprocessedSkippedRanges > 0)
3523         GlobalSkippedRangeMap.insert(
3524             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3525       break;
3526     }
3527 
3528     case DECL_UPDATE_OFFSETS:
3529       if (Record.size() % 2 != 0) {
3530         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3531         return Failure;
3532       }
3533       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3534         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3535         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3536 
3537         // If we've already loaded the decl, perform the updates when we finish
3538         // loading this block.
3539         if (Decl *D = GetExistingDecl(ID))
3540           PendingUpdateRecords.push_back(
3541               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3542       }
3543       break;
3544 
3545     case OBJC_CATEGORIES_MAP:
3546       if (F.LocalNumObjCCategoriesInMap != 0) {
3547         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3548         return Failure;
3549       }
3550 
3551       F.LocalNumObjCCategoriesInMap = Record[0];
3552       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3553       break;
3554 
3555     case OBJC_CATEGORIES:
3556       F.ObjCCategories.swap(Record);
3557       break;
3558 
3559     case CUDA_SPECIAL_DECL_REFS:
3560       // Later tables overwrite earlier ones.
3561       // FIXME: Modules will have trouble with this.
3562       CUDASpecialDeclRefs.clear();
3563       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3564         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3565       break;
3566 
3567     case HEADER_SEARCH_TABLE:
3568       F.HeaderFileInfoTableData = Blob.data();
3569       F.LocalNumHeaderFileInfos = Record[1];
3570       if (Record[0]) {
3571         F.HeaderFileInfoTable
3572           = HeaderFileInfoLookupTable::Create(
3573                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3574                    (const unsigned char *)F.HeaderFileInfoTableData,
3575                    HeaderFileInfoTrait(*this, F,
3576                                        &PP.getHeaderSearchInfo(),
3577                                        Blob.data() + Record[2]));
3578 
3579         PP.getHeaderSearchInfo().SetExternalSource(this);
3580         if (!PP.getHeaderSearchInfo().getExternalLookup())
3581           PP.getHeaderSearchInfo().SetExternalLookup(this);
3582       }
3583       break;
3584 
3585     case FP_PRAGMA_OPTIONS:
3586       // Later tables overwrite earlier ones.
3587       FPPragmaOptions.swap(Record);
3588       break;
3589 
3590     case OPENCL_EXTENSIONS:
3591       for (unsigned I = 0, E = Record.size(); I != E; ) {
3592         auto Name = ReadString(Record, I);
3593         auto &Opt = OpenCLExtensions.OptMap[Name];
3594         Opt.Supported = Record[I++] != 0;
3595         Opt.Enabled = Record[I++] != 0;
3596         Opt.Avail = Record[I++];
3597         Opt.Core = Record[I++];
3598       }
3599       break;
3600 
3601     case OPENCL_EXTENSION_TYPES:
3602       for (unsigned I = 0, E = Record.size(); I != E;) {
3603         auto TypeID = static_cast<::TypeID>(Record[I++]);
3604         auto *Type = GetType(TypeID).getTypePtr();
3605         auto NumExt = static_cast<unsigned>(Record[I++]);
3606         for (unsigned II = 0; II != NumExt; ++II) {
3607           auto Ext = ReadString(Record, I);
3608           OpenCLTypeExtMap[Type].insert(Ext);
3609         }
3610       }
3611       break;
3612 
3613     case OPENCL_EXTENSION_DECLS:
3614       for (unsigned I = 0, E = Record.size(); I != E;) {
3615         auto DeclID = static_cast<::DeclID>(Record[I++]);
3616         auto *Decl = GetDecl(DeclID);
3617         auto NumExt = static_cast<unsigned>(Record[I++]);
3618         for (unsigned II = 0; II != NumExt; ++II) {
3619           auto Ext = ReadString(Record, I);
3620           OpenCLDeclExtMap[Decl].insert(Ext);
3621         }
3622       }
3623       break;
3624 
3625     case TENTATIVE_DEFINITIONS:
3626       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3627         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3628       break;
3629 
3630     case KNOWN_NAMESPACES:
3631       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3632         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3633       break;
3634 
3635     case UNDEFINED_BUT_USED:
3636       if (UndefinedButUsed.size() % 2 != 0) {
3637         Error("Invalid existing UndefinedButUsed");
3638         return Failure;
3639       }
3640 
3641       if (Record.size() % 2 != 0) {
3642         Error("invalid undefined-but-used record");
3643         return Failure;
3644       }
3645       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3646         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3647         UndefinedButUsed.push_back(
3648             ReadSourceLocation(F, Record, I).getRawEncoding());
3649       }
3650       break;
3651 
3652     case DELETE_EXPRS_TO_ANALYZE:
3653       for (unsigned I = 0, N = Record.size(); I != N;) {
3654         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3655         const uint64_t Count = Record[I++];
3656         DelayedDeleteExprs.push_back(Count);
3657         for (uint64_t C = 0; C < Count; ++C) {
3658           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3659           bool IsArrayForm = Record[I++] == 1;
3660           DelayedDeleteExprs.push_back(IsArrayForm);
3661         }
3662       }
3663       break;
3664 
3665     case IMPORTED_MODULES:
3666       if (!F.isModule()) {
3667         // If we aren't loading a module (which has its own exports), make
3668         // all of the imported modules visible.
3669         // FIXME: Deal with macros-only imports.
3670         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3671           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3672           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3673           if (GlobalID) {
3674             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3675             if (DeserializationListener)
3676               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3677           }
3678         }
3679       }
3680       break;
3681 
3682     case MACRO_OFFSET: {
3683       if (F.LocalNumMacros != 0) {
3684         Error("duplicate MACRO_OFFSET record in AST file");
3685         return Failure;
3686       }
3687       F.MacroOffsets = (const uint32_t *)Blob.data();
3688       F.LocalNumMacros = Record[0];
3689       unsigned LocalBaseMacroID = Record[1];
3690       F.BaseMacroID = getTotalNumMacros();
3691 
3692       if (F.LocalNumMacros > 0) {
3693         // Introduce the global -> local mapping for macros within this module.
3694         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3695 
3696         // Introduce the local -> global mapping for macros within this module.
3697         F.MacroRemap.insertOrReplace(
3698           std::make_pair(LocalBaseMacroID,
3699                          F.BaseMacroID - LocalBaseMacroID));
3700 
3701         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3702       }
3703       break;
3704     }
3705 
3706     case LATE_PARSED_TEMPLATE:
3707       LateParsedTemplates.append(Record.begin(), Record.end());
3708       break;
3709 
3710     case OPTIMIZE_PRAGMA_OPTIONS:
3711       if (Record.size() != 1) {
3712         Error("invalid pragma optimize record");
3713         return Failure;
3714       }
3715       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3716       break;
3717 
3718     case MSSTRUCT_PRAGMA_OPTIONS:
3719       if (Record.size() != 1) {
3720         Error("invalid pragma ms_struct record");
3721         return Failure;
3722       }
3723       PragmaMSStructState = Record[0];
3724       break;
3725 
3726     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3727       if (Record.size() != 2) {
3728         Error("invalid pragma ms_struct record");
3729         return Failure;
3730       }
3731       PragmaMSPointersToMembersState = Record[0];
3732       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3733       break;
3734 
3735     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3736       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3737         UnusedLocalTypedefNameCandidates.push_back(
3738             getGlobalDeclID(F, Record[I]));
3739       break;
3740 
3741     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3742       if (Record.size() != 1) {
3743         Error("invalid cuda pragma options record");
3744         return Failure;
3745       }
3746       ForceCUDAHostDeviceDepth = Record[0];
3747       break;
3748 
3749     case PACK_PRAGMA_OPTIONS: {
3750       if (Record.size() < 3) {
3751         Error("invalid pragma pack record");
3752         return Failure;
3753       }
3754       PragmaPackCurrentValue = Record[0];
3755       PragmaPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3756       unsigned NumStackEntries = Record[2];
3757       unsigned Idx = 3;
3758       // Reset the stack when importing a new module.
3759       PragmaPackStack.clear();
3760       for (unsigned I = 0; I < NumStackEntries; ++I) {
3761         PragmaPackStackEntry Entry;
3762         Entry.Value = Record[Idx++];
3763         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3764         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3765         PragmaPackStrings.push_back(ReadString(Record, Idx));
3766         Entry.SlotLabel = PragmaPackStrings.back();
3767         PragmaPackStack.push_back(Entry);
3768       }
3769       break;
3770     }
3771     }
3772   }
3773 }
3774 
3775 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3776   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3777 
3778   // Additional remapping information.
3779   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3780   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3781   F.ModuleOffsetMap = StringRef();
3782 
3783   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3784   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3785     F.SLocRemap.insert(std::make_pair(0U, 0));
3786     F.SLocRemap.insert(std::make_pair(2U, 1));
3787   }
3788 
3789   // Continuous range maps we may be updating in our module.
3790   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3791   RemapBuilder SLocRemap(F.SLocRemap);
3792   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3793   RemapBuilder MacroRemap(F.MacroRemap);
3794   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3795   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3796   RemapBuilder SelectorRemap(F.SelectorRemap);
3797   RemapBuilder DeclRemap(F.DeclRemap);
3798   RemapBuilder TypeRemap(F.TypeRemap);
3799 
3800   while (Data < DataEnd) {
3801     // FIXME: Looking up dependency modules by filename is horrible. Let's
3802     // start fixing this with prebuilt and explicit modules and see how it
3803     // goes...
3804     using namespace llvm::support;
3805     ModuleKind Kind = static_cast<ModuleKind>(
3806       endian::readNext<uint8_t, little, unaligned>(Data));
3807     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3808     StringRef Name = StringRef((const char*)Data, Len);
3809     Data += Len;
3810     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule
3811                       ? ModuleMgr.lookupByModuleName(Name)
3812                       : ModuleMgr.lookupByFileName(Name));
3813     if (!OM) {
3814       std::string Msg =
3815           "SourceLocation remap refers to unknown module, cannot find ";
3816       Msg.append(Name);
3817       Error(Msg);
3818       return;
3819     }
3820 
3821     uint32_t SLocOffset =
3822         endian::readNext<uint32_t, little, unaligned>(Data);
3823     uint32_t IdentifierIDOffset =
3824         endian::readNext<uint32_t, little, unaligned>(Data);
3825     uint32_t MacroIDOffset =
3826         endian::readNext<uint32_t, little, unaligned>(Data);
3827     uint32_t PreprocessedEntityIDOffset =
3828         endian::readNext<uint32_t, little, unaligned>(Data);
3829     uint32_t SubmoduleIDOffset =
3830         endian::readNext<uint32_t, little, unaligned>(Data);
3831     uint32_t SelectorIDOffset =
3832         endian::readNext<uint32_t, little, unaligned>(Data);
3833     uint32_t DeclIDOffset =
3834         endian::readNext<uint32_t, little, unaligned>(Data);
3835     uint32_t TypeIndexOffset =
3836         endian::readNext<uint32_t, little, unaligned>(Data);
3837 
3838     uint32_t None = std::numeric_limits<uint32_t>::max();
3839 
3840     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3841                          RemapBuilder &Remap) {
3842       if (Offset != None)
3843         Remap.insert(std::make_pair(Offset,
3844                                     static_cast<int>(BaseOffset - Offset)));
3845     };
3846     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3847     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3848     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3849     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3850               PreprocessedEntityRemap);
3851     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3852     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3853     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3854     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3855 
3856     // Global -> local mappings.
3857     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3858   }
3859 }
3860 
3861 ASTReader::ASTReadResult
3862 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3863                                   const ModuleFile *ImportedBy,
3864                                   unsigned ClientLoadCapabilities) {
3865   unsigned Idx = 0;
3866   F.ModuleMapPath = ReadPath(F, Record, Idx);
3867 
3868   // Try to resolve ModuleName in the current header search context and
3869   // verify that it is found in the same module map file as we saved. If the
3870   // top-level AST file is a main file, skip this check because there is no
3871   // usable header search context.
3872   assert(!F.ModuleName.empty() &&
3873          "MODULE_NAME should come before MODULE_MAP_FILE");
3874   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3875     // An implicitly-loaded module file should have its module listed in some
3876     // module map file that we've already loaded.
3877     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3878     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3879     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3880     // Don't emit module relocation error if we have -fno-validate-pch
3881     if (!PP.getPreprocessorOpts().DisablePCHValidation && !ModMap) {
3882       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3883         if (auto *ASTFE = M ? M->getASTFile() : nullptr) {
3884           // This module was defined by an imported (explicit) module.
3885           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3886                                                << ASTFE->getName();
3887         } else {
3888           // This module was built with a different module map.
3889           Diag(diag::err_imported_module_not_found)
3890               << F.ModuleName << F.FileName
3891               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3892               << !ImportedBy;
3893           // In case it was imported by a PCH, there's a chance the user is
3894           // just missing to include the search path to the directory containing
3895           // the modulemap.
3896           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3897             Diag(diag::note_imported_by_pch_module_not_found)
3898                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3899         }
3900       }
3901       return OutOfDate;
3902     }
3903 
3904     assert(M->Name == F.ModuleName && "found module with different name");
3905 
3906     // Check the primary module map file.
3907     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3908     if (!StoredModMap || *StoredModMap != ModMap) {
3909       assert(ModMap && "found module is missing module map file");
3910       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3911              "top-level import should be verified");
3912       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3913       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3914         Diag(diag::err_imported_module_modmap_changed)
3915             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3916             << ModMap->getName() << F.ModuleMapPath << NotImported;
3917       return OutOfDate;
3918     }
3919 
3920     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3921     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3922       // FIXME: we should use input files rather than storing names.
3923       std::string Filename = ReadPath(F, Record, Idx);
3924       auto F = FileMgr.getFile(Filename, false, false);
3925       if (!F) {
3926         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3927           Error("could not find file '" + Filename +"' referenced by AST file");
3928         return OutOfDate;
3929       }
3930       AdditionalStoredMaps.insert(*F);
3931     }
3932 
3933     // Check any additional module map files (e.g. module.private.modulemap)
3934     // that are not in the pcm.
3935     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3936       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3937         // Remove files that match
3938         // Note: SmallPtrSet::erase is really remove
3939         if (!AdditionalStoredMaps.erase(ModMap)) {
3940           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3941             Diag(diag::err_module_different_modmap)
3942               << F.ModuleName << /*new*/0 << ModMap->getName();
3943           return OutOfDate;
3944         }
3945       }
3946     }
3947 
3948     // Check any additional module map files that are in the pcm, but not
3949     // found in header search. Cases that match are already removed.
3950     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3951       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3952         Diag(diag::err_module_different_modmap)
3953           << F.ModuleName << /*not new*/1 << ModMap->getName();
3954       return OutOfDate;
3955     }
3956   }
3957 
3958   if (Listener)
3959     Listener->ReadModuleMapFile(F.ModuleMapPath);
3960   return Success;
3961 }
3962 
3963 /// Move the given method to the back of the global list of methods.
3964 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3965   // Find the entry for this selector in the method pool.
3966   Sema::GlobalMethodPool::iterator Known
3967     = S.MethodPool.find(Method->getSelector());
3968   if (Known == S.MethodPool.end())
3969     return;
3970 
3971   // Retrieve the appropriate method list.
3972   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3973                                                     : Known->second.second;
3974   bool Found = false;
3975   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3976     if (!Found) {
3977       if (List->getMethod() == Method) {
3978         Found = true;
3979       } else {
3980         // Keep searching.
3981         continue;
3982       }
3983     }
3984 
3985     if (List->getNext())
3986       List->setMethod(List->getNext()->getMethod());
3987     else
3988       List->setMethod(Method);
3989   }
3990 }
3991 
3992 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
3993   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
3994   for (Decl *D : Names) {
3995     bool wasHidden = D->isHidden();
3996     D->setVisibleDespiteOwningModule();
3997 
3998     if (wasHidden && SemaObj) {
3999       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4000         moveMethodToBackOfGlobalList(*SemaObj, Method);
4001       }
4002     }
4003   }
4004 }
4005 
4006 void ASTReader::makeModuleVisible(Module *Mod,
4007                                   Module::NameVisibilityKind NameVisibility,
4008                                   SourceLocation ImportLoc) {
4009   llvm::SmallPtrSet<Module *, 4> Visited;
4010   SmallVector<Module *, 4> Stack;
4011   Stack.push_back(Mod);
4012   while (!Stack.empty()) {
4013     Mod = Stack.pop_back_val();
4014 
4015     if (NameVisibility <= Mod->NameVisibility) {
4016       // This module already has this level of visibility (or greater), so
4017       // there is nothing more to do.
4018       continue;
4019     }
4020 
4021     if (!Mod->isAvailable()) {
4022       // Modules that aren't available cannot be made visible.
4023       continue;
4024     }
4025 
4026     // Update the module's name visibility.
4027     Mod->NameVisibility = NameVisibility;
4028 
4029     // If we've already deserialized any names from this module,
4030     // mark them as visible.
4031     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4032     if (Hidden != HiddenNamesMap.end()) {
4033       auto HiddenNames = std::move(*Hidden);
4034       HiddenNamesMap.erase(Hidden);
4035       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4036       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4037              "making names visible added hidden names");
4038     }
4039 
4040     // Push any exported modules onto the stack to be marked as visible.
4041     SmallVector<Module *, 16> Exports;
4042     Mod->getExportedModules(Exports);
4043     for (SmallVectorImpl<Module *>::iterator
4044            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4045       Module *Exported = *I;
4046       if (Visited.insert(Exported).second)
4047         Stack.push_back(Exported);
4048     }
4049   }
4050 }
4051 
4052 /// We've merged the definition \p MergedDef into the existing definition
4053 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4054 /// visible.
4055 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4056                                           NamedDecl *MergedDef) {
4057   if (Def->isHidden()) {
4058     // If MergedDef is visible or becomes visible, make the definition visible.
4059     if (!MergedDef->isHidden())
4060       Def->setVisibleDespiteOwningModule();
4061     else {
4062       getContext().mergeDefinitionIntoModule(
4063           Def, MergedDef->getImportedOwningModule(),
4064           /*NotifyListeners*/ false);
4065       PendingMergedDefinitionsToDeduplicate.insert(Def);
4066     }
4067   }
4068 }
4069 
4070 bool ASTReader::loadGlobalIndex() {
4071   if (GlobalIndex)
4072     return false;
4073 
4074   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4075       !PP.getLangOpts().Modules)
4076     return true;
4077 
4078   // Try to load the global index.
4079   TriedLoadingGlobalIndex = true;
4080   StringRef ModuleCachePath
4081     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4082   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4083       GlobalModuleIndex::readIndex(ModuleCachePath);
4084   if (llvm::Error Err = std::move(Result.second)) {
4085     assert(!Result.first);
4086     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4087     return true;
4088   }
4089 
4090   GlobalIndex.reset(Result.first);
4091   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4092   return false;
4093 }
4094 
4095 bool ASTReader::isGlobalIndexUnavailable() const {
4096   return PP.getLangOpts().Modules && UseGlobalIndex &&
4097          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4098 }
4099 
4100 static void updateModuleTimestamp(ModuleFile &MF) {
4101   // Overwrite the timestamp file contents so that file's mtime changes.
4102   std::string TimestampFilename = MF.getTimestampFilename();
4103   std::error_code EC;
4104   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4105   if (EC)
4106     return;
4107   OS << "Timestamp file\n";
4108   OS.close();
4109   OS.clear_error(); // Avoid triggering a fatal error.
4110 }
4111 
4112 /// Given a cursor at the start of an AST file, scan ahead and drop the
4113 /// cursor into the start of the given block ID, returning false on success and
4114 /// true on failure.
4115 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4116   while (true) {
4117     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4118     if (!MaybeEntry) {
4119       // FIXME this drops errors on the floor.
4120       consumeError(MaybeEntry.takeError());
4121       return true;
4122     }
4123     llvm::BitstreamEntry Entry = MaybeEntry.get();
4124 
4125     switch (Entry.Kind) {
4126     case llvm::BitstreamEntry::Error:
4127     case llvm::BitstreamEntry::EndBlock:
4128       return true;
4129 
4130     case llvm::BitstreamEntry::Record:
4131       // Ignore top-level records.
4132       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4133         break;
4134       else {
4135         // FIXME this drops errors on the floor.
4136         consumeError(Skipped.takeError());
4137         return true;
4138       }
4139 
4140     case llvm::BitstreamEntry::SubBlock:
4141       if (Entry.ID == BlockID) {
4142         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4143           // FIXME this drops the error on the floor.
4144           consumeError(std::move(Err));
4145           return true;
4146         }
4147         // Found it!
4148         return false;
4149       }
4150 
4151       if (llvm::Error Err = Cursor.SkipBlock()) {
4152         // FIXME this drops the error on the floor.
4153         consumeError(std::move(Err));
4154         return true;
4155       }
4156     }
4157   }
4158 }
4159 
4160 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4161                                             ModuleKind Type,
4162                                             SourceLocation ImportLoc,
4163                                             unsigned ClientLoadCapabilities,
4164                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4165   llvm::SaveAndRestore<SourceLocation>
4166     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4167 
4168   // Defer any pending actions until we get to the end of reading the AST file.
4169   Deserializing AnASTFile(this);
4170 
4171   // Bump the generation number.
4172   unsigned PreviousGeneration = 0;
4173   if (ContextObj)
4174     PreviousGeneration = incrementGeneration(*ContextObj);
4175 
4176   unsigned NumModules = ModuleMgr.size();
4177   SmallVector<ImportedModule, 4> Loaded;
4178   switch (ASTReadResult ReadResult =
4179               ReadASTCore(FileName, Type, ImportLoc,
4180                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4181                           ASTFileSignature(), ClientLoadCapabilities)) {
4182   case Failure:
4183   case Missing:
4184   case OutOfDate:
4185   case VersionMismatch:
4186   case ConfigurationMismatch:
4187   case HadErrors: {
4188     llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet;
4189     for (const ImportedModule &IM : Loaded)
4190       LoadedSet.insert(IM.Mod);
4191 
4192     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, LoadedSet,
4193                             PP.getLangOpts().Modules
4194                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4195                                 : nullptr);
4196 
4197     // If we find that any modules are unusable, the global index is going
4198     // to be out-of-date. Just remove it.
4199     GlobalIndex.reset();
4200     ModuleMgr.setGlobalIndex(nullptr);
4201     return ReadResult;
4202   }
4203   case Success:
4204     break;
4205   }
4206 
4207   // Here comes stuff that we only do once the entire chain is loaded.
4208 
4209   // Load the AST blocks of all of the modules that we loaded.
4210   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
4211                                               MEnd = Loaded.end();
4212        M != MEnd; ++M) {
4213     ModuleFile &F = *M->Mod;
4214 
4215     // Read the AST block.
4216     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4217       return Result;
4218 
4219     // Read the extension blocks.
4220     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4221       if (ASTReadResult Result = ReadExtensionBlock(F))
4222         return Result;
4223     }
4224 
4225     // Once read, set the ModuleFile bit base offset and update the size in
4226     // bits of all files we've seen.
4227     F.GlobalBitOffset = TotalModulesSizeInBits;
4228     TotalModulesSizeInBits += F.SizeInBits;
4229     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4230 
4231     // Preload SLocEntries.
4232     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4233       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4234       // Load it through the SourceManager and don't call ReadSLocEntry()
4235       // directly because the entry may have already been loaded in which case
4236       // calling ReadSLocEntry() directly would trigger an assertion in
4237       // SourceManager.
4238       SourceMgr.getLoadedSLocEntryByID(Index);
4239     }
4240 
4241     // Map the original source file ID into the ID space of the current
4242     // compilation.
4243     if (F.OriginalSourceFileID.isValid()) {
4244       F.OriginalSourceFileID = FileID::get(
4245           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4246     }
4247 
4248     // Preload all the pending interesting identifiers by marking them out of
4249     // date.
4250     for (auto Offset : F.PreloadIdentifierOffsets) {
4251       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
4252           F.IdentifierTableData + Offset);
4253 
4254       ASTIdentifierLookupTrait Trait(*this, F);
4255       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4256       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4257       auto &II = PP.getIdentifierTable().getOwn(Key);
4258       II.setOutOfDate(true);
4259 
4260       // Mark this identifier as being from an AST file so that we can track
4261       // whether we need to serialize it.
4262       markIdentifierFromAST(*this, II);
4263 
4264       // Associate the ID with the identifier so that the writer can reuse it.
4265       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4266       SetIdentifierInfo(ID, &II);
4267     }
4268   }
4269 
4270   // Setup the import locations and notify the module manager that we've
4271   // committed to these module files.
4272   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
4273                                               MEnd = Loaded.end();
4274        M != MEnd; ++M) {
4275     ModuleFile &F = *M->Mod;
4276 
4277     ModuleMgr.moduleFileAccepted(&F);
4278 
4279     // Set the import location.
4280     F.DirectImportLoc = ImportLoc;
4281     // FIXME: We assume that locations from PCH / preamble do not need
4282     // any translation.
4283     if (!M->ImportedBy)
4284       F.ImportLoc = M->ImportLoc;
4285     else
4286       F.ImportLoc = TranslateSourceLocation(*M->ImportedBy, M->ImportLoc);
4287   }
4288 
4289   if (!PP.getLangOpts().CPlusPlus ||
4290       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4291        Type != MK_PrebuiltModule)) {
4292     // Mark all of the identifiers in the identifier table as being out of date,
4293     // so that various accessors know to check the loaded modules when the
4294     // identifier is used.
4295     //
4296     // For C++ modules, we don't need information on many identifiers (just
4297     // those that provide macros or are poisoned), so we mark all of
4298     // the interesting ones via PreloadIdentifierOffsets.
4299     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4300                                 IdEnd = PP.getIdentifierTable().end();
4301          Id != IdEnd; ++Id)
4302       Id->second->setOutOfDate(true);
4303   }
4304   // Mark selectors as out of date.
4305   for (auto Sel : SelectorGeneration)
4306     SelectorOutOfDate[Sel.first] = true;
4307 
4308   // Resolve any unresolved module exports.
4309   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4310     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4311     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4312     Module *ResolvedMod = getSubmodule(GlobalID);
4313 
4314     switch (Unresolved.Kind) {
4315     case UnresolvedModuleRef::Conflict:
4316       if (ResolvedMod) {
4317         Module::Conflict Conflict;
4318         Conflict.Other = ResolvedMod;
4319         Conflict.Message = Unresolved.String.str();
4320         Unresolved.Mod->Conflicts.push_back(Conflict);
4321       }
4322       continue;
4323 
4324     case UnresolvedModuleRef::Import:
4325       if (ResolvedMod)
4326         Unresolved.Mod->Imports.insert(ResolvedMod);
4327       continue;
4328 
4329     case UnresolvedModuleRef::Export:
4330       if (ResolvedMod || Unresolved.IsWildcard)
4331         Unresolved.Mod->Exports.push_back(
4332           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4333       continue;
4334     }
4335   }
4336   UnresolvedModuleRefs.clear();
4337 
4338   if (Imported)
4339     Imported->append(ImportedModules.begin(),
4340                      ImportedModules.end());
4341 
4342   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4343   // Might be unnecessary as use declarations are only used to build the
4344   // module itself.
4345 
4346   if (ContextObj)
4347     InitializeContext();
4348 
4349   if (SemaObj)
4350     UpdateSema();
4351 
4352   if (DeserializationListener)
4353     DeserializationListener->ReaderInitialized(this);
4354 
4355   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4356   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4357     // If this AST file is a precompiled preamble, then set the
4358     // preamble file ID of the source manager to the file source file
4359     // from which the preamble was built.
4360     if (Type == MK_Preamble) {
4361       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4362     } else if (Type == MK_MainFile) {
4363       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4364     }
4365   }
4366 
4367   // For any Objective-C class definitions we have already loaded, make sure
4368   // that we load any additional categories.
4369   if (ContextObj) {
4370     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4371       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4372                          ObjCClassesLoaded[I],
4373                          PreviousGeneration);
4374     }
4375   }
4376 
4377   if (PP.getHeaderSearchInfo()
4378           .getHeaderSearchOpts()
4379           .ModulesValidateOncePerBuildSession) {
4380     // Now we are certain that the module and all modules it depends on are
4381     // up to date.  Create or update timestamp files for modules that are
4382     // located in the module cache (not for PCH files that could be anywhere
4383     // in the filesystem).
4384     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4385       ImportedModule &M = Loaded[I];
4386       if (M.Mod->Kind == MK_ImplicitModule) {
4387         updateModuleTimestamp(*M.Mod);
4388       }
4389     }
4390   }
4391 
4392   return Success;
4393 }
4394 
4395 static ASTFileSignature readASTFileSignature(StringRef PCH);
4396 
4397 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4398 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4399   // FIXME checking magic headers is done in other places such as
4400   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4401   // always done the same. Unify it all with a helper.
4402   if (!Stream.canSkipToPos(4))
4403     return llvm::createStringError(std::errc::illegal_byte_sequence,
4404                                    "file too small to contain AST file magic");
4405   for (unsigned C : {'C', 'P', 'C', 'H'})
4406     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4407       if (Res.get() != C)
4408         return llvm::createStringError(
4409             std::errc::illegal_byte_sequence,
4410             "file doesn't start with AST file magic");
4411     } else
4412       return Res.takeError();
4413   return llvm::Error::success();
4414 }
4415 
4416 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4417   switch (Kind) {
4418   case MK_PCH:
4419     return 0; // PCH
4420   case MK_ImplicitModule:
4421   case MK_ExplicitModule:
4422   case MK_PrebuiltModule:
4423     return 1; // module
4424   case MK_MainFile:
4425   case MK_Preamble:
4426     return 2; // main source file
4427   }
4428   llvm_unreachable("unknown module kind");
4429 }
4430 
4431 ASTReader::ASTReadResult
4432 ASTReader::ReadASTCore(StringRef FileName,
4433                        ModuleKind Type,
4434                        SourceLocation ImportLoc,
4435                        ModuleFile *ImportedBy,
4436                        SmallVectorImpl<ImportedModule> &Loaded,
4437                        off_t ExpectedSize, time_t ExpectedModTime,
4438                        ASTFileSignature ExpectedSignature,
4439                        unsigned ClientLoadCapabilities) {
4440   ModuleFile *M;
4441   std::string ErrorStr;
4442   ModuleManager::AddModuleResult AddResult
4443     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4444                           getGeneration(), ExpectedSize, ExpectedModTime,
4445                           ExpectedSignature, readASTFileSignature,
4446                           M, ErrorStr);
4447 
4448   switch (AddResult) {
4449   case ModuleManager::AlreadyLoaded:
4450     Diag(diag::remark_module_import)
4451         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4452         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4453     return Success;
4454 
4455   case ModuleManager::NewlyLoaded:
4456     // Load module file below.
4457     break;
4458 
4459   case ModuleManager::Missing:
4460     // The module file was missing; if the client can handle that, return
4461     // it.
4462     if (ClientLoadCapabilities & ARR_Missing)
4463       return Missing;
4464 
4465     // Otherwise, return an error.
4466     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
4467                                           << FileName << !ErrorStr.empty()
4468                                           << ErrorStr;
4469     return Failure;
4470 
4471   case ModuleManager::OutOfDate:
4472     // We couldn't load the module file because it is out-of-date. If the
4473     // client can handle out-of-date, return it.
4474     if (ClientLoadCapabilities & ARR_OutOfDate)
4475       return OutOfDate;
4476 
4477     // Otherwise, return an error.
4478     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
4479                                             << FileName << !ErrorStr.empty()
4480                                             << ErrorStr;
4481     return Failure;
4482   }
4483 
4484   assert(M && "Missing module file");
4485 
4486   bool ShouldFinalizePCM = false;
4487   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4488     auto &MC = getModuleManager().getModuleCache();
4489     if (ShouldFinalizePCM)
4490       MC.finalizePCM(FileName);
4491     else
4492       MC.tryToDropPCM(FileName);
4493   });
4494   ModuleFile &F = *M;
4495   BitstreamCursor &Stream = F.Stream;
4496   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4497   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4498 
4499   // Sniff for the signature.
4500   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4501     Diag(diag::err_module_file_invalid)
4502         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4503     return Failure;
4504   }
4505 
4506   // This is used for compatibility with older PCH formats.
4507   bool HaveReadControlBlock = false;
4508   while (true) {
4509     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4510     if (!MaybeEntry) {
4511       Error(MaybeEntry.takeError());
4512       return Failure;
4513     }
4514     llvm::BitstreamEntry Entry = MaybeEntry.get();
4515 
4516     switch (Entry.Kind) {
4517     case llvm::BitstreamEntry::Error:
4518     case llvm::BitstreamEntry::Record:
4519     case llvm::BitstreamEntry::EndBlock:
4520       Error("invalid record at top-level of AST file");
4521       return Failure;
4522 
4523     case llvm::BitstreamEntry::SubBlock:
4524       break;
4525     }
4526 
4527     switch (Entry.ID) {
4528     case CONTROL_BLOCK_ID:
4529       HaveReadControlBlock = true;
4530       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4531       case Success:
4532         // Check that we didn't try to load a non-module AST file as a module.
4533         //
4534         // FIXME: Should we also perform the converse check? Loading a module as
4535         // a PCH file sort of works, but it's a bit wonky.
4536         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4537              Type == MK_PrebuiltModule) &&
4538             F.ModuleName.empty()) {
4539           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4540           if (Result != OutOfDate ||
4541               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4542             Diag(diag::err_module_file_not_module) << FileName;
4543           return Result;
4544         }
4545         break;
4546 
4547       case Failure: return Failure;
4548       case Missing: return Missing;
4549       case OutOfDate: return OutOfDate;
4550       case VersionMismatch: return VersionMismatch;
4551       case ConfigurationMismatch: return ConfigurationMismatch;
4552       case HadErrors: return HadErrors;
4553       }
4554       break;
4555 
4556     case AST_BLOCK_ID:
4557       if (!HaveReadControlBlock) {
4558         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4559           Diag(diag::err_pch_version_too_old);
4560         return VersionMismatch;
4561       }
4562 
4563       // Record that we've loaded this module.
4564       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4565       ShouldFinalizePCM = true;
4566       return Success;
4567 
4568     case UNHASHED_CONTROL_BLOCK_ID:
4569       // This block is handled using look-ahead during ReadControlBlock.  We
4570       // shouldn't get here!
4571       Error("malformed block record in AST file");
4572       return Failure;
4573 
4574     default:
4575       if (llvm::Error Err = Stream.SkipBlock()) {
4576         Error(std::move(Err));
4577         return Failure;
4578       }
4579       break;
4580     }
4581   }
4582 
4583   llvm_unreachable("unexpected break; expected return");
4584 }
4585 
4586 ASTReader::ASTReadResult
4587 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4588                                     unsigned ClientLoadCapabilities) {
4589   const HeaderSearchOptions &HSOpts =
4590       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4591   bool AllowCompatibleConfigurationMismatch =
4592       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4593 
4594   ASTReadResult Result = readUnhashedControlBlockImpl(
4595       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4596       Listener.get(),
4597       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4598 
4599   // If F was directly imported by another module, it's implicitly validated by
4600   // the importing module.
4601   if (DisableValidation || WasImportedBy ||
4602       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4603     return Success;
4604 
4605   if (Result == Failure) {
4606     Error("malformed block record in AST file");
4607     return Failure;
4608   }
4609 
4610   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4611     // If this module has already been finalized in the ModuleCache, we're stuck
4612     // with it; we can only load a single version of each module.
4613     //
4614     // This can happen when a module is imported in two contexts: in one, as a
4615     // user module; in another, as a system module (due to an import from
4616     // another module marked with the [system] flag).  It usually indicates a
4617     // bug in the module map: this module should also be marked with [system].
4618     //
4619     // If -Wno-system-headers (the default), and the first import is as a
4620     // system module, then validation will fail during the as-user import,
4621     // since -Werror flags won't have been validated.  However, it's reasonable
4622     // to treat this consistently as a system module.
4623     //
4624     // If -Wsystem-headers, the PCM on disk was built with
4625     // -Wno-system-headers, and the first import is as a user module, then
4626     // validation will fail during the as-system import since the PCM on disk
4627     // doesn't guarantee that -Werror was respected.  However, the -Werror
4628     // flags were checked during the initial as-user import.
4629     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4630       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4631       return Success;
4632     }
4633   }
4634 
4635   return Result;
4636 }
4637 
4638 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4639     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4640     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4641     bool ValidateDiagnosticOptions) {
4642   // Initialize a stream.
4643   BitstreamCursor Stream(StreamData);
4644 
4645   // Sniff for the signature.
4646   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4647     // FIXME this drops the error on the floor.
4648     consumeError(std::move(Err));
4649     return Failure;
4650   }
4651 
4652   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4653   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4654     return Failure;
4655 
4656   // Read all of the records in the options block.
4657   RecordData Record;
4658   ASTReadResult Result = Success;
4659   while (true) {
4660     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4661     if (!MaybeEntry) {
4662       // FIXME this drops the error on the floor.
4663       consumeError(MaybeEntry.takeError());
4664       return Failure;
4665     }
4666     llvm::BitstreamEntry Entry = MaybeEntry.get();
4667 
4668     switch (Entry.Kind) {
4669     case llvm::BitstreamEntry::Error:
4670     case llvm::BitstreamEntry::SubBlock:
4671       return Failure;
4672 
4673     case llvm::BitstreamEntry::EndBlock:
4674       return Result;
4675 
4676     case llvm::BitstreamEntry::Record:
4677       // The interesting case.
4678       break;
4679     }
4680 
4681     // Read and process a record.
4682     Record.clear();
4683     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4684     if (!MaybeRecordType) {
4685       // FIXME this drops the error.
4686       return Failure;
4687     }
4688     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4689     case SIGNATURE:
4690       if (F)
4691         std::copy(Record.begin(), Record.end(), F->Signature.data());
4692       break;
4693     case DIAGNOSTIC_OPTIONS: {
4694       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4695       if (Listener && ValidateDiagnosticOptions &&
4696           !AllowCompatibleConfigurationMismatch &&
4697           ParseDiagnosticOptions(Record, Complain, *Listener))
4698         Result = OutOfDate; // Don't return early.  Read the signature.
4699       break;
4700     }
4701     case DIAG_PRAGMA_MAPPINGS:
4702       if (!F)
4703         break;
4704       if (F->PragmaDiagMappings.empty())
4705         F->PragmaDiagMappings.swap(Record);
4706       else
4707         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4708                                      Record.begin(), Record.end());
4709       break;
4710     }
4711   }
4712 }
4713 
4714 /// Parse a record and blob containing module file extension metadata.
4715 static bool parseModuleFileExtensionMetadata(
4716               const SmallVectorImpl<uint64_t> &Record,
4717               StringRef Blob,
4718               ModuleFileExtensionMetadata &Metadata) {
4719   if (Record.size() < 4) return true;
4720 
4721   Metadata.MajorVersion = Record[0];
4722   Metadata.MinorVersion = Record[1];
4723 
4724   unsigned BlockNameLen = Record[2];
4725   unsigned UserInfoLen = Record[3];
4726 
4727   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4728 
4729   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4730   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4731                                   Blob.data() + BlockNameLen + UserInfoLen);
4732   return false;
4733 }
4734 
4735 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4736   BitstreamCursor &Stream = F.Stream;
4737 
4738   RecordData Record;
4739   while (true) {
4740     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4741     if (!MaybeEntry) {
4742       Error(MaybeEntry.takeError());
4743       return Failure;
4744     }
4745     llvm::BitstreamEntry Entry = MaybeEntry.get();
4746 
4747     switch (Entry.Kind) {
4748     case llvm::BitstreamEntry::SubBlock:
4749       if (llvm::Error Err = Stream.SkipBlock()) {
4750         Error(std::move(Err));
4751         return Failure;
4752       }
4753       continue;
4754 
4755     case llvm::BitstreamEntry::EndBlock:
4756       return Success;
4757 
4758     case llvm::BitstreamEntry::Error:
4759       return HadErrors;
4760 
4761     case llvm::BitstreamEntry::Record:
4762       break;
4763     }
4764 
4765     Record.clear();
4766     StringRef Blob;
4767     Expected<unsigned> MaybeRecCode =
4768         Stream.readRecord(Entry.ID, Record, &Blob);
4769     if (!MaybeRecCode) {
4770       Error(MaybeRecCode.takeError());
4771       return Failure;
4772     }
4773     switch (MaybeRecCode.get()) {
4774     case EXTENSION_METADATA: {
4775       ModuleFileExtensionMetadata Metadata;
4776       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4777         return Failure;
4778 
4779       // Find a module file extension with this block name.
4780       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4781       if (Known == ModuleFileExtensions.end()) break;
4782 
4783       // Form a reader.
4784       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4785                                                              F, Stream)) {
4786         F.ExtensionReaders.push_back(std::move(Reader));
4787       }
4788 
4789       break;
4790     }
4791     }
4792   }
4793 
4794   return Success;
4795 }
4796 
4797 void ASTReader::InitializeContext() {
4798   assert(ContextObj && "no context to initialize");
4799   ASTContext &Context = *ContextObj;
4800 
4801   // If there's a listener, notify them that we "read" the translation unit.
4802   if (DeserializationListener)
4803     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4804                                       Context.getTranslationUnitDecl());
4805 
4806   // FIXME: Find a better way to deal with collisions between these
4807   // built-in types. Right now, we just ignore the problem.
4808 
4809   // Load the special types.
4810   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4811     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4812       if (!Context.CFConstantStringTypeDecl)
4813         Context.setCFConstantStringType(GetType(String));
4814     }
4815 
4816     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4817       QualType FileType = GetType(File);
4818       if (FileType.isNull()) {
4819         Error("FILE type is NULL");
4820         return;
4821       }
4822 
4823       if (!Context.FILEDecl) {
4824         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4825           Context.setFILEDecl(Typedef->getDecl());
4826         else {
4827           const TagType *Tag = FileType->getAs<TagType>();
4828           if (!Tag) {
4829             Error("Invalid FILE type in AST file");
4830             return;
4831           }
4832           Context.setFILEDecl(Tag->getDecl());
4833         }
4834       }
4835     }
4836 
4837     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4838       QualType Jmp_bufType = GetType(Jmp_buf);
4839       if (Jmp_bufType.isNull()) {
4840         Error("jmp_buf type is NULL");
4841         return;
4842       }
4843 
4844       if (!Context.jmp_bufDecl) {
4845         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4846           Context.setjmp_bufDecl(Typedef->getDecl());
4847         else {
4848           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4849           if (!Tag) {
4850             Error("Invalid jmp_buf type in AST file");
4851             return;
4852           }
4853           Context.setjmp_bufDecl(Tag->getDecl());
4854         }
4855       }
4856     }
4857 
4858     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4859       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4860       if (Sigjmp_bufType.isNull()) {
4861         Error("sigjmp_buf type is NULL");
4862         return;
4863       }
4864 
4865       if (!Context.sigjmp_bufDecl) {
4866         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4867           Context.setsigjmp_bufDecl(Typedef->getDecl());
4868         else {
4869           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4870           assert(Tag && "Invalid sigjmp_buf type in AST file");
4871           Context.setsigjmp_bufDecl(Tag->getDecl());
4872         }
4873       }
4874     }
4875 
4876     if (unsigned ObjCIdRedef
4877           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4878       if (Context.ObjCIdRedefinitionType.isNull())
4879         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4880     }
4881 
4882     if (unsigned ObjCClassRedef
4883           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4884       if (Context.ObjCClassRedefinitionType.isNull())
4885         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4886     }
4887 
4888     if (unsigned ObjCSelRedef
4889           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4890       if (Context.ObjCSelRedefinitionType.isNull())
4891         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4892     }
4893 
4894     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4895       QualType Ucontext_tType = GetType(Ucontext_t);
4896       if (Ucontext_tType.isNull()) {
4897         Error("ucontext_t type is NULL");
4898         return;
4899       }
4900 
4901       if (!Context.ucontext_tDecl) {
4902         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4903           Context.setucontext_tDecl(Typedef->getDecl());
4904         else {
4905           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4906           assert(Tag && "Invalid ucontext_t type in AST file");
4907           Context.setucontext_tDecl(Tag->getDecl());
4908         }
4909       }
4910     }
4911   }
4912 
4913   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4914 
4915   // If there were any CUDA special declarations, deserialize them.
4916   if (!CUDASpecialDeclRefs.empty()) {
4917     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4918     Context.setcudaConfigureCallDecl(
4919                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4920   }
4921 
4922   // Re-export any modules that were imported by a non-module AST file.
4923   // FIXME: This does not make macro-only imports visible again.
4924   for (auto &Import : ImportedModules) {
4925     if (Module *Imported = getSubmodule(Import.ID)) {
4926       makeModuleVisible(Imported, Module::AllVisible,
4927                         /*ImportLoc=*/Import.ImportLoc);
4928       if (Import.ImportLoc.isValid())
4929         PP.makeModuleVisible(Imported, Import.ImportLoc);
4930       // FIXME: should we tell Sema to make the module visible too?
4931     }
4932   }
4933   ImportedModules.clear();
4934 }
4935 
4936 void ASTReader::finalizeForWriting() {
4937   // Nothing to do for now.
4938 }
4939 
4940 /// Reads and return the signature record from \p PCH's control block, or
4941 /// else returns 0.
4942 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4943   BitstreamCursor Stream(PCH);
4944   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4945     // FIXME this drops the error on the floor.
4946     consumeError(std::move(Err));
4947     return ASTFileSignature();
4948   }
4949 
4950   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4951   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4952     return ASTFileSignature();
4953 
4954   // Scan for SIGNATURE inside the diagnostic options block.
4955   ASTReader::RecordData Record;
4956   while (true) {
4957     Expected<llvm::BitstreamEntry> MaybeEntry =
4958         Stream.advanceSkippingSubblocks();
4959     if (!MaybeEntry) {
4960       // FIXME this drops the error on the floor.
4961       consumeError(MaybeEntry.takeError());
4962       return ASTFileSignature();
4963     }
4964     llvm::BitstreamEntry Entry = MaybeEntry.get();
4965 
4966     if (Entry.Kind != llvm::BitstreamEntry::Record)
4967       return ASTFileSignature();
4968 
4969     Record.clear();
4970     StringRef Blob;
4971     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
4972     if (!MaybeRecord) {
4973       // FIXME this drops the error on the floor.
4974       consumeError(MaybeRecord.takeError());
4975       return ASTFileSignature();
4976     }
4977     if (SIGNATURE == MaybeRecord.get())
4978       return {{{(uint32_t)Record[0], (uint32_t)Record[1], (uint32_t)Record[2],
4979                 (uint32_t)Record[3], (uint32_t)Record[4]}}};
4980   }
4981 }
4982 
4983 /// Retrieve the name of the original source file name
4984 /// directly from the AST file, without actually loading the AST
4985 /// file.
4986 std::string ASTReader::getOriginalSourceFile(
4987     const std::string &ASTFileName, FileManager &FileMgr,
4988     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
4989   // Open the AST file.
4990   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
4991   if (!Buffer) {
4992     Diags.Report(diag::err_fe_unable_to_read_pch_file)
4993         << ASTFileName << Buffer.getError().message();
4994     return std::string();
4995   }
4996 
4997   // Initialize the stream
4998   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
4999 
5000   // Sniff for the signature.
5001   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5002     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5003     return std::string();
5004   }
5005 
5006   // Scan for the CONTROL_BLOCK_ID block.
5007   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5008     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5009     return std::string();
5010   }
5011 
5012   // Scan for ORIGINAL_FILE inside the control block.
5013   RecordData Record;
5014   while (true) {
5015     Expected<llvm::BitstreamEntry> MaybeEntry =
5016         Stream.advanceSkippingSubblocks();
5017     if (!MaybeEntry) {
5018       // FIXME this drops errors on the floor.
5019       consumeError(MaybeEntry.takeError());
5020       return std::string();
5021     }
5022     llvm::BitstreamEntry Entry = MaybeEntry.get();
5023 
5024     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5025       return std::string();
5026 
5027     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5028       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5029       return std::string();
5030     }
5031 
5032     Record.clear();
5033     StringRef Blob;
5034     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5035     if (!MaybeRecord) {
5036       // FIXME this drops the errors on the floor.
5037       consumeError(MaybeRecord.takeError());
5038       return std::string();
5039     }
5040     if (ORIGINAL_FILE == MaybeRecord.get())
5041       return Blob.str();
5042   }
5043 }
5044 
5045 namespace {
5046 
5047   class SimplePCHValidator : public ASTReaderListener {
5048     const LangOptions &ExistingLangOpts;
5049     const TargetOptions &ExistingTargetOpts;
5050     const PreprocessorOptions &ExistingPPOpts;
5051     std::string ExistingModuleCachePath;
5052     FileManager &FileMgr;
5053 
5054   public:
5055     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5056                        const TargetOptions &ExistingTargetOpts,
5057                        const PreprocessorOptions &ExistingPPOpts,
5058                        StringRef ExistingModuleCachePath,
5059                        FileManager &FileMgr)
5060       : ExistingLangOpts(ExistingLangOpts),
5061         ExistingTargetOpts(ExistingTargetOpts),
5062         ExistingPPOpts(ExistingPPOpts),
5063         ExistingModuleCachePath(ExistingModuleCachePath),
5064         FileMgr(FileMgr) {}
5065 
5066     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5067                              bool AllowCompatibleDifferences) override {
5068       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5069                                   AllowCompatibleDifferences);
5070     }
5071 
5072     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5073                            bool AllowCompatibleDifferences) override {
5074       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5075                                 AllowCompatibleDifferences);
5076     }
5077 
5078     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5079                                  StringRef SpecificModuleCachePath,
5080                                  bool Complain) override {
5081       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5082                                       ExistingModuleCachePath,
5083                                       nullptr, ExistingLangOpts);
5084     }
5085 
5086     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5087                                  bool Complain,
5088                                  std::string &SuggestedPredefines) override {
5089       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5090                                       SuggestedPredefines, ExistingLangOpts);
5091     }
5092   };
5093 
5094 } // namespace
5095 
5096 bool ASTReader::readASTFileControlBlock(
5097     StringRef Filename, FileManager &FileMgr,
5098     const PCHContainerReader &PCHContainerRdr,
5099     bool FindModuleFileExtensions,
5100     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5101   // Open the AST file.
5102   // FIXME: This allows use of the VFS; we do not allow use of the
5103   // VFS when actually loading a module.
5104   auto Buffer = FileMgr.getBufferForFile(Filename);
5105   if (!Buffer) {
5106     return true;
5107   }
5108 
5109   // Initialize the stream
5110   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5111   BitstreamCursor Stream(Bytes);
5112 
5113   // Sniff for the signature.
5114   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5115     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5116     return true;
5117   }
5118 
5119   // Scan for the CONTROL_BLOCK_ID block.
5120   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5121     return true;
5122 
5123   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5124   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5125   bool NeedsImports = Listener.needsImportVisitation();
5126   BitstreamCursor InputFilesCursor;
5127 
5128   RecordData Record;
5129   std::string ModuleDir;
5130   bool DoneWithControlBlock = false;
5131   while (!DoneWithControlBlock) {
5132     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5133     if (!MaybeEntry) {
5134       // FIXME this drops the error on the floor.
5135       consumeError(MaybeEntry.takeError());
5136       return true;
5137     }
5138     llvm::BitstreamEntry Entry = MaybeEntry.get();
5139 
5140     switch (Entry.Kind) {
5141     case llvm::BitstreamEntry::SubBlock: {
5142       switch (Entry.ID) {
5143       case OPTIONS_BLOCK_ID: {
5144         std::string IgnoredSuggestedPredefines;
5145         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5146                              /*AllowCompatibleConfigurationMismatch*/ false,
5147                              Listener, IgnoredSuggestedPredefines) != Success)
5148           return true;
5149         break;
5150       }
5151 
5152       case INPUT_FILES_BLOCK_ID:
5153         InputFilesCursor = Stream;
5154         if (llvm::Error Err = Stream.SkipBlock()) {
5155           // FIXME this drops the error on the floor.
5156           consumeError(std::move(Err));
5157           return true;
5158         }
5159         if (NeedsInputFiles &&
5160             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5161           return true;
5162         break;
5163 
5164       default:
5165         if (llvm::Error Err = Stream.SkipBlock()) {
5166           // FIXME this drops the error on the floor.
5167           consumeError(std::move(Err));
5168           return true;
5169         }
5170         break;
5171       }
5172 
5173       continue;
5174     }
5175 
5176     case llvm::BitstreamEntry::EndBlock:
5177       DoneWithControlBlock = true;
5178       break;
5179 
5180     case llvm::BitstreamEntry::Error:
5181       return true;
5182 
5183     case llvm::BitstreamEntry::Record:
5184       break;
5185     }
5186 
5187     if (DoneWithControlBlock) break;
5188 
5189     Record.clear();
5190     StringRef Blob;
5191     Expected<unsigned> MaybeRecCode =
5192         Stream.readRecord(Entry.ID, Record, &Blob);
5193     if (!MaybeRecCode) {
5194       // FIXME this drops the error.
5195       return Failure;
5196     }
5197     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5198     case METADATA:
5199       if (Record[0] != VERSION_MAJOR)
5200         return true;
5201       if (Listener.ReadFullVersionInformation(Blob))
5202         return true;
5203       break;
5204     case MODULE_NAME:
5205       Listener.ReadModuleName(Blob);
5206       break;
5207     case MODULE_DIRECTORY:
5208       ModuleDir = Blob;
5209       break;
5210     case MODULE_MAP_FILE: {
5211       unsigned Idx = 0;
5212       auto Path = ReadString(Record, Idx);
5213       ResolveImportedPath(Path, ModuleDir);
5214       Listener.ReadModuleMapFile(Path);
5215       break;
5216     }
5217     case INPUT_FILE_OFFSETS: {
5218       if (!NeedsInputFiles)
5219         break;
5220 
5221       unsigned NumInputFiles = Record[0];
5222       unsigned NumUserFiles = Record[1];
5223       const llvm::support::unaligned_uint64_t *InputFileOffs =
5224           (const llvm::support::unaligned_uint64_t *)Blob.data();
5225       for (unsigned I = 0; I != NumInputFiles; ++I) {
5226         // Go find this input file.
5227         bool isSystemFile = I >= NumUserFiles;
5228 
5229         if (isSystemFile && !NeedsSystemInputFiles)
5230           break; // the rest are system input files
5231 
5232         BitstreamCursor &Cursor = InputFilesCursor;
5233         SavedStreamPosition SavedPosition(Cursor);
5234         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5235           // FIXME this drops errors on the floor.
5236           consumeError(std::move(Err));
5237         }
5238 
5239         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5240         if (!MaybeCode) {
5241           // FIXME this drops errors on the floor.
5242           consumeError(MaybeCode.takeError());
5243         }
5244         unsigned Code = MaybeCode.get();
5245 
5246         RecordData Record;
5247         StringRef Blob;
5248         bool shouldContinue = false;
5249         Expected<unsigned> MaybeRecordType =
5250             Cursor.readRecord(Code, Record, &Blob);
5251         if (!MaybeRecordType) {
5252           // FIXME this drops errors on the floor.
5253           consumeError(MaybeRecordType.takeError());
5254         }
5255         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5256         case INPUT_FILE_HASH:
5257           break;
5258         case INPUT_FILE:
5259           bool Overridden = static_cast<bool>(Record[3]);
5260           std::string Filename = Blob;
5261           ResolveImportedPath(Filename, ModuleDir);
5262           shouldContinue = Listener.visitInputFile(
5263               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5264           break;
5265         }
5266         if (!shouldContinue)
5267           break;
5268       }
5269       break;
5270     }
5271 
5272     case IMPORTS: {
5273       if (!NeedsImports)
5274         break;
5275 
5276       unsigned Idx = 0, N = Record.size();
5277       while (Idx < N) {
5278         // Read information about the AST file.
5279         Idx += 1+1+1+1+5; // Kind, ImportLoc, Size, ModTime, Signature
5280         std::string ModuleName = ReadString(Record, Idx);
5281         std::string Filename = ReadString(Record, Idx);
5282         ResolveImportedPath(Filename, ModuleDir);
5283         Listener.visitImport(ModuleName, Filename);
5284       }
5285       break;
5286     }
5287 
5288     default:
5289       // No other validation to perform.
5290       break;
5291     }
5292   }
5293 
5294   // Look for module file extension blocks, if requested.
5295   if (FindModuleFileExtensions) {
5296     BitstreamCursor SavedStream = Stream;
5297     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5298       bool DoneWithExtensionBlock = false;
5299       while (!DoneWithExtensionBlock) {
5300         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5301         if (!MaybeEntry) {
5302           // FIXME this drops the error.
5303           return true;
5304         }
5305         llvm::BitstreamEntry Entry = MaybeEntry.get();
5306 
5307         switch (Entry.Kind) {
5308         case llvm::BitstreamEntry::SubBlock:
5309           if (llvm::Error Err = Stream.SkipBlock()) {
5310             // FIXME this drops the error on the floor.
5311             consumeError(std::move(Err));
5312             return true;
5313           }
5314           continue;
5315 
5316         case llvm::BitstreamEntry::EndBlock:
5317           DoneWithExtensionBlock = true;
5318           continue;
5319 
5320         case llvm::BitstreamEntry::Error:
5321           return true;
5322 
5323         case llvm::BitstreamEntry::Record:
5324           break;
5325         }
5326 
5327        Record.clear();
5328        StringRef Blob;
5329        Expected<unsigned> MaybeRecCode =
5330            Stream.readRecord(Entry.ID, Record, &Blob);
5331        if (!MaybeRecCode) {
5332          // FIXME this drops the error.
5333          return true;
5334        }
5335        switch (MaybeRecCode.get()) {
5336        case EXTENSION_METADATA: {
5337          ModuleFileExtensionMetadata Metadata;
5338          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5339            return true;
5340 
5341          Listener.readModuleFileExtension(Metadata);
5342          break;
5343        }
5344        }
5345       }
5346     }
5347     Stream = SavedStream;
5348   }
5349 
5350   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5351   if (readUnhashedControlBlockImpl(
5352           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5353           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5354           ValidateDiagnosticOptions) != Success)
5355     return true;
5356 
5357   return false;
5358 }
5359 
5360 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5361                                     const PCHContainerReader &PCHContainerRdr,
5362                                     const LangOptions &LangOpts,
5363                                     const TargetOptions &TargetOpts,
5364                                     const PreprocessorOptions &PPOpts,
5365                                     StringRef ExistingModuleCachePath) {
5366   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5367                                ExistingModuleCachePath, FileMgr);
5368   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5369                                   /*FindModuleFileExtensions=*/false,
5370                                   validator,
5371                                   /*ValidateDiagnosticOptions=*/true);
5372 }
5373 
5374 ASTReader::ASTReadResult
5375 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5376   // Enter the submodule block.
5377   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5378     Error(std::move(Err));
5379     return Failure;
5380   }
5381 
5382   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5383   bool First = true;
5384   Module *CurrentModule = nullptr;
5385   RecordData Record;
5386   while (true) {
5387     Expected<llvm::BitstreamEntry> MaybeEntry =
5388         F.Stream.advanceSkippingSubblocks();
5389     if (!MaybeEntry) {
5390       Error(MaybeEntry.takeError());
5391       return Failure;
5392     }
5393     llvm::BitstreamEntry Entry = MaybeEntry.get();
5394 
5395     switch (Entry.Kind) {
5396     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5397     case llvm::BitstreamEntry::Error:
5398       Error("malformed block record in AST file");
5399       return Failure;
5400     case llvm::BitstreamEntry::EndBlock:
5401       return Success;
5402     case llvm::BitstreamEntry::Record:
5403       // The interesting case.
5404       break;
5405     }
5406 
5407     // Read a record.
5408     StringRef Blob;
5409     Record.clear();
5410     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5411     if (!MaybeKind) {
5412       Error(MaybeKind.takeError());
5413       return Failure;
5414     }
5415     unsigned Kind = MaybeKind.get();
5416 
5417     if ((Kind == SUBMODULE_METADATA) != First) {
5418       Error("submodule metadata record should be at beginning of block");
5419       return Failure;
5420     }
5421     First = false;
5422 
5423     // Submodule information is only valid if we have a current module.
5424     // FIXME: Should we error on these cases?
5425     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5426         Kind != SUBMODULE_DEFINITION)
5427       continue;
5428 
5429     switch (Kind) {
5430     default:  // Default behavior: ignore.
5431       break;
5432 
5433     case SUBMODULE_DEFINITION: {
5434       if (Record.size() < 12) {
5435         Error("malformed module definition");
5436         return Failure;
5437       }
5438 
5439       StringRef Name = Blob;
5440       unsigned Idx = 0;
5441       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5442       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5443       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5444       bool IsFramework = Record[Idx++];
5445       bool IsExplicit = Record[Idx++];
5446       bool IsSystem = Record[Idx++];
5447       bool IsExternC = Record[Idx++];
5448       bool InferSubmodules = Record[Idx++];
5449       bool InferExplicitSubmodules = Record[Idx++];
5450       bool InferExportWildcard = Record[Idx++];
5451       bool ConfigMacrosExhaustive = Record[Idx++];
5452       bool ModuleMapIsPrivate = Record[Idx++];
5453 
5454       Module *ParentModule = nullptr;
5455       if (Parent)
5456         ParentModule = getSubmodule(Parent);
5457 
5458       // Retrieve this (sub)module from the module map, creating it if
5459       // necessary.
5460       CurrentModule =
5461           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5462               .first;
5463 
5464       // FIXME: set the definition loc for CurrentModule, or call
5465       // ModMap.setInferredModuleAllowedBy()
5466 
5467       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5468       if (GlobalIndex >= SubmodulesLoaded.size() ||
5469           SubmodulesLoaded[GlobalIndex]) {
5470         Error("too many submodules");
5471         return Failure;
5472       }
5473 
5474       if (!ParentModule) {
5475         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5476           // Don't emit module relocation error if we have -fno-validate-pch
5477           if (!PP.getPreprocessorOpts().DisablePCHValidation &&
5478               CurFile != F.File) {
5479             if (!Diags.isDiagnosticInFlight()) {
5480               Diag(diag::err_module_file_conflict)
5481                 << CurrentModule->getTopLevelModuleName()
5482                 << CurFile->getName()
5483                 << F.File->getName();
5484             }
5485             return Failure;
5486           }
5487         }
5488 
5489         CurrentModule->setASTFile(F.File);
5490         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5491       }
5492 
5493       CurrentModule->Kind = Kind;
5494       CurrentModule->Signature = F.Signature;
5495       CurrentModule->IsFromModuleFile = true;
5496       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5497       CurrentModule->IsExternC = IsExternC;
5498       CurrentModule->InferSubmodules = InferSubmodules;
5499       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5500       CurrentModule->InferExportWildcard = InferExportWildcard;
5501       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5502       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5503       if (DeserializationListener)
5504         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5505 
5506       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5507 
5508       // Clear out data that will be replaced by what is in the module file.
5509       CurrentModule->LinkLibraries.clear();
5510       CurrentModule->ConfigMacros.clear();
5511       CurrentModule->UnresolvedConflicts.clear();
5512       CurrentModule->Conflicts.clear();
5513 
5514       // The module is available unless it's missing a requirement; relevant
5515       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5516       // Missing headers that were present when the module was built do not
5517       // make it unavailable -- if we got this far, this must be an explicitly
5518       // imported module file.
5519       CurrentModule->Requirements.clear();
5520       CurrentModule->MissingHeaders.clear();
5521       CurrentModule->IsMissingRequirement =
5522           ParentModule && ParentModule->IsMissingRequirement;
5523       CurrentModule->IsAvailable = !CurrentModule->IsMissingRequirement;
5524       break;
5525     }
5526 
5527     case SUBMODULE_UMBRELLA_HEADER: {
5528       std::string Filename = Blob;
5529       ResolveImportedPath(F, Filename);
5530       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5531         if (!CurrentModule->getUmbrellaHeader())
5532           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5533         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5534           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5535             Error("mismatched umbrella headers in submodule");
5536           return OutOfDate;
5537         }
5538       }
5539       break;
5540     }
5541 
5542     case SUBMODULE_HEADER:
5543     case SUBMODULE_EXCLUDED_HEADER:
5544     case SUBMODULE_PRIVATE_HEADER:
5545       // We lazily associate headers with their modules via the HeaderInfo table.
5546       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5547       // of complete filenames or remove it entirely.
5548       break;
5549 
5550     case SUBMODULE_TEXTUAL_HEADER:
5551     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5552       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5553       // them here.
5554       break;
5555 
5556     case SUBMODULE_TOPHEADER:
5557       CurrentModule->addTopHeaderFilename(Blob);
5558       break;
5559 
5560     case SUBMODULE_UMBRELLA_DIR: {
5561       std::string Dirname = Blob;
5562       ResolveImportedPath(F, Dirname);
5563       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5564         if (!CurrentModule->getUmbrellaDir())
5565           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5566         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5567           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5568             Error("mismatched umbrella directories in submodule");
5569           return OutOfDate;
5570         }
5571       }
5572       break;
5573     }
5574 
5575     case SUBMODULE_METADATA: {
5576       F.BaseSubmoduleID = getTotalNumSubmodules();
5577       F.LocalNumSubmodules = Record[0];
5578       unsigned LocalBaseSubmoduleID = Record[1];
5579       if (F.LocalNumSubmodules > 0) {
5580         // Introduce the global -> local mapping for submodules within this
5581         // module.
5582         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5583 
5584         // Introduce the local -> global mapping for submodules within this
5585         // module.
5586         F.SubmoduleRemap.insertOrReplace(
5587           std::make_pair(LocalBaseSubmoduleID,
5588                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5589 
5590         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5591       }
5592       break;
5593     }
5594 
5595     case SUBMODULE_IMPORTS:
5596       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5597         UnresolvedModuleRef Unresolved;
5598         Unresolved.File = &F;
5599         Unresolved.Mod = CurrentModule;
5600         Unresolved.ID = Record[Idx];
5601         Unresolved.Kind = UnresolvedModuleRef::Import;
5602         Unresolved.IsWildcard = false;
5603         UnresolvedModuleRefs.push_back(Unresolved);
5604       }
5605       break;
5606 
5607     case SUBMODULE_EXPORTS:
5608       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5609         UnresolvedModuleRef Unresolved;
5610         Unresolved.File = &F;
5611         Unresolved.Mod = CurrentModule;
5612         Unresolved.ID = Record[Idx];
5613         Unresolved.Kind = UnresolvedModuleRef::Export;
5614         Unresolved.IsWildcard = Record[Idx + 1];
5615         UnresolvedModuleRefs.push_back(Unresolved);
5616       }
5617 
5618       // Once we've loaded the set of exports, there's no reason to keep
5619       // the parsed, unresolved exports around.
5620       CurrentModule->UnresolvedExports.clear();
5621       break;
5622 
5623     case SUBMODULE_REQUIRES:
5624       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5625                                     PP.getTargetInfo());
5626       break;
5627 
5628     case SUBMODULE_LINK_LIBRARY:
5629       ModMap.resolveLinkAsDependencies(CurrentModule);
5630       CurrentModule->LinkLibraries.push_back(
5631                                          Module::LinkLibrary(Blob, Record[0]));
5632       break;
5633 
5634     case SUBMODULE_CONFIG_MACRO:
5635       CurrentModule->ConfigMacros.push_back(Blob.str());
5636       break;
5637 
5638     case SUBMODULE_CONFLICT: {
5639       UnresolvedModuleRef Unresolved;
5640       Unresolved.File = &F;
5641       Unresolved.Mod = CurrentModule;
5642       Unresolved.ID = Record[0];
5643       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5644       Unresolved.IsWildcard = false;
5645       Unresolved.String = Blob;
5646       UnresolvedModuleRefs.push_back(Unresolved);
5647       break;
5648     }
5649 
5650     case SUBMODULE_INITIALIZERS: {
5651       if (!ContextObj)
5652         break;
5653       SmallVector<uint32_t, 16> Inits;
5654       for (auto &ID : Record)
5655         Inits.push_back(getGlobalDeclID(F, ID));
5656       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5657       break;
5658     }
5659 
5660     case SUBMODULE_EXPORT_AS:
5661       CurrentModule->ExportAsModule = Blob.str();
5662       ModMap.addLinkAsDependency(CurrentModule);
5663       break;
5664     }
5665   }
5666 }
5667 
5668 /// Parse the record that corresponds to a LangOptions data
5669 /// structure.
5670 ///
5671 /// This routine parses the language options from the AST file and then gives
5672 /// them to the AST listener if one is set.
5673 ///
5674 /// \returns true if the listener deems the file unacceptable, false otherwise.
5675 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5676                                      bool Complain,
5677                                      ASTReaderListener &Listener,
5678                                      bool AllowCompatibleDifferences) {
5679   LangOptions LangOpts;
5680   unsigned Idx = 0;
5681 #define LANGOPT(Name, Bits, Default, Description) \
5682   LangOpts.Name = Record[Idx++];
5683 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5684   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5685 #include "clang/Basic/LangOptions.def"
5686 #define SANITIZER(NAME, ID)                                                    \
5687   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5688 #include "clang/Basic/Sanitizers.def"
5689 
5690   for (unsigned N = Record[Idx++]; N; --N)
5691     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5692 
5693   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5694   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5695   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5696 
5697   LangOpts.CurrentModule = ReadString(Record, Idx);
5698 
5699   // Comment options.
5700   for (unsigned N = Record[Idx++]; N; --N) {
5701     LangOpts.CommentOpts.BlockCommandNames.push_back(
5702       ReadString(Record, Idx));
5703   }
5704   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5705 
5706   // OpenMP offloading options.
5707   for (unsigned N = Record[Idx++]; N; --N) {
5708     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5709   }
5710 
5711   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5712 
5713   return Listener.ReadLanguageOptions(LangOpts, Complain,
5714                                       AllowCompatibleDifferences);
5715 }
5716 
5717 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5718                                    ASTReaderListener &Listener,
5719                                    bool AllowCompatibleDifferences) {
5720   unsigned Idx = 0;
5721   TargetOptions TargetOpts;
5722   TargetOpts.Triple = ReadString(Record, Idx);
5723   TargetOpts.CPU = ReadString(Record, Idx);
5724   TargetOpts.ABI = ReadString(Record, Idx);
5725   for (unsigned N = Record[Idx++]; N; --N) {
5726     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5727   }
5728   for (unsigned N = Record[Idx++]; N; --N) {
5729     TargetOpts.Features.push_back(ReadString(Record, Idx));
5730   }
5731 
5732   return Listener.ReadTargetOptions(TargetOpts, Complain,
5733                                     AllowCompatibleDifferences);
5734 }
5735 
5736 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5737                                        ASTReaderListener &Listener) {
5738   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5739   unsigned Idx = 0;
5740 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5741 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5742   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5743 #include "clang/Basic/DiagnosticOptions.def"
5744 
5745   for (unsigned N = Record[Idx++]; N; --N)
5746     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5747   for (unsigned N = Record[Idx++]; N; --N)
5748     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5749 
5750   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5751 }
5752 
5753 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5754                                        ASTReaderListener &Listener) {
5755   FileSystemOptions FSOpts;
5756   unsigned Idx = 0;
5757   FSOpts.WorkingDir = ReadString(Record, Idx);
5758   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5759 }
5760 
5761 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5762                                          bool Complain,
5763                                          ASTReaderListener &Listener) {
5764   HeaderSearchOptions HSOpts;
5765   unsigned Idx = 0;
5766   HSOpts.Sysroot = ReadString(Record, Idx);
5767 
5768   // Include entries.
5769   for (unsigned N = Record[Idx++]; N; --N) {
5770     std::string Path = ReadString(Record, Idx);
5771     frontend::IncludeDirGroup Group
5772       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5773     bool IsFramework = Record[Idx++];
5774     bool IgnoreSysRoot = Record[Idx++];
5775     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5776                                     IgnoreSysRoot);
5777   }
5778 
5779   // System header prefixes.
5780   for (unsigned N = Record[Idx++]; N; --N) {
5781     std::string Prefix = ReadString(Record, Idx);
5782     bool IsSystemHeader = Record[Idx++];
5783     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5784   }
5785 
5786   HSOpts.ResourceDir = ReadString(Record, Idx);
5787   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5788   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5789   HSOpts.DisableModuleHash = Record[Idx++];
5790   HSOpts.ImplicitModuleMaps = Record[Idx++];
5791   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5792   HSOpts.UseBuiltinIncludes = Record[Idx++];
5793   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5794   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5795   HSOpts.UseLibcxx = Record[Idx++];
5796   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5797 
5798   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5799                                           Complain);
5800 }
5801 
5802 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5803                                          bool Complain,
5804                                          ASTReaderListener &Listener,
5805                                          std::string &SuggestedPredefines) {
5806   PreprocessorOptions PPOpts;
5807   unsigned Idx = 0;
5808 
5809   // Macro definitions/undefs
5810   for (unsigned N = Record[Idx++]; N; --N) {
5811     std::string Macro = ReadString(Record, Idx);
5812     bool IsUndef = Record[Idx++];
5813     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5814   }
5815 
5816   // Includes
5817   for (unsigned N = Record[Idx++]; N; --N) {
5818     PPOpts.Includes.push_back(ReadString(Record, Idx));
5819   }
5820 
5821   // Macro Includes
5822   for (unsigned N = Record[Idx++]; N; --N) {
5823     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5824   }
5825 
5826   PPOpts.UsePredefines = Record[Idx++];
5827   PPOpts.DetailedRecord = Record[Idx++];
5828   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5829   PPOpts.ObjCXXARCStandardLibrary =
5830     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5831   SuggestedPredefines.clear();
5832   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5833                                           SuggestedPredefines);
5834 }
5835 
5836 std::pair<ModuleFile *, unsigned>
5837 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5838   GlobalPreprocessedEntityMapType::iterator
5839   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5840   assert(I != GlobalPreprocessedEntityMap.end() &&
5841          "Corrupted global preprocessed entity map");
5842   ModuleFile *M = I->second;
5843   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5844   return std::make_pair(M, LocalIndex);
5845 }
5846 
5847 llvm::iterator_range<PreprocessingRecord::iterator>
5848 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5849   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5850     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5851                                              Mod.NumPreprocessedEntities);
5852 
5853   return llvm::make_range(PreprocessingRecord::iterator(),
5854                           PreprocessingRecord::iterator());
5855 }
5856 
5857 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5858 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5859   return llvm::make_range(
5860       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5861       ModuleDeclIterator(this, &Mod,
5862                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5863 }
5864 
5865 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5866   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5867   assert(I != GlobalSkippedRangeMap.end() &&
5868     "Corrupted global skipped range map");
5869   ModuleFile *M = I->second;
5870   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5871   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5872   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5873   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5874                     TranslateSourceLocation(*M, RawRange.getEnd()));
5875   assert(Range.isValid());
5876   return Range;
5877 }
5878 
5879 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5880   PreprocessedEntityID PPID = Index+1;
5881   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5882   ModuleFile &M = *PPInfo.first;
5883   unsigned LocalIndex = PPInfo.second;
5884   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5885 
5886   if (!PP.getPreprocessingRecord()) {
5887     Error("no preprocessing record");
5888     return nullptr;
5889   }
5890 
5891   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5892   if (llvm::Error Err =
5893           M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset)) {
5894     Error(std::move(Err));
5895     return nullptr;
5896   }
5897 
5898   Expected<llvm::BitstreamEntry> MaybeEntry =
5899       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5900   if (!MaybeEntry) {
5901     Error(MaybeEntry.takeError());
5902     return nullptr;
5903   }
5904   llvm::BitstreamEntry Entry = MaybeEntry.get();
5905 
5906   if (Entry.Kind != llvm::BitstreamEntry::Record)
5907     return nullptr;
5908 
5909   // Read the record.
5910   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5911                     TranslateSourceLocation(M, PPOffs.getEnd()));
5912   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5913   StringRef Blob;
5914   RecordData Record;
5915   Expected<unsigned> MaybeRecType =
5916       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5917   if (!MaybeRecType) {
5918     Error(MaybeRecType.takeError());
5919     return nullptr;
5920   }
5921   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5922   case PPD_MACRO_EXPANSION: {
5923     bool isBuiltin = Record[0];
5924     IdentifierInfo *Name = nullptr;
5925     MacroDefinitionRecord *Def = nullptr;
5926     if (isBuiltin)
5927       Name = getLocalIdentifier(M, Record[1]);
5928     else {
5929       PreprocessedEntityID GlobalID =
5930           getGlobalPreprocessedEntityID(M, Record[1]);
5931       Def = cast<MacroDefinitionRecord>(
5932           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5933     }
5934 
5935     MacroExpansion *ME;
5936     if (isBuiltin)
5937       ME = new (PPRec) MacroExpansion(Name, Range);
5938     else
5939       ME = new (PPRec) MacroExpansion(Def, Range);
5940 
5941     return ME;
5942   }
5943 
5944   case PPD_MACRO_DEFINITION: {
5945     // Decode the identifier info and then check again; if the macro is
5946     // still defined and associated with the identifier,
5947     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
5948     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
5949 
5950     if (DeserializationListener)
5951       DeserializationListener->MacroDefinitionRead(PPID, MD);
5952 
5953     return MD;
5954   }
5955 
5956   case PPD_INCLUSION_DIRECTIVE: {
5957     const char *FullFileNameStart = Blob.data() + Record[0];
5958     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
5959     const FileEntry *File = nullptr;
5960     if (!FullFileName.empty())
5961       if (auto FE = PP.getFileManager().getFile(FullFileName))
5962         File = *FE;
5963 
5964     // FIXME: Stable encoding
5965     InclusionDirective::InclusionKind Kind
5966       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
5967     InclusionDirective *ID
5968       = new (PPRec) InclusionDirective(PPRec, Kind,
5969                                        StringRef(Blob.data(), Record[0]),
5970                                        Record[1], Record[3],
5971                                        File,
5972                                        Range);
5973     return ID;
5974   }
5975   }
5976 
5977   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
5978 }
5979 
5980 /// Find the next module that contains entities and return the ID
5981 /// of the first entry.
5982 ///
5983 /// \param SLocMapI points at a chunk of a module that contains no
5984 /// preprocessed entities or the entities it contains are not the ones we are
5985 /// looking for.
5986 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
5987                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
5988   ++SLocMapI;
5989   for (GlobalSLocOffsetMapType::const_iterator
5990          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
5991     ModuleFile &M = *SLocMapI->second;
5992     if (M.NumPreprocessedEntities)
5993       return M.BasePreprocessedEntityID;
5994   }
5995 
5996   return getTotalNumPreprocessedEntities();
5997 }
5998 
5999 namespace {
6000 
6001 struct PPEntityComp {
6002   const ASTReader &Reader;
6003   ModuleFile &M;
6004 
6005   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6006 
6007   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6008     SourceLocation LHS = getLoc(L);
6009     SourceLocation RHS = getLoc(R);
6010     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6011   }
6012 
6013   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6014     SourceLocation LHS = getLoc(L);
6015     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6016   }
6017 
6018   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6019     SourceLocation RHS = getLoc(R);
6020     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6021   }
6022 
6023   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6024     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6025   }
6026 };
6027 
6028 } // namespace
6029 
6030 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6031                                                        bool EndsAfter) const {
6032   if (SourceMgr.isLocalSourceLocation(Loc))
6033     return getTotalNumPreprocessedEntities();
6034 
6035   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6036       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6037   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6038          "Corrupted global sloc offset map");
6039 
6040   if (SLocMapI->second->NumPreprocessedEntities == 0)
6041     return findNextPreprocessedEntity(SLocMapI);
6042 
6043   ModuleFile &M = *SLocMapI->second;
6044 
6045   using pp_iterator = const PPEntityOffset *;
6046 
6047   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6048   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6049 
6050   size_t Count = M.NumPreprocessedEntities;
6051   size_t Half;
6052   pp_iterator First = pp_begin;
6053   pp_iterator PPI;
6054 
6055   if (EndsAfter) {
6056     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6057                            PPEntityComp(*this, M));
6058   } else {
6059     // Do a binary search manually instead of using std::lower_bound because
6060     // The end locations of entities may be unordered (when a macro expansion
6061     // is inside another macro argument), but for this case it is not important
6062     // whether we get the first macro expansion or its containing macro.
6063     while (Count > 0) {
6064       Half = Count / 2;
6065       PPI = First;
6066       std::advance(PPI, Half);
6067       if (SourceMgr.isBeforeInTranslationUnit(
6068               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6069         First = PPI;
6070         ++First;
6071         Count = Count - Half - 1;
6072       } else
6073         Count = Half;
6074     }
6075   }
6076 
6077   if (PPI == pp_end)
6078     return findNextPreprocessedEntity(SLocMapI);
6079 
6080   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6081 }
6082 
6083 /// Returns a pair of [Begin, End) indices of preallocated
6084 /// preprocessed entities that \arg Range encompasses.
6085 std::pair<unsigned, unsigned>
6086     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6087   if (Range.isInvalid())
6088     return std::make_pair(0,0);
6089   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6090 
6091   PreprocessedEntityID BeginID =
6092       findPreprocessedEntity(Range.getBegin(), false);
6093   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6094   return std::make_pair(BeginID, EndID);
6095 }
6096 
6097 /// Optionally returns true or false if the preallocated preprocessed
6098 /// entity with index \arg Index came from file \arg FID.
6099 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6100                                                              FileID FID) {
6101   if (FID.isInvalid())
6102     return false;
6103 
6104   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6105   ModuleFile &M = *PPInfo.first;
6106   unsigned LocalIndex = PPInfo.second;
6107   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6108 
6109   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6110   if (Loc.isInvalid())
6111     return false;
6112 
6113   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6114     return true;
6115   else
6116     return false;
6117 }
6118 
6119 namespace {
6120 
6121   /// Visitor used to search for information about a header file.
6122   class HeaderFileInfoVisitor {
6123     const FileEntry *FE;
6124     Optional<HeaderFileInfo> HFI;
6125 
6126   public:
6127     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6128 
6129     bool operator()(ModuleFile &M) {
6130       HeaderFileInfoLookupTable *Table
6131         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6132       if (!Table)
6133         return false;
6134 
6135       // Look in the on-disk hash table for an entry for this file name.
6136       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6137       if (Pos == Table->end())
6138         return false;
6139 
6140       HFI = *Pos;
6141       return true;
6142     }
6143 
6144     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6145   };
6146 
6147 } // namespace
6148 
6149 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6150   HeaderFileInfoVisitor Visitor(FE);
6151   ModuleMgr.visit(Visitor);
6152   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6153     return *HFI;
6154 
6155   return HeaderFileInfo();
6156 }
6157 
6158 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6159   using DiagState = DiagnosticsEngine::DiagState;
6160   SmallVector<DiagState *, 32> DiagStates;
6161 
6162   for (ModuleFile &F : ModuleMgr) {
6163     unsigned Idx = 0;
6164     auto &Record = F.PragmaDiagMappings;
6165     if (Record.empty())
6166       continue;
6167 
6168     DiagStates.clear();
6169 
6170     auto ReadDiagState =
6171         [&](const DiagState &BasedOn, SourceLocation Loc,
6172             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6173       unsigned BackrefID = Record[Idx++];
6174       if (BackrefID != 0)
6175         return DiagStates[BackrefID - 1];
6176 
6177       // A new DiagState was created here.
6178       Diag.DiagStates.push_back(BasedOn);
6179       DiagState *NewState = &Diag.DiagStates.back();
6180       DiagStates.push_back(NewState);
6181       unsigned Size = Record[Idx++];
6182       assert(Idx + Size * 2 <= Record.size() &&
6183              "Invalid data, not enough diag/map pairs");
6184       while (Size--) {
6185         unsigned DiagID = Record[Idx++];
6186         DiagnosticMapping NewMapping =
6187             DiagnosticMapping::deserialize(Record[Idx++]);
6188         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6189           continue;
6190 
6191         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6192 
6193         // If this mapping was specified as a warning but the severity was
6194         // upgraded due to diagnostic settings, simulate the current diagnostic
6195         // settings (and use a warning).
6196         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6197           NewMapping.setSeverity(diag::Severity::Warning);
6198           NewMapping.setUpgradedFromWarning(false);
6199         }
6200 
6201         Mapping = NewMapping;
6202       }
6203       return NewState;
6204     };
6205 
6206     // Read the first state.
6207     DiagState *FirstState;
6208     if (F.Kind == MK_ImplicitModule) {
6209       // Implicitly-built modules are reused with different diagnostic
6210       // settings.  Use the initial diagnostic state from Diag to simulate this
6211       // compilation's diagnostic settings.
6212       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6213       DiagStates.push_back(FirstState);
6214 
6215       // Skip the initial diagnostic state from the serialized module.
6216       assert(Record[1] == 0 &&
6217              "Invalid data, unexpected backref in initial state");
6218       Idx = 3 + Record[2] * 2;
6219       assert(Idx < Record.size() &&
6220              "Invalid data, not enough state change pairs in initial state");
6221     } else if (F.isModule()) {
6222       // For an explicit module, preserve the flags from the module build
6223       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6224       // -Wblah flags.
6225       unsigned Flags = Record[Idx++];
6226       DiagState Initial;
6227       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6228       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6229       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6230       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6231       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6232       Initial.ExtBehavior = (diag::Severity)Flags;
6233       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6234 
6235       assert(F.OriginalSourceFileID.isValid());
6236 
6237       // Set up the root buffer of the module to start with the initial
6238       // diagnostic state of the module itself, to cover files that contain no
6239       // explicit transitions (for which we did not serialize anything).
6240       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6241           .StateTransitions.push_back({FirstState, 0});
6242     } else {
6243       // For prefix ASTs, start with whatever the user configured on the
6244       // command line.
6245       Idx++; // Skip flags.
6246       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6247                                  SourceLocation(), false);
6248     }
6249 
6250     // Read the state transitions.
6251     unsigned NumLocations = Record[Idx++];
6252     while (NumLocations--) {
6253       assert(Idx < Record.size() &&
6254              "Invalid data, missing pragma diagnostic states");
6255       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6256       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6257       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6258       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6259       unsigned Transitions = Record[Idx++];
6260 
6261       // Note that we don't need to set up Parent/ParentOffset here, because
6262       // we won't be changing the diagnostic state within imported FileIDs
6263       // (other than perhaps appending to the main source file, which has no
6264       // parent).
6265       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6266       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6267       for (unsigned I = 0; I != Transitions; ++I) {
6268         unsigned Offset = Record[Idx++];
6269         auto *State =
6270             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6271         F.StateTransitions.push_back({State, Offset});
6272       }
6273     }
6274 
6275     // Read the final state.
6276     assert(Idx < Record.size() &&
6277            "Invalid data, missing final pragma diagnostic state");
6278     SourceLocation CurStateLoc =
6279         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6280     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6281 
6282     if (!F.isModule()) {
6283       Diag.DiagStatesByLoc.CurDiagState = CurState;
6284       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6285 
6286       // Preserve the property that the imaginary root file describes the
6287       // current state.
6288       FileID NullFile;
6289       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6290       if (T.empty())
6291         T.push_back({CurState, 0});
6292       else
6293         T[0].State = CurState;
6294     }
6295 
6296     // Don't try to read these mappings again.
6297     Record.clear();
6298   }
6299 }
6300 
6301 /// Get the correct cursor and offset for loading a type.
6302 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6303   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6304   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6305   ModuleFile *M = I->second;
6306   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
6307 }
6308 
6309 /// Read and return the type with the given index..
6310 ///
6311 /// The index is the type ID, shifted and minus the number of predefs. This
6312 /// routine actually reads the record corresponding to the type at the given
6313 /// location. It is a helper routine for GetType, which deals with reading type
6314 /// IDs.
6315 QualType ASTReader::readTypeRecord(unsigned Index) {
6316   assert(ContextObj && "reading type with no AST context");
6317   ASTContext &Context = *ContextObj;
6318   RecordLocation Loc = TypeCursorForIndex(Index);
6319   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6320 
6321   // Keep track of where we are in the stream, then jump back there
6322   // after reading this type.
6323   SavedStreamPosition SavedPosition(DeclsCursor);
6324 
6325   ReadingKindTracker ReadingKind(Read_Type, *this);
6326 
6327   // Note that we are loading a type record.
6328   Deserializing AType(this);
6329 
6330   unsigned Idx = 0;
6331   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6332     Error(std::move(Err));
6333     return QualType();
6334   }
6335   RecordData Record;
6336   Expected<unsigned> MaybeCode = DeclsCursor.ReadCode();
6337   if (!MaybeCode) {
6338     Error(MaybeCode.takeError());
6339     return QualType();
6340   }
6341   unsigned Code = MaybeCode.get();
6342 
6343   Expected<unsigned> MaybeTypeCode = DeclsCursor.readRecord(Code, Record);
6344   if (!MaybeTypeCode) {
6345     Error(MaybeTypeCode.takeError());
6346     return QualType();
6347   }
6348   switch ((TypeCode)MaybeTypeCode.get()) {
6349   case TYPE_EXT_QUAL: {
6350     if (Record.size() != 2) {
6351       Error("Incorrect encoding of extended qualifier type");
6352       return QualType();
6353     }
6354     QualType Base = readType(*Loc.F, Record, Idx);
6355     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
6356     return Context.getQualifiedType(Base, Quals);
6357   }
6358 
6359   case TYPE_COMPLEX: {
6360     if (Record.size() != 1) {
6361       Error("Incorrect encoding of complex type");
6362       return QualType();
6363     }
6364     QualType ElemType = readType(*Loc.F, Record, Idx);
6365     return Context.getComplexType(ElemType);
6366   }
6367 
6368   case TYPE_POINTER: {
6369     if (Record.size() != 1) {
6370       Error("Incorrect encoding of pointer type");
6371       return QualType();
6372     }
6373     QualType PointeeType = readType(*Loc.F, Record, Idx);
6374     return Context.getPointerType(PointeeType);
6375   }
6376 
6377   case TYPE_DECAYED: {
6378     if (Record.size() != 1) {
6379       Error("Incorrect encoding of decayed type");
6380       return QualType();
6381     }
6382     QualType OriginalType = readType(*Loc.F, Record, Idx);
6383     QualType DT = Context.getAdjustedParameterType(OriginalType);
6384     if (!isa<DecayedType>(DT))
6385       Error("Decayed type does not decay");
6386     return DT;
6387   }
6388 
6389   case TYPE_ADJUSTED: {
6390     if (Record.size() != 2) {
6391       Error("Incorrect encoding of adjusted type");
6392       return QualType();
6393     }
6394     QualType OriginalTy = readType(*Loc.F, Record, Idx);
6395     QualType AdjustedTy = readType(*Loc.F, Record, Idx);
6396     return Context.getAdjustedType(OriginalTy, AdjustedTy);
6397   }
6398 
6399   case TYPE_BLOCK_POINTER: {
6400     if (Record.size() != 1) {
6401       Error("Incorrect encoding of block pointer type");
6402       return QualType();
6403     }
6404     QualType PointeeType = readType(*Loc.F, Record, Idx);
6405     return Context.getBlockPointerType(PointeeType);
6406   }
6407 
6408   case TYPE_LVALUE_REFERENCE: {
6409     if (Record.size() != 2) {
6410       Error("Incorrect encoding of lvalue reference type");
6411       return QualType();
6412     }
6413     QualType PointeeType = readType(*Loc.F, Record, Idx);
6414     return Context.getLValueReferenceType(PointeeType, Record[1]);
6415   }
6416 
6417   case TYPE_RVALUE_REFERENCE: {
6418     if (Record.size() != 1) {
6419       Error("Incorrect encoding of rvalue reference type");
6420       return QualType();
6421     }
6422     QualType PointeeType = readType(*Loc.F, Record, Idx);
6423     return Context.getRValueReferenceType(PointeeType);
6424   }
6425 
6426   case TYPE_MEMBER_POINTER: {
6427     if (Record.size() != 2) {
6428       Error("Incorrect encoding of member pointer type");
6429       return QualType();
6430     }
6431     QualType PointeeType = readType(*Loc.F, Record, Idx);
6432     QualType ClassType = readType(*Loc.F, Record, Idx);
6433     if (PointeeType.isNull() || ClassType.isNull())
6434       return QualType();
6435 
6436     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
6437   }
6438 
6439   case TYPE_CONSTANT_ARRAY: {
6440     QualType ElementType = readType(*Loc.F, Record, Idx);
6441     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
6442     unsigned IndexTypeQuals = Record[2];
6443     unsigned Idx = 3;
6444     llvm::APInt Size = ReadAPInt(Record, Idx);
6445     Expr *SizeExpr = ReadExpr(*Loc.F);
6446     return Context.getConstantArrayType(ElementType, Size, SizeExpr,
6447                                          ASM, IndexTypeQuals);
6448   }
6449 
6450   case TYPE_INCOMPLETE_ARRAY: {
6451     QualType ElementType = readType(*Loc.F, Record, Idx);
6452     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
6453     unsigned IndexTypeQuals = Record[2];
6454     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
6455   }
6456 
6457   case TYPE_VARIABLE_ARRAY: {
6458     QualType ElementType = readType(*Loc.F, Record, Idx);
6459     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
6460     unsigned IndexTypeQuals = Record[2];
6461     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
6462     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
6463     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
6464                                          ASM, IndexTypeQuals,
6465                                          SourceRange(LBLoc, RBLoc));
6466   }
6467 
6468   case TYPE_VECTOR: {
6469     if (Record.size() != 3) {
6470       Error("incorrect encoding of vector type in AST file");
6471       return QualType();
6472     }
6473 
6474     QualType ElementType = readType(*Loc.F, Record, Idx);
6475     unsigned NumElements = Record[1];
6476     unsigned VecKind = Record[2];
6477     return Context.getVectorType(ElementType, NumElements,
6478                                   (VectorType::VectorKind)VecKind);
6479   }
6480 
6481   case TYPE_EXT_VECTOR: {
6482     if (Record.size() != 3) {
6483       Error("incorrect encoding of extended vector type in AST file");
6484       return QualType();
6485     }
6486 
6487     QualType ElementType = readType(*Loc.F, Record, Idx);
6488     unsigned NumElements = Record[1];
6489     return Context.getExtVectorType(ElementType, NumElements);
6490   }
6491 
6492   case TYPE_FUNCTION_NO_PROTO: {
6493     if (Record.size() != 8) {
6494       Error("incorrect encoding of no-proto function type");
6495       return QualType();
6496     }
6497     QualType ResultType = readType(*Loc.F, Record, Idx);
6498     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
6499                                (CallingConv)Record[4], Record[5], Record[6],
6500                                Record[7]);
6501     return Context.getFunctionNoProtoType(ResultType, Info);
6502   }
6503 
6504   case TYPE_FUNCTION_PROTO: {
6505     QualType ResultType = readType(*Loc.F, Record, Idx);
6506 
6507     FunctionProtoType::ExtProtoInfo EPI;
6508     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
6509                                         /*hasregparm*/ Record[2],
6510                                         /*regparm*/ Record[3],
6511                                         static_cast<CallingConv>(Record[4]),
6512                                         /*produces*/ Record[5],
6513                                         /*nocallersavedregs*/ Record[6],
6514                                         /*nocfcheck*/ Record[7]);
6515 
6516     unsigned Idx = 8;
6517 
6518     EPI.Variadic = Record[Idx++];
6519     EPI.HasTrailingReturn = Record[Idx++];
6520     EPI.TypeQuals = Qualifiers::fromOpaqueValue(Record[Idx++]);
6521     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
6522     SmallVector<QualType, 8> ExceptionStorage;
6523     readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx);
6524 
6525     unsigned NumParams = Record[Idx++];
6526     SmallVector<QualType, 16> ParamTypes;
6527     for (unsigned I = 0; I != NumParams; ++I)
6528       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
6529 
6530     SmallVector<FunctionProtoType::ExtParameterInfo, 4> ExtParameterInfos;
6531     if (Idx != Record.size()) {
6532       for (unsigned I = 0; I != NumParams; ++I)
6533         ExtParameterInfos.push_back(
6534           FunctionProtoType::ExtParameterInfo
6535                            ::getFromOpaqueValue(Record[Idx++]));
6536       EPI.ExtParameterInfos = ExtParameterInfos.data();
6537     }
6538 
6539     assert(Idx == Record.size());
6540 
6541     return Context.getFunctionType(ResultType, ParamTypes, EPI);
6542   }
6543 
6544   case TYPE_UNRESOLVED_USING: {
6545     unsigned Idx = 0;
6546     return Context.getTypeDeclType(
6547                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
6548   }
6549 
6550   case TYPE_TYPEDEF: {
6551     if (Record.size() != 2) {
6552       Error("incorrect encoding of typedef type");
6553       return QualType();
6554     }
6555     unsigned Idx = 0;
6556     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
6557     QualType Canonical = readType(*Loc.F, Record, Idx);
6558     if (!Canonical.isNull())
6559       Canonical = Context.getCanonicalType(Canonical);
6560     return Context.getTypedefType(Decl, Canonical);
6561   }
6562 
6563   case TYPE_TYPEOF_EXPR:
6564     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
6565 
6566   case TYPE_TYPEOF: {
6567     if (Record.size() != 1) {
6568       Error("incorrect encoding of typeof(type) in AST file");
6569       return QualType();
6570     }
6571     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6572     return Context.getTypeOfType(UnderlyingType);
6573   }
6574 
6575   case TYPE_DECLTYPE: {
6576     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6577     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
6578   }
6579 
6580   case TYPE_UNARY_TRANSFORM: {
6581     QualType BaseType = readType(*Loc.F, Record, Idx);
6582     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6583     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
6584     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
6585   }
6586 
6587   case TYPE_AUTO: {
6588     QualType Deduced = readType(*Loc.F, Record, Idx);
6589     AutoTypeKeyword Keyword = (AutoTypeKeyword)Record[Idx++];
6590     bool IsDependent = false, IsPack = false;
6591     if (Deduced.isNull()) {
6592       IsDependent = Record[Idx] > 0;
6593       IsPack = Record[Idx] > 1;
6594       ++Idx;
6595     }
6596     return Context.getAutoType(Deduced, Keyword, IsDependent, IsPack);
6597   }
6598 
6599   case TYPE_DEDUCED_TEMPLATE_SPECIALIZATION: {
6600     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
6601     QualType Deduced = readType(*Loc.F, Record, Idx);
6602     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
6603     return Context.getDeducedTemplateSpecializationType(Name, Deduced,
6604                                                         IsDependent);
6605   }
6606 
6607   case TYPE_RECORD: {
6608     if (Record.size() != 2) {
6609       Error("incorrect encoding of record type");
6610       return QualType();
6611     }
6612     unsigned Idx = 0;
6613     bool IsDependent = Record[Idx++];
6614     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
6615     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
6616     QualType T = Context.getRecordType(RD);
6617     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6618     return T;
6619   }
6620 
6621   case TYPE_ENUM: {
6622     if (Record.size() != 2) {
6623       Error("incorrect encoding of enum type");
6624       return QualType();
6625     }
6626     unsigned Idx = 0;
6627     bool IsDependent = Record[Idx++];
6628     QualType T
6629       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
6630     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6631     return T;
6632   }
6633 
6634   case TYPE_ATTRIBUTED: {
6635     if (Record.size() != 3) {
6636       Error("incorrect encoding of attributed type");
6637       return QualType();
6638     }
6639     QualType modifiedType = readType(*Loc.F, Record, Idx);
6640     QualType equivalentType = readType(*Loc.F, Record, Idx);
6641     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
6642     return Context.getAttributedType(kind, modifiedType, equivalentType);
6643   }
6644 
6645   case TYPE_PAREN: {
6646     if (Record.size() != 1) {
6647       Error("incorrect encoding of paren type");
6648       return QualType();
6649     }
6650     QualType InnerType = readType(*Loc.F, Record, Idx);
6651     return Context.getParenType(InnerType);
6652   }
6653 
6654   case TYPE_MACRO_QUALIFIED: {
6655     if (Record.size() != 2) {
6656       Error("incorrect encoding of macro defined type");
6657       return QualType();
6658     }
6659     QualType UnderlyingTy = readType(*Loc.F, Record, Idx);
6660     IdentifierInfo *MacroII = GetIdentifierInfo(*Loc.F, Record, Idx);
6661     return Context.getMacroQualifiedType(UnderlyingTy, MacroII);
6662   }
6663 
6664   case TYPE_PACK_EXPANSION: {
6665     if (Record.size() != 2) {
6666       Error("incorrect encoding of pack expansion type");
6667       return QualType();
6668     }
6669     QualType Pattern = readType(*Loc.F, Record, Idx);
6670     if (Pattern.isNull())
6671       return QualType();
6672     Optional<unsigned> NumExpansions;
6673     if (Record[1])
6674       NumExpansions = Record[1] - 1;
6675     return Context.getPackExpansionType(Pattern, NumExpansions);
6676   }
6677 
6678   case TYPE_ELABORATED: {
6679     unsigned Idx = 0;
6680     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6681     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6682     QualType NamedType = readType(*Loc.F, Record, Idx);
6683     TagDecl *OwnedTagDecl = ReadDeclAs<TagDecl>(*Loc.F, Record, Idx);
6684     return Context.getElaboratedType(Keyword, NNS, NamedType, OwnedTagDecl);
6685   }
6686 
6687   case TYPE_OBJC_INTERFACE: {
6688     unsigned Idx = 0;
6689     ObjCInterfaceDecl *ItfD
6690       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
6691     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
6692   }
6693 
6694   case TYPE_OBJC_TYPE_PARAM: {
6695     unsigned Idx = 0;
6696     ObjCTypeParamDecl *Decl
6697       = ReadDeclAs<ObjCTypeParamDecl>(*Loc.F, Record, Idx);
6698     unsigned NumProtos = Record[Idx++];
6699     SmallVector<ObjCProtocolDecl*, 4> Protos;
6700     for (unsigned I = 0; I != NumProtos; ++I)
6701       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
6702     return Context.getObjCTypeParamType(Decl, Protos);
6703   }
6704 
6705   case TYPE_OBJC_OBJECT: {
6706     unsigned Idx = 0;
6707     QualType Base = readType(*Loc.F, Record, Idx);
6708     unsigned NumTypeArgs = Record[Idx++];
6709     SmallVector<QualType, 4> TypeArgs;
6710     for (unsigned I = 0; I != NumTypeArgs; ++I)
6711       TypeArgs.push_back(readType(*Loc.F, Record, Idx));
6712     unsigned NumProtos = Record[Idx++];
6713     SmallVector<ObjCProtocolDecl*, 4> Protos;
6714     for (unsigned I = 0; I != NumProtos; ++I)
6715       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
6716     bool IsKindOf = Record[Idx++];
6717     return Context.getObjCObjectType(Base, TypeArgs, Protos, IsKindOf);
6718   }
6719 
6720   case TYPE_OBJC_OBJECT_POINTER: {
6721     unsigned Idx = 0;
6722     QualType Pointee = readType(*Loc.F, Record, Idx);
6723     return Context.getObjCObjectPointerType(Pointee);
6724   }
6725 
6726   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
6727     unsigned Idx = 0;
6728     QualType Parm = readType(*Loc.F, Record, Idx);
6729     QualType Replacement = readType(*Loc.F, Record, Idx);
6730     return Context.getSubstTemplateTypeParmType(
6731         cast<TemplateTypeParmType>(Parm),
6732         Context.getCanonicalType(Replacement));
6733   }
6734 
6735   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
6736     unsigned Idx = 0;
6737     QualType Parm = readType(*Loc.F, Record, Idx);
6738     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
6739     return Context.getSubstTemplateTypeParmPackType(
6740                                                cast<TemplateTypeParmType>(Parm),
6741                                                      ArgPack);
6742   }
6743 
6744   case TYPE_INJECTED_CLASS_NAME: {
6745     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
6746     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
6747     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
6748     // for AST reading, too much interdependencies.
6749     const Type *T = nullptr;
6750     for (auto *DI = D; DI; DI = DI->getPreviousDecl()) {
6751       if (const Type *Existing = DI->getTypeForDecl()) {
6752         T = Existing;
6753         break;
6754       }
6755     }
6756     if (!T) {
6757       T = new (Context, TypeAlignment) InjectedClassNameType(D, TST);
6758       for (auto *DI = D; DI; DI = DI->getPreviousDecl())
6759         DI->setTypeForDecl(T);
6760     }
6761     return QualType(T, 0);
6762   }
6763 
6764   case TYPE_TEMPLATE_TYPE_PARM: {
6765     unsigned Idx = 0;
6766     unsigned Depth = Record[Idx++];
6767     unsigned Index = Record[Idx++];
6768     bool Pack = Record[Idx++];
6769     TemplateTypeParmDecl *D
6770       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
6771     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
6772   }
6773 
6774   case TYPE_DEPENDENT_NAME: {
6775     unsigned Idx = 0;
6776     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6777     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6778     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
6779     QualType Canon = readType(*Loc.F, Record, Idx);
6780     if (!Canon.isNull())
6781       Canon = Context.getCanonicalType(Canon);
6782     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
6783   }
6784 
6785   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
6786     unsigned Idx = 0;
6787     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6788     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6789     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
6790     unsigned NumArgs = Record[Idx++];
6791     SmallVector<TemplateArgument, 8> Args;
6792     Args.reserve(NumArgs);
6793     while (NumArgs--)
6794       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
6795     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
6796                                                           Args);
6797   }
6798 
6799   case TYPE_DEPENDENT_SIZED_ARRAY: {
6800     unsigned Idx = 0;
6801 
6802     // ArrayType
6803     QualType ElementType = readType(*Loc.F, Record, Idx);
6804     ArrayType::ArraySizeModifier ASM
6805       = (ArrayType::ArraySizeModifier)Record[Idx++];
6806     unsigned IndexTypeQuals = Record[Idx++];
6807 
6808     // DependentSizedArrayType
6809     Expr *NumElts = ReadExpr(*Loc.F);
6810     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
6811 
6812     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
6813                                                IndexTypeQuals, Brackets);
6814   }
6815 
6816   case TYPE_TEMPLATE_SPECIALIZATION: {
6817     unsigned Idx = 0;
6818     bool IsDependent = Record[Idx++];
6819     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
6820     SmallVector<TemplateArgument, 8> Args;
6821     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
6822     QualType Underlying = readType(*Loc.F, Record, Idx);
6823     QualType T;
6824     if (Underlying.isNull())
6825       T = Context.getCanonicalTemplateSpecializationType(Name, Args);
6826     else
6827       T = Context.getTemplateSpecializationType(Name, Args, Underlying);
6828     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6829     return T;
6830   }
6831 
6832   case TYPE_ATOMIC: {
6833     if (Record.size() != 1) {
6834       Error("Incorrect encoding of atomic type");
6835       return QualType();
6836     }
6837     QualType ValueType = readType(*Loc.F, Record, Idx);
6838     return Context.getAtomicType(ValueType);
6839   }
6840 
6841   case TYPE_PIPE: {
6842     if (Record.size() != 2) {
6843       Error("Incorrect encoding of pipe type");
6844       return QualType();
6845     }
6846 
6847     // Reading the pipe element type.
6848     QualType ElementType = readType(*Loc.F, Record, Idx);
6849     unsigned ReadOnly = Record[1];
6850     return Context.getPipeType(ElementType, ReadOnly);
6851   }
6852 
6853   case TYPE_DEPENDENT_SIZED_VECTOR: {
6854     unsigned Idx = 0;
6855     QualType ElementType = readType(*Loc.F, Record, Idx);
6856     Expr *SizeExpr = ReadExpr(*Loc.F);
6857     SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
6858     unsigned VecKind = Record[Idx];
6859 
6860     return Context.getDependentVectorType(ElementType, SizeExpr, AttrLoc,
6861                                                (VectorType::VectorKind)VecKind);
6862   }
6863 
6864   case TYPE_DEPENDENT_SIZED_EXT_VECTOR: {
6865     unsigned Idx = 0;
6866 
6867     // DependentSizedExtVectorType
6868     QualType ElementType = readType(*Loc.F, Record, Idx);
6869     Expr *SizeExpr = ReadExpr(*Loc.F);
6870     SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
6871 
6872     return Context.getDependentSizedExtVectorType(ElementType, SizeExpr,
6873                                                   AttrLoc);
6874   }
6875 
6876   case TYPE_DEPENDENT_ADDRESS_SPACE: {
6877     unsigned Idx = 0;
6878 
6879     // DependentAddressSpaceType
6880     QualType PointeeType = readType(*Loc.F, Record, Idx);
6881     Expr *AddrSpaceExpr = ReadExpr(*Loc.F);
6882     SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
6883 
6884     return Context.getDependentAddressSpaceType(PointeeType, AddrSpaceExpr,
6885                                                    AttrLoc);
6886   }
6887   }
6888   llvm_unreachable("Invalid TypeCode!");
6889 }
6890 
6891 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile,
6892                                   SmallVectorImpl<QualType> &Exceptions,
6893                                   FunctionProtoType::ExceptionSpecInfo &ESI,
6894                                   const RecordData &Record, unsigned &Idx) {
6895   ExceptionSpecificationType EST =
6896       static_cast<ExceptionSpecificationType>(Record[Idx++]);
6897   ESI.Type = EST;
6898   if (EST == EST_Dynamic) {
6899     for (unsigned I = 0, N = Record[Idx++]; I != N; ++I)
6900       Exceptions.push_back(readType(ModuleFile, Record, Idx));
6901     ESI.Exceptions = Exceptions;
6902   } else if (isComputedNoexcept(EST)) {
6903     ESI.NoexceptExpr = ReadExpr(ModuleFile);
6904   } else if (EST == EST_Uninstantiated) {
6905     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6906     ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6907   } else if (EST == EST_Unevaluated) {
6908     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6909   }
6910 }
6911 
6912 namespace clang {
6913 
6914 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6915   ModuleFile *F;
6916   ASTReader *Reader;
6917   const ASTReader::RecordData &Record;
6918   unsigned &Idx;
6919 
6920   SourceLocation ReadSourceLocation() {
6921     return Reader->ReadSourceLocation(*F, Record, Idx);
6922   }
6923 
6924   TypeSourceInfo *GetTypeSourceInfo() {
6925     return Reader->GetTypeSourceInfo(*F, Record, Idx);
6926   }
6927 
6928   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6929     return Reader->ReadNestedNameSpecifierLoc(*F, Record, Idx);
6930   }
6931 
6932   Attr *ReadAttr() {
6933     return Reader->ReadAttr(*F, Record, Idx);
6934   }
6935 
6936 public:
6937   TypeLocReader(ModuleFile &F, ASTReader &Reader,
6938                 const ASTReader::RecordData &Record, unsigned &Idx)
6939       : F(&F), Reader(&Reader), Record(Record), Idx(Idx) {}
6940 
6941   // We want compile-time assurance that we've enumerated all of
6942   // these, so unfortunately we have to declare them first, then
6943   // define them out-of-line.
6944 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6945 #define TYPELOC(CLASS, PARENT) \
6946   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6947 #include "clang/AST/TypeLocNodes.def"
6948 
6949   void VisitFunctionTypeLoc(FunctionTypeLoc);
6950   void VisitArrayTypeLoc(ArrayTypeLoc);
6951 };
6952 
6953 } // namespace clang
6954 
6955 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6956   // nothing to do
6957 }
6958 
6959 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6960   TL.setBuiltinLoc(ReadSourceLocation());
6961   if (TL.needsExtraLocalData()) {
6962     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
6963     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
6964     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
6965     TL.setModeAttr(Record[Idx++]);
6966   }
6967 }
6968 
6969 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6970   TL.setNameLoc(ReadSourceLocation());
6971 }
6972 
6973 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6974   TL.setStarLoc(ReadSourceLocation());
6975 }
6976 
6977 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6978   // nothing to do
6979 }
6980 
6981 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6982   // nothing to do
6983 }
6984 
6985 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6986   TL.setExpansionLoc(ReadSourceLocation());
6987 }
6988 
6989 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6990   TL.setCaretLoc(ReadSourceLocation());
6991 }
6992 
6993 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6994   TL.setAmpLoc(ReadSourceLocation());
6995 }
6996 
6997 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6998   TL.setAmpAmpLoc(ReadSourceLocation());
6999 }
7000 
7001 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
7002   TL.setStarLoc(ReadSourceLocation());
7003   TL.setClassTInfo(GetTypeSourceInfo());
7004 }
7005 
7006 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
7007   TL.setLBracketLoc(ReadSourceLocation());
7008   TL.setRBracketLoc(ReadSourceLocation());
7009   if (Record[Idx++])
7010     TL.setSizeExpr(Reader->ReadExpr(*F));
7011   else
7012     TL.setSizeExpr(nullptr);
7013 }
7014 
7015 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
7016   VisitArrayTypeLoc(TL);
7017 }
7018 
7019 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
7020   VisitArrayTypeLoc(TL);
7021 }
7022 
7023 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
7024   VisitArrayTypeLoc(TL);
7025 }
7026 
7027 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
7028                                             DependentSizedArrayTypeLoc TL) {
7029   VisitArrayTypeLoc(TL);
7030 }
7031 
7032 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
7033     DependentAddressSpaceTypeLoc TL) {
7034 
7035     TL.setAttrNameLoc(ReadSourceLocation());
7036     SourceRange range;
7037     range.setBegin(ReadSourceLocation());
7038     range.setEnd(ReadSourceLocation());
7039     TL.setAttrOperandParensRange(range);
7040     TL.setAttrExprOperand(Reader->ReadExpr(*F));
7041 }
7042 
7043 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
7044                                         DependentSizedExtVectorTypeLoc TL) {
7045   TL.setNameLoc(ReadSourceLocation());
7046 }
7047 
7048 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
7049   TL.setNameLoc(ReadSourceLocation());
7050 }
7051 
7052 void TypeLocReader::VisitDependentVectorTypeLoc(
7053     DependentVectorTypeLoc TL) {
7054   TL.setNameLoc(ReadSourceLocation());
7055 }
7056 
7057 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
7058   TL.setNameLoc(ReadSourceLocation());
7059 }
7060 
7061 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
7062   TL.setLocalRangeBegin(ReadSourceLocation());
7063   TL.setLParenLoc(ReadSourceLocation());
7064   TL.setRParenLoc(ReadSourceLocation());
7065   TL.setExceptionSpecRange(SourceRange(Reader->ReadSourceLocation(*F, Record, Idx),
7066                                        Reader->ReadSourceLocation(*F, Record, Idx)));
7067   TL.setLocalRangeEnd(ReadSourceLocation());
7068   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
7069     TL.setParam(i, Reader->ReadDeclAs<ParmVarDecl>(*F, Record, Idx));
7070   }
7071 }
7072 
7073 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
7074   VisitFunctionTypeLoc(TL);
7075 }
7076 
7077 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
7078   VisitFunctionTypeLoc(TL);
7079 }
7080 
7081 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
7082   TL.setNameLoc(ReadSourceLocation());
7083 }
7084 
7085 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
7086   TL.setNameLoc(ReadSourceLocation());
7087 }
7088 
7089 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
7090   TL.setTypeofLoc(ReadSourceLocation());
7091   TL.setLParenLoc(ReadSourceLocation());
7092   TL.setRParenLoc(ReadSourceLocation());
7093 }
7094 
7095 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
7096   TL.setTypeofLoc(ReadSourceLocation());
7097   TL.setLParenLoc(ReadSourceLocation());
7098   TL.setRParenLoc(ReadSourceLocation());
7099   TL.setUnderlyingTInfo(GetTypeSourceInfo());
7100 }
7101 
7102 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
7103   TL.setNameLoc(ReadSourceLocation());
7104 }
7105 
7106 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
7107   TL.setKWLoc(ReadSourceLocation());
7108   TL.setLParenLoc(ReadSourceLocation());
7109   TL.setRParenLoc(ReadSourceLocation());
7110   TL.setUnderlyingTInfo(GetTypeSourceInfo());
7111 }
7112 
7113 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
7114   TL.setNameLoc(ReadSourceLocation());
7115 }
7116 
7117 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
7118     DeducedTemplateSpecializationTypeLoc TL) {
7119   TL.setTemplateNameLoc(ReadSourceLocation());
7120 }
7121 
7122 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
7123   TL.setNameLoc(ReadSourceLocation());
7124 }
7125 
7126 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
7127   TL.setNameLoc(ReadSourceLocation());
7128 }
7129 
7130 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
7131   TL.setAttr(ReadAttr());
7132 }
7133 
7134 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
7135   TL.setNameLoc(ReadSourceLocation());
7136 }
7137 
7138 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
7139                                             SubstTemplateTypeParmTypeLoc TL) {
7140   TL.setNameLoc(ReadSourceLocation());
7141 }
7142 
7143 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
7144                                           SubstTemplateTypeParmPackTypeLoc TL) {
7145   TL.setNameLoc(ReadSourceLocation());
7146 }
7147 
7148 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
7149                                            TemplateSpecializationTypeLoc TL) {
7150   TL.setTemplateKeywordLoc(ReadSourceLocation());
7151   TL.setTemplateNameLoc(ReadSourceLocation());
7152   TL.setLAngleLoc(ReadSourceLocation());
7153   TL.setRAngleLoc(ReadSourceLocation());
7154   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
7155     TL.setArgLocInfo(
7156         i,
7157         Reader->GetTemplateArgumentLocInfo(
7158             *F, TL.getTypePtr()->getArg(i).getKind(), Record, Idx));
7159 }
7160 
7161 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
7162   TL.setLParenLoc(ReadSourceLocation());
7163   TL.setRParenLoc(ReadSourceLocation());
7164 }
7165 
7166 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
7167   TL.setElaboratedKeywordLoc(ReadSourceLocation());
7168   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
7169 }
7170 
7171 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
7172   TL.setNameLoc(ReadSourceLocation());
7173 }
7174 
7175 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
7176   TL.setElaboratedKeywordLoc(ReadSourceLocation());
7177   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
7178   TL.setNameLoc(ReadSourceLocation());
7179 }
7180 
7181 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
7182        DependentTemplateSpecializationTypeLoc TL) {
7183   TL.setElaboratedKeywordLoc(ReadSourceLocation());
7184   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
7185   TL.setTemplateKeywordLoc(ReadSourceLocation());
7186   TL.setTemplateNameLoc(ReadSourceLocation());
7187   TL.setLAngleLoc(ReadSourceLocation());
7188   TL.setRAngleLoc(ReadSourceLocation());
7189   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
7190     TL.setArgLocInfo(
7191         I,
7192         Reader->GetTemplateArgumentLocInfo(
7193             *F, TL.getTypePtr()->getArg(I).getKind(), Record, Idx));
7194 }
7195 
7196 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
7197   TL.setEllipsisLoc(ReadSourceLocation());
7198 }
7199 
7200 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
7201   TL.setNameLoc(ReadSourceLocation());
7202 }
7203 
7204 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
7205   if (TL.getNumProtocols()) {
7206     TL.setProtocolLAngleLoc(ReadSourceLocation());
7207     TL.setProtocolRAngleLoc(ReadSourceLocation());
7208   }
7209   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
7210     TL.setProtocolLoc(i, ReadSourceLocation());
7211 }
7212 
7213 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
7214   TL.setHasBaseTypeAsWritten(Record[Idx++]);
7215   TL.setTypeArgsLAngleLoc(ReadSourceLocation());
7216   TL.setTypeArgsRAngleLoc(ReadSourceLocation());
7217   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
7218     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
7219   TL.setProtocolLAngleLoc(ReadSourceLocation());
7220   TL.setProtocolRAngleLoc(ReadSourceLocation());
7221   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
7222     TL.setProtocolLoc(i, ReadSourceLocation());
7223 }
7224 
7225 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
7226   TL.setStarLoc(ReadSourceLocation());
7227 }
7228 
7229 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
7230   TL.setKWLoc(ReadSourceLocation());
7231   TL.setLParenLoc(ReadSourceLocation());
7232   TL.setRParenLoc(ReadSourceLocation());
7233 }
7234 
7235 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
7236   TL.setKWLoc(ReadSourceLocation());
7237 }
7238 
7239 void ASTReader::ReadTypeLoc(ModuleFile &F, const ASTReader::RecordData &Record,
7240                             unsigned &Idx, TypeLoc TL) {
7241   TypeLocReader TLR(F, *this, Record, Idx);
7242   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
7243     TLR.Visit(TL);
7244 }
7245 
7246 TypeSourceInfo *
7247 ASTReader::GetTypeSourceInfo(ModuleFile &F, const ASTReader::RecordData &Record,
7248                              unsigned &Idx) {
7249   QualType InfoTy = readType(F, Record, Idx);
7250   if (InfoTy.isNull())
7251     return nullptr;
7252 
7253   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
7254   ReadTypeLoc(F, Record, Idx, TInfo->getTypeLoc());
7255   return TInfo;
7256 }
7257 
7258 QualType ASTReader::GetType(TypeID ID) {
7259   assert(ContextObj && "reading type with no AST context");
7260   ASTContext &Context = *ContextObj;
7261 
7262   unsigned FastQuals = ID & Qualifiers::FastMask;
7263   unsigned Index = ID >> Qualifiers::FastWidth;
7264 
7265   if (Index < NUM_PREDEF_TYPE_IDS) {
7266     QualType T;
7267     switch ((PredefinedTypeIDs)Index) {
7268     case PREDEF_TYPE_NULL_ID:
7269       return QualType();
7270     case PREDEF_TYPE_VOID_ID:
7271       T = Context.VoidTy;
7272       break;
7273     case PREDEF_TYPE_BOOL_ID:
7274       T = Context.BoolTy;
7275       break;
7276     case PREDEF_TYPE_CHAR_U_ID:
7277     case PREDEF_TYPE_CHAR_S_ID:
7278       // FIXME: Check that the signedness of CharTy is correct!
7279       T = Context.CharTy;
7280       break;
7281     case PREDEF_TYPE_UCHAR_ID:
7282       T = Context.UnsignedCharTy;
7283       break;
7284     case PREDEF_TYPE_USHORT_ID:
7285       T = Context.UnsignedShortTy;
7286       break;
7287     case PREDEF_TYPE_UINT_ID:
7288       T = Context.UnsignedIntTy;
7289       break;
7290     case PREDEF_TYPE_ULONG_ID:
7291       T = Context.UnsignedLongTy;
7292       break;
7293     case PREDEF_TYPE_ULONGLONG_ID:
7294       T = Context.UnsignedLongLongTy;
7295       break;
7296     case PREDEF_TYPE_UINT128_ID:
7297       T = Context.UnsignedInt128Ty;
7298       break;
7299     case PREDEF_TYPE_SCHAR_ID:
7300       T = Context.SignedCharTy;
7301       break;
7302     case PREDEF_TYPE_WCHAR_ID:
7303       T = Context.WCharTy;
7304       break;
7305     case PREDEF_TYPE_SHORT_ID:
7306       T = Context.ShortTy;
7307       break;
7308     case PREDEF_TYPE_INT_ID:
7309       T = Context.IntTy;
7310       break;
7311     case PREDEF_TYPE_LONG_ID:
7312       T = Context.LongTy;
7313       break;
7314     case PREDEF_TYPE_LONGLONG_ID:
7315       T = Context.LongLongTy;
7316       break;
7317     case PREDEF_TYPE_INT128_ID:
7318       T = Context.Int128Ty;
7319       break;
7320     case PREDEF_TYPE_HALF_ID:
7321       T = Context.HalfTy;
7322       break;
7323     case PREDEF_TYPE_FLOAT_ID:
7324       T = Context.FloatTy;
7325       break;
7326     case PREDEF_TYPE_DOUBLE_ID:
7327       T = Context.DoubleTy;
7328       break;
7329     case PREDEF_TYPE_LONGDOUBLE_ID:
7330       T = Context.LongDoubleTy;
7331       break;
7332     case PREDEF_TYPE_SHORT_ACCUM_ID:
7333       T = Context.ShortAccumTy;
7334       break;
7335     case PREDEF_TYPE_ACCUM_ID:
7336       T = Context.AccumTy;
7337       break;
7338     case PREDEF_TYPE_LONG_ACCUM_ID:
7339       T = Context.LongAccumTy;
7340       break;
7341     case PREDEF_TYPE_USHORT_ACCUM_ID:
7342       T = Context.UnsignedShortAccumTy;
7343       break;
7344     case PREDEF_TYPE_UACCUM_ID:
7345       T = Context.UnsignedAccumTy;
7346       break;
7347     case PREDEF_TYPE_ULONG_ACCUM_ID:
7348       T = Context.UnsignedLongAccumTy;
7349       break;
7350     case PREDEF_TYPE_SHORT_FRACT_ID:
7351       T = Context.ShortFractTy;
7352       break;
7353     case PREDEF_TYPE_FRACT_ID:
7354       T = Context.FractTy;
7355       break;
7356     case PREDEF_TYPE_LONG_FRACT_ID:
7357       T = Context.LongFractTy;
7358       break;
7359     case PREDEF_TYPE_USHORT_FRACT_ID:
7360       T = Context.UnsignedShortFractTy;
7361       break;
7362     case PREDEF_TYPE_UFRACT_ID:
7363       T = Context.UnsignedFractTy;
7364       break;
7365     case PREDEF_TYPE_ULONG_FRACT_ID:
7366       T = Context.UnsignedLongFractTy;
7367       break;
7368     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
7369       T = Context.SatShortAccumTy;
7370       break;
7371     case PREDEF_TYPE_SAT_ACCUM_ID:
7372       T = Context.SatAccumTy;
7373       break;
7374     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
7375       T = Context.SatLongAccumTy;
7376       break;
7377     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
7378       T = Context.SatUnsignedShortAccumTy;
7379       break;
7380     case PREDEF_TYPE_SAT_UACCUM_ID:
7381       T = Context.SatUnsignedAccumTy;
7382       break;
7383     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
7384       T = Context.SatUnsignedLongAccumTy;
7385       break;
7386     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
7387       T = Context.SatShortFractTy;
7388       break;
7389     case PREDEF_TYPE_SAT_FRACT_ID:
7390       T = Context.SatFractTy;
7391       break;
7392     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
7393       T = Context.SatLongFractTy;
7394       break;
7395     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
7396       T = Context.SatUnsignedShortFractTy;
7397       break;
7398     case PREDEF_TYPE_SAT_UFRACT_ID:
7399       T = Context.SatUnsignedFractTy;
7400       break;
7401     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
7402       T = Context.SatUnsignedLongFractTy;
7403       break;
7404     case PREDEF_TYPE_FLOAT16_ID:
7405       T = Context.Float16Ty;
7406       break;
7407     case PREDEF_TYPE_FLOAT128_ID:
7408       T = Context.Float128Ty;
7409       break;
7410     case PREDEF_TYPE_OVERLOAD_ID:
7411       T = Context.OverloadTy;
7412       break;
7413     case PREDEF_TYPE_BOUND_MEMBER:
7414       T = Context.BoundMemberTy;
7415       break;
7416     case PREDEF_TYPE_PSEUDO_OBJECT:
7417       T = Context.PseudoObjectTy;
7418       break;
7419     case PREDEF_TYPE_DEPENDENT_ID:
7420       T = Context.DependentTy;
7421       break;
7422     case PREDEF_TYPE_UNKNOWN_ANY:
7423       T = Context.UnknownAnyTy;
7424       break;
7425     case PREDEF_TYPE_NULLPTR_ID:
7426       T = Context.NullPtrTy;
7427       break;
7428     case PREDEF_TYPE_CHAR8_ID:
7429       T = Context.Char8Ty;
7430       break;
7431     case PREDEF_TYPE_CHAR16_ID:
7432       T = Context.Char16Ty;
7433       break;
7434     case PREDEF_TYPE_CHAR32_ID:
7435       T = Context.Char32Ty;
7436       break;
7437     case PREDEF_TYPE_OBJC_ID:
7438       T = Context.ObjCBuiltinIdTy;
7439       break;
7440     case PREDEF_TYPE_OBJC_CLASS:
7441       T = Context.ObjCBuiltinClassTy;
7442       break;
7443     case PREDEF_TYPE_OBJC_SEL:
7444       T = Context.ObjCBuiltinSelTy;
7445       break;
7446 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7447     case PREDEF_TYPE_##Id##_ID: \
7448       T = Context.SingletonId; \
7449       break;
7450 #include "clang/Basic/OpenCLImageTypes.def"
7451 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7452     case PREDEF_TYPE_##Id##_ID: \
7453       T = Context.Id##Ty; \
7454       break;
7455 #include "clang/Basic/OpenCLExtensionTypes.def"
7456     case PREDEF_TYPE_SAMPLER_ID:
7457       T = Context.OCLSamplerTy;
7458       break;
7459     case PREDEF_TYPE_EVENT_ID:
7460       T = Context.OCLEventTy;
7461       break;
7462     case PREDEF_TYPE_CLK_EVENT_ID:
7463       T = Context.OCLClkEventTy;
7464       break;
7465     case PREDEF_TYPE_QUEUE_ID:
7466       T = Context.OCLQueueTy;
7467       break;
7468     case PREDEF_TYPE_RESERVE_ID_ID:
7469       T = Context.OCLReserveIDTy;
7470       break;
7471     case PREDEF_TYPE_AUTO_DEDUCT:
7472       T = Context.getAutoDeductType();
7473       break;
7474     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7475       T = Context.getAutoRRefDeductType();
7476       break;
7477     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7478       T = Context.ARCUnbridgedCastTy;
7479       break;
7480     case PREDEF_TYPE_BUILTIN_FN:
7481       T = Context.BuiltinFnTy;
7482       break;
7483     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7484       T = Context.OMPArraySectionTy;
7485       break;
7486 #define SVE_TYPE(Name, Id, SingletonId) \
7487     case PREDEF_TYPE_##Id##_ID: \
7488       T = Context.SingletonId; \
7489       break;
7490 #include "clang/Basic/AArch64SVEACLETypes.def"
7491     }
7492 
7493     assert(!T.isNull() && "Unknown predefined type");
7494     return T.withFastQualifiers(FastQuals);
7495   }
7496 
7497   Index -= NUM_PREDEF_TYPE_IDS;
7498   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7499   if (TypesLoaded[Index].isNull()) {
7500     TypesLoaded[Index] = readTypeRecord(Index);
7501     if (TypesLoaded[Index].isNull())
7502       return QualType();
7503 
7504     TypesLoaded[Index]->setFromAST();
7505     if (DeserializationListener)
7506       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7507                                         TypesLoaded[Index]);
7508   }
7509 
7510   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7511 }
7512 
7513 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7514   return GetType(getGlobalTypeID(F, LocalID));
7515 }
7516 
7517 serialization::TypeID
7518 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7519   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7520   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7521 
7522   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7523     return LocalID;
7524 
7525   if (!F.ModuleOffsetMap.empty())
7526     ReadModuleOffsetMap(F);
7527 
7528   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7529     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7530   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7531 
7532   unsigned GlobalIndex = LocalIndex + I->second;
7533   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7534 }
7535 
7536 TemplateArgumentLocInfo
7537 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
7538                                       TemplateArgument::ArgKind Kind,
7539                                       const RecordData &Record,
7540                                       unsigned &Index) {
7541   switch (Kind) {
7542   case TemplateArgument::Expression:
7543     return ReadExpr(F);
7544   case TemplateArgument::Type:
7545     return GetTypeSourceInfo(F, Record, Index);
7546   case TemplateArgument::Template: {
7547     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
7548                                                                      Index);
7549     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
7550     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7551                                    SourceLocation());
7552   }
7553   case TemplateArgument::TemplateExpansion: {
7554     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
7555                                                                      Index);
7556     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
7557     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
7558     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
7559                                    EllipsisLoc);
7560   }
7561   case TemplateArgument::Null:
7562   case TemplateArgument::Integral:
7563   case TemplateArgument::Declaration:
7564   case TemplateArgument::NullPtr:
7565   case TemplateArgument::Pack:
7566     // FIXME: Is this right?
7567     return TemplateArgumentLocInfo();
7568   }
7569   llvm_unreachable("unexpected template argument loc");
7570 }
7571 
7572 TemplateArgumentLoc
7573 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
7574                                    const RecordData &Record, unsigned &Index) {
7575   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
7576 
7577   if (Arg.getKind() == TemplateArgument::Expression) {
7578     if (Record[Index++]) // bool InfoHasSameExpr.
7579       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7580   }
7581   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
7582                                                              Record, Index));
7583 }
7584 
7585 const ASTTemplateArgumentListInfo*
7586 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
7587                                            const RecordData &Record,
7588                                            unsigned &Index) {
7589   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
7590   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
7591   unsigned NumArgsAsWritten = Record[Index++];
7592   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7593   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7594     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
7595   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7596 }
7597 
7598 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7599   return GetDecl(ID);
7600 }
7601 
7602 void ASTReader::CompleteRedeclChain(const Decl *D) {
7603   if (NumCurrentElementsDeserializing) {
7604     // We arrange to not care about the complete redeclaration chain while we're
7605     // deserializing. Just remember that the AST has marked this one as complete
7606     // but that it's not actually complete yet, so we know we still need to
7607     // complete it later.
7608     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7609     return;
7610   }
7611 
7612   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7613 
7614   // If this is a named declaration, complete it by looking it up
7615   // within its context.
7616   //
7617   // FIXME: Merging a function definition should merge
7618   // all mergeable entities within it.
7619   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7620       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7621     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7622       if (!getContext().getLangOpts().CPlusPlus &&
7623           isa<TranslationUnitDecl>(DC)) {
7624         // Outside of C++, we don't have a lookup table for the TU, so update
7625         // the identifier instead. (For C++ modules, we don't store decls
7626         // in the serialized identifier table, so we do the lookup in the TU.)
7627         auto *II = Name.getAsIdentifierInfo();
7628         assert(II && "non-identifier name in C?");
7629         if (II->isOutOfDate())
7630           updateOutOfDateIdentifier(*II);
7631       } else
7632         DC->lookup(Name);
7633     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7634       // Find all declarations of this kind from the relevant context.
7635       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7636         auto *DC = cast<DeclContext>(DCDecl);
7637         SmallVector<Decl*, 8> Decls;
7638         FindExternalLexicalDecls(
7639             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7640       }
7641     }
7642   }
7643 
7644   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7645     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7646   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7647     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7648   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7649     if (auto *Template = FD->getPrimaryTemplate())
7650       Template->LoadLazySpecializations();
7651   }
7652 }
7653 
7654 CXXCtorInitializer **
7655 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7656   RecordLocation Loc = getLocalBitOffset(Offset);
7657   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7658   SavedStreamPosition SavedPosition(Cursor);
7659   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7660     Error(std::move(Err));
7661     return nullptr;
7662   }
7663   ReadingKindTracker ReadingKind(Read_Decl, *this);
7664 
7665   RecordData Record;
7666   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7667   if (!MaybeCode) {
7668     Error(MaybeCode.takeError());
7669     return nullptr;
7670   }
7671   unsigned Code = MaybeCode.get();
7672 
7673   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record);
7674   if (!MaybeRecCode) {
7675     Error(MaybeRecCode.takeError());
7676     return nullptr;
7677   }
7678   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7679     Error("malformed AST file: missing C++ ctor initializers");
7680     return nullptr;
7681   }
7682 
7683   unsigned Idx = 0;
7684   return ReadCXXCtorInitializers(*Loc.F, Record, Idx);
7685 }
7686 
7687 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7688   assert(ContextObj && "reading base specifiers with no AST context");
7689   ASTContext &Context = *ContextObj;
7690 
7691   RecordLocation Loc = getLocalBitOffset(Offset);
7692   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7693   SavedStreamPosition SavedPosition(Cursor);
7694   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7695     Error(std::move(Err));
7696     return nullptr;
7697   }
7698   ReadingKindTracker ReadingKind(Read_Decl, *this);
7699   RecordData Record;
7700 
7701   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7702   if (!MaybeCode) {
7703     Error(MaybeCode.takeError());
7704     return nullptr;
7705   }
7706   unsigned Code = MaybeCode.get();
7707 
7708   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record);
7709   if (!MaybeRecCode) {
7710     Error(MaybeCode.takeError());
7711     return nullptr;
7712   }
7713   unsigned RecCode = MaybeRecCode.get();
7714 
7715   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7716     Error("malformed AST file: missing C++ base specifiers");
7717     return nullptr;
7718   }
7719 
7720   unsigned Idx = 0;
7721   unsigned NumBases = Record[Idx++];
7722   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7723   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7724   for (unsigned I = 0; I != NumBases; ++I)
7725     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
7726   return Bases;
7727 }
7728 
7729 serialization::DeclID
7730 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7731   if (LocalID < NUM_PREDEF_DECL_IDS)
7732     return LocalID;
7733 
7734   if (!F.ModuleOffsetMap.empty())
7735     ReadModuleOffsetMap(F);
7736 
7737   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7738     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7739   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7740 
7741   return LocalID + I->second;
7742 }
7743 
7744 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7745                                    ModuleFile &M) const {
7746   // Predefined decls aren't from any module.
7747   if (ID < NUM_PREDEF_DECL_IDS)
7748     return false;
7749 
7750   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7751          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7752 }
7753 
7754 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7755   if (!D->isFromASTFile())
7756     return nullptr;
7757   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7758   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7759   return I->second;
7760 }
7761 
7762 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7763   if (ID < NUM_PREDEF_DECL_IDS)
7764     return SourceLocation();
7765 
7766   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7767 
7768   if (Index > DeclsLoaded.size()) {
7769     Error("declaration ID out-of-range for AST file");
7770     return SourceLocation();
7771   }
7772 
7773   if (Decl *D = DeclsLoaded[Index])
7774     return D->getLocation();
7775 
7776   SourceLocation Loc;
7777   DeclCursorForID(ID, Loc);
7778   return Loc;
7779 }
7780 
7781 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7782   switch (ID) {
7783   case PREDEF_DECL_NULL_ID:
7784     return nullptr;
7785 
7786   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7787     return Context.getTranslationUnitDecl();
7788 
7789   case PREDEF_DECL_OBJC_ID_ID:
7790     return Context.getObjCIdDecl();
7791 
7792   case PREDEF_DECL_OBJC_SEL_ID:
7793     return Context.getObjCSelDecl();
7794 
7795   case PREDEF_DECL_OBJC_CLASS_ID:
7796     return Context.getObjCClassDecl();
7797 
7798   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7799     return Context.getObjCProtocolDecl();
7800 
7801   case PREDEF_DECL_INT_128_ID:
7802     return Context.getInt128Decl();
7803 
7804   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7805     return Context.getUInt128Decl();
7806 
7807   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7808     return Context.getObjCInstanceTypeDecl();
7809 
7810   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7811     return Context.getBuiltinVaListDecl();
7812 
7813   case PREDEF_DECL_VA_LIST_TAG:
7814     return Context.getVaListTagDecl();
7815 
7816   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7817     return Context.getBuiltinMSVaListDecl();
7818 
7819   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7820     return Context.getExternCContextDecl();
7821 
7822   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7823     return Context.getMakeIntegerSeqDecl();
7824 
7825   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7826     return Context.getCFConstantStringDecl();
7827 
7828   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7829     return Context.getCFConstantStringTagDecl();
7830 
7831   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7832     return Context.getTypePackElementDecl();
7833   }
7834   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7835 }
7836 
7837 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7838   assert(ContextObj && "reading decl with no AST context");
7839   if (ID < NUM_PREDEF_DECL_IDS) {
7840     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7841     if (D) {
7842       // Track that we have merged the declaration with ID \p ID into the
7843       // pre-existing predefined declaration \p D.
7844       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7845       if (Merged.empty())
7846         Merged.push_back(ID);
7847     }
7848     return D;
7849   }
7850 
7851   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7852 
7853   if (Index >= DeclsLoaded.size()) {
7854     assert(0 && "declaration ID out-of-range for AST file");
7855     Error("declaration ID out-of-range for AST file");
7856     return nullptr;
7857   }
7858 
7859   return DeclsLoaded[Index];
7860 }
7861 
7862 Decl *ASTReader::GetDecl(DeclID ID) {
7863   if (ID < NUM_PREDEF_DECL_IDS)
7864     return GetExistingDecl(ID);
7865 
7866   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7867 
7868   if (Index >= DeclsLoaded.size()) {
7869     assert(0 && "declaration ID out-of-range for AST file");
7870     Error("declaration ID out-of-range for AST file");
7871     return nullptr;
7872   }
7873 
7874   if (!DeclsLoaded[Index]) {
7875     ReadDeclRecord(ID);
7876     if (DeserializationListener)
7877       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7878   }
7879 
7880   return DeclsLoaded[Index];
7881 }
7882 
7883 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7884                                                   DeclID GlobalID) {
7885   if (GlobalID < NUM_PREDEF_DECL_IDS)
7886     return GlobalID;
7887 
7888   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7889   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7890   ModuleFile *Owner = I->second;
7891 
7892   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7893     = M.GlobalToLocalDeclIDs.find(Owner);
7894   if (Pos == M.GlobalToLocalDeclIDs.end())
7895     return 0;
7896 
7897   return GlobalID - Owner->BaseDeclID + Pos->second;
7898 }
7899 
7900 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7901                                             const RecordData &Record,
7902                                             unsigned &Idx) {
7903   if (Idx >= Record.size()) {
7904     Error("Corrupted AST file");
7905     return 0;
7906   }
7907 
7908   return getGlobalDeclID(F, Record[Idx++]);
7909 }
7910 
7911 /// Resolve the offset of a statement into a statement.
7912 ///
7913 /// This operation will read a new statement from the external
7914 /// source each time it is called, and is meant to be used via a
7915 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7916 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7917   // Switch case IDs are per Decl.
7918   ClearSwitchCaseIDs();
7919 
7920   // Offset here is a global offset across the entire chain.
7921   RecordLocation Loc = getLocalBitOffset(Offset);
7922   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7923     Error(std::move(Err));
7924     return nullptr;
7925   }
7926   assert(NumCurrentElementsDeserializing == 0 &&
7927          "should not be called while already deserializing");
7928   Deserializing D(this);
7929   return ReadStmtFromStream(*Loc.F);
7930 }
7931 
7932 void ASTReader::FindExternalLexicalDecls(
7933     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7934     SmallVectorImpl<Decl *> &Decls) {
7935   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7936 
7937   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7938     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7939     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7940       auto K = (Decl::Kind)+LexicalDecls[I];
7941       if (!IsKindWeWant(K))
7942         continue;
7943 
7944       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7945 
7946       // Don't add predefined declarations to the lexical context more
7947       // than once.
7948       if (ID < NUM_PREDEF_DECL_IDS) {
7949         if (PredefsVisited[ID])
7950           continue;
7951 
7952         PredefsVisited[ID] = true;
7953       }
7954 
7955       if (Decl *D = GetLocalDecl(*M, ID)) {
7956         assert(D->getKind() == K && "wrong kind for lexical decl");
7957         if (!DC->isDeclInLexicalTraversal(D))
7958           Decls.push_back(D);
7959       }
7960     }
7961   };
7962 
7963   if (isa<TranslationUnitDecl>(DC)) {
7964     for (auto Lexical : TULexicalDecls)
7965       Visit(Lexical.first, Lexical.second);
7966   } else {
7967     auto I = LexicalDecls.find(DC);
7968     if (I != LexicalDecls.end())
7969       Visit(I->second.first, I->second.second);
7970   }
7971 
7972   ++NumLexicalDeclContextsRead;
7973 }
7974 
7975 namespace {
7976 
7977 class DeclIDComp {
7978   ASTReader &Reader;
7979   ModuleFile &Mod;
7980 
7981 public:
7982   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7983 
7984   bool operator()(LocalDeclID L, LocalDeclID R) const {
7985     SourceLocation LHS = getLocation(L);
7986     SourceLocation RHS = getLocation(R);
7987     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7988   }
7989 
7990   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7991     SourceLocation RHS = getLocation(R);
7992     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7993   }
7994 
7995   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7996     SourceLocation LHS = getLocation(L);
7997     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7998   }
7999 
8000   SourceLocation getLocation(LocalDeclID ID) const {
8001     return Reader.getSourceManager().getFileLoc(
8002             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
8003   }
8004 };
8005 
8006 } // namespace
8007 
8008 void ASTReader::FindFileRegionDecls(FileID File,
8009                                     unsigned Offset, unsigned Length,
8010                                     SmallVectorImpl<Decl *> &Decls) {
8011   SourceManager &SM = getSourceManager();
8012 
8013   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
8014   if (I == FileDeclIDs.end())
8015     return;
8016 
8017   FileDeclsInfo &DInfo = I->second;
8018   if (DInfo.Decls.empty())
8019     return;
8020 
8021   SourceLocation
8022     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
8023   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
8024 
8025   DeclIDComp DIDComp(*this, *DInfo.Mod);
8026   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
8027       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
8028   if (BeginIt != DInfo.Decls.begin())
8029     --BeginIt;
8030 
8031   // If we are pointing at a top-level decl inside an objc container, we need
8032   // to backtrack until we find it otherwise we will fail to report that the
8033   // region overlaps with an objc container.
8034   while (BeginIt != DInfo.Decls.begin() &&
8035          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
8036              ->isTopLevelDeclInObjCContainer())
8037     --BeginIt;
8038 
8039   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
8040       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
8041   if (EndIt != DInfo.Decls.end())
8042     ++EndIt;
8043 
8044   for (ArrayRef<serialization::LocalDeclID>::iterator
8045          DIt = BeginIt; DIt != EndIt; ++DIt)
8046     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
8047 }
8048 
8049 bool
8050 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
8051                                           DeclarationName Name) {
8052   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
8053          "DeclContext has no visible decls in storage");
8054   if (!Name)
8055     return false;
8056 
8057   auto It = Lookups.find(DC);
8058   if (It == Lookups.end())
8059     return false;
8060 
8061   Deserializing LookupResults(this);
8062 
8063   // Load the list of declarations.
8064   SmallVector<NamedDecl *, 64> Decls;
8065   for (DeclID ID : It->second.Table.find(Name)) {
8066     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
8067     if (ND->getDeclName() == Name)
8068       Decls.push_back(ND);
8069   }
8070 
8071   ++NumVisibleDeclContextsRead;
8072   SetExternalVisibleDeclsForName(DC, Name, Decls);
8073   return !Decls.empty();
8074 }
8075 
8076 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
8077   if (!DC->hasExternalVisibleStorage())
8078     return;
8079 
8080   auto It = Lookups.find(DC);
8081   assert(It != Lookups.end() &&
8082          "have external visible storage but no lookup tables");
8083 
8084   DeclsMap Decls;
8085 
8086   for (DeclID ID : It->second.Table.findAll()) {
8087     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
8088     Decls[ND->getDeclName()].push_back(ND);
8089   }
8090 
8091   ++NumVisibleDeclContextsRead;
8092 
8093   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
8094     SetExternalVisibleDeclsForName(DC, I->first, I->second);
8095   }
8096   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
8097 }
8098 
8099 const serialization::reader::DeclContextLookupTable *
8100 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
8101   auto I = Lookups.find(Primary);
8102   return I == Lookups.end() ? nullptr : &I->second;
8103 }
8104 
8105 /// Under non-PCH compilation the consumer receives the objc methods
8106 /// before receiving the implementation, and codegen depends on this.
8107 /// We simulate this by deserializing and passing to consumer the methods of the
8108 /// implementation before passing the deserialized implementation decl.
8109 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
8110                                        ASTConsumer *Consumer) {
8111   assert(ImplD && Consumer);
8112 
8113   for (auto *I : ImplD->methods())
8114     Consumer->HandleInterestingDecl(DeclGroupRef(I));
8115 
8116   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
8117 }
8118 
8119 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
8120   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
8121     PassObjCImplDeclToConsumer(ImplD, Consumer);
8122   else
8123     Consumer->HandleInterestingDecl(DeclGroupRef(D));
8124 }
8125 
8126 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
8127   this->Consumer = Consumer;
8128 
8129   if (Consumer)
8130     PassInterestingDeclsToConsumer();
8131 
8132   if (DeserializationListener)
8133     DeserializationListener->ReaderInitialized(this);
8134 }
8135 
8136 void ASTReader::PrintStats() {
8137   std::fprintf(stderr, "*** AST File Statistics:\n");
8138 
8139   unsigned NumTypesLoaded
8140     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
8141                                       QualType());
8142   unsigned NumDeclsLoaded
8143     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
8144                                       (Decl *)nullptr);
8145   unsigned NumIdentifiersLoaded
8146     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
8147                                             IdentifiersLoaded.end(),
8148                                             (IdentifierInfo *)nullptr);
8149   unsigned NumMacrosLoaded
8150     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
8151                                        MacrosLoaded.end(),
8152                                        (MacroInfo *)nullptr);
8153   unsigned NumSelectorsLoaded
8154     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
8155                                           SelectorsLoaded.end(),
8156                                           Selector());
8157 
8158   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
8159     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
8160                  NumSLocEntriesRead, TotalNumSLocEntries,
8161                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
8162   if (!TypesLoaded.empty())
8163     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
8164                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
8165                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
8166   if (!DeclsLoaded.empty())
8167     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
8168                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
8169                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
8170   if (!IdentifiersLoaded.empty())
8171     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
8172                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
8173                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
8174   if (!MacrosLoaded.empty())
8175     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
8176                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
8177                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
8178   if (!SelectorsLoaded.empty())
8179     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
8180                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
8181                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
8182   if (TotalNumStatements)
8183     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
8184                  NumStatementsRead, TotalNumStatements,
8185                  ((float)NumStatementsRead/TotalNumStatements * 100));
8186   if (TotalNumMacros)
8187     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
8188                  NumMacrosRead, TotalNumMacros,
8189                  ((float)NumMacrosRead/TotalNumMacros * 100));
8190   if (TotalLexicalDeclContexts)
8191     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
8192                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
8193                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
8194                   * 100));
8195   if (TotalVisibleDeclContexts)
8196     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
8197                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
8198                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
8199                   * 100));
8200   if (TotalNumMethodPoolEntries)
8201     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
8202                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
8203                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
8204                   * 100));
8205   if (NumMethodPoolLookups)
8206     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
8207                  NumMethodPoolHits, NumMethodPoolLookups,
8208                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
8209   if (NumMethodPoolTableLookups)
8210     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
8211                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
8212                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
8213                   * 100.0));
8214   if (NumIdentifierLookupHits)
8215     std::fprintf(stderr,
8216                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
8217                  NumIdentifierLookupHits, NumIdentifierLookups,
8218                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
8219 
8220   if (GlobalIndex) {
8221     std::fprintf(stderr, "\n");
8222     GlobalIndex->printStats();
8223   }
8224 
8225   std::fprintf(stderr, "\n");
8226   dump();
8227   std::fprintf(stderr, "\n");
8228 }
8229 
8230 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
8231 LLVM_DUMP_METHOD static void
8232 dumpModuleIDMap(StringRef Name,
8233                 const ContinuousRangeMap<Key, ModuleFile *,
8234                                          InitialCapacity> &Map) {
8235   if (Map.begin() == Map.end())
8236     return;
8237 
8238   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
8239 
8240   llvm::errs() << Name << ":\n";
8241   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
8242        I != IEnd; ++I) {
8243     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
8244       << "\n";
8245   }
8246 }
8247 
8248 LLVM_DUMP_METHOD void ASTReader::dump() {
8249   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
8250   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
8251   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
8252   dumpModuleIDMap("Global type map", GlobalTypeMap);
8253   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
8254   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
8255   dumpModuleIDMap("Global macro map", GlobalMacroMap);
8256   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
8257   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
8258   dumpModuleIDMap("Global preprocessed entity map",
8259                   GlobalPreprocessedEntityMap);
8260 
8261   llvm::errs() << "\n*** PCH/Modules Loaded:";
8262   for (ModuleFile &M : ModuleMgr)
8263     M.dump();
8264 }
8265 
8266 /// Return the amount of memory used by memory buffers, breaking down
8267 /// by heap-backed versus mmap'ed memory.
8268 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
8269   for (ModuleFile &I : ModuleMgr) {
8270     if (llvm::MemoryBuffer *buf = I.Buffer) {
8271       size_t bytes = buf->getBufferSize();
8272       switch (buf->getBufferKind()) {
8273         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
8274           sizes.malloc_bytes += bytes;
8275           break;
8276         case llvm::MemoryBuffer::MemoryBuffer_MMap:
8277           sizes.mmap_bytes += bytes;
8278           break;
8279       }
8280     }
8281   }
8282 }
8283 
8284 void ASTReader::InitializeSema(Sema &S) {
8285   SemaObj = &S;
8286   S.addExternalSource(this);
8287 
8288   // Makes sure any declarations that were deserialized "too early"
8289   // still get added to the identifier's declaration chains.
8290   for (uint64_t ID : PreloadedDeclIDs) {
8291     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
8292     pushExternalDeclIntoScope(D, D->getDeclName());
8293   }
8294   PreloadedDeclIDs.clear();
8295 
8296   // FIXME: What happens if these are changed by a module import?
8297   if (!FPPragmaOptions.empty()) {
8298     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
8299     SemaObj->FPFeatures = FPOptions(FPPragmaOptions[0]);
8300   }
8301 
8302   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
8303   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
8304   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
8305 
8306   UpdateSema();
8307 }
8308 
8309 void ASTReader::UpdateSema() {
8310   assert(SemaObj && "no Sema to update");
8311 
8312   // Load the offsets of the declarations that Sema references.
8313   // They will be lazily deserialized when needed.
8314   if (!SemaDeclRefs.empty()) {
8315     assert(SemaDeclRefs.size() % 3 == 0);
8316     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
8317       if (!SemaObj->StdNamespace)
8318         SemaObj->StdNamespace = SemaDeclRefs[I];
8319       if (!SemaObj->StdBadAlloc)
8320         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
8321       if (!SemaObj->StdAlignValT)
8322         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
8323     }
8324     SemaDeclRefs.clear();
8325   }
8326 
8327   // Update the state of pragmas. Use the same API as if we had encountered the
8328   // pragma in the source.
8329   if(OptimizeOffPragmaLocation.isValid())
8330     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
8331   if (PragmaMSStructState != -1)
8332     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
8333   if (PointersToMembersPragmaLocation.isValid()) {
8334     SemaObj->ActOnPragmaMSPointersToMembers(
8335         (LangOptions::PragmaMSPointersToMembersKind)
8336             PragmaMSPointersToMembersState,
8337         PointersToMembersPragmaLocation);
8338   }
8339   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
8340 
8341   if (PragmaPackCurrentValue) {
8342     // The bottom of the stack might have a default value. It must be adjusted
8343     // to the current value to ensure that the packing state is preserved after
8344     // popping entries that were included/imported from a PCH/module.
8345     bool DropFirst = false;
8346     if (!PragmaPackStack.empty() &&
8347         PragmaPackStack.front().Location.isInvalid()) {
8348       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
8349              "Expected a default alignment value");
8350       SemaObj->PackStack.Stack.emplace_back(
8351           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
8352           SemaObj->PackStack.CurrentPragmaLocation,
8353           PragmaPackStack.front().PushLocation);
8354       DropFirst = true;
8355     }
8356     for (const auto &Entry :
8357          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
8358       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
8359                                             Entry.Location, Entry.PushLocation);
8360     if (PragmaPackCurrentLocation.isInvalid()) {
8361       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
8362              "Expected a default alignment value");
8363       // Keep the current values.
8364     } else {
8365       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
8366       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
8367     }
8368   }
8369 }
8370 
8371 IdentifierInfo *ASTReader::get(StringRef Name) {
8372   // Note that we are loading an identifier.
8373   Deserializing AnIdentifier(this);
8374 
8375   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8376                                   NumIdentifierLookups,
8377                                   NumIdentifierLookupHits);
8378 
8379   // We don't need to do identifier table lookups in C++ modules (we preload
8380   // all interesting declarations, and don't need to use the scope for name
8381   // lookups). Perform the lookup in PCH files, though, since we don't build
8382   // a complete initial identifier table if we're carrying on from a PCH.
8383   if (PP.getLangOpts().CPlusPlus) {
8384     for (auto F : ModuleMgr.pch_modules())
8385       if (Visitor(*F))
8386         break;
8387   } else {
8388     // If there is a global index, look there first to determine which modules
8389     // provably do not have any results for this identifier.
8390     GlobalModuleIndex::HitSet Hits;
8391     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8392     if (!loadGlobalIndex()) {
8393       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8394         HitsPtr = &Hits;
8395       }
8396     }
8397 
8398     ModuleMgr.visit(Visitor, HitsPtr);
8399   }
8400 
8401   IdentifierInfo *II = Visitor.getIdentifierInfo();
8402   markIdentifierUpToDate(II);
8403   return II;
8404 }
8405 
8406 namespace clang {
8407 
8408   /// An identifier-lookup iterator that enumerates all of the
8409   /// identifiers stored within a set of AST files.
8410   class ASTIdentifierIterator : public IdentifierIterator {
8411     /// The AST reader whose identifiers are being enumerated.
8412     const ASTReader &Reader;
8413 
8414     /// The current index into the chain of AST files stored in
8415     /// the AST reader.
8416     unsigned Index;
8417 
8418     /// The current position within the identifier lookup table
8419     /// of the current AST file.
8420     ASTIdentifierLookupTable::key_iterator Current;
8421 
8422     /// The end position within the identifier lookup table of
8423     /// the current AST file.
8424     ASTIdentifierLookupTable::key_iterator End;
8425 
8426     /// Whether to skip any modules in the ASTReader.
8427     bool SkipModules;
8428 
8429   public:
8430     explicit ASTIdentifierIterator(const ASTReader &Reader,
8431                                    bool SkipModules = false);
8432 
8433     StringRef Next() override;
8434   };
8435 
8436 } // namespace clang
8437 
8438 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8439                                              bool SkipModules)
8440     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8441 }
8442 
8443 StringRef ASTIdentifierIterator::Next() {
8444   while (Current == End) {
8445     // If we have exhausted all of our AST files, we're done.
8446     if (Index == 0)
8447       return StringRef();
8448 
8449     --Index;
8450     ModuleFile &F = Reader.ModuleMgr[Index];
8451     if (SkipModules && F.isModule())
8452       continue;
8453 
8454     ASTIdentifierLookupTable *IdTable =
8455         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8456     Current = IdTable->key_begin();
8457     End = IdTable->key_end();
8458   }
8459 
8460   // We have any identifiers remaining in the current AST file; return
8461   // the next one.
8462   StringRef Result = *Current;
8463   ++Current;
8464   return Result;
8465 }
8466 
8467 namespace {
8468 
8469 /// A utility for appending two IdentifierIterators.
8470 class ChainedIdentifierIterator : public IdentifierIterator {
8471   std::unique_ptr<IdentifierIterator> Current;
8472   std::unique_ptr<IdentifierIterator> Queued;
8473 
8474 public:
8475   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8476                             std::unique_ptr<IdentifierIterator> Second)
8477       : Current(std::move(First)), Queued(std::move(Second)) {}
8478 
8479   StringRef Next() override {
8480     if (!Current)
8481       return StringRef();
8482 
8483     StringRef result = Current->Next();
8484     if (!result.empty())
8485       return result;
8486 
8487     // Try the queued iterator, which may itself be empty.
8488     Current.reset();
8489     std::swap(Current, Queued);
8490     return Next();
8491   }
8492 };
8493 
8494 } // namespace
8495 
8496 IdentifierIterator *ASTReader::getIdentifiers() {
8497   if (!loadGlobalIndex()) {
8498     std::unique_ptr<IdentifierIterator> ReaderIter(
8499         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8500     std::unique_ptr<IdentifierIterator> ModulesIter(
8501         GlobalIndex->createIdentifierIterator());
8502     return new ChainedIdentifierIterator(std::move(ReaderIter),
8503                                          std::move(ModulesIter));
8504   }
8505 
8506   return new ASTIdentifierIterator(*this);
8507 }
8508 
8509 namespace clang {
8510 namespace serialization {
8511 
8512   class ReadMethodPoolVisitor {
8513     ASTReader &Reader;
8514     Selector Sel;
8515     unsigned PriorGeneration;
8516     unsigned InstanceBits = 0;
8517     unsigned FactoryBits = 0;
8518     bool InstanceHasMoreThanOneDecl = false;
8519     bool FactoryHasMoreThanOneDecl = false;
8520     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8521     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8522 
8523   public:
8524     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8525                           unsigned PriorGeneration)
8526         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8527 
8528     bool operator()(ModuleFile &M) {
8529       if (!M.SelectorLookupTable)
8530         return false;
8531 
8532       // If we've already searched this module file, skip it now.
8533       if (M.Generation <= PriorGeneration)
8534         return true;
8535 
8536       ++Reader.NumMethodPoolTableLookups;
8537       ASTSelectorLookupTable *PoolTable
8538         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8539       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8540       if (Pos == PoolTable->end())
8541         return false;
8542 
8543       ++Reader.NumMethodPoolTableHits;
8544       ++Reader.NumSelectorsRead;
8545       // FIXME: Not quite happy with the statistics here. We probably should
8546       // disable this tracking when called via LoadSelector.
8547       // Also, should entries without methods count as misses?
8548       ++Reader.NumMethodPoolEntriesRead;
8549       ASTSelectorLookupTrait::data_type Data = *Pos;
8550       if (Reader.DeserializationListener)
8551         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8552 
8553       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8554       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8555       InstanceBits = Data.InstanceBits;
8556       FactoryBits = Data.FactoryBits;
8557       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8558       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8559       return true;
8560     }
8561 
8562     /// Retrieve the instance methods found by this visitor.
8563     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8564       return InstanceMethods;
8565     }
8566 
8567     /// Retrieve the instance methods found by this visitor.
8568     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8569       return FactoryMethods;
8570     }
8571 
8572     unsigned getInstanceBits() const { return InstanceBits; }
8573     unsigned getFactoryBits() const { return FactoryBits; }
8574 
8575     bool instanceHasMoreThanOneDecl() const {
8576       return InstanceHasMoreThanOneDecl;
8577     }
8578 
8579     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8580   };
8581 
8582 } // namespace serialization
8583 } // namespace clang
8584 
8585 /// Add the given set of methods to the method list.
8586 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8587                              ObjCMethodList &List) {
8588   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8589     S.addMethodToGlobalList(&List, Methods[I]);
8590   }
8591 }
8592 
8593 void ASTReader::ReadMethodPool(Selector Sel) {
8594   // Get the selector generation and update it to the current generation.
8595   unsigned &Generation = SelectorGeneration[Sel];
8596   unsigned PriorGeneration = Generation;
8597   Generation = getGeneration();
8598   SelectorOutOfDate[Sel] = false;
8599 
8600   // Search for methods defined with this selector.
8601   ++NumMethodPoolLookups;
8602   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8603   ModuleMgr.visit(Visitor);
8604 
8605   if (Visitor.getInstanceMethods().empty() &&
8606       Visitor.getFactoryMethods().empty())
8607     return;
8608 
8609   ++NumMethodPoolHits;
8610 
8611   if (!getSema())
8612     return;
8613 
8614   Sema &S = *getSema();
8615   Sema::GlobalMethodPool::iterator Pos
8616     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8617 
8618   Pos->second.first.setBits(Visitor.getInstanceBits());
8619   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8620   Pos->second.second.setBits(Visitor.getFactoryBits());
8621   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8622 
8623   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8624   // when building a module we keep every method individually and may need to
8625   // update hasMoreThanOneDecl as we add the methods.
8626   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8627   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8628 }
8629 
8630 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8631   if (SelectorOutOfDate[Sel])
8632     ReadMethodPool(Sel);
8633 }
8634 
8635 void ASTReader::ReadKnownNamespaces(
8636                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8637   Namespaces.clear();
8638 
8639   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8640     if (NamespaceDecl *Namespace
8641                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8642       Namespaces.push_back(Namespace);
8643   }
8644 }
8645 
8646 void ASTReader::ReadUndefinedButUsed(
8647     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8648   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8649     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8650     SourceLocation Loc =
8651         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8652     Undefined.insert(std::make_pair(D, Loc));
8653   }
8654 }
8655 
8656 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8657     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8658                                                      Exprs) {
8659   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8660     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8661     uint64_t Count = DelayedDeleteExprs[Idx++];
8662     for (uint64_t C = 0; C < Count; ++C) {
8663       SourceLocation DeleteLoc =
8664           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8665       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8666       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8667     }
8668   }
8669 }
8670 
8671 void ASTReader::ReadTentativeDefinitions(
8672                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8673   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8674     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8675     if (Var)
8676       TentativeDefs.push_back(Var);
8677   }
8678   TentativeDefinitions.clear();
8679 }
8680 
8681 void ASTReader::ReadUnusedFileScopedDecls(
8682                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8683   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8684     DeclaratorDecl *D
8685       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8686     if (D)
8687       Decls.push_back(D);
8688   }
8689   UnusedFileScopedDecls.clear();
8690 }
8691 
8692 void ASTReader::ReadDelegatingConstructors(
8693                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8694   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8695     CXXConstructorDecl *D
8696       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8697     if (D)
8698       Decls.push_back(D);
8699   }
8700   DelegatingCtorDecls.clear();
8701 }
8702 
8703 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8704   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8705     TypedefNameDecl *D
8706       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8707     if (D)
8708       Decls.push_back(D);
8709   }
8710   ExtVectorDecls.clear();
8711 }
8712 
8713 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8714     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8715   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8716        ++I) {
8717     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8718         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8719     if (D)
8720       Decls.insert(D);
8721   }
8722   UnusedLocalTypedefNameCandidates.clear();
8723 }
8724 
8725 void ASTReader::ReadReferencedSelectors(
8726        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8727   if (ReferencedSelectorsData.empty())
8728     return;
8729 
8730   // If there are @selector references added them to its pool. This is for
8731   // implementation of -Wselector.
8732   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8733   unsigned I = 0;
8734   while (I < DataSize) {
8735     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8736     SourceLocation SelLoc
8737       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8738     Sels.push_back(std::make_pair(Sel, SelLoc));
8739   }
8740   ReferencedSelectorsData.clear();
8741 }
8742 
8743 void ASTReader::ReadWeakUndeclaredIdentifiers(
8744        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8745   if (WeakUndeclaredIdentifiers.empty())
8746     return;
8747 
8748   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8749     IdentifierInfo *WeakId
8750       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8751     IdentifierInfo *AliasId
8752       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8753     SourceLocation Loc
8754       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8755     bool Used = WeakUndeclaredIdentifiers[I++];
8756     WeakInfo WI(AliasId, Loc);
8757     WI.setUsed(Used);
8758     WeakIDs.push_back(std::make_pair(WeakId, WI));
8759   }
8760   WeakUndeclaredIdentifiers.clear();
8761 }
8762 
8763 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8764   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8765     ExternalVTableUse VT;
8766     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8767     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8768     VT.DefinitionRequired = VTableUses[Idx++];
8769     VTables.push_back(VT);
8770   }
8771 
8772   VTableUses.clear();
8773 }
8774 
8775 void ASTReader::ReadPendingInstantiations(
8776        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8777   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8778     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8779     SourceLocation Loc
8780       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8781 
8782     Pending.push_back(std::make_pair(D, Loc));
8783   }
8784   PendingInstantiations.clear();
8785 }
8786 
8787 void ASTReader::ReadLateParsedTemplates(
8788     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8789         &LPTMap) {
8790   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8791        /* In loop */) {
8792     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8793 
8794     auto LT = std::make_unique<LateParsedTemplate>();
8795     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8796 
8797     ModuleFile *F = getOwningModuleFile(LT->D);
8798     assert(F && "No module");
8799 
8800     unsigned TokN = LateParsedTemplates[Idx++];
8801     LT->Toks.reserve(TokN);
8802     for (unsigned T = 0; T < TokN; ++T)
8803       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8804 
8805     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8806   }
8807 
8808   LateParsedTemplates.clear();
8809 }
8810 
8811 void ASTReader::LoadSelector(Selector Sel) {
8812   // It would be complicated to avoid reading the methods anyway. So don't.
8813   ReadMethodPool(Sel);
8814 }
8815 
8816 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8817   assert(ID && "Non-zero identifier ID required");
8818   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8819   IdentifiersLoaded[ID - 1] = II;
8820   if (DeserializationListener)
8821     DeserializationListener->IdentifierRead(ID, II);
8822 }
8823 
8824 /// Set the globally-visible declarations associated with the given
8825 /// identifier.
8826 ///
8827 /// If the AST reader is currently in a state where the given declaration IDs
8828 /// cannot safely be resolved, they are queued until it is safe to resolve
8829 /// them.
8830 ///
8831 /// \param II an IdentifierInfo that refers to one or more globally-visible
8832 /// declarations.
8833 ///
8834 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8835 /// visible at global scope.
8836 ///
8837 /// \param Decls if non-null, this vector will be populated with the set of
8838 /// deserialized declarations. These declarations will not be pushed into
8839 /// scope.
8840 void
8841 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8842                               const SmallVectorImpl<uint32_t> &DeclIDs,
8843                                    SmallVectorImpl<Decl *> *Decls) {
8844   if (NumCurrentElementsDeserializing && !Decls) {
8845     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8846     return;
8847   }
8848 
8849   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8850     if (!SemaObj) {
8851       // Queue this declaration so that it will be added to the
8852       // translation unit scope and identifier's declaration chain
8853       // once a Sema object is known.
8854       PreloadedDeclIDs.push_back(DeclIDs[I]);
8855       continue;
8856     }
8857 
8858     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8859 
8860     // If we're simply supposed to record the declarations, do so now.
8861     if (Decls) {
8862       Decls->push_back(D);
8863       continue;
8864     }
8865 
8866     // Introduce this declaration into the translation-unit scope
8867     // and add it to the declaration chain for this identifier, so
8868     // that (unqualified) name lookup will find it.
8869     pushExternalDeclIntoScope(D, II);
8870   }
8871 }
8872 
8873 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8874   if (ID == 0)
8875     return nullptr;
8876 
8877   if (IdentifiersLoaded.empty()) {
8878     Error("no identifier table in AST file");
8879     return nullptr;
8880   }
8881 
8882   ID -= 1;
8883   if (!IdentifiersLoaded[ID]) {
8884     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8885     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8886     ModuleFile *M = I->second;
8887     unsigned Index = ID - M->BaseIdentifierID;
8888     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8889 
8890     // All of the strings in the AST file are preceded by a 16-bit length.
8891     // Extract that 16-bit length to avoid having to execute strlen().
8892     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8893     //  unsigned integers.  This is important to avoid integer overflow when
8894     //  we cast them to 'unsigned'.
8895     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8896     unsigned StrLen = (((unsigned) StrLenPtr[0])
8897                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8898     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8899     IdentifiersLoaded[ID] = &II;
8900     markIdentifierFromAST(*this,  II);
8901     if (DeserializationListener)
8902       DeserializationListener->IdentifierRead(ID + 1, &II);
8903   }
8904 
8905   return IdentifiersLoaded[ID];
8906 }
8907 
8908 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8909   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8910 }
8911 
8912 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8913   if (LocalID < NUM_PREDEF_IDENT_IDS)
8914     return LocalID;
8915 
8916   if (!M.ModuleOffsetMap.empty())
8917     ReadModuleOffsetMap(M);
8918 
8919   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8920     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8921   assert(I != M.IdentifierRemap.end()
8922          && "Invalid index into identifier index remap");
8923 
8924   return LocalID + I->second;
8925 }
8926 
8927 MacroInfo *ASTReader::getMacro(MacroID ID) {
8928   if (ID == 0)
8929     return nullptr;
8930 
8931   if (MacrosLoaded.empty()) {
8932     Error("no macro table in AST file");
8933     return nullptr;
8934   }
8935 
8936   ID -= NUM_PREDEF_MACRO_IDS;
8937   if (!MacrosLoaded[ID]) {
8938     GlobalMacroMapType::iterator I
8939       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8940     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8941     ModuleFile *M = I->second;
8942     unsigned Index = ID - M->BaseMacroID;
8943     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
8944 
8945     if (DeserializationListener)
8946       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8947                                          MacrosLoaded[ID]);
8948   }
8949 
8950   return MacrosLoaded[ID];
8951 }
8952 
8953 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8954   if (LocalID < NUM_PREDEF_MACRO_IDS)
8955     return LocalID;
8956 
8957   if (!M.ModuleOffsetMap.empty())
8958     ReadModuleOffsetMap(M);
8959 
8960   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8961     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8962   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8963 
8964   return LocalID + I->second;
8965 }
8966 
8967 serialization::SubmoduleID
8968 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8969   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8970     return LocalID;
8971 
8972   if (!M.ModuleOffsetMap.empty())
8973     ReadModuleOffsetMap(M);
8974 
8975   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8976     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8977   assert(I != M.SubmoduleRemap.end()
8978          && "Invalid index into submodule index remap");
8979 
8980   return LocalID + I->second;
8981 }
8982 
8983 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8984   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8985     assert(GlobalID == 0 && "Unhandled global submodule ID");
8986     return nullptr;
8987   }
8988 
8989   if (GlobalID > SubmodulesLoaded.size()) {
8990     Error("submodule ID out of range in AST file");
8991     return nullptr;
8992   }
8993 
8994   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8995 }
8996 
8997 Module *ASTReader::getModule(unsigned ID) {
8998   return getSubmodule(ID);
8999 }
9000 
9001 bool ASTReader::DeclIsFromPCHWithObjectFile(const Decl *D) {
9002   ModuleFile *MF = getOwningModuleFile(D);
9003   return MF && MF->PCHHasObjectFile;
9004 }
9005 
9006 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
9007   if (ID & 1) {
9008     // It's a module, look it up by submodule ID.
9009     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
9010     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
9011   } else {
9012     // It's a prefix (preamble, PCH, ...). Look it up by index.
9013     unsigned IndexFromEnd = ID >> 1;
9014     assert(IndexFromEnd && "got reference to unknown module file");
9015     return getModuleManager().pch_modules().end()[-IndexFromEnd];
9016   }
9017 }
9018 
9019 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
9020   if (!F)
9021     return 1;
9022 
9023   // For a file representing a module, use the submodule ID of the top-level
9024   // module as the file ID. For any other kind of file, the number of such
9025   // files loaded beforehand will be the same on reload.
9026   // FIXME: Is this true even if we have an explicit module file and a PCH?
9027   if (F->isModule())
9028     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
9029 
9030   auto PCHModules = getModuleManager().pch_modules();
9031   auto I = llvm::find(PCHModules, F);
9032   assert(I != PCHModules.end() && "emitting reference to unknown file");
9033   return (I - PCHModules.end()) << 1;
9034 }
9035 
9036 llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
9037 ASTReader::getSourceDescriptor(unsigned ID) {
9038   if (const Module *M = getSubmodule(ID))
9039     return ExternalASTSource::ASTSourceDescriptor(*M);
9040 
9041   // If there is only a single PCH, return it instead.
9042   // Chained PCH are not supported.
9043   const auto &PCHChain = ModuleMgr.pch_modules();
9044   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
9045     ModuleFile &MF = ModuleMgr.getPrimaryModule();
9046     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
9047     StringRef FileName = llvm::sys::path::filename(MF.FileName);
9048     return ASTReader::ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
9049                                           MF.Signature);
9050   }
9051   return None;
9052 }
9053 
9054 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
9055   auto I = DefinitionSource.find(FD);
9056   if (I == DefinitionSource.end())
9057     return EK_ReplyHazy;
9058   return I->second ? EK_Never : EK_Always;
9059 }
9060 
9061 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
9062   return DecodeSelector(getGlobalSelectorID(M, LocalID));
9063 }
9064 
9065 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
9066   if (ID == 0)
9067     return Selector();
9068 
9069   if (ID > SelectorsLoaded.size()) {
9070     Error("selector ID out of range in AST file");
9071     return Selector();
9072   }
9073 
9074   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
9075     // Load this selector from the selector table.
9076     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
9077     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
9078     ModuleFile &M = *I->second;
9079     ASTSelectorLookupTrait Trait(*this, M);
9080     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
9081     SelectorsLoaded[ID - 1] =
9082       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
9083     if (DeserializationListener)
9084       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
9085   }
9086 
9087   return SelectorsLoaded[ID - 1];
9088 }
9089 
9090 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
9091   return DecodeSelector(ID);
9092 }
9093 
9094 uint32_t ASTReader::GetNumExternalSelectors() {
9095   // ID 0 (the null selector) is considered an external selector.
9096   return getTotalNumSelectors() + 1;
9097 }
9098 
9099 serialization::SelectorID
9100 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
9101   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
9102     return LocalID;
9103 
9104   if (!M.ModuleOffsetMap.empty())
9105     ReadModuleOffsetMap(M);
9106 
9107   ContinuousRangeMap<uint32_t, int, 2>::iterator I
9108     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
9109   assert(I != M.SelectorRemap.end()
9110          && "Invalid index into selector index remap");
9111 
9112   return LocalID + I->second;
9113 }
9114 
9115 DeclarationName
9116 ASTReader::ReadDeclarationName(ModuleFile &F,
9117                                const RecordData &Record, unsigned &Idx) {
9118   ASTContext &Context = getContext();
9119   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
9120   switch (Kind) {
9121   case DeclarationName::Identifier:
9122     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
9123 
9124   case DeclarationName::ObjCZeroArgSelector:
9125   case DeclarationName::ObjCOneArgSelector:
9126   case DeclarationName::ObjCMultiArgSelector:
9127     return DeclarationName(ReadSelector(F, Record, Idx));
9128 
9129   case DeclarationName::CXXConstructorName:
9130     return Context.DeclarationNames.getCXXConstructorName(
9131                           Context.getCanonicalType(readType(F, Record, Idx)));
9132 
9133   case DeclarationName::CXXDestructorName:
9134     return Context.DeclarationNames.getCXXDestructorName(
9135                           Context.getCanonicalType(readType(F, Record, Idx)));
9136 
9137   case DeclarationName::CXXDeductionGuideName:
9138     return Context.DeclarationNames.getCXXDeductionGuideName(
9139                           ReadDeclAs<TemplateDecl>(F, Record, Idx));
9140 
9141   case DeclarationName::CXXConversionFunctionName:
9142     return Context.DeclarationNames.getCXXConversionFunctionName(
9143                           Context.getCanonicalType(readType(F, Record, Idx)));
9144 
9145   case DeclarationName::CXXOperatorName:
9146     return Context.DeclarationNames.getCXXOperatorName(
9147                                        (OverloadedOperatorKind)Record[Idx++]);
9148 
9149   case DeclarationName::CXXLiteralOperatorName:
9150     return Context.DeclarationNames.getCXXLiteralOperatorName(
9151                                        GetIdentifierInfo(F, Record, Idx));
9152 
9153   case DeclarationName::CXXUsingDirective:
9154     return DeclarationName::getUsingDirectiveName();
9155   }
9156 
9157   llvm_unreachable("Invalid NameKind!");
9158 }
9159 
9160 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
9161                                        DeclarationNameLoc &DNLoc,
9162                                        DeclarationName Name,
9163                                       const RecordData &Record, unsigned &Idx) {
9164   switch (Name.getNameKind()) {
9165   case DeclarationName::CXXConstructorName:
9166   case DeclarationName::CXXDestructorName:
9167   case DeclarationName::CXXConversionFunctionName:
9168     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
9169     break;
9170 
9171   case DeclarationName::CXXOperatorName:
9172     DNLoc.CXXOperatorName.BeginOpNameLoc
9173         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
9174     DNLoc.CXXOperatorName.EndOpNameLoc
9175         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
9176     break;
9177 
9178   case DeclarationName::CXXLiteralOperatorName:
9179     DNLoc.CXXLiteralOperatorName.OpNameLoc
9180         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
9181     break;
9182 
9183   case DeclarationName::Identifier:
9184   case DeclarationName::ObjCZeroArgSelector:
9185   case DeclarationName::ObjCOneArgSelector:
9186   case DeclarationName::ObjCMultiArgSelector:
9187   case DeclarationName::CXXUsingDirective:
9188   case DeclarationName::CXXDeductionGuideName:
9189     break;
9190   }
9191 }
9192 
9193 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
9194                                         DeclarationNameInfo &NameInfo,
9195                                       const RecordData &Record, unsigned &Idx) {
9196   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
9197   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
9198   DeclarationNameLoc DNLoc;
9199   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
9200   NameInfo.setInfo(DNLoc);
9201 }
9202 
9203 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
9204                                   const RecordData &Record, unsigned &Idx) {
9205   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
9206   unsigned NumTPLists = Record[Idx++];
9207   Info.NumTemplParamLists = NumTPLists;
9208   if (NumTPLists) {
9209     Info.TemplParamLists =
9210         new (getContext()) TemplateParameterList *[NumTPLists];
9211     for (unsigned i = 0; i != NumTPLists; ++i)
9212       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
9213   }
9214 }
9215 
9216 TemplateName
9217 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
9218                             unsigned &Idx) {
9219   ASTContext &Context = getContext();
9220   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
9221   switch (Kind) {
9222   case TemplateName::Template:
9223       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
9224 
9225   case TemplateName::OverloadedTemplate: {
9226     unsigned size = Record[Idx++];
9227     UnresolvedSet<8> Decls;
9228     while (size--)
9229       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
9230 
9231     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
9232   }
9233 
9234   case TemplateName::AssumedTemplate: {
9235     DeclarationName Name = ReadDeclarationName(F, Record, Idx);
9236     return Context.getAssumedTemplateName(Name);
9237   }
9238 
9239   case TemplateName::QualifiedTemplate: {
9240     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
9241     bool hasTemplKeyword = Record[Idx++];
9242     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
9243     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
9244   }
9245 
9246   case TemplateName::DependentTemplate: {
9247     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
9248     if (Record[Idx++])  // isIdentifier
9249       return Context.getDependentTemplateName(NNS,
9250                                                GetIdentifierInfo(F, Record,
9251                                                                  Idx));
9252     return Context.getDependentTemplateName(NNS,
9253                                          (OverloadedOperatorKind)Record[Idx++]);
9254   }
9255 
9256   case TemplateName::SubstTemplateTemplateParm: {
9257     TemplateTemplateParmDecl *param
9258       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
9259     if (!param) return TemplateName();
9260     TemplateName replacement = ReadTemplateName(F, Record, Idx);
9261     return Context.getSubstTemplateTemplateParm(param, replacement);
9262   }
9263 
9264   case TemplateName::SubstTemplateTemplateParmPack: {
9265     TemplateTemplateParmDecl *Param
9266       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
9267     if (!Param)
9268       return TemplateName();
9269 
9270     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
9271     if (ArgPack.getKind() != TemplateArgument::Pack)
9272       return TemplateName();
9273 
9274     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
9275   }
9276   }
9277 
9278   llvm_unreachable("Unhandled template name kind!");
9279 }
9280 
9281 TemplateArgument ASTReader::ReadTemplateArgument(ModuleFile &F,
9282                                                  const RecordData &Record,
9283                                                  unsigned &Idx,
9284                                                  bool Canonicalize) {
9285   ASTContext &Context = getContext();
9286   if (Canonicalize) {
9287     // The caller wants a canonical template argument. Sometimes the AST only
9288     // wants template arguments in canonical form (particularly as the template
9289     // argument lists of template specializations) so ensure we preserve that
9290     // canonical form across serialization.
9291     TemplateArgument Arg = ReadTemplateArgument(F, Record, Idx, false);
9292     return Context.getCanonicalTemplateArgument(Arg);
9293   }
9294 
9295   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
9296   switch (Kind) {
9297   case TemplateArgument::Null:
9298     return TemplateArgument();
9299   case TemplateArgument::Type:
9300     return TemplateArgument(readType(F, Record, Idx));
9301   case TemplateArgument::Declaration: {
9302     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
9303     return TemplateArgument(D, readType(F, Record, Idx));
9304   }
9305   case TemplateArgument::NullPtr:
9306     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
9307   case TemplateArgument::Integral: {
9308     llvm::APSInt Value = ReadAPSInt(Record, Idx);
9309     QualType T = readType(F, Record, Idx);
9310     return TemplateArgument(Context, Value, T);
9311   }
9312   case TemplateArgument::Template:
9313     return TemplateArgument(ReadTemplateName(F, Record, Idx));
9314   case TemplateArgument::TemplateExpansion: {
9315     TemplateName Name = ReadTemplateName(F, Record, Idx);
9316     Optional<unsigned> NumTemplateExpansions;
9317     if (unsigned NumExpansions = Record[Idx++])
9318       NumTemplateExpansions = NumExpansions - 1;
9319     return TemplateArgument(Name, NumTemplateExpansions);
9320   }
9321   case TemplateArgument::Expression:
9322     return TemplateArgument(ReadExpr(F));
9323   case TemplateArgument::Pack: {
9324     unsigned NumArgs = Record[Idx++];
9325     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
9326     for (unsigned I = 0; I != NumArgs; ++I)
9327       Args[I] = ReadTemplateArgument(F, Record, Idx);
9328     return TemplateArgument(llvm::makeArrayRef(Args, NumArgs));
9329   }
9330   }
9331 
9332   llvm_unreachable("Unhandled template argument kind!");
9333 }
9334 
9335 TemplateParameterList *
9336 ASTReader::ReadTemplateParameterList(ModuleFile &F,
9337                                      const RecordData &Record, unsigned &Idx) {
9338   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
9339   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
9340   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
9341 
9342   unsigned NumParams = Record[Idx++];
9343   SmallVector<NamedDecl *, 16> Params;
9344   Params.reserve(NumParams);
9345   while (NumParams--)
9346     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
9347 
9348   bool HasRequiresClause = Record[Idx++];
9349   Expr *RequiresClause = HasRequiresClause ? ReadExpr(F) : nullptr;
9350 
9351   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
9352       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
9353   return TemplateParams;
9354 }
9355 
9356 void
9357 ASTReader::
9358 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
9359                          ModuleFile &F, const RecordData &Record,
9360                          unsigned &Idx, bool Canonicalize) {
9361   unsigned NumTemplateArgs = Record[Idx++];
9362   TemplArgs.reserve(NumTemplateArgs);
9363   while (NumTemplateArgs--)
9364     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx, Canonicalize));
9365 }
9366 
9367 /// Read a UnresolvedSet structure.
9368 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
9369                                   const RecordData &Record, unsigned &Idx) {
9370   unsigned NumDecls = Record[Idx++];
9371   Set.reserve(getContext(), NumDecls);
9372   while (NumDecls--) {
9373     DeclID ID = ReadDeclID(F, Record, Idx);
9374     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
9375     Set.addLazyDecl(getContext(), ID, AS);
9376   }
9377 }
9378 
9379 CXXBaseSpecifier
9380 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
9381                                 const RecordData &Record, unsigned &Idx) {
9382   bool isVirtual = static_cast<bool>(Record[Idx++]);
9383   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
9384   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
9385   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
9386   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
9387   SourceRange Range = ReadSourceRange(F, Record, Idx);
9388   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
9389   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
9390                           EllipsisLoc);
9391   Result.setInheritConstructors(inheritConstructors);
9392   return Result;
9393 }
9394 
9395 CXXCtorInitializer **
9396 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
9397                                    unsigned &Idx) {
9398   ASTContext &Context = getContext();
9399   unsigned NumInitializers = Record[Idx++];
9400   assert(NumInitializers && "wrote ctor initializers but have no inits");
9401   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
9402   for (unsigned i = 0; i != NumInitializers; ++i) {
9403     TypeSourceInfo *TInfo = nullptr;
9404     bool IsBaseVirtual = false;
9405     FieldDecl *Member = nullptr;
9406     IndirectFieldDecl *IndirectMember = nullptr;
9407 
9408     CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
9409     switch (Type) {
9410     case CTOR_INITIALIZER_BASE:
9411       TInfo = GetTypeSourceInfo(F, Record, Idx);
9412       IsBaseVirtual = Record[Idx++];
9413       break;
9414 
9415     case CTOR_INITIALIZER_DELEGATING:
9416       TInfo = GetTypeSourceInfo(F, Record, Idx);
9417       break;
9418 
9419      case CTOR_INITIALIZER_MEMBER:
9420       Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
9421       break;
9422 
9423      case CTOR_INITIALIZER_INDIRECT_MEMBER:
9424       IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
9425       break;
9426     }
9427 
9428     SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
9429     Expr *Init = ReadExpr(F);
9430     SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
9431     SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
9432 
9433     CXXCtorInitializer *BOMInit;
9434     if (Type == CTOR_INITIALIZER_BASE)
9435       BOMInit = new (Context)
9436           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
9437                              RParenLoc, MemberOrEllipsisLoc);
9438     else if (Type == CTOR_INITIALIZER_DELEGATING)
9439       BOMInit = new (Context)
9440           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
9441     else if (Member)
9442       BOMInit = new (Context)
9443           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
9444                              Init, RParenLoc);
9445     else
9446       BOMInit = new (Context)
9447           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
9448                              LParenLoc, Init, RParenLoc);
9449 
9450     if (/*IsWritten*/Record[Idx++]) {
9451       unsigned SourceOrder = Record[Idx++];
9452       BOMInit->setSourceOrder(SourceOrder);
9453     }
9454 
9455     CtorInitializers[i] = BOMInit;
9456   }
9457 
9458   return CtorInitializers;
9459 }
9460 
9461 NestedNameSpecifier *
9462 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
9463                                    const RecordData &Record, unsigned &Idx) {
9464   ASTContext &Context = getContext();
9465   unsigned N = Record[Idx++];
9466   NestedNameSpecifier *NNS = nullptr, *Prev = nullptr;
9467   for (unsigned I = 0; I != N; ++I) {
9468     NestedNameSpecifier::SpecifierKind Kind
9469       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
9470     switch (Kind) {
9471     case NestedNameSpecifier::Identifier: {
9472       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
9473       NNS = NestedNameSpecifier::Create(Context, Prev, II);
9474       break;
9475     }
9476 
9477     case NestedNameSpecifier::Namespace: {
9478       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
9479       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
9480       break;
9481     }
9482 
9483     case NestedNameSpecifier::NamespaceAlias: {
9484       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
9485       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
9486       break;
9487     }
9488 
9489     case NestedNameSpecifier::TypeSpec:
9490     case NestedNameSpecifier::TypeSpecWithTemplate: {
9491       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
9492       if (!T)
9493         return nullptr;
9494 
9495       bool Template = Record[Idx++];
9496       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
9497       break;
9498     }
9499 
9500     case NestedNameSpecifier::Global:
9501       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
9502       // No associated value, and there can't be a prefix.
9503       break;
9504 
9505     case NestedNameSpecifier::Super: {
9506       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
9507       NNS = NestedNameSpecifier::SuperSpecifier(Context, RD);
9508       break;
9509     }
9510     }
9511     Prev = NNS;
9512   }
9513   return NNS;
9514 }
9515 
9516 NestedNameSpecifierLoc
9517 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
9518                                       unsigned &Idx) {
9519   ASTContext &Context = getContext();
9520   unsigned N = Record[Idx++];
9521   NestedNameSpecifierLocBuilder Builder;
9522   for (unsigned I = 0; I != N; ++I) {
9523     NestedNameSpecifier::SpecifierKind Kind
9524       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
9525     switch (Kind) {
9526     case NestedNameSpecifier::Identifier: {
9527       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
9528       SourceRange Range = ReadSourceRange(F, Record, Idx);
9529       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
9530       break;
9531     }
9532 
9533     case NestedNameSpecifier::Namespace: {
9534       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
9535       SourceRange Range = ReadSourceRange(F, Record, Idx);
9536       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
9537       break;
9538     }
9539 
9540     case NestedNameSpecifier::NamespaceAlias: {
9541       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
9542       SourceRange Range = ReadSourceRange(F, Record, Idx);
9543       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
9544       break;
9545     }
9546 
9547     case NestedNameSpecifier::TypeSpec:
9548     case NestedNameSpecifier::TypeSpecWithTemplate: {
9549       bool Template = Record[Idx++];
9550       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
9551       if (!T)
9552         return NestedNameSpecifierLoc();
9553       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
9554 
9555       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
9556       Builder.Extend(Context,
9557                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
9558                      T->getTypeLoc(), ColonColonLoc);
9559       break;
9560     }
9561 
9562     case NestedNameSpecifier::Global: {
9563       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
9564       Builder.MakeGlobal(Context, ColonColonLoc);
9565       break;
9566     }
9567 
9568     case NestedNameSpecifier::Super: {
9569       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
9570       SourceRange Range = ReadSourceRange(F, Record, Idx);
9571       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
9572       break;
9573     }
9574     }
9575   }
9576 
9577   return Builder.getWithLocInContext(Context);
9578 }
9579 
9580 SourceRange
9581 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
9582                            unsigned &Idx) {
9583   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
9584   SourceLocation end = ReadSourceLocation(F, Record, Idx);
9585   return SourceRange(beg, end);
9586 }
9587 
9588 static FixedPointSemantics
9589 ReadFixedPointSemantics(const SmallVectorImpl<uint64_t> &Record,
9590                         unsigned &Idx) {
9591   unsigned Width = Record[Idx++];
9592   unsigned Scale = Record[Idx++];
9593   uint64_t Tmp = Record[Idx++];
9594   bool IsSigned = Tmp & 0x1;
9595   bool IsSaturated = Tmp & 0x2;
9596   bool HasUnsignedPadding = Tmp & 0x4;
9597   return FixedPointSemantics(Width, Scale, IsSigned, IsSaturated,
9598                              HasUnsignedPadding);
9599 }
9600 
9601 APValue ASTReader::ReadAPValue(const RecordData &Record, unsigned &Idx) {
9602   unsigned Kind = Record[Idx++];
9603   switch (Kind) {
9604   case APValue::None:
9605     return APValue();
9606   case APValue::Indeterminate:
9607     return APValue::IndeterminateValue();
9608   case APValue::Int:
9609     return APValue(ReadAPSInt(Record, Idx));
9610   case APValue::Float: {
9611     const llvm::fltSemantics &FloatSema = llvm::APFloatBase::EnumToSemantics(
9612         static_cast<llvm::APFloatBase::Semantics>(Record[Idx++]));
9613     return APValue(ReadAPFloat(Record, FloatSema, Idx));
9614   }
9615   case APValue::FixedPoint: {
9616     FixedPointSemantics FPSema = ReadFixedPointSemantics(Record, Idx);
9617     return APValue(APFixedPoint(ReadAPInt(Record, Idx), FPSema));
9618   }
9619   case APValue::ComplexInt: {
9620     llvm::APSInt First = ReadAPSInt(Record, Idx);
9621     return APValue(std::move(First), ReadAPSInt(Record, Idx));
9622   }
9623   case APValue::ComplexFloat: {
9624     const llvm::fltSemantics &FloatSema1 = llvm::APFloatBase::EnumToSemantics(
9625         static_cast<llvm::APFloatBase::Semantics>(Record[Idx++]));
9626     llvm::APFloat First = ReadAPFloat(Record, FloatSema1, Idx);
9627     const llvm::fltSemantics &FloatSema2 = llvm::APFloatBase::EnumToSemantics(
9628         static_cast<llvm::APFloatBase::Semantics>(Record[Idx++]));
9629     return APValue(std::move(First), ReadAPFloat(Record, FloatSema2, Idx));
9630   }
9631   case APValue::LValue:
9632   case APValue::Vector:
9633   case APValue::Array:
9634   case APValue::Struct:
9635   case APValue::Union:
9636   case APValue::MemberPointer:
9637   case APValue::AddrLabelDiff:
9638     // TODO : Handle all these APValue::ValueKind.
9639     return APValue();
9640   }
9641   llvm_unreachable("Invalid APValue::ValueKind");
9642 }
9643 
9644 /// Read an integral value
9645 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
9646   unsigned BitWidth = Record[Idx++];
9647   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
9648   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
9649   Idx += NumWords;
9650   return Result;
9651 }
9652 
9653 /// Read a signed integral value
9654 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
9655   bool isUnsigned = Record[Idx++];
9656   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
9657 }
9658 
9659 /// Read a floating-point value
9660 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
9661                                      const llvm::fltSemantics &Sem,
9662                                      unsigned &Idx) {
9663   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
9664 }
9665 
9666 // Read a string
9667 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
9668   unsigned Len = Record[Idx++];
9669   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9670   Idx += Len;
9671   return Result;
9672 }
9673 
9674 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9675                                 unsigned &Idx) {
9676   std::string Filename = ReadString(Record, Idx);
9677   ResolveImportedPath(F, Filename);
9678   return Filename;
9679 }
9680 
9681 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9682                                 const RecordData &Record, unsigned &Idx) {
9683   std::string Filename = ReadString(Record, Idx);
9684   if (!BaseDirectory.empty())
9685     ResolveImportedPath(Filename, BaseDirectory);
9686   return Filename;
9687 }
9688 
9689 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9690                                          unsigned &Idx) {
9691   unsigned Major = Record[Idx++];
9692   unsigned Minor = Record[Idx++];
9693   unsigned Subminor = Record[Idx++];
9694   if (Minor == 0)
9695     return VersionTuple(Major);
9696   if (Subminor == 0)
9697     return VersionTuple(Major, Minor - 1);
9698   return VersionTuple(Major, Minor - 1, Subminor - 1);
9699 }
9700 
9701 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9702                                           const RecordData &Record,
9703                                           unsigned &Idx) {
9704   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9705   return CXXTemporary::Create(getContext(), Decl);
9706 }
9707 
9708 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9709   return Diag(CurrentImportLoc, DiagID);
9710 }
9711 
9712 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9713   return Diags.Report(Loc, DiagID);
9714 }
9715 
9716 /// Retrieve the identifier table associated with the
9717 /// preprocessor.
9718 IdentifierTable &ASTReader::getIdentifierTable() {
9719   return PP.getIdentifierTable();
9720 }
9721 
9722 /// Record that the given ID maps to the given switch-case
9723 /// statement.
9724 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9725   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9726          "Already have a SwitchCase with this ID");
9727   (*CurrSwitchCaseStmts)[ID] = SC;
9728 }
9729 
9730 /// Retrieve the switch-case statement with the given ID.
9731 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9732   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9733   return (*CurrSwitchCaseStmts)[ID];
9734 }
9735 
9736 void ASTReader::ClearSwitchCaseIDs() {
9737   CurrSwitchCaseStmts->clear();
9738 }
9739 
9740 void ASTReader::ReadComments() {
9741   ASTContext &Context = getContext();
9742   std::vector<RawComment *> Comments;
9743   for (SmallVectorImpl<std::pair<BitstreamCursor,
9744                                  serialization::ModuleFile *>>::iterator
9745        I = CommentsCursors.begin(),
9746        E = CommentsCursors.end();
9747        I != E; ++I) {
9748     Comments.clear();
9749     BitstreamCursor &Cursor = I->first;
9750     serialization::ModuleFile &F = *I->second;
9751     SavedStreamPosition SavedPosition(Cursor);
9752 
9753     RecordData Record;
9754     while (true) {
9755       Expected<llvm::BitstreamEntry> MaybeEntry =
9756           Cursor.advanceSkippingSubblocks(
9757               BitstreamCursor::AF_DontPopBlockAtEnd);
9758       if (!MaybeEntry) {
9759         Error(MaybeEntry.takeError());
9760         return;
9761       }
9762       llvm::BitstreamEntry Entry = MaybeEntry.get();
9763 
9764       switch (Entry.Kind) {
9765       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9766       case llvm::BitstreamEntry::Error:
9767         Error("malformed block record in AST file");
9768         return;
9769       case llvm::BitstreamEntry::EndBlock:
9770         goto NextCursor;
9771       case llvm::BitstreamEntry::Record:
9772         // The interesting case.
9773         break;
9774       }
9775 
9776       // Read a record.
9777       Record.clear();
9778       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9779       if (!MaybeComment) {
9780         Error(MaybeComment.takeError());
9781         return;
9782       }
9783       switch ((CommentRecordTypes)MaybeComment.get()) {
9784       case COMMENTS_RAW_COMMENT: {
9785         unsigned Idx = 0;
9786         SourceRange SR = ReadSourceRange(F, Record, Idx);
9787         RawComment::CommentKind Kind =
9788             (RawComment::CommentKind) Record[Idx++];
9789         bool IsTrailingComment = Record[Idx++];
9790         bool IsAlmostTrailingComment = Record[Idx++];
9791         Comments.push_back(new (Context) RawComment(
9792             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9793         break;
9794       }
9795       }
9796     }
9797   NextCursor:
9798     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9799         FileToOffsetToComment;
9800     for (RawComment *C : Comments) {
9801       SourceLocation CommentLoc = C->getBeginLoc();
9802       if (CommentLoc.isValid()) {
9803         std::pair<FileID, unsigned> Loc =
9804             SourceMgr.getDecomposedLoc(CommentLoc);
9805         if (Loc.first.isValid())
9806           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9807       }
9808     }
9809   }
9810 }
9811 
9812 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9813                                 bool IncludeSystem, bool Complain,
9814                     llvm::function_ref<void(const serialization::InputFile &IF,
9815                                             bool isSystem)> Visitor) {
9816   unsigned NumUserInputs = MF.NumUserInputFiles;
9817   unsigned NumInputs = MF.InputFilesLoaded.size();
9818   assert(NumUserInputs <= NumInputs);
9819   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9820   for (unsigned I = 0; I < N; ++I) {
9821     bool IsSystem = I >= NumUserInputs;
9822     InputFile IF = getInputFile(MF, I+1, Complain);
9823     Visitor(IF, IsSystem);
9824   }
9825 }
9826 
9827 void ASTReader::visitTopLevelModuleMaps(
9828     serialization::ModuleFile &MF,
9829     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9830   unsigned NumInputs = MF.InputFilesLoaded.size();
9831   for (unsigned I = 0; I < NumInputs; ++I) {
9832     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9833     if (IFI.TopLevelModuleMap)
9834       // FIXME: This unnecessarily re-reads the InputFileInfo.
9835       if (auto *FE = getInputFile(MF, I + 1).getFile())
9836         Visitor(FE);
9837   }
9838 }
9839 
9840 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9841   // If we know the owning module, use it.
9842   if (Module *M = D->getImportedOwningModule())
9843     return M->getFullModuleName();
9844 
9845   // Otherwise, use the name of the top-level module the decl is within.
9846   if (ModuleFile *M = getOwningModuleFile(D))
9847     return M->ModuleName;
9848 
9849   // Not from a module.
9850   return {};
9851 }
9852 
9853 void ASTReader::finishPendingActions() {
9854   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9855          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9856          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9857          !PendingUpdateRecords.empty()) {
9858     // If any identifiers with corresponding top-level declarations have
9859     // been loaded, load those declarations now.
9860     using TopLevelDeclsMap =
9861         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9862     TopLevelDeclsMap TopLevelDecls;
9863 
9864     while (!PendingIdentifierInfos.empty()) {
9865       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9866       SmallVector<uint32_t, 4> DeclIDs =
9867           std::move(PendingIdentifierInfos.back().second);
9868       PendingIdentifierInfos.pop_back();
9869 
9870       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9871     }
9872 
9873     // Load each function type that we deferred loading because it was a
9874     // deduced type that might refer to a local type declared within itself.
9875     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9876       auto *FD = PendingFunctionTypes[I].first;
9877       FD->setType(GetType(PendingFunctionTypes[I].second));
9878 
9879       // If we gave a function a deduced return type, remember that we need to
9880       // propagate that along the redeclaration chain.
9881       auto *DT = FD->getReturnType()->getContainedDeducedType();
9882       if (DT && DT->isDeduced())
9883         PendingDeducedTypeUpdates.insert(
9884             {FD->getCanonicalDecl(), FD->getReturnType()});
9885     }
9886     PendingFunctionTypes.clear();
9887 
9888     // For each decl chain that we wanted to complete while deserializing, mark
9889     // it as "still needs to be completed".
9890     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9891       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9892     }
9893     PendingIncompleteDeclChains.clear();
9894 
9895     // Load pending declaration chains.
9896     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9897       loadPendingDeclChain(PendingDeclChains[I].first,
9898                            PendingDeclChains[I].second);
9899     PendingDeclChains.clear();
9900 
9901     // Make the most recent of the top-level declarations visible.
9902     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9903            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9904       IdentifierInfo *II = TLD->first;
9905       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9906         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9907       }
9908     }
9909 
9910     // Load any pending macro definitions.
9911     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9912       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9913       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9914       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9915       // Initialize the macro history from chained-PCHs ahead of module imports.
9916       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9917            ++IDIdx) {
9918         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9919         if (!Info.M->isModule())
9920           resolvePendingMacro(II, Info);
9921       }
9922       // Handle module imports.
9923       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9924            ++IDIdx) {
9925         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9926         if (Info.M->isModule())
9927           resolvePendingMacro(II, Info);
9928       }
9929     }
9930     PendingMacroIDs.clear();
9931 
9932     // Wire up the DeclContexts for Decls that we delayed setting until
9933     // recursive loading is completed.
9934     while (!PendingDeclContextInfos.empty()) {
9935       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9936       PendingDeclContextInfos.pop_front();
9937       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9938       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9939       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9940     }
9941 
9942     // Perform any pending declaration updates.
9943     while (!PendingUpdateRecords.empty()) {
9944       auto Update = PendingUpdateRecords.pop_back_val();
9945       ReadingKindTracker ReadingKind(Read_Decl, *this);
9946       loadDeclUpdateRecords(Update);
9947     }
9948   }
9949 
9950   // At this point, all update records for loaded decls are in place, so any
9951   // fake class definitions should have become real.
9952   assert(PendingFakeDefinitionData.empty() &&
9953          "faked up a class definition but never saw the real one");
9954 
9955   // If we deserialized any C++ or Objective-C class definitions, any
9956   // Objective-C protocol definitions, or any redeclarable templates, make sure
9957   // that all redeclarations point to the definitions. Note that this can only
9958   // happen now, after the redeclaration chains have been fully wired.
9959   for (Decl *D : PendingDefinitions) {
9960     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9961       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9962         // Make sure that the TagType points at the definition.
9963         const_cast<TagType*>(TagT)->decl = TD;
9964       }
9965 
9966       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9967         for (auto *R = getMostRecentExistingDecl(RD); R;
9968              R = R->getPreviousDecl()) {
9969           assert((R == D) ==
9970                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9971                  "declaration thinks it's the definition but it isn't");
9972           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9973         }
9974       }
9975 
9976       continue;
9977     }
9978 
9979     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9980       // Make sure that the ObjCInterfaceType points at the definition.
9981       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9982         ->Decl = ID;
9983 
9984       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9985         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9986 
9987       continue;
9988     }
9989 
9990     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9991       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9992         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9993 
9994       continue;
9995     }
9996 
9997     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9998     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9999       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
10000   }
10001   PendingDefinitions.clear();
10002 
10003   // Load the bodies of any functions or methods we've encountered. We do
10004   // this now (delayed) so that we can be sure that the declaration chains
10005   // have been fully wired up (hasBody relies on this).
10006   // FIXME: We shouldn't require complete redeclaration chains here.
10007   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
10008                                PBEnd = PendingBodies.end();
10009        PB != PBEnd; ++PB) {
10010     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
10011       // For a function defined inline within a class template, force the
10012       // canonical definition to be the one inside the canonical definition of
10013       // the template. This ensures that we instantiate from a correct view
10014       // of the template.
10015       //
10016       // Sadly we can't do this more generally: we can't be sure that all
10017       // copies of an arbitrary class definition will have the same members
10018       // defined (eg, some member functions may not be instantiated, and some
10019       // special members may or may not have been implicitly defined).
10020       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
10021         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
10022           continue;
10023 
10024       // FIXME: Check for =delete/=default?
10025       // FIXME: Complain about ODR violations here?
10026       const FunctionDecl *Defn = nullptr;
10027       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
10028         FD->setLazyBody(PB->second);
10029       } else {
10030         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
10031         mergeDefinitionVisibility(NonConstDefn, FD);
10032 
10033         if (!FD->isLateTemplateParsed() &&
10034             !NonConstDefn->isLateTemplateParsed() &&
10035             FD->getODRHash() != NonConstDefn->getODRHash()) {
10036           if (!isa<CXXMethodDecl>(FD)) {
10037             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
10038           } else if (FD->getLexicalParent()->isFileContext() &&
10039                      NonConstDefn->getLexicalParent()->isFileContext()) {
10040             // Only diagnose out-of-line method definitions.  If they are
10041             // in class definitions, then an error will be generated when
10042             // processing the class bodies.
10043             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
10044           }
10045         }
10046       }
10047       continue;
10048     }
10049 
10050     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
10051     if (!getContext().getLangOpts().Modules || !MD->hasBody())
10052       MD->setLazyBody(PB->second);
10053   }
10054   PendingBodies.clear();
10055 
10056   // Do some cleanup.
10057   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
10058     getContext().deduplicateMergedDefinitonsFor(ND);
10059   PendingMergedDefinitionsToDeduplicate.clear();
10060 }
10061 
10062 void ASTReader::diagnoseOdrViolations() {
10063   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
10064       PendingFunctionOdrMergeFailures.empty() &&
10065       PendingEnumOdrMergeFailures.empty())
10066     return;
10067 
10068   // Trigger the import of the full definition of each class that had any
10069   // odr-merging problems, so we can produce better diagnostics for them.
10070   // These updates may in turn find and diagnose some ODR failures, so take
10071   // ownership of the set first.
10072   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
10073   PendingOdrMergeFailures.clear();
10074   for (auto &Merge : OdrMergeFailures) {
10075     Merge.first->buildLookup();
10076     Merge.first->decls_begin();
10077     Merge.first->bases_begin();
10078     Merge.first->vbases_begin();
10079     for (auto &RecordPair : Merge.second) {
10080       auto *RD = RecordPair.first;
10081       RD->decls_begin();
10082       RD->bases_begin();
10083       RD->vbases_begin();
10084     }
10085   }
10086 
10087   // Trigger the import of functions.
10088   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
10089   PendingFunctionOdrMergeFailures.clear();
10090   for (auto &Merge : FunctionOdrMergeFailures) {
10091     Merge.first->buildLookup();
10092     Merge.first->decls_begin();
10093     Merge.first->getBody();
10094     for (auto &FD : Merge.second) {
10095       FD->buildLookup();
10096       FD->decls_begin();
10097       FD->getBody();
10098     }
10099   }
10100 
10101   // Trigger the import of enums.
10102   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
10103   PendingEnumOdrMergeFailures.clear();
10104   for (auto &Merge : EnumOdrMergeFailures) {
10105     Merge.first->decls_begin();
10106     for (auto &Enum : Merge.second) {
10107       Enum->decls_begin();
10108     }
10109   }
10110 
10111   // For each declaration from a merged context, check that the canonical
10112   // definition of that context also contains a declaration of the same
10113   // entity.
10114   //
10115   // Caution: this loop does things that might invalidate iterators into
10116   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
10117   while (!PendingOdrMergeChecks.empty()) {
10118     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
10119 
10120     // FIXME: Skip over implicit declarations for now. This matters for things
10121     // like implicitly-declared special member functions. This isn't entirely
10122     // correct; we can end up with multiple unmerged declarations of the same
10123     // implicit entity.
10124     if (D->isImplicit())
10125       continue;
10126 
10127     DeclContext *CanonDef = D->getDeclContext();
10128 
10129     bool Found = false;
10130     const Decl *DCanon = D->getCanonicalDecl();
10131 
10132     for (auto RI : D->redecls()) {
10133       if (RI->getLexicalDeclContext() == CanonDef) {
10134         Found = true;
10135         break;
10136       }
10137     }
10138     if (Found)
10139       continue;
10140 
10141     // Quick check failed, time to do the slow thing. Note, we can't just
10142     // look up the name of D in CanonDef here, because the member that is
10143     // in CanonDef might not be found by name lookup (it might have been
10144     // replaced by a more recent declaration in the lookup table), and we
10145     // can't necessarily find it in the redeclaration chain because it might
10146     // be merely mergeable, not redeclarable.
10147     llvm::SmallVector<const NamedDecl*, 4> Candidates;
10148     for (auto *CanonMember : CanonDef->decls()) {
10149       if (CanonMember->getCanonicalDecl() == DCanon) {
10150         // This can happen if the declaration is merely mergeable and not
10151         // actually redeclarable (we looked for redeclarations earlier).
10152         //
10153         // FIXME: We should be able to detect this more efficiently, without
10154         // pulling in all of the members of CanonDef.
10155         Found = true;
10156         break;
10157       }
10158       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
10159         if (ND->getDeclName() == D->getDeclName())
10160           Candidates.push_back(ND);
10161     }
10162 
10163     if (!Found) {
10164       // The AST doesn't like TagDecls becoming invalid after they've been
10165       // completed. We only really need to mark FieldDecls as invalid here.
10166       if (!isa<TagDecl>(D))
10167         D->setInvalidDecl();
10168 
10169       // Ensure we don't accidentally recursively enter deserialization while
10170       // we're producing our diagnostic.
10171       Deserializing RecursionGuard(this);
10172 
10173       std::string CanonDefModule =
10174           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
10175       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
10176         << D << getOwningModuleNameForDiagnostic(D)
10177         << CanonDef << CanonDefModule.empty() << CanonDefModule;
10178 
10179       if (Candidates.empty())
10180         Diag(cast<Decl>(CanonDef)->getLocation(),
10181              diag::note_module_odr_violation_no_possible_decls) << D;
10182       else {
10183         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
10184           Diag(Candidates[I]->getLocation(),
10185                diag::note_module_odr_violation_possible_decl)
10186             << Candidates[I];
10187       }
10188 
10189       DiagnosedOdrMergeFailures.insert(CanonDef);
10190     }
10191   }
10192 
10193   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
10194       EnumOdrMergeFailures.empty())
10195     return;
10196 
10197   // Ensure we don't accidentally recursively enter deserialization while
10198   // we're producing our diagnostics.
10199   Deserializing RecursionGuard(this);
10200 
10201   // Common code for hashing helpers.
10202   ODRHash Hash;
10203   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
10204     Hash.clear();
10205     Hash.AddQualType(Ty);
10206     return Hash.CalculateHash();
10207   };
10208 
10209   auto ComputeODRHash = [&Hash](const Stmt *S) {
10210     assert(S);
10211     Hash.clear();
10212     Hash.AddStmt(S);
10213     return Hash.CalculateHash();
10214   };
10215 
10216   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
10217     assert(D);
10218     Hash.clear();
10219     Hash.AddSubDecl(D);
10220     return Hash.CalculateHash();
10221   };
10222 
10223   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
10224     Hash.clear();
10225     Hash.AddTemplateArgument(TA);
10226     return Hash.CalculateHash();
10227   };
10228 
10229   auto ComputeTemplateParameterListODRHash =
10230       [&Hash](const TemplateParameterList *TPL) {
10231         assert(TPL);
10232         Hash.clear();
10233         Hash.AddTemplateParameterList(TPL);
10234         return Hash.CalculateHash();
10235       };
10236 
10237   // Issue any pending ODR-failure diagnostics.
10238   for (auto &Merge : OdrMergeFailures) {
10239     // If we've already pointed out a specific problem with this class, don't
10240     // bother issuing a general "something's different" diagnostic.
10241     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10242       continue;
10243 
10244     bool Diagnosed = false;
10245     CXXRecordDecl *FirstRecord = Merge.first;
10246     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10247     for (auto &RecordPair : Merge.second) {
10248       CXXRecordDecl *SecondRecord = RecordPair.first;
10249       // Multiple different declarations got merged together; tell the user
10250       // where they came from.
10251       if (FirstRecord == SecondRecord)
10252         continue;
10253 
10254       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10255 
10256       auto *FirstDD = FirstRecord->DefinitionData;
10257       auto *SecondDD = RecordPair.second;
10258 
10259       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10260 
10261       // Diagnostics from DefinitionData are emitted here.
10262       if (FirstDD != SecondDD) {
10263         enum ODRDefinitionDataDifference {
10264           NumBases,
10265           NumVBases,
10266           BaseType,
10267           BaseVirtual,
10268           BaseAccess,
10269         };
10270         auto ODRDiagError = [FirstRecord, &FirstModule,
10271                              this](SourceLocation Loc, SourceRange Range,
10272                                    ODRDefinitionDataDifference DiffType) {
10273           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10274                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10275                  << DiffType;
10276         };
10277         auto ODRDiagNote = [&SecondModule,
10278                             this](SourceLocation Loc, SourceRange Range,
10279                                   ODRDefinitionDataDifference DiffType) {
10280           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10281                  << SecondModule << Range << DiffType;
10282         };
10283 
10284         unsigned FirstNumBases = FirstDD->NumBases;
10285         unsigned FirstNumVBases = FirstDD->NumVBases;
10286         unsigned SecondNumBases = SecondDD->NumBases;
10287         unsigned SecondNumVBases = SecondDD->NumVBases;
10288 
10289         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10290           unsigned NumBases = DD->NumBases;
10291           if (NumBases == 0) return SourceRange();
10292           auto bases = DD->bases();
10293           return SourceRange(bases[0].getBeginLoc(),
10294                              bases[NumBases - 1].getEndLoc());
10295         };
10296 
10297         if (FirstNumBases != SecondNumBases) {
10298           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10299                        NumBases)
10300               << FirstNumBases;
10301           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10302                       NumBases)
10303               << SecondNumBases;
10304           Diagnosed = true;
10305           break;
10306         }
10307 
10308         if (FirstNumVBases != SecondNumVBases) {
10309           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10310                        NumVBases)
10311               << FirstNumVBases;
10312           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10313                       NumVBases)
10314               << SecondNumVBases;
10315           Diagnosed = true;
10316           break;
10317         }
10318 
10319         auto FirstBases = FirstDD->bases();
10320         auto SecondBases = SecondDD->bases();
10321         unsigned i = 0;
10322         for (i = 0; i < FirstNumBases; ++i) {
10323           auto FirstBase = FirstBases[i];
10324           auto SecondBase = SecondBases[i];
10325           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10326               ComputeQualTypeODRHash(SecondBase.getType())) {
10327             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
10328                          BaseType)
10329                 << (i + 1) << FirstBase.getType();
10330             ODRDiagNote(SecondRecord->getLocation(),
10331                         SecondBase.getSourceRange(), BaseType)
10332                 << (i + 1) << SecondBase.getType();
10333             break;
10334           }
10335 
10336           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10337             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
10338                          BaseVirtual)
10339                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10340             ODRDiagNote(SecondRecord->getLocation(),
10341                         SecondBase.getSourceRange(), BaseVirtual)
10342                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10343             break;
10344           }
10345 
10346           if (FirstBase.getAccessSpecifierAsWritten() !=
10347               SecondBase.getAccessSpecifierAsWritten()) {
10348             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
10349                          BaseAccess)
10350                 << (i + 1) << FirstBase.getType()
10351                 << (int)FirstBase.getAccessSpecifierAsWritten();
10352             ODRDiagNote(SecondRecord->getLocation(),
10353                         SecondBase.getSourceRange(), BaseAccess)
10354                 << (i + 1) << SecondBase.getType()
10355                 << (int)SecondBase.getAccessSpecifierAsWritten();
10356             break;
10357           }
10358         }
10359 
10360         if (i != FirstNumBases) {
10361           Diagnosed = true;
10362           break;
10363         }
10364       }
10365 
10366       using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
10367 
10368       const ClassTemplateDecl *FirstTemplate =
10369           FirstRecord->getDescribedClassTemplate();
10370       const ClassTemplateDecl *SecondTemplate =
10371           SecondRecord->getDescribedClassTemplate();
10372 
10373       assert(!FirstTemplate == !SecondTemplate &&
10374              "Both pointers should be null or non-null");
10375 
10376       enum ODRTemplateDifference {
10377         ParamEmptyName,
10378         ParamName,
10379         ParamSingleDefaultArgument,
10380         ParamDifferentDefaultArgument,
10381       };
10382 
10383       if (FirstTemplate && SecondTemplate) {
10384         DeclHashes FirstTemplateHashes;
10385         DeclHashes SecondTemplateHashes;
10386 
10387         auto PopulateTemplateParameterHashs =
10388             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10389                                      const ClassTemplateDecl *TD) {
10390               for (auto *D : TD->getTemplateParameters()->asArray()) {
10391                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10392               }
10393             };
10394 
10395         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10396         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10397 
10398         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10399                "Number of template parameters should be equal.");
10400 
10401         auto FirstIt = FirstTemplateHashes.begin();
10402         auto FirstEnd = FirstTemplateHashes.end();
10403         auto SecondIt = SecondTemplateHashes.begin();
10404         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10405           if (FirstIt->second == SecondIt->second)
10406             continue;
10407 
10408           auto ODRDiagError = [FirstRecord, &FirstModule,
10409                                this](SourceLocation Loc, SourceRange Range,
10410                                      ODRTemplateDifference DiffType) {
10411             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10412                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10413                    << DiffType;
10414           };
10415           auto ODRDiagNote = [&SecondModule,
10416                               this](SourceLocation Loc, SourceRange Range,
10417                                     ODRTemplateDifference DiffType) {
10418             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10419                    << SecondModule << Range << DiffType;
10420           };
10421 
10422           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10423           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10424 
10425           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10426                  "Parameter Decl's should be the same kind.");
10427 
10428           DeclarationName FirstName = FirstDecl->getDeclName();
10429           DeclarationName SecondName = SecondDecl->getDeclName();
10430 
10431           if (FirstName != SecondName) {
10432             const bool FirstNameEmpty =
10433                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10434             const bool SecondNameEmpty =
10435                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10436             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10437                    "Both template parameters cannot be unnamed.");
10438             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
10439                          FirstNameEmpty ? ParamEmptyName : ParamName)
10440                 << FirstName;
10441             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
10442                         SecondNameEmpty ? ParamEmptyName : ParamName)
10443                 << SecondName;
10444             break;
10445           }
10446 
10447           switch (FirstDecl->getKind()) {
10448           default:
10449             llvm_unreachable("Invalid template parameter type.");
10450           case Decl::TemplateTypeParm: {
10451             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10452             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10453             const bool HasFirstDefaultArgument =
10454                 FirstParam->hasDefaultArgument() &&
10455                 !FirstParam->defaultArgumentWasInherited();
10456             const bool HasSecondDefaultArgument =
10457                 SecondParam->hasDefaultArgument() &&
10458                 !SecondParam->defaultArgumentWasInherited();
10459 
10460             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10461               ODRDiagError(FirstDecl->getLocation(),
10462                            FirstDecl->getSourceRange(),
10463                            ParamSingleDefaultArgument)
10464                   << HasFirstDefaultArgument;
10465               ODRDiagNote(SecondDecl->getLocation(),
10466                           SecondDecl->getSourceRange(),
10467                           ParamSingleDefaultArgument)
10468                   << HasSecondDefaultArgument;
10469               break;
10470             }
10471 
10472             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10473                    "Expecting default arguments.");
10474 
10475             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
10476                          ParamDifferentDefaultArgument);
10477             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
10478                         ParamDifferentDefaultArgument);
10479 
10480             break;
10481           }
10482           case Decl::NonTypeTemplateParm: {
10483             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10484             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10485             const bool HasFirstDefaultArgument =
10486                 FirstParam->hasDefaultArgument() &&
10487                 !FirstParam->defaultArgumentWasInherited();
10488             const bool HasSecondDefaultArgument =
10489                 SecondParam->hasDefaultArgument() &&
10490                 !SecondParam->defaultArgumentWasInherited();
10491 
10492             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10493               ODRDiagError(FirstDecl->getLocation(),
10494                            FirstDecl->getSourceRange(),
10495                            ParamSingleDefaultArgument)
10496                   << HasFirstDefaultArgument;
10497               ODRDiagNote(SecondDecl->getLocation(),
10498                           SecondDecl->getSourceRange(),
10499                           ParamSingleDefaultArgument)
10500                   << HasSecondDefaultArgument;
10501               break;
10502             }
10503 
10504             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10505                    "Expecting default arguments.");
10506 
10507             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
10508                          ParamDifferentDefaultArgument);
10509             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
10510                         ParamDifferentDefaultArgument);
10511 
10512             break;
10513           }
10514           case Decl::TemplateTemplateParm: {
10515             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10516             const auto *SecondParam =
10517                 cast<TemplateTemplateParmDecl>(SecondDecl);
10518             const bool HasFirstDefaultArgument =
10519                 FirstParam->hasDefaultArgument() &&
10520                 !FirstParam->defaultArgumentWasInherited();
10521             const bool HasSecondDefaultArgument =
10522                 SecondParam->hasDefaultArgument() &&
10523                 !SecondParam->defaultArgumentWasInherited();
10524 
10525             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10526               ODRDiagError(FirstDecl->getLocation(),
10527                            FirstDecl->getSourceRange(),
10528                            ParamSingleDefaultArgument)
10529                   << HasFirstDefaultArgument;
10530               ODRDiagNote(SecondDecl->getLocation(),
10531                           SecondDecl->getSourceRange(),
10532                           ParamSingleDefaultArgument)
10533                   << HasSecondDefaultArgument;
10534               break;
10535             }
10536 
10537             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10538                    "Expecting default arguments.");
10539 
10540             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
10541                          ParamDifferentDefaultArgument);
10542             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
10543                         ParamDifferentDefaultArgument);
10544 
10545             break;
10546           }
10547           }
10548 
10549           break;
10550         }
10551 
10552         if (FirstIt != FirstEnd) {
10553           Diagnosed = true;
10554           break;
10555         }
10556       }
10557 
10558       DeclHashes FirstHashes;
10559       DeclHashes SecondHashes;
10560 
10561       auto PopulateHashes = [&ComputeSubDeclODRHash, FirstRecord](
10562                                 DeclHashes &Hashes, CXXRecordDecl *Record) {
10563         for (auto *D : Record->decls()) {
10564           // Due to decl merging, the first CXXRecordDecl is the parent of
10565           // Decls in both records.
10566           if (!ODRHash::isWhitelistedDecl(D, FirstRecord))
10567             continue;
10568           Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10569         }
10570       };
10571       PopulateHashes(FirstHashes, FirstRecord);
10572       PopulateHashes(SecondHashes, SecondRecord);
10573 
10574       // Used with err_module_odr_violation_mismatch_decl and
10575       // note_module_odr_violation_mismatch_decl
10576       // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
10577       enum {
10578         EndOfClass,
10579         PublicSpecifer,
10580         PrivateSpecifer,
10581         ProtectedSpecifer,
10582         StaticAssert,
10583         Field,
10584         CXXMethod,
10585         TypeAlias,
10586         TypeDef,
10587         Var,
10588         Friend,
10589         FunctionTemplate,
10590         Other
10591       } FirstDiffType = Other,
10592         SecondDiffType = Other;
10593 
10594       auto DifferenceSelector = [](Decl *D) {
10595         assert(D && "valid Decl required");
10596         switch (D->getKind()) {
10597         default:
10598           return Other;
10599         case Decl::AccessSpec:
10600           switch (D->getAccess()) {
10601           case AS_public:
10602             return PublicSpecifer;
10603           case AS_private:
10604             return PrivateSpecifer;
10605           case AS_protected:
10606             return ProtectedSpecifer;
10607           case AS_none:
10608             break;
10609           }
10610           llvm_unreachable("Invalid access specifier");
10611         case Decl::StaticAssert:
10612           return StaticAssert;
10613         case Decl::Field:
10614           return Field;
10615         case Decl::CXXMethod:
10616         case Decl::CXXConstructor:
10617         case Decl::CXXDestructor:
10618           return CXXMethod;
10619         case Decl::TypeAlias:
10620           return TypeAlias;
10621         case Decl::Typedef:
10622           return TypeDef;
10623         case Decl::Var:
10624           return Var;
10625         case Decl::Friend:
10626           return Friend;
10627         case Decl::FunctionTemplate:
10628           return FunctionTemplate;
10629         }
10630       };
10631 
10632       Decl *FirstDecl = nullptr;
10633       Decl *SecondDecl = nullptr;
10634       auto FirstIt = FirstHashes.begin();
10635       auto SecondIt = SecondHashes.begin();
10636 
10637       // If there is a diagnoseable difference, FirstDiffType and
10638       // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
10639       // filled in if not EndOfClass.
10640       while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
10641         if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
10642             FirstIt->second == SecondIt->second) {
10643           ++FirstIt;
10644           ++SecondIt;
10645           continue;
10646         }
10647 
10648         FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
10649         SecondDecl = SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
10650 
10651         FirstDiffType = FirstDecl ? DifferenceSelector(FirstDecl) : EndOfClass;
10652         SecondDiffType =
10653             SecondDecl ? DifferenceSelector(SecondDecl) : EndOfClass;
10654 
10655         break;
10656       }
10657 
10658       if (FirstDiffType == Other || SecondDiffType == Other) {
10659         // Reaching this point means an unexpected Decl was encountered
10660         // or no difference was detected.  This causes a generic error
10661         // message to be emitted.
10662         Diag(FirstRecord->getLocation(),
10663              diag::err_module_odr_violation_different_definitions)
10664             << FirstRecord << FirstModule.empty() << FirstModule;
10665 
10666         if (FirstDecl) {
10667           Diag(FirstDecl->getLocation(), diag::note_first_module_difference)
10668               << FirstRecord << FirstDecl->getSourceRange();
10669         }
10670 
10671         Diag(SecondRecord->getLocation(),
10672              diag::note_module_odr_violation_different_definitions)
10673             << SecondModule;
10674 
10675         if (SecondDecl) {
10676           Diag(SecondDecl->getLocation(), diag::note_second_module_difference)
10677               << SecondDecl->getSourceRange();
10678         }
10679 
10680         Diagnosed = true;
10681         break;
10682       }
10683 
10684       if (FirstDiffType != SecondDiffType) {
10685         SourceLocation FirstLoc;
10686         SourceRange FirstRange;
10687         if (FirstDiffType == EndOfClass) {
10688           FirstLoc = FirstRecord->getBraceRange().getEnd();
10689         } else {
10690           FirstLoc = FirstIt->first->getLocation();
10691           FirstRange = FirstIt->first->getSourceRange();
10692         }
10693         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
10694             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
10695             << FirstDiffType;
10696 
10697         SourceLocation SecondLoc;
10698         SourceRange SecondRange;
10699         if (SecondDiffType == EndOfClass) {
10700           SecondLoc = SecondRecord->getBraceRange().getEnd();
10701         } else {
10702           SecondLoc = SecondDecl->getLocation();
10703           SecondRange = SecondDecl->getSourceRange();
10704         }
10705         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10706             << SecondModule << SecondRange << SecondDiffType;
10707         Diagnosed = true;
10708         break;
10709       }
10710 
10711       assert(FirstDiffType == SecondDiffType);
10712 
10713       // Used with err_module_odr_violation_mismatch_decl_diff and
10714       // note_module_odr_violation_mismatch_decl_diff
10715       enum ODRDeclDifference {
10716         StaticAssertCondition,
10717         StaticAssertMessage,
10718         StaticAssertOnlyMessage,
10719         FieldName,
10720         FieldTypeName,
10721         FieldSingleBitField,
10722         FieldDifferentWidthBitField,
10723         FieldSingleMutable,
10724         FieldSingleInitializer,
10725         FieldDifferentInitializers,
10726         MethodName,
10727         MethodDeleted,
10728         MethodDefaulted,
10729         MethodVirtual,
10730         MethodStatic,
10731         MethodVolatile,
10732         MethodConst,
10733         MethodInline,
10734         MethodNumberParameters,
10735         MethodParameterType,
10736         MethodParameterName,
10737         MethodParameterSingleDefaultArgument,
10738         MethodParameterDifferentDefaultArgument,
10739         MethodNoTemplateArguments,
10740         MethodDifferentNumberTemplateArguments,
10741         MethodDifferentTemplateArgument,
10742         MethodSingleBody,
10743         MethodDifferentBody,
10744         TypedefName,
10745         TypedefType,
10746         VarName,
10747         VarType,
10748         VarSingleInitializer,
10749         VarDifferentInitializer,
10750         VarConstexpr,
10751         FriendTypeFunction,
10752         FriendType,
10753         FriendFunction,
10754         FunctionTemplateDifferentNumberParameters,
10755         FunctionTemplateParameterDifferentKind,
10756         FunctionTemplateParameterName,
10757         FunctionTemplateParameterSingleDefaultArgument,
10758         FunctionTemplateParameterDifferentDefaultArgument,
10759         FunctionTemplateParameterDifferentType,
10760         FunctionTemplatePackParameter,
10761       };
10762 
10763       // These lambdas have the common portions of the ODR diagnostics.  This
10764       // has the same return as Diag(), so addition parameters can be passed
10765       // in with operator<<
10766       auto ODRDiagError = [FirstRecord, &FirstModule, this](
10767           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
10768         return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
10769                << FirstRecord << FirstModule.empty() << FirstModule << Range
10770                << DiffType;
10771       };
10772       auto ODRDiagNote = [&SecondModule, this](
10773           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
10774         return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
10775                << SecondModule << Range << DiffType;
10776       };
10777 
10778       switch (FirstDiffType) {
10779       case Other:
10780       case EndOfClass:
10781       case PublicSpecifer:
10782       case PrivateSpecifer:
10783       case ProtectedSpecifer:
10784         llvm_unreachable("Invalid diff type");
10785 
10786       case StaticAssert: {
10787         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10788         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10789 
10790         Expr *FirstExpr = FirstSA->getAssertExpr();
10791         Expr *SecondExpr = SecondSA->getAssertExpr();
10792         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10793         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10794         if (FirstODRHash != SecondODRHash) {
10795           ODRDiagError(FirstExpr->getBeginLoc(), FirstExpr->getSourceRange(),
10796                        StaticAssertCondition);
10797           ODRDiagNote(SecondExpr->getBeginLoc(), SecondExpr->getSourceRange(),
10798                       StaticAssertCondition);
10799           Diagnosed = true;
10800           break;
10801         }
10802 
10803         StringLiteral *FirstStr = FirstSA->getMessage();
10804         StringLiteral *SecondStr = SecondSA->getMessage();
10805         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10806         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10807           SourceLocation FirstLoc, SecondLoc;
10808           SourceRange FirstRange, SecondRange;
10809           if (FirstStr) {
10810             FirstLoc = FirstStr->getBeginLoc();
10811             FirstRange = FirstStr->getSourceRange();
10812           } else {
10813             FirstLoc = FirstSA->getBeginLoc();
10814             FirstRange = FirstSA->getSourceRange();
10815           }
10816           if (SecondStr) {
10817             SecondLoc = SecondStr->getBeginLoc();
10818             SecondRange = SecondStr->getSourceRange();
10819           } else {
10820             SecondLoc = SecondSA->getBeginLoc();
10821             SecondRange = SecondSA->getSourceRange();
10822           }
10823           ODRDiagError(FirstLoc, FirstRange, StaticAssertOnlyMessage)
10824               << (FirstStr == nullptr);
10825           ODRDiagNote(SecondLoc, SecondRange, StaticAssertOnlyMessage)
10826               << (SecondStr == nullptr);
10827           Diagnosed = true;
10828           break;
10829         }
10830 
10831         if (FirstStr && SecondStr &&
10832             FirstStr->getString() != SecondStr->getString()) {
10833           ODRDiagError(FirstStr->getBeginLoc(), FirstStr->getSourceRange(),
10834                        StaticAssertMessage);
10835           ODRDiagNote(SecondStr->getBeginLoc(), SecondStr->getSourceRange(),
10836                       StaticAssertMessage);
10837           Diagnosed = true;
10838           break;
10839         }
10840         break;
10841       }
10842       case Field: {
10843         FieldDecl *FirstField = cast<FieldDecl>(FirstDecl);
10844         FieldDecl *SecondField = cast<FieldDecl>(SecondDecl);
10845         IdentifierInfo *FirstII = FirstField->getIdentifier();
10846         IdentifierInfo *SecondII = SecondField->getIdentifier();
10847         if (FirstII->getName() != SecondII->getName()) {
10848           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10849                        FieldName)
10850               << FirstII;
10851           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10852                       FieldName)
10853               << SecondII;
10854 
10855           Diagnosed = true;
10856           break;
10857         }
10858 
10859         assert(getContext().hasSameType(FirstField->getType(),
10860                                         SecondField->getType()));
10861 
10862         QualType FirstType = FirstField->getType();
10863         QualType SecondType = SecondField->getType();
10864         if (ComputeQualTypeODRHash(FirstType) !=
10865             ComputeQualTypeODRHash(SecondType)) {
10866           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10867                        FieldTypeName)
10868               << FirstII << FirstType;
10869           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10870                       FieldTypeName)
10871               << SecondII << SecondType;
10872 
10873           Diagnosed = true;
10874           break;
10875         }
10876 
10877         const bool IsFirstBitField = FirstField->isBitField();
10878         const bool IsSecondBitField = SecondField->isBitField();
10879         if (IsFirstBitField != IsSecondBitField) {
10880           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10881                        FieldSingleBitField)
10882               << FirstII << IsFirstBitField;
10883           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10884                       FieldSingleBitField)
10885               << SecondII << IsSecondBitField;
10886           Diagnosed = true;
10887           break;
10888         }
10889 
10890         if (IsFirstBitField && IsSecondBitField) {
10891           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10892                        FieldDifferentWidthBitField)
10893               << FirstII << FirstField->getBitWidth()->getSourceRange();
10894           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10895                       FieldDifferentWidthBitField)
10896               << SecondII << SecondField->getBitWidth()->getSourceRange();
10897           Diagnosed = true;
10898           break;
10899         }
10900 
10901         const bool IsFirstMutable = FirstField->isMutable();
10902         const bool IsSecondMutable = SecondField->isMutable();
10903         if (IsFirstMutable != IsSecondMutable) {
10904           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10905                        FieldSingleMutable)
10906               << FirstII << IsFirstMutable;
10907           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10908                       FieldSingleMutable)
10909               << SecondII << IsSecondMutable;
10910           Diagnosed = true;
10911           break;
10912         }
10913 
10914         const Expr *FirstInitializer = FirstField->getInClassInitializer();
10915         const Expr *SecondInitializer = SecondField->getInClassInitializer();
10916         if ((!FirstInitializer && SecondInitializer) ||
10917             (FirstInitializer && !SecondInitializer)) {
10918           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10919                        FieldSingleInitializer)
10920               << FirstII << (FirstInitializer != nullptr);
10921           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10922                       FieldSingleInitializer)
10923               << SecondII << (SecondInitializer != nullptr);
10924           Diagnosed = true;
10925           break;
10926         }
10927 
10928         if (FirstInitializer && SecondInitializer) {
10929           unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
10930           unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
10931           if (FirstInitHash != SecondInitHash) {
10932             ODRDiagError(FirstField->getLocation(),
10933                          FirstField->getSourceRange(),
10934                          FieldDifferentInitializers)
10935                 << FirstII << FirstInitializer->getSourceRange();
10936             ODRDiagNote(SecondField->getLocation(),
10937                         SecondField->getSourceRange(),
10938                         FieldDifferentInitializers)
10939                 << SecondII << SecondInitializer->getSourceRange();
10940             Diagnosed = true;
10941             break;
10942           }
10943         }
10944 
10945         break;
10946       }
10947       case CXXMethod: {
10948         enum {
10949           DiagMethod,
10950           DiagConstructor,
10951           DiagDestructor,
10952         } FirstMethodType,
10953             SecondMethodType;
10954         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10955           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10956           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10957           return DiagMethod;
10958         };
10959         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10960         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10961         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10962         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10963         auto FirstName = FirstMethod->getDeclName();
10964         auto SecondName = SecondMethod->getDeclName();
10965         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10966           ODRDiagError(FirstMethod->getLocation(),
10967                        FirstMethod->getSourceRange(), MethodName)
10968               << FirstMethodType << FirstName;
10969           ODRDiagNote(SecondMethod->getLocation(),
10970                       SecondMethod->getSourceRange(), MethodName)
10971               << SecondMethodType << SecondName;
10972 
10973           Diagnosed = true;
10974           break;
10975         }
10976 
10977         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10978         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10979         if (FirstDeleted != SecondDeleted) {
10980           ODRDiagError(FirstMethod->getLocation(),
10981                        FirstMethod->getSourceRange(), MethodDeleted)
10982               << FirstMethodType << FirstName << FirstDeleted;
10983 
10984           ODRDiagNote(SecondMethod->getLocation(),
10985                       SecondMethod->getSourceRange(), MethodDeleted)
10986               << SecondMethodType << SecondName << SecondDeleted;
10987           Diagnosed = true;
10988           break;
10989         }
10990 
10991         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10992         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10993         if (FirstDefaulted != SecondDefaulted) {
10994           ODRDiagError(FirstMethod->getLocation(),
10995                        FirstMethod->getSourceRange(), MethodDefaulted)
10996               << FirstMethodType << FirstName << FirstDefaulted;
10997 
10998           ODRDiagNote(SecondMethod->getLocation(),
10999                       SecondMethod->getSourceRange(), MethodDefaulted)
11000               << SecondMethodType << SecondName << SecondDefaulted;
11001           Diagnosed = true;
11002           break;
11003         }
11004 
11005         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
11006         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
11007         const bool FirstPure = FirstMethod->isPure();
11008         const bool SecondPure = SecondMethod->isPure();
11009         if ((FirstVirtual || SecondVirtual) &&
11010             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
11011           ODRDiagError(FirstMethod->getLocation(),
11012                        FirstMethod->getSourceRange(), MethodVirtual)
11013               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
11014           ODRDiagNote(SecondMethod->getLocation(),
11015                       SecondMethod->getSourceRange(), MethodVirtual)
11016               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
11017           Diagnosed = true;
11018           break;
11019         }
11020 
11021         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
11022         // FirstDecl is the canonical Decl of SecondDecl, so the storage
11023         // class needs to be checked instead.
11024         const auto FirstStorage = FirstMethod->getStorageClass();
11025         const auto SecondStorage = SecondMethod->getStorageClass();
11026         const bool FirstStatic = FirstStorage == SC_Static;
11027         const bool SecondStatic = SecondStorage == SC_Static;
11028         if (FirstStatic != SecondStatic) {
11029           ODRDiagError(FirstMethod->getLocation(),
11030                        FirstMethod->getSourceRange(), MethodStatic)
11031               << FirstMethodType << FirstName << FirstStatic;
11032           ODRDiagNote(SecondMethod->getLocation(),
11033                       SecondMethod->getSourceRange(), MethodStatic)
11034               << SecondMethodType << SecondName << SecondStatic;
11035           Diagnosed = true;
11036           break;
11037         }
11038 
11039         const bool FirstVolatile = FirstMethod->isVolatile();
11040         const bool SecondVolatile = SecondMethod->isVolatile();
11041         if (FirstVolatile != SecondVolatile) {
11042           ODRDiagError(FirstMethod->getLocation(),
11043                        FirstMethod->getSourceRange(), MethodVolatile)
11044               << FirstMethodType << FirstName << FirstVolatile;
11045           ODRDiagNote(SecondMethod->getLocation(),
11046                       SecondMethod->getSourceRange(), MethodVolatile)
11047               << SecondMethodType << SecondName << SecondVolatile;
11048           Diagnosed = true;
11049           break;
11050         }
11051 
11052         const bool FirstConst = FirstMethod->isConst();
11053         const bool SecondConst = SecondMethod->isConst();
11054         if (FirstConst != SecondConst) {
11055           ODRDiagError(FirstMethod->getLocation(),
11056                        FirstMethod->getSourceRange(), MethodConst)
11057               << FirstMethodType << FirstName << FirstConst;
11058           ODRDiagNote(SecondMethod->getLocation(),
11059                       SecondMethod->getSourceRange(), MethodConst)
11060               << SecondMethodType << SecondName << SecondConst;
11061           Diagnosed = true;
11062           break;
11063         }
11064 
11065         const bool FirstInline = FirstMethod->isInlineSpecified();
11066         const bool SecondInline = SecondMethod->isInlineSpecified();
11067         if (FirstInline != SecondInline) {
11068           ODRDiagError(FirstMethod->getLocation(),
11069                        FirstMethod->getSourceRange(), MethodInline)
11070               << FirstMethodType << FirstName << FirstInline;
11071           ODRDiagNote(SecondMethod->getLocation(),
11072                       SecondMethod->getSourceRange(), MethodInline)
11073               << SecondMethodType << SecondName << SecondInline;
11074           Diagnosed = true;
11075           break;
11076         }
11077 
11078         const unsigned FirstNumParameters = FirstMethod->param_size();
11079         const unsigned SecondNumParameters = SecondMethod->param_size();
11080         if (FirstNumParameters != SecondNumParameters) {
11081           ODRDiagError(FirstMethod->getLocation(),
11082                        FirstMethod->getSourceRange(), MethodNumberParameters)
11083               << FirstMethodType << FirstName << FirstNumParameters;
11084           ODRDiagNote(SecondMethod->getLocation(),
11085                       SecondMethod->getSourceRange(), MethodNumberParameters)
11086               << SecondMethodType << SecondName << SecondNumParameters;
11087           Diagnosed = true;
11088           break;
11089         }
11090 
11091         // Need this status boolean to know when break out of the switch.
11092         bool ParameterMismatch = false;
11093         for (unsigned I = 0; I < FirstNumParameters; ++I) {
11094           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
11095           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
11096 
11097           QualType FirstParamType = FirstParam->getType();
11098           QualType SecondParamType = SecondParam->getType();
11099           if (FirstParamType != SecondParamType &&
11100               ComputeQualTypeODRHash(FirstParamType) !=
11101                   ComputeQualTypeODRHash(SecondParamType)) {
11102             if (const DecayedType *ParamDecayedType =
11103                     FirstParamType->getAs<DecayedType>()) {
11104               ODRDiagError(FirstMethod->getLocation(),
11105                            FirstMethod->getSourceRange(), MethodParameterType)
11106                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
11107                   << true << ParamDecayedType->getOriginalType();
11108             } else {
11109               ODRDiagError(FirstMethod->getLocation(),
11110                            FirstMethod->getSourceRange(), MethodParameterType)
11111                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
11112                   << false;
11113             }
11114 
11115             if (const DecayedType *ParamDecayedType =
11116                     SecondParamType->getAs<DecayedType>()) {
11117               ODRDiagNote(SecondMethod->getLocation(),
11118                           SecondMethod->getSourceRange(), MethodParameterType)
11119                   << SecondMethodType << SecondName << (I + 1)
11120                   << SecondParamType << true
11121                   << ParamDecayedType->getOriginalType();
11122             } else {
11123               ODRDiagNote(SecondMethod->getLocation(),
11124                           SecondMethod->getSourceRange(), MethodParameterType)
11125                   << SecondMethodType << SecondName << (I + 1)
11126                   << SecondParamType << false;
11127             }
11128             ParameterMismatch = true;
11129             break;
11130           }
11131 
11132           DeclarationName FirstParamName = FirstParam->getDeclName();
11133           DeclarationName SecondParamName = SecondParam->getDeclName();
11134           if (FirstParamName != SecondParamName) {
11135             ODRDiagError(FirstMethod->getLocation(),
11136                          FirstMethod->getSourceRange(), MethodParameterName)
11137                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
11138             ODRDiagNote(SecondMethod->getLocation(),
11139                         SecondMethod->getSourceRange(), MethodParameterName)
11140                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
11141             ParameterMismatch = true;
11142             break;
11143           }
11144 
11145           const Expr *FirstInit = FirstParam->getInit();
11146           const Expr *SecondInit = SecondParam->getInit();
11147           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11148             ODRDiagError(FirstMethod->getLocation(),
11149                          FirstMethod->getSourceRange(),
11150                          MethodParameterSingleDefaultArgument)
11151                 << FirstMethodType << FirstName << (I + 1)
11152                 << (FirstInit == nullptr)
11153                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11154             ODRDiagNote(SecondMethod->getLocation(),
11155                         SecondMethod->getSourceRange(),
11156                         MethodParameterSingleDefaultArgument)
11157                 << SecondMethodType << SecondName << (I + 1)
11158                 << (SecondInit == nullptr)
11159                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11160             ParameterMismatch = true;
11161             break;
11162           }
11163 
11164           if (FirstInit && SecondInit &&
11165               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11166             ODRDiagError(FirstMethod->getLocation(),
11167                          FirstMethod->getSourceRange(),
11168                          MethodParameterDifferentDefaultArgument)
11169                 << FirstMethodType << FirstName << (I + 1)
11170                 << FirstInit->getSourceRange();
11171             ODRDiagNote(SecondMethod->getLocation(),
11172                         SecondMethod->getSourceRange(),
11173                         MethodParameterDifferentDefaultArgument)
11174                 << SecondMethodType << SecondName << (I + 1)
11175                 << SecondInit->getSourceRange();
11176             ParameterMismatch = true;
11177             break;
11178 
11179           }
11180         }
11181 
11182         if (ParameterMismatch) {
11183           Diagnosed = true;
11184           break;
11185         }
11186 
11187         const auto *FirstTemplateArgs =
11188             FirstMethod->getTemplateSpecializationArgs();
11189         const auto *SecondTemplateArgs =
11190             SecondMethod->getTemplateSpecializationArgs();
11191 
11192         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
11193             (!FirstTemplateArgs && SecondTemplateArgs)) {
11194           ODRDiagError(FirstMethod->getLocation(),
11195                        FirstMethod->getSourceRange(), MethodNoTemplateArguments)
11196               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
11197           ODRDiagNote(SecondMethod->getLocation(),
11198                       SecondMethod->getSourceRange(), MethodNoTemplateArguments)
11199               << SecondMethodType << SecondName
11200               << (SecondTemplateArgs != nullptr);
11201 
11202           Diagnosed = true;
11203           break;
11204         }
11205 
11206         if (FirstTemplateArgs && SecondTemplateArgs) {
11207           // Remove pack expansions from argument list.
11208           auto ExpandTemplateArgumentList =
11209               [](const TemplateArgumentList *TAL) {
11210                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
11211                 for (const TemplateArgument &TA : TAL->asArray()) {
11212                   if (TA.getKind() != TemplateArgument::Pack) {
11213                     ExpandedList.push_back(&TA);
11214                     continue;
11215                   }
11216                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
11217                     ExpandedList.push_back(&PackTA);
11218                   }
11219                 }
11220                 return ExpandedList;
11221               };
11222           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
11223               ExpandTemplateArgumentList(FirstTemplateArgs);
11224           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
11225               ExpandTemplateArgumentList(SecondTemplateArgs);
11226 
11227           if (FirstExpandedList.size() != SecondExpandedList.size()) {
11228             ODRDiagError(FirstMethod->getLocation(),
11229                          FirstMethod->getSourceRange(),
11230                          MethodDifferentNumberTemplateArguments)
11231                 << FirstMethodType << FirstName
11232                 << (unsigned)FirstExpandedList.size();
11233             ODRDiagNote(SecondMethod->getLocation(),
11234                         SecondMethod->getSourceRange(),
11235                         MethodDifferentNumberTemplateArguments)
11236                 << SecondMethodType << SecondName
11237                 << (unsigned)SecondExpandedList.size();
11238 
11239             Diagnosed = true;
11240             break;
11241           }
11242 
11243           bool TemplateArgumentMismatch = false;
11244           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
11245             const TemplateArgument &FirstTA = *FirstExpandedList[i],
11246                                    &SecondTA = *SecondExpandedList[i];
11247             if (ComputeTemplateArgumentODRHash(FirstTA) ==
11248                 ComputeTemplateArgumentODRHash(SecondTA)) {
11249               continue;
11250             }
11251 
11252             ODRDiagError(FirstMethod->getLocation(),
11253                          FirstMethod->getSourceRange(),
11254                          MethodDifferentTemplateArgument)
11255                 << FirstMethodType << FirstName << FirstTA << i + 1;
11256             ODRDiagNote(SecondMethod->getLocation(),
11257                         SecondMethod->getSourceRange(),
11258                         MethodDifferentTemplateArgument)
11259                 << SecondMethodType << SecondName << SecondTA << i + 1;
11260 
11261             TemplateArgumentMismatch = true;
11262             break;
11263           }
11264 
11265           if (TemplateArgumentMismatch) {
11266             Diagnosed = true;
11267             break;
11268           }
11269         }
11270 
11271         // Compute the hash of the method as if it has no body.
11272         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
11273           Hash.clear();
11274           Hash.AddFunctionDecl(D, true /*SkipBody*/);
11275           return Hash.CalculateHash();
11276         };
11277 
11278         // Compare the hash generated to the hash stored.  A difference means
11279         // that a body was present in the original source.  Due to merging,
11280         // the stardard way of detecting a body will not work.
11281         const bool HasFirstBody =
11282             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
11283         const bool HasSecondBody =
11284             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
11285 
11286         if (HasFirstBody != HasSecondBody) {
11287           ODRDiagError(FirstMethod->getLocation(),
11288                        FirstMethod->getSourceRange(), MethodSingleBody)
11289               << FirstMethodType << FirstName << HasFirstBody;
11290           ODRDiagNote(SecondMethod->getLocation(),
11291                       SecondMethod->getSourceRange(), MethodSingleBody)
11292               << SecondMethodType << SecondName << HasSecondBody;
11293           Diagnosed = true;
11294           break;
11295         }
11296 
11297         if (HasFirstBody && HasSecondBody) {
11298           ODRDiagError(FirstMethod->getLocation(),
11299                        FirstMethod->getSourceRange(), MethodDifferentBody)
11300               << FirstMethodType << FirstName;
11301           ODRDiagNote(SecondMethod->getLocation(),
11302                       SecondMethod->getSourceRange(), MethodDifferentBody)
11303               << SecondMethodType << SecondName;
11304           Diagnosed = true;
11305           break;
11306         }
11307 
11308         break;
11309       }
11310       case TypeAlias:
11311       case TypeDef: {
11312         TypedefNameDecl *FirstTD = cast<TypedefNameDecl>(FirstDecl);
11313         TypedefNameDecl *SecondTD = cast<TypedefNameDecl>(SecondDecl);
11314         auto FirstName = FirstTD->getDeclName();
11315         auto SecondName = SecondTD->getDeclName();
11316         if (FirstName != SecondName) {
11317           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
11318                        TypedefName)
11319               << (FirstDiffType == TypeAlias) << FirstName;
11320           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
11321                       TypedefName)
11322               << (FirstDiffType == TypeAlias) << SecondName;
11323           Diagnosed = true;
11324           break;
11325         }
11326 
11327         QualType FirstType = FirstTD->getUnderlyingType();
11328         QualType SecondType = SecondTD->getUnderlyingType();
11329         if (ComputeQualTypeODRHash(FirstType) !=
11330             ComputeQualTypeODRHash(SecondType)) {
11331           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
11332                        TypedefType)
11333               << (FirstDiffType == TypeAlias) << FirstName << FirstType;
11334           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
11335                       TypedefType)
11336               << (FirstDiffType == TypeAlias) << SecondName << SecondType;
11337           Diagnosed = true;
11338           break;
11339         }
11340         break;
11341       }
11342       case Var: {
11343         VarDecl *FirstVD = cast<VarDecl>(FirstDecl);
11344         VarDecl *SecondVD = cast<VarDecl>(SecondDecl);
11345         auto FirstName = FirstVD->getDeclName();
11346         auto SecondName = SecondVD->getDeclName();
11347         if (FirstName != SecondName) {
11348           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
11349                        VarName)
11350               << FirstName;
11351           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
11352                       VarName)
11353               << SecondName;
11354           Diagnosed = true;
11355           break;
11356         }
11357 
11358         QualType FirstType = FirstVD->getType();
11359         QualType SecondType = SecondVD->getType();
11360         if (ComputeQualTypeODRHash(FirstType) !=
11361                         ComputeQualTypeODRHash(SecondType)) {
11362           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
11363                        VarType)
11364               << FirstName << FirstType;
11365           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
11366                       VarType)
11367               << SecondName << SecondType;
11368           Diagnosed = true;
11369           break;
11370         }
11371 
11372         const Expr *FirstInit = FirstVD->getInit();
11373         const Expr *SecondInit = SecondVD->getInit();
11374         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11375           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
11376                        VarSingleInitializer)
11377               << FirstName << (FirstInit == nullptr)
11378               << (FirstInit ? FirstInit->getSourceRange(): SourceRange());
11379           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
11380                       VarSingleInitializer)
11381               << SecondName << (SecondInit == nullptr)
11382               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11383           Diagnosed = true;
11384           break;
11385         }
11386 
11387         if (FirstInit && SecondInit &&
11388             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11389           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
11390                        VarDifferentInitializer)
11391               << FirstName << FirstInit->getSourceRange();
11392           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
11393                       VarDifferentInitializer)
11394               << SecondName << SecondInit->getSourceRange();
11395           Diagnosed = true;
11396           break;
11397         }
11398 
11399         const bool FirstIsConstexpr = FirstVD->isConstexpr();
11400         const bool SecondIsConstexpr = SecondVD->isConstexpr();
11401         if (FirstIsConstexpr != SecondIsConstexpr) {
11402           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
11403                        VarConstexpr)
11404               << FirstName << FirstIsConstexpr;
11405           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
11406                       VarConstexpr)
11407               << SecondName << SecondIsConstexpr;
11408           Diagnosed = true;
11409           break;
11410         }
11411         break;
11412       }
11413       case Friend: {
11414         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
11415         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
11416 
11417         NamedDecl *FirstND = FirstFriend->getFriendDecl();
11418         NamedDecl *SecondND = SecondFriend->getFriendDecl();
11419 
11420         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
11421         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
11422 
11423         if (FirstND && SecondND) {
11424           ODRDiagError(FirstFriend->getFriendLoc(),
11425                        FirstFriend->getSourceRange(), FriendFunction)
11426               << FirstND;
11427           ODRDiagNote(SecondFriend->getFriendLoc(),
11428                       SecondFriend->getSourceRange(), FriendFunction)
11429               << SecondND;
11430 
11431           Diagnosed = true;
11432           break;
11433         }
11434 
11435         if (FirstTSI && SecondTSI) {
11436           QualType FirstFriendType = FirstTSI->getType();
11437           QualType SecondFriendType = SecondTSI->getType();
11438           assert(ComputeQualTypeODRHash(FirstFriendType) !=
11439                  ComputeQualTypeODRHash(SecondFriendType));
11440           ODRDiagError(FirstFriend->getFriendLoc(),
11441                        FirstFriend->getSourceRange(), FriendType)
11442               << FirstFriendType;
11443           ODRDiagNote(SecondFriend->getFriendLoc(),
11444                       SecondFriend->getSourceRange(), FriendType)
11445               << SecondFriendType;
11446           Diagnosed = true;
11447           break;
11448         }
11449 
11450         ODRDiagError(FirstFriend->getFriendLoc(), FirstFriend->getSourceRange(),
11451                      FriendTypeFunction)
11452             << (FirstTSI == nullptr);
11453         ODRDiagNote(SecondFriend->getFriendLoc(),
11454                     SecondFriend->getSourceRange(), FriendTypeFunction)
11455             << (SecondTSI == nullptr);
11456 
11457         Diagnosed = true;
11458         break;
11459       }
11460       case FunctionTemplate: {
11461         FunctionTemplateDecl *FirstTemplate =
11462             cast<FunctionTemplateDecl>(FirstDecl);
11463         FunctionTemplateDecl *SecondTemplate =
11464             cast<FunctionTemplateDecl>(SecondDecl);
11465 
11466         TemplateParameterList *FirstTPL =
11467             FirstTemplate->getTemplateParameters();
11468         TemplateParameterList *SecondTPL =
11469             SecondTemplate->getTemplateParameters();
11470 
11471         if (FirstTPL->size() != SecondTPL->size()) {
11472           ODRDiagError(FirstTemplate->getLocation(),
11473                        FirstTemplate->getSourceRange(),
11474                        FunctionTemplateDifferentNumberParameters)
11475               << FirstTemplate << FirstTPL->size();
11476           ODRDiagNote(SecondTemplate->getLocation(),
11477                       SecondTemplate->getSourceRange(),
11478                       FunctionTemplateDifferentNumberParameters)
11479               << SecondTemplate  << SecondTPL->size();
11480 
11481           Diagnosed = true;
11482           break;
11483         }
11484 
11485         bool ParameterMismatch = false;
11486         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
11487           NamedDecl *FirstParam = FirstTPL->getParam(i);
11488           NamedDecl *SecondParam = SecondTPL->getParam(i);
11489 
11490           if (FirstParam->getKind() != SecondParam->getKind()) {
11491             enum {
11492               TemplateTypeParameter,
11493               NonTypeTemplateParameter,
11494               TemplateTemplateParameter,
11495             };
11496             auto GetParamType = [](NamedDecl *D) {
11497               switch (D->getKind()) {
11498                 default:
11499                   llvm_unreachable("Unexpected template parameter type");
11500                 case Decl::TemplateTypeParm:
11501                   return TemplateTypeParameter;
11502                 case Decl::NonTypeTemplateParm:
11503                   return NonTypeTemplateParameter;
11504                 case Decl::TemplateTemplateParm:
11505                   return TemplateTemplateParameter;
11506               }
11507             };
11508 
11509             ODRDiagError(FirstTemplate->getLocation(),
11510                          FirstTemplate->getSourceRange(),
11511                          FunctionTemplateParameterDifferentKind)
11512                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
11513             ODRDiagNote(SecondTemplate->getLocation(),
11514                         SecondTemplate->getSourceRange(),
11515                         FunctionTemplateParameterDifferentKind)
11516                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
11517 
11518             ParameterMismatch = true;
11519             break;
11520           }
11521 
11522           if (FirstParam->getName() != SecondParam->getName()) {
11523             ODRDiagError(FirstTemplate->getLocation(),
11524                          FirstTemplate->getSourceRange(),
11525                          FunctionTemplateParameterName)
11526                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
11527                 << FirstParam;
11528             ODRDiagNote(SecondTemplate->getLocation(),
11529                         SecondTemplate->getSourceRange(),
11530                         FunctionTemplateParameterName)
11531                 << SecondTemplate << (i + 1)
11532                 << (bool)SecondParam->getIdentifier() << SecondParam;
11533             ParameterMismatch = true;
11534             break;
11535           }
11536 
11537           if (isa<TemplateTypeParmDecl>(FirstParam) &&
11538               isa<TemplateTypeParmDecl>(SecondParam)) {
11539             TemplateTypeParmDecl *FirstTTPD =
11540                 cast<TemplateTypeParmDecl>(FirstParam);
11541             TemplateTypeParmDecl *SecondTTPD =
11542                 cast<TemplateTypeParmDecl>(SecondParam);
11543             bool HasFirstDefaultArgument =
11544                 FirstTTPD->hasDefaultArgument() &&
11545                 !FirstTTPD->defaultArgumentWasInherited();
11546             bool HasSecondDefaultArgument =
11547                 SecondTTPD->hasDefaultArgument() &&
11548                 !SecondTTPD->defaultArgumentWasInherited();
11549             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11550               ODRDiagError(FirstTemplate->getLocation(),
11551                            FirstTemplate->getSourceRange(),
11552                            FunctionTemplateParameterSingleDefaultArgument)
11553                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11554               ODRDiagNote(SecondTemplate->getLocation(),
11555                           SecondTemplate->getSourceRange(),
11556                           FunctionTemplateParameterSingleDefaultArgument)
11557                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11558               ParameterMismatch = true;
11559               break;
11560             }
11561 
11562             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11563               QualType FirstType = FirstTTPD->getDefaultArgument();
11564               QualType SecondType = SecondTTPD->getDefaultArgument();
11565               if (ComputeQualTypeODRHash(FirstType) !=
11566                   ComputeQualTypeODRHash(SecondType)) {
11567                 ODRDiagError(FirstTemplate->getLocation(),
11568                              FirstTemplate->getSourceRange(),
11569                              FunctionTemplateParameterDifferentDefaultArgument)
11570                     << FirstTemplate << (i + 1) << FirstType;
11571                 ODRDiagNote(SecondTemplate->getLocation(),
11572                             SecondTemplate->getSourceRange(),
11573                             FunctionTemplateParameterDifferentDefaultArgument)
11574                     << SecondTemplate << (i + 1) << SecondType;
11575                 ParameterMismatch = true;
11576                 break;
11577               }
11578             }
11579 
11580             if (FirstTTPD->isParameterPack() !=
11581                 SecondTTPD->isParameterPack()) {
11582               ODRDiagError(FirstTemplate->getLocation(),
11583                            FirstTemplate->getSourceRange(),
11584                            FunctionTemplatePackParameter)
11585                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11586               ODRDiagNote(SecondTemplate->getLocation(),
11587                           SecondTemplate->getSourceRange(),
11588                           FunctionTemplatePackParameter)
11589                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11590               ParameterMismatch = true;
11591               break;
11592             }
11593           }
11594 
11595           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11596               isa<TemplateTemplateParmDecl>(SecondParam)) {
11597             TemplateTemplateParmDecl *FirstTTPD =
11598                 cast<TemplateTemplateParmDecl>(FirstParam);
11599             TemplateTemplateParmDecl *SecondTTPD =
11600                 cast<TemplateTemplateParmDecl>(SecondParam);
11601 
11602             TemplateParameterList *FirstTPL =
11603                 FirstTTPD->getTemplateParameters();
11604             TemplateParameterList *SecondTPL =
11605                 SecondTTPD->getTemplateParameters();
11606 
11607             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11608                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11609               ODRDiagError(FirstTemplate->getLocation(),
11610                            FirstTemplate->getSourceRange(),
11611                            FunctionTemplateParameterDifferentType)
11612                   << FirstTemplate << (i + 1);
11613               ODRDiagNote(SecondTemplate->getLocation(),
11614                           SecondTemplate->getSourceRange(),
11615                           FunctionTemplateParameterDifferentType)
11616                   << SecondTemplate << (i + 1);
11617               ParameterMismatch = true;
11618               break;
11619             }
11620 
11621             bool HasFirstDefaultArgument =
11622                 FirstTTPD->hasDefaultArgument() &&
11623                 !FirstTTPD->defaultArgumentWasInherited();
11624             bool HasSecondDefaultArgument =
11625                 SecondTTPD->hasDefaultArgument() &&
11626                 !SecondTTPD->defaultArgumentWasInherited();
11627             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11628               ODRDiagError(FirstTemplate->getLocation(),
11629                            FirstTemplate->getSourceRange(),
11630                            FunctionTemplateParameterSingleDefaultArgument)
11631                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11632               ODRDiagNote(SecondTemplate->getLocation(),
11633                           SecondTemplate->getSourceRange(),
11634                           FunctionTemplateParameterSingleDefaultArgument)
11635                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11636               ParameterMismatch = true;
11637               break;
11638             }
11639 
11640             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11641               TemplateArgument FirstTA =
11642                   FirstTTPD->getDefaultArgument().getArgument();
11643               TemplateArgument SecondTA =
11644                   SecondTTPD->getDefaultArgument().getArgument();
11645               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11646                   ComputeTemplateArgumentODRHash(SecondTA)) {
11647                 ODRDiagError(FirstTemplate->getLocation(),
11648                              FirstTemplate->getSourceRange(),
11649                              FunctionTemplateParameterDifferentDefaultArgument)
11650                     << FirstTemplate << (i + 1) << FirstTA;
11651                 ODRDiagNote(SecondTemplate->getLocation(),
11652                             SecondTemplate->getSourceRange(),
11653                             FunctionTemplateParameterDifferentDefaultArgument)
11654                     << SecondTemplate << (i + 1) << SecondTA;
11655                 ParameterMismatch = true;
11656                 break;
11657               }
11658             }
11659 
11660             if (FirstTTPD->isParameterPack() !=
11661                 SecondTTPD->isParameterPack()) {
11662               ODRDiagError(FirstTemplate->getLocation(),
11663                            FirstTemplate->getSourceRange(),
11664                            FunctionTemplatePackParameter)
11665                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11666               ODRDiagNote(SecondTemplate->getLocation(),
11667                           SecondTemplate->getSourceRange(),
11668                           FunctionTemplatePackParameter)
11669                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11670               ParameterMismatch = true;
11671               break;
11672             }
11673           }
11674 
11675           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11676               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11677             NonTypeTemplateParmDecl *FirstNTTPD =
11678                 cast<NonTypeTemplateParmDecl>(FirstParam);
11679             NonTypeTemplateParmDecl *SecondNTTPD =
11680                 cast<NonTypeTemplateParmDecl>(SecondParam);
11681 
11682             QualType FirstType = FirstNTTPD->getType();
11683             QualType SecondType = SecondNTTPD->getType();
11684             if (ComputeQualTypeODRHash(FirstType) !=
11685                 ComputeQualTypeODRHash(SecondType)) {
11686               ODRDiagError(FirstTemplate->getLocation(),
11687                            FirstTemplate->getSourceRange(),
11688                            FunctionTemplateParameterDifferentType)
11689                   << FirstTemplate << (i + 1);
11690               ODRDiagNote(SecondTemplate->getLocation(),
11691                           SecondTemplate->getSourceRange(),
11692                           FunctionTemplateParameterDifferentType)
11693                   << SecondTemplate << (i + 1);
11694               ParameterMismatch = true;
11695               break;
11696             }
11697 
11698             bool HasFirstDefaultArgument =
11699                 FirstNTTPD->hasDefaultArgument() &&
11700                 !FirstNTTPD->defaultArgumentWasInherited();
11701             bool HasSecondDefaultArgument =
11702                 SecondNTTPD->hasDefaultArgument() &&
11703                 !SecondNTTPD->defaultArgumentWasInherited();
11704             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11705               ODRDiagError(FirstTemplate->getLocation(),
11706                            FirstTemplate->getSourceRange(),
11707                            FunctionTemplateParameterSingleDefaultArgument)
11708                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11709               ODRDiagNote(SecondTemplate->getLocation(),
11710                           SecondTemplate->getSourceRange(),
11711                           FunctionTemplateParameterSingleDefaultArgument)
11712                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11713               ParameterMismatch = true;
11714               break;
11715             }
11716 
11717             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11718               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11719               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11720               if (ComputeODRHash(FirstDefaultArgument) !=
11721                   ComputeODRHash(SecondDefaultArgument)) {
11722                 ODRDiagError(FirstTemplate->getLocation(),
11723                              FirstTemplate->getSourceRange(),
11724                              FunctionTemplateParameterDifferentDefaultArgument)
11725                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11726                 ODRDiagNote(SecondTemplate->getLocation(),
11727                             SecondTemplate->getSourceRange(),
11728                             FunctionTemplateParameterDifferentDefaultArgument)
11729                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11730                 ParameterMismatch = true;
11731                 break;
11732               }
11733             }
11734 
11735             if (FirstNTTPD->isParameterPack() !=
11736                 SecondNTTPD->isParameterPack()) {
11737               ODRDiagError(FirstTemplate->getLocation(),
11738                            FirstTemplate->getSourceRange(),
11739                            FunctionTemplatePackParameter)
11740                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11741               ODRDiagNote(SecondTemplate->getLocation(),
11742                           SecondTemplate->getSourceRange(),
11743                           FunctionTemplatePackParameter)
11744                   << SecondTemplate << (i + 1)
11745                   << SecondNTTPD->isParameterPack();
11746               ParameterMismatch = true;
11747               break;
11748             }
11749           }
11750         }
11751 
11752         if (ParameterMismatch) {
11753           Diagnosed = true;
11754           break;
11755         }
11756 
11757         break;
11758       }
11759       }
11760 
11761       if (Diagnosed)
11762         continue;
11763 
11764       Diag(FirstDecl->getLocation(),
11765            diag::err_module_odr_violation_mismatch_decl_unknown)
11766           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11767           << FirstDecl->getSourceRange();
11768       Diag(SecondDecl->getLocation(),
11769            diag::note_module_odr_violation_mismatch_decl_unknown)
11770           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11771       Diagnosed = true;
11772     }
11773 
11774     if (!Diagnosed) {
11775       // All definitions are updates to the same declaration. This happens if a
11776       // module instantiates the declaration of a class template specialization
11777       // and two or more other modules instantiate its definition.
11778       //
11779       // FIXME: Indicate which modules had instantiations of this definition.
11780       // FIXME: How can this even happen?
11781       Diag(Merge.first->getLocation(),
11782            diag::err_module_odr_violation_different_instantiations)
11783         << Merge.first;
11784     }
11785   }
11786 
11787   // Issue ODR failures diagnostics for functions.
11788   for (auto &Merge : FunctionOdrMergeFailures) {
11789     enum ODRFunctionDifference {
11790       ReturnType,
11791       ParameterName,
11792       ParameterType,
11793       ParameterSingleDefaultArgument,
11794       ParameterDifferentDefaultArgument,
11795       FunctionBody,
11796     };
11797 
11798     FunctionDecl *FirstFunction = Merge.first;
11799     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11800 
11801     bool Diagnosed = false;
11802     for (auto &SecondFunction : Merge.second) {
11803 
11804       if (FirstFunction == SecondFunction)
11805         continue;
11806 
11807       std::string SecondModule =
11808           getOwningModuleNameForDiagnostic(SecondFunction);
11809 
11810       auto ODRDiagError = [FirstFunction, &FirstModule,
11811                            this](SourceLocation Loc, SourceRange Range,
11812                                  ODRFunctionDifference DiffType) {
11813         return Diag(Loc, diag::err_module_odr_violation_function)
11814                << FirstFunction << FirstModule.empty() << FirstModule << Range
11815                << DiffType;
11816       };
11817       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11818                                                SourceRange Range,
11819                                                ODRFunctionDifference DiffType) {
11820         return Diag(Loc, diag::note_module_odr_violation_function)
11821                << SecondModule << Range << DiffType;
11822       };
11823 
11824       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11825           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11826         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11827                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11828             << FirstFunction->getReturnType();
11829         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11830                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11831             << SecondFunction->getReturnType();
11832         Diagnosed = true;
11833         break;
11834       }
11835 
11836       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11837              "Merged functions with different number of parameters");
11838 
11839       auto ParamSize = FirstFunction->param_size();
11840       bool ParameterMismatch = false;
11841       for (unsigned I = 0; I < ParamSize; ++I) {
11842         auto *FirstParam = FirstFunction->getParamDecl(I);
11843         auto *SecondParam = SecondFunction->getParamDecl(I);
11844 
11845         assert(getContext().hasSameType(FirstParam->getType(),
11846                                       SecondParam->getType()) &&
11847                "Merged function has different parameter types.");
11848 
11849         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11850           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11851                        ParameterName)
11852               << I + 1 << FirstParam->getDeclName();
11853           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11854                       ParameterName)
11855               << I + 1 << SecondParam->getDeclName();
11856           ParameterMismatch = true;
11857           break;
11858         };
11859 
11860         QualType FirstParamType = FirstParam->getType();
11861         QualType SecondParamType = SecondParam->getType();
11862         if (FirstParamType != SecondParamType &&
11863             ComputeQualTypeODRHash(FirstParamType) !=
11864                 ComputeQualTypeODRHash(SecondParamType)) {
11865           if (const DecayedType *ParamDecayedType =
11866                   FirstParamType->getAs<DecayedType>()) {
11867             ODRDiagError(FirstParam->getLocation(),
11868                          FirstParam->getSourceRange(), ParameterType)
11869                 << (I + 1) << FirstParamType << true
11870                 << ParamDecayedType->getOriginalType();
11871           } else {
11872             ODRDiagError(FirstParam->getLocation(),
11873                          FirstParam->getSourceRange(), ParameterType)
11874                 << (I + 1) << FirstParamType << false;
11875           }
11876 
11877           if (const DecayedType *ParamDecayedType =
11878                   SecondParamType->getAs<DecayedType>()) {
11879             ODRDiagNote(SecondParam->getLocation(),
11880                         SecondParam->getSourceRange(), ParameterType)
11881                 << (I + 1) << SecondParamType << true
11882                 << ParamDecayedType->getOriginalType();
11883           } else {
11884             ODRDiagNote(SecondParam->getLocation(),
11885                         SecondParam->getSourceRange(), ParameterType)
11886                 << (I + 1) << SecondParamType << false;
11887           }
11888           ParameterMismatch = true;
11889           break;
11890         }
11891 
11892         const Expr *FirstInit = FirstParam->getInit();
11893         const Expr *SecondInit = SecondParam->getInit();
11894         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11895           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11896                        ParameterSingleDefaultArgument)
11897               << (I + 1) << (FirstInit == nullptr)
11898               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11899           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11900                       ParameterSingleDefaultArgument)
11901               << (I + 1) << (SecondInit == nullptr)
11902               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11903           ParameterMismatch = true;
11904           break;
11905         }
11906 
11907         if (FirstInit && SecondInit &&
11908             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11909           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11910                        ParameterDifferentDefaultArgument)
11911               << (I + 1) << FirstInit->getSourceRange();
11912           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11913                       ParameterDifferentDefaultArgument)
11914               << (I + 1) << SecondInit->getSourceRange();
11915           ParameterMismatch = true;
11916           break;
11917         }
11918 
11919         assert(ComputeSubDeclODRHash(FirstParam) ==
11920                    ComputeSubDeclODRHash(SecondParam) &&
11921                "Undiagnosed parameter difference.");
11922       }
11923 
11924       if (ParameterMismatch) {
11925         Diagnosed = true;
11926         break;
11927       }
11928 
11929       // If no error has been generated before now, assume the problem is in
11930       // the body and generate a message.
11931       ODRDiagError(FirstFunction->getLocation(),
11932                    FirstFunction->getSourceRange(), FunctionBody);
11933       ODRDiagNote(SecondFunction->getLocation(),
11934                   SecondFunction->getSourceRange(), FunctionBody);
11935       Diagnosed = true;
11936       break;
11937     }
11938     (void)Diagnosed;
11939     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11940   }
11941 
11942   // Issue ODR failures diagnostics for enums.
11943   for (auto &Merge : EnumOdrMergeFailures) {
11944     enum ODREnumDifference {
11945       SingleScopedEnum,
11946       EnumTagKeywordMismatch,
11947       SingleSpecifiedType,
11948       DifferentSpecifiedTypes,
11949       DifferentNumberEnumConstants,
11950       EnumConstantName,
11951       EnumConstantSingleInitilizer,
11952       EnumConstantDifferentInitilizer,
11953     };
11954 
11955     // If we've already pointed out a specific problem with this enum, don't
11956     // bother issuing a general "something's different" diagnostic.
11957     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11958       continue;
11959 
11960     EnumDecl *FirstEnum = Merge.first;
11961     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11962 
11963     using DeclHashes =
11964         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11965     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11966                               DeclHashes &Hashes, EnumDecl *Enum) {
11967       for (auto *D : Enum->decls()) {
11968         // Due to decl merging, the first EnumDecl is the parent of
11969         // Decls in both records.
11970         if (!ODRHash::isWhitelistedDecl(D, FirstEnum))
11971           continue;
11972         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11973         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11974                             ComputeSubDeclODRHash(D));
11975       }
11976     };
11977     DeclHashes FirstHashes;
11978     PopulateHashes(FirstHashes, FirstEnum);
11979     bool Diagnosed = false;
11980     for (auto &SecondEnum : Merge.second) {
11981 
11982       if (FirstEnum == SecondEnum)
11983         continue;
11984 
11985       std::string SecondModule =
11986           getOwningModuleNameForDiagnostic(SecondEnum);
11987 
11988       auto ODRDiagError = [FirstEnum, &FirstModule,
11989                            this](SourceLocation Loc, SourceRange Range,
11990                                  ODREnumDifference DiffType) {
11991         return Diag(Loc, diag::err_module_odr_violation_enum)
11992                << FirstEnum << FirstModule.empty() << FirstModule << Range
11993                << DiffType;
11994       };
11995       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11996                                                SourceRange Range,
11997                                                ODREnumDifference DiffType) {
11998         return Diag(Loc, diag::note_module_odr_violation_enum)
11999                << SecondModule << Range << DiffType;
12000       };
12001 
12002       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
12003         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
12004                      SingleScopedEnum)
12005             << FirstEnum->isScoped();
12006         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
12007                     SingleScopedEnum)
12008             << SecondEnum->isScoped();
12009         Diagnosed = true;
12010         continue;
12011       }
12012 
12013       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
12014         if (FirstEnum->isScopedUsingClassTag() !=
12015             SecondEnum->isScopedUsingClassTag()) {
12016           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
12017                        EnumTagKeywordMismatch)
12018               << FirstEnum->isScopedUsingClassTag();
12019           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
12020                       EnumTagKeywordMismatch)
12021               << SecondEnum->isScopedUsingClassTag();
12022           Diagnosed = true;
12023           continue;
12024         }
12025       }
12026 
12027       QualType FirstUnderlyingType =
12028           FirstEnum->getIntegerTypeSourceInfo()
12029               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
12030               : QualType();
12031       QualType SecondUnderlyingType =
12032           SecondEnum->getIntegerTypeSourceInfo()
12033               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
12034               : QualType();
12035       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
12036           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
12037                        SingleSpecifiedType)
12038               << !FirstUnderlyingType.isNull();
12039           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
12040                       SingleSpecifiedType)
12041               << !SecondUnderlyingType.isNull();
12042           Diagnosed = true;
12043           continue;
12044       }
12045 
12046       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
12047         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
12048             ComputeQualTypeODRHash(SecondUnderlyingType)) {
12049           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
12050                        DifferentSpecifiedTypes)
12051               << FirstUnderlyingType;
12052           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
12053                       DifferentSpecifiedTypes)
12054               << SecondUnderlyingType;
12055           Diagnosed = true;
12056           continue;
12057         }
12058       }
12059 
12060       DeclHashes SecondHashes;
12061       PopulateHashes(SecondHashes, SecondEnum);
12062 
12063       if (FirstHashes.size() != SecondHashes.size()) {
12064         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
12065                      DifferentNumberEnumConstants)
12066             << (int)FirstHashes.size();
12067         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
12068                     DifferentNumberEnumConstants)
12069             << (int)SecondHashes.size();
12070         Diagnosed = true;
12071         continue;
12072       }
12073 
12074       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
12075         if (FirstHashes[I].second == SecondHashes[I].second)
12076           continue;
12077         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
12078         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
12079 
12080         if (FirstEnumConstant->getDeclName() !=
12081             SecondEnumConstant->getDeclName()) {
12082 
12083           ODRDiagError(FirstEnumConstant->getLocation(),
12084                        FirstEnumConstant->getSourceRange(), EnumConstantName)
12085               << I + 1 << FirstEnumConstant;
12086           ODRDiagNote(SecondEnumConstant->getLocation(),
12087                       SecondEnumConstant->getSourceRange(), EnumConstantName)
12088               << I + 1 << SecondEnumConstant;
12089           Diagnosed = true;
12090           break;
12091         }
12092 
12093         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
12094         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
12095         if (!FirstInit && !SecondInit)
12096           continue;
12097 
12098         if (!FirstInit || !SecondInit) {
12099           ODRDiagError(FirstEnumConstant->getLocation(),
12100                        FirstEnumConstant->getSourceRange(),
12101                        EnumConstantSingleInitilizer)
12102               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
12103           ODRDiagNote(SecondEnumConstant->getLocation(),
12104                       SecondEnumConstant->getSourceRange(),
12105                       EnumConstantSingleInitilizer)
12106               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
12107           Diagnosed = true;
12108           break;
12109         }
12110 
12111         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
12112           ODRDiagError(FirstEnumConstant->getLocation(),
12113                        FirstEnumConstant->getSourceRange(),
12114                        EnumConstantDifferentInitilizer)
12115               << I + 1 << FirstEnumConstant;
12116           ODRDiagNote(SecondEnumConstant->getLocation(),
12117                       SecondEnumConstant->getSourceRange(),
12118                       EnumConstantDifferentInitilizer)
12119               << I + 1 << SecondEnumConstant;
12120           Diagnosed = true;
12121           break;
12122         }
12123       }
12124     }
12125 
12126     (void)Diagnosed;
12127     assert(Diagnosed && "Unable to emit ODR diagnostic.");
12128   }
12129 }
12130 
12131 void ASTReader::StartedDeserializing() {
12132   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
12133     ReadTimer->startTimer();
12134 }
12135 
12136 void ASTReader::FinishedDeserializing() {
12137   assert(NumCurrentElementsDeserializing &&
12138          "FinishedDeserializing not paired with StartedDeserializing");
12139   if (NumCurrentElementsDeserializing == 1) {
12140     // We decrease NumCurrentElementsDeserializing only after pending actions
12141     // are finished, to avoid recursively re-calling finishPendingActions().
12142     finishPendingActions();
12143   }
12144   --NumCurrentElementsDeserializing;
12145 
12146   if (NumCurrentElementsDeserializing == 0) {
12147     // Propagate exception specification and deduced type updates along
12148     // redeclaration chains.
12149     //
12150     // We do this now rather than in finishPendingActions because we want to
12151     // be able to walk the complete redeclaration chains of the updated decls.
12152     while (!PendingExceptionSpecUpdates.empty() ||
12153            !PendingDeducedTypeUpdates.empty()) {
12154       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
12155       PendingExceptionSpecUpdates.clear();
12156       for (auto Update : ESUpdates) {
12157         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
12158         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
12159         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
12160         if (auto *Listener = getContext().getASTMutationListener())
12161           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
12162         for (auto *Redecl : Update.second->redecls())
12163           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
12164       }
12165 
12166       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
12167       PendingDeducedTypeUpdates.clear();
12168       for (auto Update : DTUpdates) {
12169         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
12170         // FIXME: If the return type is already deduced, check that it matches.
12171         getContext().adjustDeducedFunctionResultType(Update.first,
12172                                                      Update.second);
12173       }
12174     }
12175 
12176     if (ReadTimer)
12177       ReadTimer->stopTimer();
12178 
12179     diagnoseOdrViolations();
12180 
12181     // We are not in recursive loading, so it's safe to pass the "interesting"
12182     // decls to the consumer.
12183     if (Consumer)
12184       PassInterestingDeclsToConsumer();
12185   }
12186 }
12187 
12188 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
12189   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
12190     // Remove any fake results before adding any real ones.
12191     auto It = PendingFakeLookupResults.find(II);
12192     if (It != PendingFakeLookupResults.end()) {
12193       for (auto *ND : It->second)
12194         SemaObj->IdResolver.RemoveDecl(ND);
12195       // FIXME: this works around module+PCH performance issue.
12196       // Rather than erase the result from the map, which is O(n), just clear
12197       // the vector of NamedDecls.
12198       It->second.clear();
12199     }
12200   }
12201 
12202   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
12203     SemaObj->TUScope->AddDecl(D);
12204   } else if (SemaObj->TUScope) {
12205     // Adding the decl to IdResolver may have failed because it was already in
12206     // (even though it was not added in scope). If it is already in, make sure
12207     // it gets in the scope as well.
12208     if (std::find(SemaObj->IdResolver.begin(Name),
12209                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
12210       SemaObj->TUScope->AddDecl(D);
12211   }
12212 }
12213 
12214 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
12215                      ASTContext *Context,
12216                      const PCHContainerReader &PCHContainerRdr,
12217                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
12218                      StringRef isysroot, bool DisableValidation,
12219                      bool AllowASTWithCompilerErrors,
12220                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
12221                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
12222                      std::unique_ptr<llvm::Timer> ReadTimer)
12223     : Listener(DisableValidation
12224                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
12225                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
12226       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
12227       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
12228       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
12229                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
12230       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
12231       DisableValidation(DisableValidation),
12232       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
12233       AllowConfigurationMismatch(AllowConfigurationMismatch),
12234       ValidateSystemInputs(ValidateSystemInputs),
12235       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
12236       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
12237   SourceMgr.setExternalSLocEntrySource(this);
12238 
12239   for (const auto &Ext : Extensions) {
12240     auto BlockName = Ext->getExtensionMetadata().BlockName;
12241     auto Known = ModuleFileExtensions.find(BlockName);
12242     if (Known != ModuleFileExtensions.end()) {
12243       Diags.Report(diag::warn_duplicate_module_file_extension)
12244         << BlockName;
12245       continue;
12246     }
12247 
12248     ModuleFileExtensions.insert({BlockName, Ext});
12249   }
12250 }
12251 
12252 ASTReader::~ASTReader() {
12253   if (OwnsDeserializationListener)
12254     delete DeserializationListener;
12255 }
12256 
12257 IdentifierResolver &ASTReader::getIdResolver() {
12258   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
12259 }
12260 
12261 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
12262                                                unsigned AbbrevID) {
12263   Idx = 0;
12264   Record.clear();
12265   return Cursor.readRecord(AbbrevID, Record);
12266 }
12267 //===----------------------------------------------------------------------===//
12268 //// OMPClauseReader implementation
12269 ////===----------------------------------------------------------------------===//
12270 
12271 OMPClause *OMPClauseReader::readClause() {
12272   OMPClause *C = nullptr;
12273   switch (Record.readInt()) {
12274   case OMPC_if:
12275     C = new (Context) OMPIfClause();
12276     break;
12277   case OMPC_final:
12278     C = new (Context) OMPFinalClause();
12279     break;
12280   case OMPC_num_threads:
12281     C = new (Context) OMPNumThreadsClause();
12282     break;
12283   case OMPC_safelen:
12284     C = new (Context) OMPSafelenClause();
12285     break;
12286   case OMPC_simdlen:
12287     C = new (Context) OMPSimdlenClause();
12288     break;
12289   case OMPC_allocator:
12290     C = new (Context) OMPAllocatorClause();
12291     break;
12292   case OMPC_collapse:
12293     C = new (Context) OMPCollapseClause();
12294     break;
12295   case OMPC_default:
12296     C = new (Context) OMPDefaultClause();
12297     break;
12298   case OMPC_proc_bind:
12299     C = new (Context) OMPProcBindClause();
12300     break;
12301   case OMPC_schedule:
12302     C = new (Context) OMPScheduleClause();
12303     break;
12304   case OMPC_ordered:
12305     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
12306     break;
12307   case OMPC_nowait:
12308     C = new (Context) OMPNowaitClause();
12309     break;
12310   case OMPC_untied:
12311     C = new (Context) OMPUntiedClause();
12312     break;
12313   case OMPC_mergeable:
12314     C = new (Context) OMPMergeableClause();
12315     break;
12316   case OMPC_read:
12317     C = new (Context) OMPReadClause();
12318     break;
12319   case OMPC_write:
12320     C = new (Context) OMPWriteClause();
12321     break;
12322   case OMPC_update:
12323     C = new (Context) OMPUpdateClause();
12324     break;
12325   case OMPC_capture:
12326     C = new (Context) OMPCaptureClause();
12327     break;
12328   case OMPC_seq_cst:
12329     C = new (Context) OMPSeqCstClause();
12330     break;
12331   case OMPC_threads:
12332     C = new (Context) OMPThreadsClause();
12333     break;
12334   case OMPC_simd:
12335     C = new (Context) OMPSIMDClause();
12336     break;
12337   case OMPC_nogroup:
12338     C = new (Context) OMPNogroupClause();
12339     break;
12340   case OMPC_unified_address:
12341     C = new (Context) OMPUnifiedAddressClause();
12342     break;
12343   case OMPC_unified_shared_memory:
12344     C = new (Context) OMPUnifiedSharedMemoryClause();
12345     break;
12346   case OMPC_reverse_offload:
12347     C = new (Context) OMPReverseOffloadClause();
12348     break;
12349   case OMPC_dynamic_allocators:
12350     C = new (Context) OMPDynamicAllocatorsClause();
12351     break;
12352   case OMPC_atomic_default_mem_order:
12353     C = new (Context) OMPAtomicDefaultMemOrderClause();
12354     break;
12355  case OMPC_private:
12356     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
12357     break;
12358   case OMPC_firstprivate:
12359     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
12360     break;
12361   case OMPC_lastprivate:
12362     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
12363     break;
12364   case OMPC_shared:
12365     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
12366     break;
12367   case OMPC_reduction:
12368     C = OMPReductionClause::CreateEmpty(Context, Record.readInt());
12369     break;
12370   case OMPC_task_reduction:
12371     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
12372     break;
12373   case OMPC_in_reduction:
12374     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
12375     break;
12376   case OMPC_linear:
12377     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
12378     break;
12379   case OMPC_aligned:
12380     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
12381     break;
12382   case OMPC_copyin:
12383     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
12384     break;
12385   case OMPC_copyprivate:
12386     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
12387     break;
12388   case OMPC_flush:
12389     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
12390     break;
12391   case OMPC_depend: {
12392     unsigned NumVars = Record.readInt();
12393     unsigned NumLoops = Record.readInt();
12394     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
12395     break;
12396   }
12397   case OMPC_device:
12398     C = new (Context) OMPDeviceClause();
12399     break;
12400   case OMPC_map: {
12401     OMPMappableExprListSizeTy Sizes;
12402     Sizes.NumVars = Record.readInt();
12403     Sizes.NumUniqueDeclarations = Record.readInt();
12404     Sizes.NumComponentLists = Record.readInt();
12405     Sizes.NumComponents = Record.readInt();
12406     C = OMPMapClause::CreateEmpty(Context, Sizes);
12407     break;
12408   }
12409   case OMPC_num_teams:
12410     C = new (Context) OMPNumTeamsClause();
12411     break;
12412   case OMPC_thread_limit:
12413     C = new (Context) OMPThreadLimitClause();
12414     break;
12415   case OMPC_priority:
12416     C = new (Context) OMPPriorityClause();
12417     break;
12418   case OMPC_grainsize:
12419     C = new (Context) OMPGrainsizeClause();
12420     break;
12421   case OMPC_num_tasks:
12422     C = new (Context) OMPNumTasksClause();
12423     break;
12424   case OMPC_hint:
12425     C = new (Context) OMPHintClause();
12426     break;
12427   case OMPC_dist_schedule:
12428     C = new (Context) OMPDistScheduleClause();
12429     break;
12430   case OMPC_defaultmap:
12431     C = new (Context) OMPDefaultmapClause();
12432     break;
12433   case OMPC_to: {
12434     OMPMappableExprListSizeTy Sizes;
12435     Sizes.NumVars = Record.readInt();
12436     Sizes.NumUniqueDeclarations = Record.readInt();
12437     Sizes.NumComponentLists = Record.readInt();
12438     Sizes.NumComponents = Record.readInt();
12439     C = OMPToClause::CreateEmpty(Context, Sizes);
12440     break;
12441   }
12442   case OMPC_from: {
12443     OMPMappableExprListSizeTy Sizes;
12444     Sizes.NumVars = Record.readInt();
12445     Sizes.NumUniqueDeclarations = Record.readInt();
12446     Sizes.NumComponentLists = Record.readInt();
12447     Sizes.NumComponents = Record.readInt();
12448     C = OMPFromClause::CreateEmpty(Context, Sizes);
12449     break;
12450   }
12451   case OMPC_use_device_ptr: {
12452     OMPMappableExprListSizeTy Sizes;
12453     Sizes.NumVars = Record.readInt();
12454     Sizes.NumUniqueDeclarations = Record.readInt();
12455     Sizes.NumComponentLists = Record.readInt();
12456     Sizes.NumComponents = Record.readInt();
12457     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
12458     break;
12459   }
12460   case OMPC_is_device_ptr: {
12461     OMPMappableExprListSizeTy Sizes;
12462     Sizes.NumVars = Record.readInt();
12463     Sizes.NumUniqueDeclarations = Record.readInt();
12464     Sizes.NumComponentLists = Record.readInt();
12465     Sizes.NumComponents = Record.readInt();
12466     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
12467     break;
12468   }
12469   case OMPC_allocate:
12470     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
12471     break;
12472   }
12473   assert(C && "Unknown OMPClause type");
12474 
12475   Visit(C);
12476   C->setLocStart(Record.readSourceLocation());
12477   C->setLocEnd(Record.readSourceLocation());
12478 
12479   return C;
12480 }
12481 
12482 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12483   C->setPreInitStmt(Record.readSubStmt(),
12484                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12485 }
12486 
12487 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12488   VisitOMPClauseWithPreInit(C);
12489   C->setPostUpdateExpr(Record.readSubExpr());
12490 }
12491 
12492 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12493   VisitOMPClauseWithPreInit(C);
12494   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12495   C->setNameModifierLoc(Record.readSourceLocation());
12496   C->setColonLoc(Record.readSourceLocation());
12497   C->setCondition(Record.readSubExpr());
12498   C->setLParenLoc(Record.readSourceLocation());
12499 }
12500 
12501 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12502   VisitOMPClauseWithPreInit(C);
12503   C->setCondition(Record.readSubExpr());
12504   C->setLParenLoc(Record.readSourceLocation());
12505 }
12506 
12507 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12508   VisitOMPClauseWithPreInit(C);
12509   C->setNumThreads(Record.readSubExpr());
12510   C->setLParenLoc(Record.readSourceLocation());
12511 }
12512 
12513 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12514   C->setSafelen(Record.readSubExpr());
12515   C->setLParenLoc(Record.readSourceLocation());
12516 }
12517 
12518 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12519   C->setSimdlen(Record.readSubExpr());
12520   C->setLParenLoc(Record.readSourceLocation());
12521 }
12522 
12523 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12524   C->setAllocator(Record.readExpr());
12525   C->setLParenLoc(Record.readSourceLocation());
12526 }
12527 
12528 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12529   C->setNumForLoops(Record.readSubExpr());
12530   C->setLParenLoc(Record.readSourceLocation());
12531 }
12532 
12533 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12534   C->setDefaultKind(
12535        static_cast<OpenMPDefaultClauseKind>(Record.readInt()));
12536   C->setLParenLoc(Record.readSourceLocation());
12537   C->setDefaultKindKwLoc(Record.readSourceLocation());
12538 }
12539 
12540 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12541   C->setProcBindKind(
12542        static_cast<OpenMPProcBindClauseKind>(Record.readInt()));
12543   C->setLParenLoc(Record.readSourceLocation());
12544   C->setProcBindKindKwLoc(Record.readSourceLocation());
12545 }
12546 
12547 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12548   VisitOMPClauseWithPreInit(C);
12549   C->setScheduleKind(
12550        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12551   C->setFirstScheduleModifier(
12552       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12553   C->setSecondScheduleModifier(
12554       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12555   C->setChunkSize(Record.readSubExpr());
12556   C->setLParenLoc(Record.readSourceLocation());
12557   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12558   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12559   C->setScheduleKindLoc(Record.readSourceLocation());
12560   C->setCommaLoc(Record.readSourceLocation());
12561 }
12562 
12563 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12564   C->setNumForLoops(Record.readSubExpr());
12565   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12566     C->setLoopNumIterations(I, Record.readSubExpr());
12567   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12568     C->setLoopCounter(I, Record.readSubExpr());
12569   C->setLParenLoc(Record.readSourceLocation());
12570 }
12571 
12572 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12573 
12574 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12575 
12576 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12577 
12578 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12579 
12580 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12581 
12582 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *) {}
12583 
12584 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12585 
12586 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12587 
12588 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12589 
12590 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12591 
12592 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12593 
12594 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12595 
12596 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12597     OMPUnifiedSharedMemoryClause *) {}
12598 
12599 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12600 
12601 void
12602 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12603 }
12604 
12605 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12606     OMPAtomicDefaultMemOrderClause *C) {
12607   C->setAtomicDefaultMemOrderKind(
12608       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12609   C->setLParenLoc(Record.readSourceLocation());
12610   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12611 }
12612 
12613 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12614   C->setLParenLoc(Record.readSourceLocation());
12615   unsigned NumVars = C->varlist_size();
12616   SmallVector<Expr *, 16> Vars;
12617   Vars.reserve(NumVars);
12618   for (unsigned i = 0; i != NumVars; ++i)
12619     Vars.push_back(Record.readSubExpr());
12620   C->setVarRefs(Vars);
12621   Vars.clear();
12622   for (unsigned i = 0; i != NumVars; ++i)
12623     Vars.push_back(Record.readSubExpr());
12624   C->setPrivateCopies(Vars);
12625 }
12626 
12627 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12628   VisitOMPClauseWithPreInit(C);
12629   C->setLParenLoc(Record.readSourceLocation());
12630   unsigned NumVars = C->varlist_size();
12631   SmallVector<Expr *, 16> Vars;
12632   Vars.reserve(NumVars);
12633   for (unsigned i = 0; i != NumVars; ++i)
12634     Vars.push_back(Record.readSubExpr());
12635   C->setVarRefs(Vars);
12636   Vars.clear();
12637   for (unsigned i = 0; i != NumVars; ++i)
12638     Vars.push_back(Record.readSubExpr());
12639   C->setPrivateCopies(Vars);
12640   Vars.clear();
12641   for (unsigned i = 0; i != NumVars; ++i)
12642     Vars.push_back(Record.readSubExpr());
12643   C->setInits(Vars);
12644 }
12645 
12646 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12647   VisitOMPClauseWithPostUpdate(C);
12648   C->setLParenLoc(Record.readSourceLocation());
12649   unsigned NumVars = C->varlist_size();
12650   SmallVector<Expr *, 16> Vars;
12651   Vars.reserve(NumVars);
12652   for (unsigned i = 0; i != NumVars; ++i)
12653     Vars.push_back(Record.readSubExpr());
12654   C->setVarRefs(Vars);
12655   Vars.clear();
12656   for (unsigned i = 0; i != NumVars; ++i)
12657     Vars.push_back(Record.readSubExpr());
12658   C->setPrivateCopies(Vars);
12659   Vars.clear();
12660   for (unsigned i = 0; i != NumVars; ++i)
12661     Vars.push_back(Record.readSubExpr());
12662   C->setSourceExprs(Vars);
12663   Vars.clear();
12664   for (unsigned i = 0; i != NumVars; ++i)
12665     Vars.push_back(Record.readSubExpr());
12666   C->setDestinationExprs(Vars);
12667   Vars.clear();
12668   for (unsigned i = 0; i != NumVars; ++i)
12669     Vars.push_back(Record.readSubExpr());
12670   C->setAssignmentOps(Vars);
12671 }
12672 
12673 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12674   C->setLParenLoc(Record.readSourceLocation());
12675   unsigned NumVars = C->varlist_size();
12676   SmallVector<Expr *, 16> Vars;
12677   Vars.reserve(NumVars);
12678   for (unsigned i = 0; i != NumVars; ++i)
12679     Vars.push_back(Record.readSubExpr());
12680   C->setVarRefs(Vars);
12681 }
12682 
12683 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12684   VisitOMPClauseWithPostUpdate(C);
12685   C->setLParenLoc(Record.readSourceLocation());
12686   C->setColonLoc(Record.readSourceLocation());
12687   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12688   DeclarationNameInfo DNI;
12689   Record.readDeclarationNameInfo(DNI);
12690   C->setQualifierLoc(NNSL);
12691   C->setNameInfo(DNI);
12692 
12693   unsigned NumVars = C->varlist_size();
12694   SmallVector<Expr *, 16> Vars;
12695   Vars.reserve(NumVars);
12696   for (unsigned i = 0; i != NumVars; ++i)
12697     Vars.push_back(Record.readSubExpr());
12698   C->setVarRefs(Vars);
12699   Vars.clear();
12700   for (unsigned i = 0; i != NumVars; ++i)
12701     Vars.push_back(Record.readSubExpr());
12702   C->setPrivates(Vars);
12703   Vars.clear();
12704   for (unsigned i = 0; i != NumVars; ++i)
12705     Vars.push_back(Record.readSubExpr());
12706   C->setLHSExprs(Vars);
12707   Vars.clear();
12708   for (unsigned i = 0; i != NumVars; ++i)
12709     Vars.push_back(Record.readSubExpr());
12710   C->setRHSExprs(Vars);
12711   Vars.clear();
12712   for (unsigned i = 0; i != NumVars; ++i)
12713     Vars.push_back(Record.readSubExpr());
12714   C->setReductionOps(Vars);
12715 }
12716 
12717 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12718   VisitOMPClauseWithPostUpdate(C);
12719   C->setLParenLoc(Record.readSourceLocation());
12720   C->setColonLoc(Record.readSourceLocation());
12721   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12722   DeclarationNameInfo DNI;
12723   Record.readDeclarationNameInfo(DNI);
12724   C->setQualifierLoc(NNSL);
12725   C->setNameInfo(DNI);
12726 
12727   unsigned NumVars = C->varlist_size();
12728   SmallVector<Expr *, 16> Vars;
12729   Vars.reserve(NumVars);
12730   for (unsigned I = 0; I != NumVars; ++I)
12731     Vars.push_back(Record.readSubExpr());
12732   C->setVarRefs(Vars);
12733   Vars.clear();
12734   for (unsigned I = 0; I != NumVars; ++I)
12735     Vars.push_back(Record.readSubExpr());
12736   C->setPrivates(Vars);
12737   Vars.clear();
12738   for (unsigned I = 0; I != NumVars; ++I)
12739     Vars.push_back(Record.readSubExpr());
12740   C->setLHSExprs(Vars);
12741   Vars.clear();
12742   for (unsigned I = 0; I != NumVars; ++I)
12743     Vars.push_back(Record.readSubExpr());
12744   C->setRHSExprs(Vars);
12745   Vars.clear();
12746   for (unsigned I = 0; I != NumVars; ++I)
12747     Vars.push_back(Record.readSubExpr());
12748   C->setReductionOps(Vars);
12749 }
12750 
12751 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12752   VisitOMPClauseWithPostUpdate(C);
12753   C->setLParenLoc(Record.readSourceLocation());
12754   C->setColonLoc(Record.readSourceLocation());
12755   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12756   DeclarationNameInfo DNI;
12757   Record.readDeclarationNameInfo(DNI);
12758   C->setQualifierLoc(NNSL);
12759   C->setNameInfo(DNI);
12760 
12761   unsigned NumVars = C->varlist_size();
12762   SmallVector<Expr *, 16> Vars;
12763   Vars.reserve(NumVars);
12764   for (unsigned I = 0; I != NumVars; ++I)
12765     Vars.push_back(Record.readSubExpr());
12766   C->setVarRefs(Vars);
12767   Vars.clear();
12768   for (unsigned I = 0; I != NumVars; ++I)
12769     Vars.push_back(Record.readSubExpr());
12770   C->setPrivates(Vars);
12771   Vars.clear();
12772   for (unsigned I = 0; I != NumVars; ++I)
12773     Vars.push_back(Record.readSubExpr());
12774   C->setLHSExprs(Vars);
12775   Vars.clear();
12776   for (unsigned I = 0; I != NumVars; ++I)
12777     Vars.push_back(Record.readSubExpr());
12778   C->setRHSExprs(Vars);
12779   Vars.clear();
12780   for (unsigned I = 0; I != NumVars; ++I)
12781     Vars.push_back(Record.readSubExpr());
12782   C->setReductionOps(Vars);
12783   Vars.clear();
12784   for (unsigned I = 0; I != NumVars; ++I)
12785     Vars.push_back(Record.readSubExpr());
12786   C->setTaskgroupDescriptors(Vars);
12787 }
12788 
12789 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12790   VisitOMPClauseWithPostUpdate(C);
12791   C->setLParenLoc(Record.readSourceLocation());
12792   C->setColonLoc(Record.readSourceLocation());
12793   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12794   C->setModifierLoc(Record.readSourceLocation());
12795   unsigned NumVars = C->varlist_size();
12796   SmallVector<Expr *, 16> Vars;
12797   Vars.reserve(NumVars);
12798   for (unsigned i = 0; i != NumVars; ++i)
12799     Vars.push_back(Record.readSubExpr());
12800   C->setVarRefs(Vars);
12801   Vars.clear();
12802   for (unsigned i = 0; i != NumVars; ++i)
12803     Vars.push_back(Record.readSubExpr());
12804   C->setPrivates(Vars);
12805   Vars.clear();
12806   for (unsigned i = 0; i != NumVars; ++i)
12807     Vars.push_back(Record.readSubExpr());
12808   C->setInits(Vars);
12809   Vars.clear();
12810   for (unsigned i = 0; i != NumVars; ++i)
12811     Vars.push_back(Record.readSubExpr());
12812   C->setUpdates(Vars);
12813   Vars.clear();
12814   for (unsigned i = 0; i != NumVars; ++i)
12815     Vars.push_back(Record.readSubExpr());
12816   C->setFinals(Vars);
12817   C->setStep(Record.readSubExpr());
12818   C->setCalcStep(Record.readSubExpr());
12819   Vars.clear();
12820   for (unsigned I = 0; I != NumVars + 1; ++I)
12821     Vars.push_back(Record.readSubExpr());
12822   C->setUsedExprs(Vars);
12823 }
12824 
12825 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12826   C->setLParenLoc(Record.readSourceLocation());
12827   C->setColonLoc(Record.readSourceLocation());
12828   unsigned NumVars = C->varlist_size();
12829   SmallVector<Expr *, 16> Vars;
12830   Vars.reserve(NumVars);
12831   for (unsigned i = 0; i != NumVars; ++i)
12832     Vars.push_back(Record.readSubExpr());
12833   C->setVarRefs(Vars);
12834   C->setAlignment(Record.readSubExpr());
12835 }
12836 
12837 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12838   C->setLParenLoc(Record.readSourceLocation());
12839   unsigned NumVars = C->varlist_size();
12840   SmallVector<Expr *, 16> Exprs;
12841   Exprs.reserve(NumVars);
12842   for (unsigned i = 0; i != NumVars; ++i)
12843     Exprs.push_back(Record.readSubExpr());
12844   C->setVarRefs(Exprs);
12845   Exprs.clear();
12846   for (unsigned i = 0; i != NumVars; ++i)
12847     Exprs.push_back(Record.readSubExpr());
12848   C->setSourceExprs(Exprs);
12849   Exprs.clear();
12850   for (unsigned i = 0; i != NumVars; ++i)
12851     Exprs.push_back(Record.readSubExpr());
12852   C->setDestinationExprs(Exprs);
12853   Exprs.clear();
12854   for (unsigned i = 0; i != NumVars; ++i)
12855     Exprs.push_back(Record.readSubExpr());
12856   C->setAssignmentOps(Exprs);
12857 }
12858 
12859 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12860   C->setLParenLoc(Record.readSourceLocation());
12861   unsigned NumVars = C->varlist_size();
12862   SmallVector<Expr *, 16> Exprs;
12863   Exprs.reserve(NumVars);
12864   for (unsigned i = 0; i != NumVars; ++i)
12865     Exprs.push_back(Record.readSubExpr());
12866   C->setVarRefs(Exprs);
12867   Exprs.clear();
12868   for (unsigned i = 0; i != NumVars; ++i)
12869     Exprs.push_back(Record.readSubExpr());
12870   C->setSourceExprs(Exprs);
12871   Exprs.clear();
12872   for (unsigned i = 0; i != NumVars; ++i)
12873     Exprs.push_back(Record.readSubExpr());
12874   C->setDestinationExprs(Exprs);
12875   Exprs.clear();
12876   for (unsigned i = 0; i != NumVars; ++i)
12877     Exprs.push_back(Record.readSubExpr());
12878   C->setAssignmentOps(Exprs);
12879 }
12880 
12881 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12882   C->setLParenLoc(Record.readSourceLocation());
12883   unsigned NumVars = C->varlist_size();
12884   SmallVector<Expr *, 16> Vars;
12885   Vars.reserve(NumVars);
12886   for (unsigned i = 0; i != NumVars; ++i)
12887     Vars.push_back(Record.readSubExpr());
12888   C->setVarRefs(Vars);
12889 }
12890 
12891 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12892   C->setLParenLoc(Record.readSourceLocation());
12893   C->setDependencyKind(
12894       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12895   C->setDependencyLoc(Record.readSourceLocation());
12896   C->setColonLoc(Record.readSourceLocation());
12897   unsigned NumVars = C->varlist_size();
12898   SmallVector<Expr *, 16> Vars;
12899   Vars.reserve(NumVars);
12900   for (unsigned I = 0; I != NumVars; ++I)
12901     Vars.push_back(Record.readSubExpr());
12902   C->setVarRefs(Vars);
12903   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12904     C->setLoopData(I, Record.readSubExpr());
12905 }
12906 
12907 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12908   VisitOMPClauseWithPreInit(C);
12909   C->setDevice(Record.readSubExpr());
12910   C->setLParenLoc(Record.readSourceLocation());
12911 }
12912 
12913 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12914   C->setLParenLoc(Record.readSourceLocation());
12915   for (unsigned I = 0; I < OMPMapClause::NumberOfModifiers; ++I) {
12916     C->setMapTypeModifier(
12917         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12918     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12919   }
12920   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12921   DeclarationNameInfo DNI;
12922   Record.readDeclarationNameInfo(DNI);
12923   C->setMapperIdInfo(DNI);
12924   C->setMapType(
12925      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12926   C->setMapLoc(Record.readSourceLocation());
12927   C->setColonLoc(Record.readSourceLocation());
12928   auto NumVars = C->varlist_size();
12929   auto UniqueDecls = C->getUniqueDeclarationsNum();
12930   auto TotalLists = C->getTotalComponentListNum();
12931   auto TotalComponents = C->getTotalComponentsNum();
12932 
12933   SmallVector<Expr *, 16> Vars;
12934   Vars.reserve(NumVars);
12935   for (unsigned i = 0; i != NumVars; ++i)
12936     Vars.push_back(Record.readExpr());
12937   C->setVarRefs(Vars);
12938 
12939   SmallVector<Expr *, 16> UDMappers;
12940   UDMappers.reserve(NumVars);
12941   for (unsigned I = 0; I < NumVars; ++I)
12942     UDMappers.push_back(Record.readExpr());
12943   C->setUDMapperRefs(UDMappers);
12944 
12945   SmallVector<ValueDecl *, 16> Decls;
12946   Decls.reserve(UniqueDecls);
12947   for (unsigned i = 0; i < UniqueDecls; ++i)
12948     Decls.push_back(Record.readDeclAs<ValueDecl>());
12949   C->setUniqueDecls(Decls);
12950 
12951   SmallVector<unsigned, 16> ListsPerDecl;
12952   ListsPerDecl.reserve(UniqueDecls);
12953   for (unsigned i = 0; i < UniqueDecls; ++i)
12954     ListsPerDecl.push_back(Record.readInt());
12955   C->setDeclNumLists(ListsPerDecl);
12956 
12957   SmallVector<unsigned, 32> ListSizes;
12958   ListSizes.reserve(TotalLists);
12959   for (unsigned i = 0; i < TotalLists; ++i)
12960     ListSizes.push_back(Record.readInt());
12961   C->setComponentListSizes(ListSizes);
12962 
12963   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12964   Components.reserve(TotalComponents);
12965   for (unsigned i = 0; i < TotalComponents; ++i) {
12966     Expr *AssociatedExpr = Record.readExpr();
12967     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12968     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
12969         AssociatedExpr, AssociatedDecl));
12970   }
12971   C->setComponents(Components, ListSizes);
12972 }
12973 
12974 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12975   C->setLParenLoc(Record.readSourceLocation());
12976   C->setColonLoc(Record.readSourceLocation());
12977   C->setAllocator(Record.readSubExpr());
12978   unsigned NumVars = C->varlist_size();
12979   SmallVector<Expr *, 16> Vars;
12980   Vars.reserve(NumVars);
12981   for (unsigned i = 0; i != NumVars; ++i)
12982     Vars.push_back(Record.readSubExpr());
12983   C->setVarRefs(Vars);
12984 }
12985 
12986 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12987   VisitOMPClauseWithPreInit(C);
12988   C->setNumTeams(Record.readSubExpr());
12989   C->setLParenLoc(Record.readSourceLocation());
12990 }
12991 
12992 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12993   VisitOMPClauseWithPreInit(C);
12994   C->setThreadLimit(Record.readSubExpr());
12995   C->setLParenLoc(Record.readSourceLocation());
12996 }
12997 
12998 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12999   VisitOMPClauseWithPreInit(C);
13000   C->setPriority(Record.readSubExpr());
13001   C->setLParenLoc(Record.readSourceLocation());
13002 }
13003 
13004 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
13005   VisitOMPClauseWithPreInit(C);
13006   C->setGrainsize(Record.readSubExpr());
13007   C->setLParenLoc(Record.readSourceLocation());
13008 }
13009 
13010 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
13011   VisitOMPClauseWithPreInit(C);
13012   C->setNumTasks(Record.readSubExpr());
13013   C->setLParenLoc(Record.readSourceLocation());
13014 }
13015 
13016 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
13017   C->setHint(Record.readSubExpr());
13018   C->setLParenLoc(Record.readSourceLocation());
13019 }
13020 
13021 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
13022   VisitOMPClauseWithPreInit(C);
13023   C->setDistScheduleKind(
13024       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
13025   C->setChunkSize(Record.readSubExpr());
13026   C->setLParenLoc(Record.readSourceLocation());
13027   C->setDistScheduleKindLoc(Record.readSourceLocation());
13028   C->setCommaLoc(Record.readSourceLocation());
13029 }
13030 
13031 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
13032   C->setDefaultmapKind(
13033        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
13034   C->setDefaultmapModifier(
13035       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
13036   C->setLParenLoc(Record.readSourceLocation());
13037   C->setDefaultmapModifierLoc(Record.readSourceLocation());
13038   C->setDefaultmapKindLoc(Record.readSourceLocation());
13039 }
13040 
13041 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
13042   C->setLParenLoc(Record.readSourceLocation());
13043   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
13044   DeclarationNameInfo DNI;
13045   Record.readDeclarationNameInfo(DNI);
13046   C->setMapperIdInfo(DNI);
13047   auto NumVars = C->varlist_size();
13048   auto UniqueDecls = C->getUniqueDeclarationsNum();
13049   auto TotalLists = C->getTotalComponentListNum();
13050   auto TotalComponents = C->getTotalComponentsNum();
13051 
13052   SmallVector<Expr *, 16> Vars;
13053   Vars.reserve(NumVars);
13054   for (unsigned i = 0; i != NumVars; ++i)
13055     Vars.push_back(Record.readSubExpr());
13056   C->setVarRefs(Vars);
13057 
13058   SmallVector<Expr *, 16> UDMappers;
13059   UDMappers.reserve(NumVars);
13060   for (unsigned I = 0; I < NumVars; ++I)
13061     UDMappers.push_back(Record.readSubExpr());
13062   C->setUDMapperRefs(UDMappers);
13063 
13064   SmallVector<ValueDecl *, 16> Decls;
13065   Decls.reserve(UniqueDecls);
13066   for (unsigned i = 0; i < UniqueDecls; ++i)
13067     Decls.push_back(Record.readDeclAs<ValueDecl>());
13068   C->setUniqueDecls(Decls);
13069 
13070   SmallVector<unsigned, 16> ListsPerDecl;
13071   ListsPerDecl.reserve(UniqueDecls);
13072   for (unsigned i = 0; i < UniqueDecls; ++i)
13073     ListsPerDecl.push_back(Record.readInt());
13074   C->setDeclNumLists(ListsPerDecl);
13075 
13076   SmallVector<unsigned, 32> ListSizes;
13077   ListSizes.reserve(TotalLists);
13078   for (unsigned i = 0; i < TotalLists; ++i)
13079     ListSizes.push_back(Record.readInt());
13080   C->setComponentListSizes(ListSizes);
13081 
13082   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
13083   Components.reserve(TotalComponents);
13084   for (unsigned i = 0; i < TotalComponents; ++i) {
13085     Expr *AssociatedExpr = Record.readSubExpr();
13086     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
13087     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
13088         AssociatedExpr, AssociatedDecl));
13089   }
13090   C->setComponents(Components, ListSizes);
13091 }
13092 
13093 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
13094   C->setLParenLoc(Record.readSourceLocation());
13095   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
13096   DeclarationNameInfo DNI;
13097   Record.readDeclarationNameInfo(DNI);
13098   C->setMapperIdInfo(DNI);
13099   auto NumVars = C->varlist_size();
13100   auto UniqueDecls = C->getUniqueDeclarationsNum();
13101   auto TotalLists = C->getTotalComponentListNum();
13102   auto TotalComponents = C->getTotalComponentsNum();
13103 
13104   SmallVector<Expr *, 16> Vars;
13105   Vars.reserve(NumVars);
13106   for (unsigned i = 0; i != NumVars; ++i)
13107     Vars.push_back(Record.readSubExpr());
13108   C->setVarRefs(Vars);
13109 
13110   SmallVector<Expr *, 16> UDMappers;
13111   UDMappers.reserve(NumVars);
13112   for (unsigned I = 0; I < NumVars; ++I)
13113     UDMappers.push_back(Record.readSubExpr());
13114   C->setUDMapperRefs(UDMappers);
13115 
13116   SmallVector<ValueDecl *, 16> Decls;
13117   Decls.reserve(UniqueDecls);
13118   for (unsigned i = 0; i < UniqueDecls; ++i)
13119     Decls.push_back(Record.readDeclAs<ValueDecl>());
13120   C->setUniqueDecls(Decls);
13121 
13122   SmallVector<unsigned, 16> ListsPerDecl;
13123   ListsPerDecl.reserve(UniqueDecls);
13124   for (unsigned i = 0; i < UniqueDecls; ++i)
13125     ListsPerDecl.push_back(Record.readInt());
13126   C->setDeclNumLists(ListsPerDecl);
13127 
13128   SmallVector<unsigned, 32> ListSizes;
13129   ListSizes.reserve(TotalLists);
13130   for (unsigned i = 0; i < TotalLists; ++i)
13131     ListSizes.push_back(Record.readInt());
13132   C->setComponentListSizes(ListSizes);
13133 
13134   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
13135   Components.reserve(TotalComponents);
13136   for (unsigned i = 0; i < TotalComponents; ++i) {
13137     Expr *AssociatedExpr = Record.readSubExpr();
13138     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
13139     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
13140         AssociatedExpr, AssociatedDecl));
13141   }
13142   C->setComponents(Components, ListSizes);
13143 }
13144 
13145 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
13146   C->setLParenLoc(Record.readSourceLocation());
13147   auto NumVars = C->varlist_size();
13148   auto UniqueDecls = C->getUniqueDeclarationsNum();
13149   auto TotalLists = C->getTotalComponentListNum();
13150   auto TotalComponents = C->getTotalComponentsNum();
13151 
13152   SmallVector<Expr *, 16> Vars;
13153   Vars.reserve(NumVars);
13154   for (unsigned i = 0; i != NumVars; ++i)
13155     Vars.push_back(Record.readSubExpr());
13156   C->setVarRefs(Vars);
13157   Vars.clear();
13158   for (unsigned i = 0; i != NumVars; ++i)
13159     Vars.push_back(Record.readSubExpr());
13160   C->setPrivateCopies(Vars);
13161   Vars.clear();
13162   for (unsigned i = 0; i != NumVars; ++i)
13163     Vars.push_back(Record.readSubExpr());
13164   C->setInits(Vars);
13165 
13166   SmallVector<ValueDecl *, 16> Decls;
13167   Decls.reserve(UniqueDecls);
13168   for (unsigned i = 0; i < UniqueDecls; ++i)
13169     Decls.push_back(Record.readDeclAs<ValueDecl>());
13170   C->setUniqueDecls(Decls);
13171 
13172   SmallVector<unsigned, 16> ListsPerDecl;
13173   ListsPerDecl.reserve(UniqueDecls);
13174   for (unsigned i = 0; i < UniqueDecls; ++i)
13175     ListsPerDecl.push_back(Record.readInt());
13176   C->setDeclNumLists(ListsPerDecl);
13177 
13178   SmallVector<unsigned, 32> ListSizes;
13179   ListSizes.reserve(TotalLists);
13180   for (unsigned i = 0; i < TotalLists; ++i)
13181     ListSizes.push_back(Record.readInt());
13182   C->setComponentListSizes(ListSizes);
13183 
13184   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
13185   Components.reserve(TotalComponents);
13186   for (unsigned i = 0; i < TotalComponents; ++i) {
13187     Expr *AssociatedExpr = Record.readSubExpr();
13188     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
13189     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
13190         AssociatedExpr, AssociatedDecl));
13191   }
13192   C->setComponents(Components, ListSizes);
13193 }
13194 
13195 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
13196   C->setLParenLoc(Record.readSourceLocation());
13197   auto NumVars = C->varlist_size();
13198   auto UniqueDecls = C->getUniqueDeclarationsNum();
13199   auto TotalLists = C->getTotalComponentListNum();
13200   auto TotalComponents = C->getTotalComponentsNum();
13201 
13202   SmallVector<Expr *, 16> Vars;
13203   Vars.reserve(NumVars);
13204   for (unsigned i = 0; i != NumVars; ++i)
13205     Vars.push_back(Record.readSubExpr());
13206   C->setVarRefs(Vars);
13207   Vars.clear();
13208 
13209   SmallVector<ValueDecl *, 16> Decls;
13210   Decls.reserve(UniqueDecls);
13211   for (unsigned i = 0; i < UniqueDecls; ++i)
13212     Decls.push_back(Record.readDeclAs<ValueDecl>());
13213   C->setUniqueDecls(Decls);
13214 
13215   SmallVector<unsigned, 16> ListsPerDecl;
13216   ListsPerDecl.reserve(UniqueDecls);
13217   for (unsigned i = 0; i < UniqueDecls; ++i)
13218     ListsPerDecl.push_back(Record.readInt());
13219   C->setDeclNumLists(ListsPerDecl);
13220 
13221   SmallVector<unsigned, 32> ListSizes;
13222   ListSizes.reserve(TotalLists);
13223   for (unsigned i = 0; i < TotalLists; ++i)
13224     ListSizes.push_back(Record.readInt());
13225   C->setComponentListSizes(ListSizes);
13226 
13227   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
13228   Components.reserve(TotalComponents);
13229   for (unsigned i = 0; i < TotalComponents; ++i) {
13230     Expr *AssociatedExpr = Record.readSubExpr();
13231     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
13232     Components.push_back(OMPClauseMappableExprCommon::MappableComponent(
13233         AssociatedExpr, AssociatedDecl));
13234   }
13235   C->setComponents(Components, ListSizes);
13236 }
13237