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