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