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