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   // Issue any pending ODR-failure diagnostics.
9454   for (auto &Merge : OdrMergeFailures) {
9455     // If we've already pointed out a specific problem with this class, don't
9456     // bother issuing a general "something's different" diagnostic.
9457     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9458       continue;
9459 
9460     bool Diagnosed = false;
9461     CXXRecordDecl *FirstRecord = Merge.first;
9462     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9463     for (auto &RecordPair : Merge.second) {
9464       CXXRecordDecl *SecondRecord = RecordPair.first;
9465       // Multiple different declarations got merged together; tell the user
9466       // where they came from.
9467       if (FirstRecord == SecondRecord)
9468         continue;
9469 
9470       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9471 
9472       auto *FirstDD = FirstRecord->DefinitionData;
9473       auto *SecondDD = RecordPair.second;
9474 
9475       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
9476 
9477       // Diagnostics from DefinitionData are emitted here.
9478       if (FirstDD != SecondDD) {
9479         enum ODRDefinitionDataDifference {
9480           NumBases,
9481           NumVBases,
9482           BaseType,
9483           BaseVirtual,
9484           BaseAccess,
9485         };
9486         auto ODRDiagError = [FirstRecord, &FirstModule,
9487                              this](SourceLocation Loc, SourceRange Range,
9488                                    ODRDefinitionDataDifference DiffType) {
9489           return Diag(Loc, diag::err_module_odr_violation_definition_data)
9490                  << FirstRecord << FirstModule.empty() << FirstModule << Range
9491                  << DiffType;
9492         };
9493         auto ODRDiagNote = [&SecondModule,
9494                             this](SourceLocation Loc, SourceRange Range,
9495                                   ODRDefinitionDataDifference DiffType) {
9496           return Diag(Loc, diag::note_module_odr_violation_definition_data)
9497                  << SecondModule << Range << DiffType;
9498         };
9499 
9500         unsigned FirstNumBases = FirstDD->NumBases;
9501         unsigned FirstNumVBases = FirstDD->NumVBases;
9502         unsigned SecondNumBases = SecondDD->NumBases;
9503         unsigned SecondNumVBases = SecondDD->NumVBases;
9504 
9505         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
9506           unsigned NumBases = DD->NumBases;
9507           if (NumBases == 0) return SourceRange();
9508           auto bases = DD->bases();
9509           return SourceRange(bases[0].getLocStart(),
9510                              bases[NumBases - 1].getLocEnd());
9511         };
9512 
9513         if (FirstNumBases != SecondNumBases) {
9514           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9515                        NumBases)
9516               << FirstNumBases;
9517           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9518                       NumBases)
9519               << SecondNumBases;
9520           Diagnosed = true;
9521           break;
9522         }
9523 
9524         if (FirstNumVBases != SecondNumVBases) {
9525           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9526                        NumVBases)
9527               << FirstNumVBases;
9528           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9529                       NumVBases)
9530               << SecondNumVBases;
9531           Diagnosed = true;
9532           break;
9533         }
9534 
9535         auto FirstBases = FirstDD->bases();
9536         auto SecondBases = SecondDD->bases();
9537         unsigned i = 0;
9538         for (i = 0; i < FirstNumBases; ++i) {
9539           auto FirstBase = FirstBases[i];
9540           auto SecondBase = SecondBases[i];
9541           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
9542               ComputeQualTypeODRHash(SecondBase.getType())) {
9543             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9544                          BaseType)
9545                 << (i + 1) << FirstBase.getType();
9546             ODRDiagNote(SecondRecord->getLocation(),
9547                         SecondBase.getSourceRange(), BaseType)
9548                 << (i + 1) << SecondBase.getType();
9549             break;
9550           }
9551 
9552           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
9553             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9554                          BaseVirtual)
9555                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
9556             ODRDiagNote(SecondRecord->getLocation(),
9557                         SecondBase.getSourceRange(), BaseVirtual)
9558                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
9559             break;
9560           }
9561 
9562           if (FirstBase.getAccessSpecifierAsWritten() !=
9563               SecondBase.getAccessSpecifierAsWritten()) {
9564             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9565                          BaseAccess)
9566                 << (i + 1) << FirstBase.getType()
9567                 << (int)FirstBase.getAccessSpecifierAsWritten();
9568             ODRDiagNote(SecondRecord->getLocation(),
9569                         SecondBase.getSourceRange(), BaseAccess)
9570                 << (i + 1) << SecondBase.getType()
9571                 << (int)SecondBase.getAccessSpecifierAsWritten();
9572             break;
9573           }
9574         }
9575 
9576         if (i != FirstNumBases) {
9577           Diagnosed = true;
9578           break;
9579         }
9580       }
9581 
9582       using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9583 
9584       const ClassTemplateDecl *FirstTemplate =
9585           FirstRecord->getDescribedClassTemplate();
9586       const ClassTemplateDecl *SecondTemplate =
9587           SecondRecord->getDescribedClassTemplate();
9588 
9589       assert(!FirstTemplate == !SecondTemplate &&
9590              "Both pointers should be null or non-null");
9591 
9592       enum ODRTemplateDifference {
9593         ParamEmptyName,
9594         ParamName,
9595         ParamSingleDefaultArgument,
9596         ParamDifferentDefaultArgument,
9597       };
9598 
9599       if (FirstTemplate && SecondTemplate) {
9600         DeclHashes FirstTemplateHashes;
9601         DeclHashes SecondTemplateHashes;
9602 
9603         auto PopulateTemplateParameterHashs =
9604             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9605                                      const ClassTemplateDecl *TD) {
9606               for (auto *D : TD->getTemplateParameters()->asArray()) {
9607                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9608               }
9609             };
9610 
9611         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
9612         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
9613 
9614         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
9615                "Number of template parameters should be equal.");
9616 
9617         auto FirstIt = FirstTemplateHashes.begin();
9618         auto FirstEnd = FirstTemplateHashes.end();
9619         auto SecondIt = SecondTemplateHashes.begin();
9620         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
9621           if (FirstIt->second == SecondIt->second)
9622             continue;
9623 
9624           auto ODRDiagError = [FirstRecord, &FirstModule,
9625                                this](SourceLocation Loc, SourceRange Range,
9626                                      ODRTemplateDifference DiffType) {
9627             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
9628                    << FirstRecord << FirstModule.empty() << FirstModule << Range
9629                    << DiffType;
9630           };
9631           auto ODRDiagNote = [&SecondModule,
9632                               this](SourceLocation Loc, SourceRange Range,
9633                                     ODRTemplateDifference DiffType) {
9634             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
9635                    << SecondModule << Range << DiffType;
9636           };
9637 
9638           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
9639           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
9640 
9641           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
9642                  "Parameter Decl's should be the same kind.");
9643 
9644           DeclarationName FirstName = FirstDecl->getDeclName();
9645           DeclarationName SecondName = SecondDecl->getDeclName();
9646 
9647           if (FirstName != SecondName) {
9648             const bool FirstNameEmpty =
9649                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
9650             const bool SecondNameEmpty =
9651                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
9652             assert((!FirstNameEmpty || !SecondNameEmpty) &&
9653                    "Both template parameters cannot be unnamed.");
9654             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9655                          FirstNameEmpty ? ParamEmptyName : ParamName)
9656                 << FirstName;
9657             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9658                         SecondNameEmpty ? ParamEmptyName : ParamName)
9659                 << SecondName;
9660             break;
9661           }
9662 
9663           switch (FirstDecl->getKind()) {
9664           default:
9665             llvm_unreachable("Invalid template parameter type.");
9666           case Decl::TemplateTypeParm: {
9667             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
9668             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
9669             const bool HasFirstDefaultArgument =
9670                 FirstParam->hasDefaultArgument() &&
9671                 !FirstParam->defaultArgumentWasInherited();
9672             const bool HasSecondDefaultArgument =
9673                 SecondParam->hasDefaultArgument() &&
9674                 !SecondParam->defaultArgumentWasInherited();
9675 
9676             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9677               ODRDiagError(FirstDecl->getLocation(),
9678                            FirstDecl->getSourceRange(),
9679                            ParamSingleDefaultArgument)
9680                   << HasFirstDefaultArgument;
9681               ODRDiagNote(SecondDecl->getLocation(),
9682                           SecondDecl->getSourceRange(),
9683                           ParamSingleDefaultArgument)
9684                   << HasSecondDefaultArgument;
9685               break;
9686             }
9687 
9688             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9689                    "Expecting default arguments.");
9690 
9691             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9692                          ParamDifferentDefaultArgument);
9693             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9694                         ParamDifferentDefaultArgument);
9695 
9696             break;
9697           }
9698           case Decl::NonTypeTemplateParm: {
9699             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
9700             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
9701             const bool HasFirstDefaultArgument =
9702                 FirstParam->hasDefaultArgument() &&
9703                 !FirstParam->defaultArgumentWasInherited();
9704             const bool HasSecondDefaultArgument =
9705                 SecondParam->hasDefaultArgument() &&
9706                 !SecondParam->defaultArgumentWasInherited();
9707 
9708             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9709               ODRDiagError(FirstDecl->getLocation(),
9710                            FirstDecl->getSourceRange(),
9711                            ParamSingleDefaultArgument)
9712                   << HasFirstDefaultArgument;
9713               ODRDiagNote(SecondDecl->getLocation(),
9714                           SecondDecl->getSourceRange(),
9715                           ParamSingleDefaultArgument)
9716                   << HasSecondDefaultArgument;
9717               break;
9718             }
9719 
9720             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9721                    "Expecting default arguments.");
9722 
9723             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9724                          ParamDifferentDefaultArgument);
9725             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9726                         ParamDifferentDefaultArgument);
9727 
9728             break;
9729           }
9730           case Decl::TemplateTemplateParm: {
9731             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
9732             const auto *SecondParam =
9733                 cast<TemplateTemplateParmDecl>(SecondDecl);
9734             const bool HasFirstDefaultArgument =
9735                 FirstParam->hasDefaultArgument() &&
9736                 !FirstParam->defaultArgumentWasInherited();
9737             const bool HasSecondDefaultArgument =
9738                 SecondParam->hasDefaultArgument() &&
9739                 !SecondParam->defaultArgumentWasInherited();
9740 
9741             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9742               ODRDiagError(FirstDecl->getLocation(),
9743                            FirstDecl->getSourceRange(),
9744                            ParamSingleDefaultArgument)
9745                   << HasFirstDefaultArgument;
9746               ODRDiagNote(SecondDecl->getLocation(),
9747                           SecondDecl->getSourceRange(),
9748                           ParamSingleDefaultArgument)
9749                   << HasSecondDefaultArgument;
9750               break;
9751             }
9752 
9753             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9754                    "Expecting default arguments.");
9755 
9756             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9757                          ParamDifferentDefaultArgument);
9758             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9759                         ParamDifferentDefaultArgument);
9760 
9761             break;
9762           }
9763           }
9764 
9765           break;
9766         }
9767 
9768         if (FirstIt != FirstEnd) {
9769           Diagnosed = true;
9770           break;
9771         }
9772       }
9773 
9774       DeclHashes FirstHashes;
9775       DeclHashes SecondHashes;
9776 
9777       auto PopulateHashes = [&ComputeSubDeclODRHash, FirstRecord](
9778                                 DeclHashes &Hashes, CXXRecordDecl *Record) {
9779         for (auto *D : Record->decls()) {
9780           // Due to decl merging, the first CXXRecordDecl is the parent of
9781           // Decls in both records.
9782           if (!ODRHash::isWhitelistedDecl(D, FirstRecord))
9783             continue;
9784           Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9785         }
9786       };
9787       PopulateHashes(FirstHashes, FirstRecord);
9788       PopulateHashes(SecondHashes, SecondRecord);
9789 
9790       // Used with err_module_odr_violation_mismatch_decl and
9791       // note_module_odr_violation_mismatch_decl
9792       // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9793       enum {
9794         EndOfClass,
9795         PublicSpecifer,
9796         PrivateSpecifer,
9797         ProtectedSpecifer,
9798         StaticAssert,
9799         Field,
9800         CXXMethod,
9801         TypeAlias,
9802         TypeDef,
9803         Var,
9804         Friend,
9805         Other
9806       } FirstDiffType = Other,
9807         SecondDiffType = Other;
9808 
9809       auto DifferenceSelector = [](Decl *D) {
9810         assert(D && "valid Decl required");
9811         switch (D->getKind()) {
9812         default:
9813           return Other;
9814         case Decl::AccessSpec:
9815           switch (D->getAccess()) {
9816           case AS_public:
9817             return PublicSpecifer;
9818           case AS_private:
9819             return PrivateSpecifer;
9820           case AS_protected:
9821             return ProtectedSpecifer;
9822           case AS_none:
9823             break;
9824           }
9825           llvm_unreachable("Invalid access specifier");
9826         case Decl::StaticAssert:
9827           return StaticAssert;
9828         case Decl::Field:
9829           return Field;
9830         case Decl::CXXMethod:
9831         case Decl::CXXConstructor:
9832         case Decl::CXXDestructor:
9833           return CXXMethod;
9834         case Decl::TypeAlias:
9835           return TypeAlias;
9836         case Decl::Typedef:
9837           return TypeDef;
9838         case Decl::Var:
9839           return Var;
9840         case Decl::Friend:
9841           return Friend;
9842         }
9843       };
9844 
9845       Decl *FirstDecl = nullptr;
9846       Decl *SecondDecl = nullptr;
9847       auto FirstIt = FirstHashes.begin();
9848       auto SecondIt = SecondHashes.begin();
9849 
9850       // If there is a diagnoseable difference, FirstDiffType and
9851       // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9852       // filled in if not EndOfClass.
9853       while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9854         if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9855             FirstIt->second == SecondIt->second) {
9856           ++FirstIt;
9857           ++SecondIt;
9858           continue;
9859         }
9860 
9861         FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9862         SecondDecl = SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9863 
9864         FirstDiffType = FirstDecl ? DifferenceSelector(FirstDecl) : EndOfClass;
9865         SecondDiffType =
9866             SecondDecl ? DifferenceSelector(SecondDecl) : EndOfClass;
9867 
9868         break;
9869       }
9870 
9871       if (FirstDiffType == Other || SecondDiffType == Other) {
9872         // Reaching this point means an unexpected Decl was encountered
9873         // or no difference was detected.  This causes a generic error
9874         // message to be emitted.
9875         Diag(FirstRecord->getLocation(),
9876              diag::err_module_odr_violation_different_definitions)
9877             << FirstRecord << FirstModule.empty() << FirstModule;
9878 
9879         if (FirstDecl) {
9880           Diag(FirstDecl->getLocation(), diag::note_first_module_difference)
9881               << FirstRecord << FirstDecl->getSourceRange();
9882         }
9883 
9884         Diag(SecondRecord->getLocation(),
9885              diag::note_module_odr_violation_different_definitions)
9886             << SecondModule;
9887 
9888         if (SecondDecl) {
9889           Diag(SecondDecl->getLocation(), diag::note_second_module_difference)
9890               << SecondDecl->getSourceRange();
9891         }
9892 
9893         Diagnosed = true;
9894         break;
9895       }
9896 
9897       if (FirstDiffType != SecondDiffType) {
9898         SourceLocation FirstLoc;
9899         SourceRange FirstRange;
9900         if (FirstDiffType == EndOfClass) {
9901           FirstLoc = FirstRecord->getBraceRange().getEnd();
9902         } else {
9903           FirstLoc = FirstIt->first->getLocation();
9904           FirstRange = FirstIt->first->getSourceRange();
9905         }
9906         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9907             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9908             << FirstDiffType;
9909 
9910         SourceLocation SecondLoc;
9911         SourceRange SecondRange;
9912         if (SecondDiffType == EndOfClass) {
9913           SecondLoc = SecondRecord->getBraceRange().getEnd();
9914         } else {
9915           SecondLoc = SecondDecl->getLocation();
9916           SecondRange = SecondDecl->getSourceRange();
9917         }
9918         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9919             << SecondModule << SecondRange << SecondDiffType;
9920         Diagnosed = true;
9921         break;
9922       }
9923 
9924       assert(FirstDiffType == SecondDiffType);
9925 
9926       // Used with err_module_odr_violation_mismatch_decl_diff and
9927       // note_module_odr_violation_mismatch_decl_diff
9928       enum ODRDeclDifference{
9929         StaticAssertCondition,
9930         StaticAssertMessage,
9931         StaticAssertOnlyMessage,
9932         FieldName,
9933         FieldTypeName,
9934         FieldSingleBitField,
9935         FieldDifferentWidthBitField,
9936         FieldSingleMutable,
9937         FieldSingleInitializer,
9938         FieldDifferentInitializers,
9939         MethodName,
9940         MethodDeleted,
9941         MethodVirtual,
9942         MethodStatic,
9943         MethodVolatile,
9944         MethodConst,
9945         MethodInline,
9946         MethodNumberParameters,
9947         MethodParameterType,
9948         MethodParameterName,
9949         MethodParameterSingleDefaultArgument,
9950         MethodParameterDifferentDefaultArgument,
9951         TypedefName,
9952         TypedefType,
9953         VarName,
9954         VarType,
9955         VarSingleInitializer,
9956         VarDifferentInitializer,
9957         VarConstexpr,
9958         FriendTypeFunction,
9959         FriendType,
9960         FriendFunction,
9961       };
9962 
9963       // These lambdas have the common portions of the ODR diagnostics.  This
9964       // has the same return as Diag(), so addition parameters can be passed
9965       // in with operator<<
9966       auto ODRDiagError = [FirstRecord, &FirstModule, this](
9967           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9968         return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9969                << FirstRecord << FirstModule.empty() << FirstModule << Range
9970                << DiffType;
9971       };
9972       auto ODRDiagNote = [&SecondModule, this](
9973           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9974         return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9975                << SecondModule << Range << DiffType;
9976       };
9977 
9978       switch (FirstDiffType) {
9979       case Other:
9980       case EndOfClass:
9981       case PublicSpecifer:
9982       case PrivateSpecifer:
9983       case ProtectedSpecifer:
9984         llvm_unreachable("Invalid diff type");
9985 
9986       case StaticAssert: {
9987         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
9988         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
9989 
9990         Expr *FirstExpr = FirstSA->getAssertExpr();
9991         Expr *SecondExpr = SecondSA->getAssertExpr();
9992         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
9993         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
9994         if (FirstODRHash != SecondODRHash) {
9995           ODRDiagError(FirstExpr->getLocStart(), FirstExpr->getSourceRange(),
9996                        StaticAssertCondition);
9997           ODRDiagNote(SecondExpr->getLocStart(),
9998                       SecondExpr->getSourceRange(), StaticAssertCondition);
9999           Diagnosed = true;
10000           break;
10001         }
10002 
10003         StringLiteral *FirstStr = FirstSA->getMessage();
10004         StringLiteral *SecondStr = SecondSA->getMessage();
10005         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10006         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10007           SourceLocation FirstLoc, SecondLoc;
10008           SourceRange FirstRange, SecondRange;
10009           if (FirstStr) {
10010             FirstLoc = FirstStr->getLocStart();
10011             FirstRange = FirstStr->getSourceRange();
10012           } else {
10013             FirstLoc = FirstSA->getLocStart();
10014             FirstRange = FirstSA->getSourceRange();
10015           }
10016           if (SecondStr) {
10017             SecondLoc = SecondStr->getLocStart();
10018             SecondRange = SecondStr->getSourceRange();
10019           } else {
10020             SecondLoc = SecondSA->getLocStart();
10021             SecondRange = SecondSA->getSourceRange();
10022           }
10023           ODRDiagError(FirstLoc, FirstRange, StaticAssertOnlyMessage)
10024               << (FirstStr == nullptr);
10025           ODRDiagNote(SecondLoc, SecondRange, StaticAssertOnlyMessage)
10026               << (SecondStr == nullptr);
10027           Diagnosed = true;
10028           break;
10029         }
10030 
10031         if (FirstStr && SecondStr &&
10032             FirstStr->getString() != SecondStr->getString()) {
10033           ODRDiagError(FirstStr->getLocStart(), FirstStr->getSourceRange(),
10034                        StaticAssertMessage);
10035           ODRDiagNote(SecondStr->getLocStart(), SecondStr->getSourceRange(),
10036                       StaticAssertMessage);
10037           Diagnosed = true;
10038           break;
10039         }
10040         break;
10041       }
10042       case Field: {
10043         FieldDecl *FirstField = cast<FieldDecl>(FirstDecl);
10044         FieldDecl *SecondField = cast<FieldDecl>(SecondDecl);
10045         IdentifierInfo *FirstII = FirstField->getIdentifier();
10046         IdentifierInfo *SecondII = SecondField->getIdentifier();
10047         if (FirstII->getName() != SecondII->getName()) {
10048           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10049                        FieldName)
10050               << FirstII;
10051           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10052                       FieldName)
10053               << SecondII;
10054 
10055           Diagnosed = true;
10056           break;
10057         }
10058 
10059         assert(getContext().hasSameType(FirstField->getType(),
10060                                         SecondField->getType()));
10061 
10062         QualType FirstType = FirstField->getType();
10063         QualType SecondType = SecondField->getType();
10064         if (ComputeQualTypeODRHash(FirstType) !=
10065             ComputeQualTypeODRHash(SecondType)) {
10066           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10067                        FieldTypeName)
10068               << FirstII << FirstType;
10069           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10070                       FieldTypeName)
10071               << SecondII << SecondType;
10072 
10073           Diagnosed = true;
10074           break;
10075         }
10076 
10077         const bool IsFirstBitField = FirstField->isBitField();
10078         const bool IsSecondBitField = SecondField->isBitField();
10079         if (IsFirstBitField != IsSecondBitField) {
10080           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10081                        FieldSingleBitField)
10082               << FirstII << IsFirstBitField;
10083           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10084                       FieldSingleBitField)
10085               << SecondII << IsSecondBitField;
10086           Diagnosed = true;
10087           break;
10088         }
10089 
10090         if (IsFirstBitField && IsSecondBitField) {
10091           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10092                        FieldDifferentWidthBitField)
10093               << FirstII << FirstField->getBitWidth()->getSourceRange();
10094           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10095                       FieldDifferentWidthBitField)
10096               << SecondII << SecondField->getBitWidth()->getSourceRange();
10097           Diagnosed = true;
10098           break;
10099         }
10100 
10101         const bool IsFirstMutable = FirstField->isMutable();
10102         const bool IsSecondMutable = SecondField->isMutable();
10103         if (IsFirstMutable != IsSecondMutable) {
10104           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10105                        FieldSingleMutable)
10106               << FirstII << IsFirstMutable;
10107           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10108                       FieldSingleMutable)
10109               << SecondII << IsSecondMutable;
10110           Diagnosed = true;
10111           break;
10112         }
10113 
10114         const Expr *FirstInitializer = FirstField->getInClassInitializer();
10115         const Expr *SecondInitializer = SecondField->getInClassInitializer();
10116         if ((!FirstInitializer && SecondInitializer) ||
10117             (FirstInitializer && !SecondInitializer)) {
10118           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10119                        FieldSingleInitializer)
10120               << FirstII << (FirstInitializer != nullptr);
10121           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10122                       FieldSingleInitializer)
10123               << SecondII << (SecondInitializer != nullptr);
10124           Diagnosed = true;
10125           break;
10126         }
10127 
10128         if (FirstInitializer && SecondInitializer) {
10129           unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
10130           unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
10131           if (FirstInitHash != SecondInitHash) {
10132             ODRDiagError(FirstField->getLocation(),
10133                          FirstField->getSourceRange(),
10134                          FieldDifferentInitializers)
10135                 << FirstII << FirstInitializer->getSourceRange();
10136             ODRDiagNote(SecondField->getLocation(),
10137                         SecondField->getSourceRange(),
10138                         FieldDifferentInitializers)
10139                 << SecondII << SecondInitializer->getSourceRange();
10140             Diagnosed = true;
10141             break;
10142           }
10143         }
10144 
10145         break;
10146       }
10147       case CXXMethod: {
10148         enum {
10149           DiagMethod,
10150           DiagConstructor,
10151           DiagDestructor,
10152         } FirstMethodType,
10153             SecondMethodType;
10154         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10155           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10156           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10157           return DiagMethod;
10158         };
10159         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10160         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10161         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10162         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10163         auto FirstName = FirstMethod->getDeclName();
10164         auto SecondName = SecondMethod->getDeclName();
10165         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10166           ODRDiagError(FirstMethod->getLocation(),
10167                        FirstMethod->getSourceRange(), MethodName)
10168               << FirstMethodType << FirstName;
10169           ODRDiagNote(SecondMethod->getLocation(),
10170                       SecondMethod->getSourceRange(), MethodName)
10171               << SecondMethodType << SecondName;
10172 
10173           Diagnosed = true;
10174           break;
10175         }
10176 
10177         const bool FirstDeleted = FirstMethod->isDeleted();
10178         const bool SecondDeleted = SecondMethod->isDeleted();
10179         if (FirstDeleted != SecondDeleted) {
10180           ODRDiagError(FirstMethod->getLocation(),
10181                        FirstMethod->getSourceRange(), MethodDeleted)
10182               << FirstMethodType << FirstName << FirstDeleted;
10183 
10184           ODRDiagNote(SecondMethod->getLocation(),
10185                       SecondMethod->getSourceRange(), MethodDeleted)
10186               << SecondMethodType << SecondName << SecondDeleted;
10187           Diagnosed = true;
10188           break;
10189         }
10190 
10191         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10192         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10193         const bool FirstPure = FirstMethod->isPure();
10194         const bool SecondPure = SecondMethod->isPure();
10195         if ((FirstVirtual || SecondVirtual) &&
10196             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10197           ODRDiagError(FirstMethod->getLocation(),
10198                        FirstMethod->getSourceRange(), MethodVirtual)
10199               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10200           ODRDiagNote(SecondMethod->getLocation(),
10201                       SecondMethod->getSourceRange(), MethodVirtual)
10202               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10203           Diagnosed = true;
10204           break;
10205         }
10206 
10207         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10208         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10209         // class needs to be checked instead.
10210         const auto FirstStorage = FirstMethod->getStorageClass();
10211         const auto SecondStorage = SecondMethod->getStorageClass();
10212         const bool FirstStatic = FirstStorage == SC_Static;
10213         const bool SecondStatic = SecondStorage == SC_Static;
10214         if (FirstStatic != SecondStatic) {
10215           ODRDiagError(FirstMethod->getLocation(),
10216                        FirstMethod->getSourceRange(), MethodStatic)
10217               << FirstMethodType << FirstName << FirstStatic;
10218           ODRDiagNote(SecondMethod->getLocation(),
10219                       SecondMethod->getSourceRange(), MethodStatic)
10220               << SecondMethodType << SecondName << SecondStatic;
10221           Diagnosed = true;
10222           break;
10223         }
10224 
10225         const bool FirstVolatile = FirstMethod->isVolatile();
10226         const bool SecondVolatile = SecondMethod->isVolatile();
10227         if (FirstVolatile != SecondVolatile) {
10228           ODRDiagError(FirstMethod->getLocation(),
10229                        FirstMethod->getSourceRange(), MethodVolatile)
10230               << FirstMethodType << FirstName << FirstVolatile;
10231           ODRDiagNote(SecondMethod->getLocation(),
10232                       SecondMethod->getSourceRange(), MethodVolatile)
10233               << SecondMethodType << SecondName << SecondVolatile;
10234           Diagnosed = true;
10235           break;
10236         }
10237 
10238         const bool FirstConst = FirstMethod->isConst();
10239         const bool SecondConst = SecondMethod->isConst();
10240         if (FirstConst != SecondConst) {
10241           ODRDiagError(FirstMethod->getLocation(),
10242                        FirstMethod->getSourceRange(), MethodConst)
10243               << FirstMethodType << FirstName << FirstConst;
10244           ODRDiagNote(SecondMethod->getLocation(),
10245                       SecondMethod->getSourceRange(), MethodConst)
10246               << SecondMethodType << SecondName << SecondConst;
10247           Diagnosed = true;
10248           break;
10249         }
10250 
10251         const bool FirstInline = FirstMethod->isInlineSpecified();
10252         const bool SecondInline = SecondMethod->isInlineSpecified();
10253         if (FirstInline != SecondInline) {
10254           ODRDiagError(FirstMethod->getLocation(),
10255                        FirstMethod->getSourceRange(), MethodInline)
10256               << FirstMethodType << FirstName << FirstInline;
10257           ODRDiagNote(SecondMethod->getLocation(),
10258                       SecondMethod->getSourceRange(), MethodInline)
10259               << SecondMethodType << SecondName << SecondInline;
10260           Diagnosed = true;
10261           break;
10262         }
10263 
10264         const unsigned FirstNumParameters = FirstMethod->param_size();
10265         const unsigned SecondNumParameters = SecondMethod->param_size();
10266         if (FirstNumParameters != SecondNumParameters) {
10267           ODRDiagError(FirstMethod->getLocation(),
10268                        FirstMethod->getSourceRange(), MethodNumberParameters)
10269               << FirstMethodType << FirstName << FirstNumParameters;
10270           ODRDiagNote(SecondMethod->getLocation(),
10271                       SecondMethod->getSourceRange(), MethodNumberParameters)
10272               << SecondMethodType << SecondName << SecondNumParameters;
10273           Diagnosed = true;
10274           break;
10275         }
10276 
10277         // Need this status boolean to know when break out of the switch.
10278         bool ParameterMismatch = false;
10279         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10280           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10281           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10282 
10283           QualType FirstParamType = FirstParam->getType();
10284           QualType SecondParamType = SecondParam->getType();
10285           if (FirstParamType != SecondParamType &&
10286               ComputeQualTypeODRHash(FirstParamType) !=
10287                   ComputeQualTypeODRHash(SecondParamType)) {
10288             if (const DecayedType *ParamDecayedType =
10289                     FirstParamType->getAs<DecayedType>()) {
10290               ODRDiagError(FirstMethod->getLocation(),
10291                            FirstMethod->getSourceRange(), MethodParameterType)
10292                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10293                   << true << ParamDecayedType->getOriginalType();
10294             } else {
10295               ODRDiagError(FirstMethod->getLocation(),
10296                            FirstMethod->getSourceRange(), MethodParameterType)
10297                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10298                   << false;
10299             }
10300 
10301             if (const DecayedType *ParamDecayedType =
10302                     SecondParamType->getAs<DecayedType>()) {
10303               ODRDiagNote(SecondMethod->getLocation(),
10304                           SecondMethod->getSourceRange(), MethodParameterType)
10305                   << SecondMethodType << SecondName << (I + 1)
10306                   << SecondParamType << true
10307                   << ParamDecayedType->getOriginalType();
10308             } else {
10309               ODRDiagNote(SecondMethod->getLocation(),
10310                           SecondMethod->getSourceRange(), MethodParameterType)
10311                   << SecondMethodType << SecondName << (I + 1)
10312                   << SecondParamType << false;
10313             }
10314             ParameterMismatch = true;
10315             break;
10316           }
10317 
10318           DeclarationName FirstParamName = FirstParam->getDeclName();
10319           DeclarationName SecondParamName = SecondParam->getDeclName();
10320           if (FirstParamName != SecondParamName) {
10321             ODRDiagError(FirstMethod->getLocation(),
10322                          FirstMethod->getSourceRange(), MethodParameterName)
10323                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10324             ODRDiagNote(SecondMethod->getLocation(),
10325                         SecondMethod->getSourceRange(), MethodParameterName)
10326                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10327             ParameterMismatch = true;
10328             break;
10329           }
10330 
10331           const Expr *FirstInit = FirstParam->getInit();
10332           const Expr *SecondInit = SecondParam->getInit();
10333           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10334             ODRDiagError(FirstMethod->getLocation(),
10335                          FirstMethod->getSourceRange(),
10336                          MethodParameterSingleDefaultArgument)
10337                 << FirstMethodType << FirstName << (I + 1)
10338                 << (FirstInit == nullptr)
10339                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10340             ODRDiagNote(SecondMethod->getLocation(),
10341                         SecondMethod->getSourceRange(),
10342                         MethodParameterSingleDefaultArgument)
10343                 << SecondMethodType << SecondName << (I + 1)
10344                 << (SecondInit == nullptr)
10345                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10346             ParameterMismatch = true;
10347             break;
10348           }
10349 
10350           if (FirstInit && SecondInit &&
10351               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10352             ODRDiagError(FirstMethod->getLocation(),
10353                          FirstMethod->getSourceRange(),
10354                          MethodParameterDifferentDefaultArgument)
10355                 << FirstMethodType << FirstName << (I + 1)
10356                 << FirstInit->getSourceRange();
10357             ODRDiagNote(SecondMethod->getLocation(),
10358                         SecondMethod->getSourceRange(),
10359                         MethodParameterDifferentDefaultArgument)
10360                 << SecondMethodType << SecondName << (I + 1)
10361                 << SecondInit->getSourceRange();
10362             ParameterMismatch = true;
10363             break;
10364 
10365           }
10366         }
10367 
10368         if (ParameterMismatch) {
10369           Diagnosed = true;
10370           break;
10371         }
10372 
10373         break;
10374       }
10375       case TypeAlias:
10376       case TypeDef: {
10377         TypedefNameDecl *FirstTD = cast<TypedefNameDecl>(FirstDecl);
10378         TypedefNameDecl *SecondTD = cast<TypedefNameDecl>(SecondDecl);
10379         auto FirstName = FirstTD->getDeclName();
10380         auto SecondName = SecondTD->getDeclName();
10381         if (FirstName != SecondName) {
10382           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10383                        TypedefName)
10384               << (FirstDiffType == TypeAlias) << FirstName;
10385           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10386                       TypedefName)
10387               << (FirstDiffType == TypeAlias) << SecondName;
10388           Diagnosed = true;
10389           break;
10390         }
10391 
10392         QualType FirstType = FirstTD->getUnderlyingType();
10393         QualType SecondType = SecondTD->getUnderlyingType();
10394         if (ComputeQualTypeODRHash(FirstType) !=
10395             ComputeQualTypeODRHash(SecondType)) {
10396           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10397                        TypedefType)
10398               << (FirstDiffType == TypeAlias) << FirstName << FirstType;
10399           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10400                       TypedefType)
10401               << (FirstDiffType == TypeAlias) << SecondName << SecondType;
10402           Diagnosed = true;
10403           break;
10404         }
10405         break;
10406       }
10407       case Var: {
10408         VarDecl *FirstVD = cast<VarDecl>(FirstDecl);
10409         VarDecl *SecondVD = cast<VarDecl>(SecondDecl);
10410         auto FirstName = FirstVD->getDeclName();
10411         auto SecondName = SecondVD->getDeclName();
10412         if (FirstName != SecondName) {
10413           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10414                        VarName)
10415               << FirstName;
10416           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10417                       VarName)
10418               << SecondName;
10419           Diagnosed = true;
10420           break;
10421         }
10422 
10423         QualType FirstType = FirstVD->getType();
10424         QualType SecondType = SecondVD->getType();
10425         if (ComputeQualTypeODRHash(FirstType) !=
10426                         ComputeQualTypeODRHash(SecondType)) {
10427           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10428                        VarType)
10429               << FirstName << FirstType;
10430           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10431                       VarType)
10432               << SecondName << SecondType;
10433           Diagnosed = true;
10434           break;
10435         }
10436 
10437         const Expr *FirstInit = FirstVD->getInit();
10438         const Expr *SecondInit = SecondVD->getInit();
10439         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10440           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10441                        VarSingleInitializer)
10442               << FirstName << (FirstInit == nullptr)
10443               << (FirstInit ? FirstInit->getSourceRange(): SourceRange());
10444           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10445                       VarSingleInitializer)
10446               << SecondName << (SecondInit == nullptr)
10447               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10448           Diagnosed = true;
10449           break;
10450         }
10451 
10452         if (FirstInit && SecondInit &&
10453             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10454           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10455                        VarDifferentInitializer)
10456               << FirstName << FirstInit->getSourceRange();
10457           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10458                       VarDifferentInitializer)
10459               << SecondName << SecondInit->getSourceRange();
10460           Diagnosed = true;
10461           break;
10462         }
10463 
10464         const bool FirstIsConstexpr = FirstVD->isConstexpr();
10465         const bool SecondIsConstexpr = SecondVD->isConstexpr();
10466         if (FirstIsConstexpr != SecondIsConstexpr) {
10467           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10468                        VarConstexpr)
10469               << FirstName << FirstIsConstexpr;
10470           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10471                       VarConstexpr)
10472               << SecondName << SecondIsConstexpr;
10473           Diagnosed = true;
10474           break;
10475         }
10476         break;
10477       }
10478       case Friend: {
10479         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10480         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10481 
10482         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10483         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10484 
10485         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10486         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10487 
10488         if (FirstND && SecondND) {
10489           ODRDiagError(FirstFriend->getFriendLoc(),
10490                        FirstFriend->getSourceRange(), FriendFunction)
10491               << FirstND;
10492           ODRDiagNote(SecondFriend->getFriendLoc(),
10493                       SecondFriend->getSourceRange(), FriendFunction)
10494               << SecondND;
10495 
10496           Diagnosed = true;
10497           break;
10498         }
10499 
10500         if (FirstTSI && SecondTSI) {
10501           QualType FirstFriendType = FirstTSI->getType();
10502           QualType SecondFriendType = SecondTSI->getType();
10503           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10504                  ComputeQualTypeODRHash(SecondFriendType));
10505           ODRDiagError(FirstFriend->getFriendLoc(),
10506                        FirstFriend->getSourceRange(), FriendType)
10507               << FirstFriendType;
10508           ODRDiagNote(SecondFriend->getFriendLoc(),
10509                       SecondFriend->getSourceRange(), FriendType)
10510               << SecondFriendType;
10511           Diagnosed = true;
10512           break;
10513         }
10514 
10515         ODRDiagError(FirstFriend->getFriendLoc(), FirstFriend->getSourceRange(),
10516                      FriendTypeFunction)
10517             << (FirstTSI == nullptr);
10518         ODRDiagNote(SecondFriend->getFriendLoc(),
10519                     SecondFriend->getSourceRange(), FriendTypeFunction)
10520             << (SecondTSI == nullptr);
10521 
10522         Diagnosed = true;
10523         break;
10524       }
10525       }
10526 
10527       if (Diagnosed)
10528         continue;
10529 
10530       Diag(FirstDecl->getLocation(),
10531            diag::err_module_odr_violation_mismatch_decl_unknown)
10532           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
10533           << FirstDecl->getSourceRange();
10534       Diag(SecondDecl->getLocation(),
10535            diag::note_module_odr_violation_mismatch_decl_unknown)
10536           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
10537       Diagnosed = true;
10538     }
10539 
10540     if (!Diagnosed) {
10541       // All definitions are updates to the same declaration. This happens if a
10542       // module instantiates the declaration of a class template specialization
10543       // and two or more other modules instantiate its definition.
10544       //
10545       // FIXME: Indicate which modules had instantiations of this definition.
10546       // FIXME: How can this even happen?
10547       Diag(Merge.first->getLocation(),
10548            diag::err_module_odr_violation_different_instantiations)
10549         << Merge.first;
10550     }
10551   }
10552 
10553   // Issue ODR failures diagnostics for functions.
10554   for (auto &Merge : FunctionOdrMergeFailures) {
10555     enum ODRFunctionDifference {
10556       ReturnType,
10557       ParameterName,
10558       ParameterType,
10559       ParameterSingleDefaultArgument,
10560       ParameterDifferentDefaultArgument,
10561       FunctionBody,
10562     };
10563 
10564     FunctionDecl *FirstFunction = Merge.first;
10565     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
10566 
10567     bool Diagnosed = false;
10568     for (auto &SecondFunction : Merge.second) {
10569 
10570       if (FirstFunction == SecondFunction)
10571         continue;
10572 
10573       std::string SecondModule =
10574           getOwningModuleNameForDiagnostic(SecondFunction);
10575 
10576       auto ODRDiagError = [FirstFunction, &FirstModule,
10577                            this](SourceLocation Loc, SourceRange Range,
10578                                  ODRFunctionDifference DiffType) {
10579         return Diag(Loc, diag::err_module_odr_violation_function)
10580                << FirstFunction << FirstModule.empty() << FirstModule << Range
10581                << DiffType;
10582       };
10583       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
10584                                                SourceRange Range,
10585                                                ODRFunctionDifference DiffType) {
10586         return Diag(Loc, diag::note_module_odr_violation_function)
10587                << SecondModule << Range << DiffType;
10588       };
10589 
10590       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
10591           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
10592         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
10593                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
10594             << FirstFunction->getReturnType();
10595         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
10596                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
10597             << SecondFunction->getReturnType();
10598         Diagnosed = true;
10599         break;
10600       }
10601 
10602       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
10603              "Merged functions with different number of parameters");
10604 
10605       auto ParamSize = FirstFunction->param_size();
10606       bool ParameterMismatch = false;
10607       for (unsigned I = 0; I < ParamSize; ++I) {
10608         auto *FirstParam = FirstFunction->getParamDecl(I);
10609         auto *SecondParam = SecondFunction->getParamDecl(I);
10610 
10611         assert(getContext().hasSameType(FirstParam->getType(),
10612                                       SecondParam->getType()) &&
10613                "Merged function has different parameter types.");
10614 
10615         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
10616           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
10617                        ParameterName)
10618               << I + 1 << FirstParam->getDeclName();
10619           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
10620                       ParameterName)
10621               << I + 1 << SecondParam->getDeclName();
10622           ParameterMismatch = true;
10623           break;
10624         };
10625 
10626         QualType FirstParamType = FirstParam->getType();
10627         QualType SecondParamType = SecondParam->getType();
10628         if (FirstParamType != SecondParamType &&
10629             ComputeQualTypeODRHash(FirstParamType) !=
10630                 ComputeQualTypeODRHash(SecondParamType)) {
10631           if (const DecayedType *ParamDecayedType =
10632                   FirstParamType->getAs<DecayedType>()) {
10633             ODRDiagError(FirstParam->getLocation(),
10634                          FirstParam->getSourceRange(), ParameterType)
10635                 << (I + 1) << FirstParamType << true
10636                 << ParamDecayedType->getOriginalType();
10637           } else {
10638             ODRDiagError(FirstParam->getLocation(),
10639                          FirstParam->getSourceRange(), ParameterType)
10640                 << (I + 1) << FirstParamType << false;
10641           }
10642 
10643           if (const DecayedType *ParamDecayedType =
10644                   SecondParamType->getAs<DecayedType>()) {
10645             ODRDiagNote(SecondParam->getLocation(),
10646                         SecondParam->getSourceRange(), ParameterType)
10647                 << (I + 1) << SecondParamType << true
10648                 << ParamDecayedType->getOriginalType();
10649           } else {
10650             ODRDiagNote(SecondParam->getLocation(),
10651                         SecondParam->getSourceRange(), ParameterType)
10652                 << (I + 1) << SecondParamType << false;
10653           }
10654           ParameterMismatch = true;
10655           break;
10656         }
10657 
10658         const Expr *FirstInit = FirstParam->getInit();
10659         const Expr *SecondInit = SecondParam->getInit();
10660         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10661           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
10662                        ParameterSingleDefaultArgument)
10663               << (I + 1) << (FirstInit == nullptr)
10664               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10665           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
10666                       ParameterSingleDefaultArgument)
10667               << (I + 1) << (SecondInit == nullptr)
10668               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10669           ParameterMismatch = true;
10670           break;
10671         }
10672 
10673         if (FirstInit && SecondInit &&
10674             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10675           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
10676                        ParameterDifferentDefaultArgument)
10677               << (I + 1) << FirstInit->getSourceRange();
10678           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
10679                       ParameterDifferentDefaultArgument)
10680               << (I + 1) << SecondInit->getSourceRange();
10681           ParameterMismatch = true;
10682           break;
10683         }
10684 
10685         assert(ComputeSubDeclODRHash(FirstParam) ==
10686                    ComputeSubDeclODRHash(SecondParam) &&
10687                "Undiagnosed parameter difference.");
10688       }
10689 
10690       if (ParameterMismatch) {
10691         Diagnosed = true;
10692         break;
10693       }
10694 
10695       // If no error has been generated before now, assume the problem is in
10696       // the body and generate a message.
10697       ODRDiagError(FirstFunction->getLocation(),
10698                    FirstFunction->getSourceRange(), FunctionBody);
10699       ODRDiagNote(SecondFunction->getLocation(),
10700                   SecondFunction->getSourceRange(), FunctionBody);
10701       Diagnosed = true;
10702       break;
10703     }
10704     (void)Diagnosed;
10705     assert(Diagnosed && "Unable to emit ODR diagnostic.");
10706   }
10707 }
10708 
10709 void ASTReader::StartedDeserializing() {
10710   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
10711     ReadTimer->startTimer();
10712 }
10713 
10714 void ASTReader::FinishedDeserializing() {
10715   assert(NumCurrentElementsDeserializing &&
10716          "FinishedDeserializing not paired with StartedDeserializing");
10717   if (NumCurrentElementsDeserializing == 1) {
10718     // We decrease NumCurrentElementsDeserializing only after pending actions
10719     // are finished, to avoid recursively re-calling finishPendingActions().
10720     finishPendingActions();
10721   }
10722   --NumCurrentElementsDeserializing;
10723 
10724   if (NumCurrentElementsDeserializing == 0) {
10725     // Propagate exception specification updates along redeclaration chains.
10726     while (!PendingExceptionSpecUpdates.empty()) {
10727       auto Updates = std::move(PendingExceptionSpecUpdates);
10728       PendingExceptionSpecUpdates.clear();
10729       for (auto Update : Updates) {
10730         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
10731         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
10732         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
10733         if (auto *Listener = getContext().getASTMutationListener())
10734           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
10735         for (auto *Redecl : Update.second->redecls())
10736           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
10737       }
10738     }
10739 
10740     if (ReadTimer)
10741       ReadTimer->stopTimer();
10742 
10743     diagnoseOdrViolations();
10744 
10745     // We are not in recursive loading, so it's safe to pass the "interesting"
10746     // decls to the consumer.
10747     if (Consumer)
10748       PassInterestingDeclsToConsumer();
10749   }
10750 }
10751 
10752 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
10753   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
10754     // Remove any fake results before adding any real ones.
10755     auto It = PendingFakeLookupResults.find(II);
10756     if (It != PendingFakeLookupResults.end()) {
10757       for (auto *ND : It->second)
10758         SemaObj->IdResolver.RemoveDecl(ND);
10759       // FIXME: this works around module+PCH performance issue.
10760       // Rather than erase the result from the map, which is O(n), just clear
10761       // the vector of NamedDecls.
10762       It->second.clear();
10763     }
10764   }
10765 
10766   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
10767     SemaObj->TUScope->AddDecl(D);
10768   } else if (SemaObj->TUScope) {
10769     // Adding the decl to IdResolver may have failed because it was already in
10770     // (even though it was not added in scope). If it is already in, make sure
10771     // it gets in the scope as well.
10772     if (std::find(SemaObj->IdResolver.begin(Name),
10773                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
10774       SemaObj->TUScope->AddDecl(D);
10775   }
10776 }
10777 
10778 ASTReader::ASTReader(Preprocessor &PP, ASTContext *Context,
10779                      const PCHContainerReader &PCHContainerRdr,
10780                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
10781                      StringRef isysroot, bool DisableValidation,
10782                      bool AllowASTWithCompilerErrors,
10783                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
10784                      bool UseGlobalIndex,
10785                      std::unique_ptr<llvm::Timer> ReadTimer)
10786     : Listener(DisableValidation
10787                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
10788                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
10789       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
10790       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
10791       ContextObj(Context),
10792       ModuleMgr(PP.getFileManager(), PP.getPCMCache(), PCHContainerRdr,
10793                 PP.getHeaderSearchInfo()),
10794       PCMCache(PP.getPCMCache()), DummyIdResolver(PP),
10795       ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
10796       DisableValidation(DisableValidation),
10797       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
10798       AllowConfigurationMismatch(AllowConfigurationMismatch),
10799       ValidateSystemInputs(ValidateSystemInputs),
10800       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
10801   SourceMgr.setExternalSLocEntrySource(this);
10802 
10803   for (const auto &Ext : Extensions) {
10804     auto BlockName = Ext->getExtensionMetadata().BlockName;
10805     auto Known = ModuleFileExtensions.find(BlockName);
10806     if (Known != ModuleFileExtensions.end()) {
10807       Diags.Report(diag::warn_duplicate_module_file_extension)
10808         << BlockName;
10809       continue;
10810     }
10811 
10812     ModuleFileExtensions.insert({BlockName, Ext});
10813   }
10814 }
10815 
10816 ASTReader::~ASTReader() {
10817   if (OwnsDeserializationListener)
10818     delete DeserializationListener;
10819 }
10820 
10821 IdentifierResolver &ASTReader::getIdResolver() {
10822   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
10823 }
10824 
10825 unsigned ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
10826                                      unsigned AbbrevID) {
10827   Idx = 0;
10828   Record.clear();
10829   return Cursor.readRecord(AbbrevID, Record);
10830 }
10831