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