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