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