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