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 SELECTOR_OFFSETS: {
2896       F.SelectorOffsets = (const uint32_t *)Blob.data();
2897       F.LocalNumSelectors = Record[0];
2898       unsigned LocalBaseSelectorID = Record[1];
2899       F.BaseSelectorID = getTotalNumSelectors();
2900 
2901       if (F.LocalNumSelectors > 0) {
2902         // Introduce the global -> local mapping for selectors within this
2903         // module.
2904         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
2905 
2906         // Introduce the local -> global mapping for selectors within this
2907         // module.
2908         F.SelectorRemap.insertOrReplace(
2909           std::make_pair(LocalBaseSelectorID,
2910                          F.BaseSelectorID - LocalBaseSelectorID));
2911 
2912         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
2913       }
2914       break;
2915     }
2916 
2917     case METHOD_POOL:
2918       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
2919       if (Record[0])
2920         F.SelectorLookupTable
2921           = ASTSelectorLookupTable::Create(
2922                         F.SelectorLookupTableData + Record[0],
2923                         F.SelectorLookupTableData,
2924                         ASTSelectorLookupTrait(*this, F));
2925       TotalNumMethodPoolEntries += Record[1];
2926       break;
2927 
2928     case REFERENCED_SELECTOR_POOL:
2929       if (!Record.empty()) {
2930         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
2931           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
2932                                                                 Record[Idx++]));
2933           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
2934                                               getRawEncoding());
2935         }
2936       }
2937       break;
2938 
2939     case PP_COUNTER_VALUE:
2940       if (!Record.empty() && Listener)
2941         Listener->ReadCounter(F, Record[0]);
2942       break;
2943 
2944     case FILE_SORTED_DECLS:
2945       F.FileSortedDecls = (const DeclID *)Blob.data();
2946       F.NumFileSortedDecls = Record[0];
2947       break;
2948 
2949     case SOURCE_LOCATION_OFFSETS: {
2950       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
2951       F.LocalNumSLocEntries = Record[0];
2952       unsigned SLocSpaceSize = Record[1];
2953       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
2954           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
2955                                               SLocSpaceSize);
2956       // Make our entry in the range map. BaseID is negative and growing, so
2957       // we invert it. Because we invert it, though, we need the other end of
2958       // the range.
2959       unsigned RangeStart =
2960           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
2961       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
2962       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
2963 
2964       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
2965       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
2966       GlobalSLocOffsetMap.insert(
2967           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
2968                            - SLocSpaceSize,&F));
2969 
2970       // Initialize the remapping table.
2971       // Invalid stays invalid.
2972       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
2973       // This module. Base was 2 when being compiled.
2974       F.SLocRemap.insertOrReplace(std::make_pair(2U,
2975                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
2976 
2977       TotalNumSLocEntries += F.LocalNumSLocEntries;
2978       break;
2979     }
2980 
2981     case MODULE_OFFSET_MAP: {
2982       // Additional remapping information.
2983       const unsigned char *Data = (const unsigned char*)Blob.data();
2984       const unsigned char *DataEnd = Data + Blob.size();
2985 
2986       // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
2987       if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
2988         F.SLocRemap.insert(std::make_pair(0U, 0));
2989         F.SLocRemap.insert(std::make_pair(2U, 1));
2990       }
2991 
2992       // Continuous range maps we may be updating in our module.
2993       typedef ContinuousRangeMap<uint32_t, int, 2>::Builder
2994           RemapBuilder;
2995       RemapBuilder SLocRemap(F.SLocRemap);
2996       RemapBuilder IdentifierRemap(F.IdentifierRemap);
2997       RemapBuilder MacroRemap(F.MacroRemap);
2998       RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
2999       RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3000       RemapBuilder SelectorRemap(F.SelectorRemap);
3001       RemapBuilder DeclRemap(F.DeclRemap);
3002       RemapBuilder TypeRemap(F.TypeRemap);
3003 
3004       while(Data < DataEnd) {
3005         using namespace llvm::support;
3006         uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3007         StringRef Name = StringRef((const char*)Data, Len);
3008         Data += Len;
3009         ModuleFile *OM = ModuleMgr.lookup(Name);
3010         if (!OM) {
3011           Error("SourceLocation remap refers to unknown module");
3012           return Failure;
3013         }
3014 
3015         uint32_t SLocOffset =
3016             endian::readNext<uint32_t, little, unaligned>(Data);
3017         uint32_t IdentifierIDOffset =
3018             endian::readNext<uint32_t, little, unaligned>(Data);
3019         uint32_t MacroIDOffset =
3020             endian::readNext<uint32_t, little, unaligned>(Data);
3021         uint32_t PreprocessedEntityIDOffset =
3022             endian::readNext<uint32_t, little, unaligned>(Data);
3023         uint32_t SubmoduleIDOffset =
3024             endian::readNext<uint32_t, little, unaligned>(Data);
3025         uint32_t SelectorIDOffset =
3026             endian::readNext<uint32_t, little, unaligned>(Data);
3027         uint32_t DeclIDOffset =
3028             endian::readNext<uint32_t, little, unaligned>(Data);
3029         uint32_t TypeIndexOffset =
3030             endian::readNext<uint32_t, little, unaligned>(Data);
3031 
3032         uint32_t None = std::numeric_limits<uint32_t>::max();
3033 
3034         auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3035                              RemapBuilder &Remap) {
3036           if (Offset != None)
3037             Remap.insert(std::make_pair(Offset,
3038                                         static_cast<int>(BaseOffset - Offset)));
3039         };
3040         mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3041         mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3042         mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3043         mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3044                   PreprocessedEntityRemap);
3045         mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3046         mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3047         mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3048         mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3049 
3050         // Global -> local mappings.
3051         F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3052       }
3053       break;
3054     }
3055 
3056     case SOURCE_MANAGER_LINE_TABLE:
3057       if (ParseLineTable(F, Record))
3058         return Failure;
3059       break;
3060 
3061     case SOURCE_LOCATION_PRELOADS: {
3062       // Need to transform from the local view (1-based IDs) to the global view,
3063       // which is based off F.SLocEntryBaseID.
3064       if (!F.PreloadSLocEntries.empty()) {
3065         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3066         return Failure;
3067       }
3068 
3069       F.PreloadSLocEntries.swap(Record);
3070       break;
3071     }
3072 
3073     case EXT_VECTOR_DECLS:
3074       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3075         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3076       break;
3077 
3078     case VTABLE_USES:
3079       if (Record.size() % 3 != 0) {
3080         Error("Invalid VTABLE_USES record");
3081         return Failure;
3082       }
3083 
3084       // Later tables overwrite earlier ones.
3085       // FIXME: Modules will have some trouble with this. This is clearly not
3086       // the right way to do this.
3087       VTableUses.clear();
3088 
3089       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3090         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3091         VTableUses.push_back(
3092           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3093         VTableUses.push_back(Record[Idx++]);
3094       }
3095       break;
3096 
3097     case PENDING_IMPLICIT_INSTANTIATIONS:
3098       if (PendingInstantiations.size() % 2 != 0) {
3099         Error("Invalid existing PendingInstantiations");
3100         return Failure;
3101       }
3102 
3103       if (Record.size() % 2 != 0) {
3104         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3105         return Failure;
3106       }
3107 
3108       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3109         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3110         PendingInstantiations.push_back(
3111           ReadSourceLocation(F, Record, I).getRawEncoding());
3112       }
3113       break;
3114 
3115     case SEMA_DECL_REFS:
3116       if (Record.size() != 2) {
3117         Error("Invalid SEMA_DECL_REFS block");
3118         return Failure;
3119       }
3120       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3121         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3122       break;
3123 
3124     case PPD_ENTITIES_OFFSETS: {
3125       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3126       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3127       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3128 
3129       unsigned LocalBasePreprocessedEntityID = Record[0];
3130 
3131       unsigned StartingID;
3132       if (!PP.getPreprocessingRecord())
3133         PP.createPreprocessingRecord();
3134       if (!PP.getPreprocessingRecord()->getExternalSource())
3135         PP.getPreprocessingRecord()->SetExternalSource(*this);
3136       StartingID
3137         = PP.getPreprocessingRecord()
3138             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3139       F.BasePreprocessedEntityID = StartingID;
3140 
3141       if (F.NumPreprocessedEntities > 0) {
3142         // Introduce the global -> local mapping for preprocessed entities in
3143         // this module.
3144         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3145 
3146         // Introduce the local -> global mapping for preprocessed entities in
3147         // this module.
3148         F.PreprocessedEntityRemap.insertOrReplace(
3149           std::make_pair(LocalBasePreprocessedEntityID,
3150             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3151       }
3152 
3153       break;
3154     }
3155 
3156     case DECL_UPDATE_OFFSETS: {
3157       if (Record.size() % 2 != 0) {
3158         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3159         return Failure;
3160       }
3161       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3162         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3163         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3164 
3165         // If we've already loaded the decl, perform the updates when we finish
3166         // loading this block.
3167         if (Decl *D = GetExistingDecl(ID))
3168           PendingUpdateRecords.push_back(std::make_pair(ID, D));
3169       }
3170       break;
3171     }
3172 
3173     case DECL_REPLACEMENTS: {
3174       if (Record.size() % 3 != 0) {
3175         Error("invalid DECL_REPLACEMENTS block in AST file");
3176         return Failure;
3177       }
3178       for (unsigned I = 0, N = Record.size(); I != N; I += 3)
3179         ReplacedDecls[getGlobalDeclID(F, Record[I])]
3180           = ReplacedDeclInfo(&F, Record[I+1], Record[I+2]);
3181       break;
3182     }
3183 
3184     case OBJC_CATEGORIES_MAP: {
3185       if (F.LocalNumObjCCategoriesInMap != 0) {
3186         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3187         return Failure;
3188       }
3189 
3190       F.LocalNumObjCCategoriesInMap = Record[0];
3191       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3192       break;
3193     }
3194 
3195     case OBJC_CATEGORIES:
3196       F.ObjCCategories.swap(Record);
3197       break;
3198 
3199     case CXX_BASE_SPECIFIER_OFFSETS: {
3200       if (F.LocalNumCXXBaseSpecifiers != 0) {
3201         Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
3202         return Failure;
3203       }
3204 
3205       F.LocalNumCXXBaseSpecifiers = Record[0];
3206       F.CXXBaseSpecifiersOffsets = (const uint32_t *)Blob.data();
3207       NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers;
3208       break;
3209     }
3210 
3211     case DIAG_PRAGMA_MAPPINGS:
3212       if (F.PragmaDiagMappings.empty())
3213         F.PragmaDiagMappings.swap(Record);
3214       else
3215         F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
3216                                     Record.begin(), Record.end());
3217       break;
3218 
3219     case CUDA_SPECIAL_DECL_REFS:
3220       // Later tables overwrite earlier ones.
3221       // FIXME: Modules will have trouble with this.
3222       CUDASpecialDeclRefs.clear();
3223       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3224         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3225       break;
3226 
3227     case HEADER_SEARCH_TABLE: {
3228       F.HeaderFileInfoTableData = Blob.data();
3229       F.LocalNumHeaderFileInfos = Record[1];
3230       if (Record[0]) {
3231         F.HeaderFileInfoTable
3232           = HeaderFileInfoLookupTable::Create(
3233                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3234                    (const unsigned char *)F.HeaderFileInfoTableData,
3235                    HeaderFileInfoTrait(*this, F,
3236                                        &PP.getHeaderSearchInfo(),
3237                                        Blob.data() + Record[2]));
3238 
3239         PP.getHeaderSearchInfo().SetExternalSource(this);
3240         if (!PP.getHeaderSearchInfo().getExternalLookup())
3241           PP.getHeaderSearchInfo().SetExternalLookup(this);
3242       }
3243       break;
3244     }
3245 
3246     case FP_PRAGMA_OPTIONS:
3247       // Later tables overwrite earlier ones.
3248       FPPragmaOptions.swap(Record);
3249       break;
3250 
3251     case OPENCL_EXTENSIONS:
3252       // Later tables overwrite earlier ones.
3253       OpenCLExtensions.swap(Record);
3254       break;
3255 
3256     case TENTATIVE_DEFINITIONS:
3257       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3258         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3259       break;
3260 
3261     case KNOWN_NAMESPACES:
3262       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3263         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3264       break;
3265 
3266     case UNDEFINED_BUT_USED:
3267       if (UndefinedButUsed.size() % 2 != 0) {
3268         Error("Invalid existing UndefinedButUsed");
3269         return Failure;
3270       }
3271 
3272       if (Record.size() % 2 != 0) {
3273         Error("invalid undefined-but-used record");
3274         return Failure;
3275       }
3276       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3277         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3278         UndefinedButUsed.push_back(
3279             ReadSourceLocation(F, Record, I).getRawEncoding());
3280       }
3281       break;
3282 
3283     case IMPORTED_MODULES: {
3284       if (F.Kind != MK_ImplicitModule && F.Kind != MK_ExplicitModule) {
3285         // If we aren't loading a module (which has its own exports), make
3286         // all of the imported modules visible.
3287         // FIXME: Deal with macros-only imports.
3288         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3289           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3290           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3291           if (GlobalID)
3292             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3293         }
3294       }
3295       break;
3296     }
3297 
3298     case LOCAL_REDECLARATIONS: {
3299       F.RedeclarationChains.swap(Record);
3300       break;
3301     }
3302 
3303     case LOCAL_REDECLARATIONS_MAP: {
3304       if (F.LocalNumRedeclarationsInMap != 0) {
3305         Error("duplicate LOCAL_REDECLARATIONS_MAP record in AST file");
3306         return Failure;
3307       }
3308 
3309       F.LocalNumRedeclarationsInMap = Record[0];
3310       F.RedeclarationsMap = (const LocalRedeclarationsInfo *)Blob.data();
3311       break;
3312     }
3313 
3314     case MACRO_OFFSET: {
3315       if (F.LocalNumMacros != 0) {
3316         Error("duplicate MACRO_OFFSET record in AST file");
3317         return Failure;
3318       }
3319       F.MacroOffsets = (const uint32_t *)Blob.data();
3320       F.LocalNumMacros = Record[0];
3321       unsigned LocalBaseMacroID = Record[1];
3322       F.BaseMacroID = getTotalNumMacros();
3323 
3324       if (F.LocalNumMacros > 0) {
3325         // Introduce the global -> local mapping for macros within this module.
3326         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3327 
3328         // Introduce the local -> global mapping for macros within this module.
3329         F.MacroRemap.insertOrReplace(
3330           std::make_pair(LocalBaseMacroID,
3331                          F.BaseMacroID - LocalBaseMacroID));
3332 
3333         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3334       }
3335       break;
3336     }
3337 
3338     case MACRO_TABLE: {
3339       // FIXME: Not used yet.
3340       break;
3341     }
3342 
3343     case LATE_PARSED_TEMPLATE: {
3344       LateParsedTemplates.append(Record.begin(), Record.end());
3345       break;
3346     }
3347 
3348     case OPTIMIZE_PRAGMA_OPTIONS:
3349       if (Record.size() != 1) {
3350         Error("invalid pragma optimize record");
3351         return Failure;
3352       }
3353       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3354       break;
3355 
3356     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3357       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3358         UnusedLocalTypedefNameCandidates.push_back(
3359             getGlobalDeclID(F, Record[I]));
3360       break;
3361     }
3362   }
3363 }
3364 
3365 ASTReader::ASTReadResult
3366 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3367                                   const ModuleFile *ImportedBy,
3368                                   unsigned ClientLoadCapabilities) {
3369   unsigned Idx = 0;
3370   F.ModuleMapPath = ReadPath(F, Record, Idx);
3371 
3372   if (F.Kind == MK_ExplicitModule) {
3373     // For an explicitly-loaded module, we don't care whether the original
3374     // module map file exists or matches.
3375     return Success;
3376   }
3377 
3378   // Try to resolve ModuleName in the current header search context and
3379   // verify that it is found in the same module map file as we saved. If the
3380   // top-level AST file is a main file, skip this check because there is no
3381   // usable header search context.
3382   assert(!F.ModuleName.empty() &&
3383          "MODULE_NAME should come before MODULE_MAP_FILE");
3384   if (F.Kind == MK_ImplicitModule &&
3385       (*ModuleMgr.begin())->Kind != MK_MainFile) {
3386     // An implicitly-loaded module file should have its module listed in some
3387     // module map file that we've already loaded.
3388     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3389     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3390     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3391     if (!ModMap) {
3392       assert(ImportedBy && "top-level import should be verified");
3393       if ((ClientLoadCapabilities & ARR_Missing) == 0)
3394         Diag(diag::err_imported_module_not_found) << F.ModuleName << F.FileName
3395                                                   << ImportedBy->FileName
3396                                                   << F.ModuleMapPath;
3397       return Missing;
3398     }
3399 
3400     assert(M->Name == F.ModuleName && "found module with different name");
3401 
3402     // Check the primary module map file.
3403     const FileEntry *StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3404     if (StoredModMap == nullptr || StoredModMap != ModMap) {
3405       assert(ModMap && "found module is missing module map file");
3406       assert(ImportedBy && "top-level import should be verified");
3407       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3408         Diag(diag::err_imported_module_modmap_changed)
3409           << F.ModuleName << ImportedBy->FileName
3410           << ModMap->getName() << F.ModuleMapPath;
3411       return OutOfDate;
3412     }
3413 
3414     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3415     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3416       // FIXME: we should use input files rather than storing names.
3417       std::string Filename = ReadPath(F, Record, Idx);
3418       const FileEntry *F =
3419           FileMgr.getFile(Filename, false, false);
3420       if (F == nullptr) {
3421         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3422           Error("could not find file '" + Filename +"' referenced by AST file");
3423         return OutOfDate;
3424       }
3425       AdditionalStoredMaps.insert(F);
3426     }
3427 
3428     // Check any additional module map files (e.g. module.private.modulemap)
3429     // that are not in the pcm.
3430     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3431       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3432         // Remove files that match
3433         // Note: SmallPtrSet::erase is really remove
3434         if (!AdditionalStoredMaps.erase(ModMap)) {
3435           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3436             Diag(diag::err_module_different_modmap)
3437               << F.ModuleName << /*new*/0 << ModMap->getName();
3438           return OutOfDate;
3439         }
3440       }
3441     }
3442 
3443     // Check any additional module map files that are in the pcm, but not
3444     // found in header search. Cases that match are already removed.
3445     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3446       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3447         Diag(diag::err_module_different_modmap)
3448           << F.ModuleName << /*not new*/1 << ModMap->getName();
3449       return OutOfDate;
3450     }
3451   }
3452 
3453   if (Listener)
3454     Listener->ReadModuleMapFile(F.ModuleMapPath);
3455   return Success;
3456 }
3457 
3458 
3459 /// \brief Move the given method to the back of the global list of methods.
3460 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3461   // Find the entry for this selector in the method pool.
3462   Sema::GlobalMethodPool::iterator Known
3463     = S.MethodPool.find(Method->getSelector());
3464   if (Known == S.MethodPool.end())
3465     return;
3466 
3467   // Retrieve the appropriate method list.
3468   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3469                                                     : Known->second.second;
3470   bool Found = false;
3471   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3472     if (!Found) {
3473       if (List->getMethod() == Method) {
3474         Found = true;
3475       } else {
3476         // Keep searching.
3477         continue;
3478       }
3479     }
3480 
3481     if (List->getNext())
3482       List->setMethod(List->getNext()->getMethod());
3483     else
3484       List->setMethod(Method);
3485   }
3486 }
3487 
3488 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner,
3489                                  bool FromFinalization) {
3490   // FIXME: Only do this if Owner->NameVisibility == AllVisible.
3491   for (Decl *D : Names.HiddenDecls) {
3492     bool wasHidden = D->Hidden;
3493     D->Hidden = false;
3494 
3495     if (wasHidden && SemaObj) {
3496       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
3497         moveMethodToBackOfGlobalList(*SemaObj, Method);
3498       }
3499     }
3500   }
3501 
3502   assert((FromFinalization || Owner->NameVisibility >= Module::MacrosVisible) &&
3503          "nothing to make visible?");
3504   for (const auto &Macro : Names.HiddenMacros) {
3505     if (FromFinalization)
3506       PP.appendMacroDirective(Macro.first,
3507                               Macro.second->import(PP, SourceLocation()));
3508     else
3509       installImportedMacro(Macro.first, Macro.second, Owner);
3510   }
3511 }
3512 
3513 void ASTReader::makeModuleVisible(Module *Mod,
3514                                   Module::NameVisibilityKind NameVisibility,
3515                                   SourceLocation ImportLoc,
3516                                   bool Complain) {
3517   llvm::SmallPtrSet<Module *, 4> Visited;
3518   SmallVector<Module *, 4> Stack;
3519   Stack.push_back(Mod);
3520   while (!Stack.empty()) {
3521     Mod = Stack.pop_back_val();
3522 
3523     if (NameVisibility <= Mod->NameVisibility) {
3524       // This module already has this level of visibility (or greater), so
3525       // there is nothing more to do.
3526       continue;
3527     }
3528 
3529     if (!Mod->isAvailable()) {
3530       // Modules that aren't available cannot be made visible.
3531       continue;
3532     }
3533 
3534     // Update the module's name visibility.
3535     if (NameVisibility >= Module::MacrosVisible &&
3536         Mod->NameVisibility < Module::MacrosVisible)
3537       Mod->MacroVisibilityLoc = ImportLoc;
3538     Mod->NameVisibility = NameVisibility;
3539 
3540     // If we've already deserialized any names from this module,
3541     // mark them as visible.
3542     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
3543     if (Hidden != HiddenNamesMap.end()) {
3544       auto HiddenNames = std::move(*Hidden);
3545       HiddenNamesMap.erase(Hidden);
3546       makeNamesVisible(HiddenNames.second, HiddenNames.first,
3547                        /*FromFinalization*/false);
3548       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
3549              "making names visible added hidden names");
3550     }
3551 
3552     // Push any exported modules onto the stack to be marked as visible.
3553     SmallVector<Module *, 16> Exports;
3554     Mod->getExportedModules(Exports);
3555     for (SmallVectorImpl<Module *>::iterator
3556            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
3557       Module *Exported = *I;
3558       if (Visited.insert(Exported).second)
3559         Stack.push_back(Exported);
3560     }
3561 
3562     // Detect any conflicts.
3563     if (Complain) {
3564       assert(ImportLoc.isValid() && "Missing import location");
3565       for (unsigned I = 0, N = Mod->Conflicts.size(); I != N; ++I) {
3566         if (Mod->Conflicts[I].Other->NameVisibility >= NameVisibility) {
3567           Diag(ImportLoc, diag::warn_module_conflict)
3568             << Mod->getFullModuleName()
3569             << Mod->Conflicts[I].Other->getFullModuleName()
3570             << Mod->Conflicts[I].Message;
3571           // FIXME: Need note where the other module was imported.
3572         }
3573       }
3574     }
3575   }
3576 }
3577 
3578 bool ASTReader::loadGlobalIndex() {
3579   if (GlobalIndex)
3580     return false;
3581 
3582   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
3583       !Context.getLangOpts().Modules)
3584     return true;
3585 
3586   // Try to load the global index.
3587   TriedLoadingGlobalIndex = true;
3588   StringRef ModuleCachePath
3589     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
3590   std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result
3591     = GlobalModuleIndex::readIndex(ModuleCachePath);
3592   if (!Result.first)
3593     return true;
3594 
3595   GlobalIndex.reset(Result.first);
3596   ModuleMgr.setGlobalIndex(GlobalIndex.get());
3597   return false;
3598 }
3599 
3600 bool ASTReader::isGlobalIndexUnavailable() const {
3601   return Context.getLangOpts().Modules && UseGlobalIndex &&
3602          !hasGlobalIndex() && TriedLoadingGlobalIndex;
3603 }
3604 
3605 static void updateModuleTimestamp(ModuleFile &MF) {
3606   // Overwrite the timestamp file contents so that file's mtime changes.
3607   std::string TimestampFilename = MF.getTimestampFilename();
3608   std::error_code EC;
3609   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::F_Text);
3610   if (EC)
3611     return;
3612   OS << "Timestamp file\n";
3613 }
3614 
3615 ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
3616                                             ModuleKind Type,
3617                                             SourceLocation ImportLoc,
3618                                             unsigned ClientLoadCapabilities) {
3619   llvm::SaveAndRestore<SourceLocation>
3620     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
3621 
3622   // Defer any pending actions until we get to the end of reading the AST file.
3623   Deserializing AnASTFile(this);
3624 
3625   // Bump the generation number.
3626   unsigned PreviousGeneration = incrementGeneration(Context);
3627 
3628   unsigned NumModules = ModuleMgr.size();
3629   SmallVector<ImportedModule, 4> Loaded;
3630   switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc,
3631                                                 /*ImportedBy=*/nullptr, Loaded,
3632                                                 0, 0, 0,
3633                                                 ClientLoadCapabilities)) {
3634   case Failure:
3635   case Missing:
3636   case OutOfDate:
3637   case VersionMismatch:
3638   case ConfigurationMismatch:
3639   case HadErrors: {
3640     llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet;
3641     for (const ImportedModule &IM : Loaded)
3642       LoadedSet.insert(IM.Mod);
3643 
3644     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end(),
3645                             LoadedSet,
3646                             Context.getLangOpts().Modules
3647                               ? &PP.getHeaderSearchInfo().getModuleMap()
3648                               : nullptr);
3649 
3650     // If we find that any modules are unusable, the global index is going
3651     // to be out-of-date. Just remove it.
3652     GlobalIndex.reset();
3653     ModuleMgr.setGlobalIndex(nullptr);
3654     return ReadResult;
3655   }
3656   case Success:
3657     break;
3658   }
3659 
3660   // Here comes stuff that we only do once the entire chain is loaded.
3661 
3662   // Load the AST blocks of all of the modules that we loaded.
3663   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3664                                               MEnd = Loaded.end();
3665        M != MEnd; ++M) {
3666     ModuleFile &F = *M->Mod;
3667 
3668     // Read the AST block.
3669     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
3670       return Result;
3671 
3672     // Once read, set the ModuleFile bit base offset and update the size in
3673     // bits of all files we've seen.
3674     F.GlobalBitOffset = TotalModulesSizeInBits;
3675     TotalModulesSizeInBits += F.SizeInBits;
3676     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
3677 
3678     // Preload SLocEntries.
3679     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
3680       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
3681       // Load it through the SourceManager and don't call ReadSLocEntry()
3682       // directly because the entry may have already been loaded in which case
3683       // calling ReadSLocEntry() directly would trigger an assertion in
3684       // SourceManager.
3685       SourceMgr.getLoadedSLocEntryByID(Index);
3686     }
3687   }
3688 
3689   // Setup the import locations and notify the module manager that we've
3690   // committed to these module files.
3691   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3692                                               MEnd = Loaded.end();
3693        M != MEnd; ++M) {
3694     ModuleFile &F = *M->Mod;
3695 
3696     ModuleMgr.moduleFileAccepted(&F);
3697 
3698     // Set the import location.
3699     F.DirectImportLoc = ImportLoc;
3700     if (!M->ImportedBy)
3701       F.ImportLoc = M->ImportLoc;
3702     else
3703       F.ImportLoc = ReadSourceLocation(*M->ImportedBy,
3704                                        M->ImportLoc.getRawEncoding());
3705   }
3706 
3707   // Mark all of the identifiers in the identifier table as being out of date,
3708   // so that various accessors know to check the loaded modules when the
3709   // identifier is used.
3710   for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
3711                               IdEnd = PP.getIdentifierTable().end();
3712        Id != IdEnd; ++Id)
3713     Id->second->setOutOfDate(true);
3714 
3715   // Resolve any unresolved module exports.
3716   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
3717     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
3718     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
3719     Module *ResolvedMod = getSubmodule(GlobalID);
3720 
3721     switch (Unresolved.Kind) {
3722     case UnresolvedModuleRef::Conflict:
3723       if (ResolvedMod) {
3724         Module::Conflict Conflict;
3725         Conflict.Other = ResolvedMod;
3726         Conflict.Message = Unresolved.String.str();
3727         Unresolved.Mod->Conflicts.push_back(Conflict);
3728       }
3729       continue;
3730 
3731     case UnresolvedModuleRef::Import:
3732       if (ResolvedMod)
3733         Unresolved.Mod->Imports.push_back(ResolvedMod);
3734       continue;
3735 
3736     case UnresolvedModuleRef::Export:
3737       if (ResolvedMod || Unresolved.IsWildcard)
3738         Unresolved.Mod->Exports.push_back(
3739           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
3740       continue;
3741     }
3742   }
3743   UnresolvedModuleRefs.clear();
3744 
3745   // FIXME: How do we load the 'use'd modules? They may not be submodules.
3746   // Might be unnecessary as use declarations are only used to build the
3747   // module itself.
3748 
3749   InitializeContext();
3750 
3751   if (SemaObj)
3752     UpdateSema();
3753 
3754   if (DeserializationListener)
3755     DeserializationListener->ReaderInitialized(this);
3756 
3757   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
3758   if (!PrimaryModule.OriginalSourceFileID.isInvalid()) {
3759     PrimaryModule.OriginalSourceFileID
3760       = FileID::get(PrimaryModule.SLocEntryBaseID
3761                     + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
3762 
3763     // If this AST file is a precompiled preamble, then set the
3764     // preamble file ID of the source manager to the file source file
3765     // from which the preamble was built.
3766     if (Type == MK_Preamble) {
3767       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
3768     } else if (Type == MK_MainFile) {
3769       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
3770     }
3771   }
3772 
3773   // For any Objective-C class definitions we have already loaded, make sure
3774   // that we load any additional categories.
3775   for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
3776     loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
3777                        ObjCClassesLoaded[I],
3778                        PreviousGeneration);
3779   }
3780 
3781   if (PP.getHeaderSearchInfo()
3782           .getHeaderSearchOpts()
3783           .ModulesValidateOncePerBuildSession) {
3784     // Now we are certain that the module and all modules it depends on are
3785     // up to date.  Create or update timestamp files for modules that are
3786     // located in the module cache (not for PCH files that could be anywhere
3787     // in the filesystem).
3788     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
3789       ImportedModule &M = Loaded[I];
3790       if (M.Mod->Kind == MK_ImplicitModule) {
3791         updateModuleTimestamp(*M.Mod);
3792       }
3793     }
3794   }
3795 
3796   return Success;
3797 }
3798 
3799 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile);
3800 
3801 ASTReader::ASTReadResult
3802 ASTReader::ReadASTCore(StringRef FileName,
3803                        ModuleKind Type,
3804                        SourceLocation ImportLoc,
3805                        ModuleFile *ImportedBy,
3806                        SmallVectorImpl<ImportedModule> &Loaded,
3807                        off_t ExpectedSize, time_t ExpectedModTime,
3808                        ASTFileSignature ExpectedSignature,
3809                        unsigned ClientLoadCapabilities) {
3810   ModuleFile *M;
3811   std::string ErrorStr;
3812   ModuleManager::AddModuleResult AddResult
3813     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
3814                           getGeneration(), ExpectedSize, ExpectedModTime,
3815                           ExpectedSignature, readASTFileSignature,
3816                           M, ErrorStr);
3817 
3818   switch (AddResult) {
3819   case ModuleManager::AlreadyLoaded:
3820     return Success;
3821 
3822   case ModuleManager::NewlyLoaded:
3823     // Load module file below.
3824     break;
3825 
3826   case ModuleManager::Missing:
3827     // The module file was missing; if the client can handle that, return
3828     // it.
3829     if (ClientLoadCapabilities & ARR_Missing)
3830       return Missing;
3831 
3832     // Otherwise, return an error.
3833     {
3834       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3835                       + ErrorStr;
3836       Error(Msg);
3837     }
3838     return Failure;
3839 
3840   case ModuleManager::OutOfDate:
3841     // We couldn't load the module file because it is out-of-date. If the
3842     // client can handle out-of-date, return it.
3843     if (ClientLoadCapabilities & ARR_OutOfDate)
3844       return OutOfDate;
3845 
3846     // Otherwise, return an error.
3847     {
3848       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3849                       + ErrorStr;
3850       Error(Msg);
3851     }
3852     return Failure;
3853   }
3854 
3855   assert(M && "Missing module file");
3856 
3857   // FIXME: This seems rather a hack. Should CurrentDir be part of the
3858   // module?
3859   if (FileName != "-") {
3860     CurrentDir = llvm::sys::path::parent_path(FileName);
3861     if (CurrentDir.empty()) CurrentDir = ".";
3862   }
3863 
3864   ModuleFile &F = *M;
3865   BitstreamCursor &Stream = F.Stream;
3866   Stream.init(&F.StreamFile);
3867   F.SizeInBits = F.Buffer->getBufferSize() * 8;
3868 
3869   // Sniff for the signature.
3870   if (Stream.Read(8) != 'C' ||
3871       Stream.Read(8) != 'P' ||
3872       Stream.Read(8) != 'C' ||
3873       Stream.Read(8) != 'H') {
3874     Diag(diag::err_not_a_pch_file) << FileName;
3875     return Failure;
3876   }
3877 
3878   // This is used for compatibility with older PCH formats.
3879   bool HaveReadControlBlock = false;
3880 
3881   while (1) {
3882     llvm::BitstreamEntry Entry = Stream.advance();
3883 
3884     switch (Entry.Kind) {
3885     case llvm::BitstreamEntry::Error:
3886     case llvm::BitstreamEntry::EndBlock:
3887     case llvm::BitstreamEntry::Record:
3888       Error("invalid record at top-level of AST file");
3889       return Failure;
3890 
3891     case llvm::BitstreamEntry::SubBlock:
3892       break;
3893     }
3894 
3895     // We only know the control subblock ID.
3896     switch (Entry.ID) {
3897     case llvm::bitc::BLOCKINFO_BLOCK_ID:
3898       if (Stream.ReadBlockInfoBlock()) {
3899         Error("malformed BlockInfoBlock in AST file");
3900         return Failure;
3901       }
3902       break;
3903     case CONTROL_BLOCK_ID:
3904       HaveReadControlBlock = true;
3905       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
3906       case Success:
3907         break;
3908 
3909       case Failure: return Failure;
3910       case Missing: return Missing;
3911       case OutOfDate: return OutOfDate;
3912       case VersionMismatch: return VersionMismatch;
3913       case ConfigurationMismatch: return ConfigurationMismatch;
3914       case HadErrors: return HadErrors;
3915       }
3916       break;
3917     case AST_BLOCK_ID:
3918       if (!HaveReadControlBlock) {
3919         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
3920           Diag(diag::err_pch_version_too_old);
3921         return VersionMismatch;
3922       }
3923 
3924       // Record that we've loaded this module.
3925       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
3926       return Success;
3927 
3928     default:
3929       if (Stream.SkipBlock()) {
3930         Error("malformed block record in AST file");
3931         return Failure;
3932       }
3933       break;
3934     }
3935   }
3936 
3937   return Success;
3938 }
3939 
3940 void ASTReader::InitializeContext() {
3941   // If there's a listener, notify them that we "read" the translation unit.
3942   if (DeserializationListener)
3943     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
3944                                       Context.getTranslationUnitDecl());
3945 
3946   // FIXME: Find a better way to deal with collisions between these
3947   // built-in types. Right now, we just ignore the problem.
3948 
3949   // Load the special types.
3950   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
3951     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
3952       if (!Context.CFConstantStringTypeDecl)
3953         Context.setCFConstantStringType(GetType(String));
3954     }
3955 
3956     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
3957       QualType FileType = GetType(File);
3958       if (FileType.isNull()) {
3959         Error("FILE type is NULL");
3960         return;
3961       }
3962 
3963       if (!Context.FILEDecl) {
3964         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
3965           Context.setFILEDecl(Typedef->getDecl());
3966         else {
3967           const TagType *Tag = FileType->getAs<TagType>();
3968           if (!Tag) {
3969             Error("Invalid FILE type in AST file");
3970             return;
3971           }
3972           Context.setFILEDecl(Tag->getDecl());
3973         }
3974       }
3975     }
3976 
3977     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
3978       QualType Jmp_bufType = GetType(Jmp_buf);
3979       if (Jmp_bufType.isNull()) {
3980         Error("jmp_buf type is NULL");
3981         return;
3982       }
3983 
3984       if (!Context.jmp_bufDecl) {
3985         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
3986           Context.setjmp_bufDecl(Typedef->getDecl());
3987         else {
3988           const TagType *Tag = Jmp_bufType->getAs<TagType>();
3989           if (!Tag) {
3990             Error("Invalid jmp_buf type in AST file");
3991             return;
3992           }
3993           Context.setjmp_bufDecl(Tag->getDecl());
3994         }
3995       }
3996     }
3997 
3998     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
3999       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4000       if (Sigjmp_bufType.isNull()) {
4001         Error("sigjmp_buf type is NULL");
4002         return;
4003       }
4004 
4005       if (!Context.sigjmp_bufDecl) {
4006         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4007           Context.setsigjmp_bufDecl(Typedef->getDecl());
4008         else {
4009           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4010           assert(Tag && "Invalid sigjmp_buf type in AST file");
4011           Context.setsigjmp_bufDecl(Tag->getDecl());
4012         }
4013       }
4014     }
4015 
4016     if (unsigned ObjCIdRedef
4017           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4018       if (Context.ObjCIdRedefinitionType.isNull())
4019         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4020     }
4021 
4022     if (unsigned ObjCClassRedef
4023           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4024       if (Context.ObjCClassRedefinitionType.isNull())
4025         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4026     }
4027 
4028     if (unsigned ObjCSelRedef
4029           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4030       if (Context.ObjCSelRedefinitionType.isNull())
4031         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4032     }
4033 
4034     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4035       QualType Ucontext_tType = GetType(Ucontext_t);
4036       if (Ucontext_tType.isNull()) {
4037         Error("ucontext_t type is NULL");
4038         return;
4039       }
4040 
4041       if (!Context.ucontext_tDecl) {
4042         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4043           Context.setucontext_tDecl(Typedef->getDecl());
4044         else {
4045           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4046           assert(Tag && "Invalid ucontext_t type in AST file");
4047           Context.setucontext_tDecl(Tag->getDecl());
4048         }
4049       }
4050     }
4051   }
4052 
4053   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4054 
4055   // If there were any CUDA special declarations, deserialize them.
4056   if (!CUDASpecialDeclRefs.empty()) {
4057     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4058     Context.setcudaConfigureCallDecl(
4059                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4060   }
4061 
4062   // Re-export any modules that were imported by a non-module AST file.
4063   // FIXME: This does not make macro-only imports visible again. It also doesn't
4064   // make #includes mapped to module imports visible.
4065   for (auto &Import : ImportedModules) {
4066     if (Module *Imported = getSubmodule(Import.ID))
4067       makeModuleVisible(Imported, Module::AllVisible,
4068                         /*ImportLoc=*/Import.ImportLoc,
4069                         /*Complain=*/false);
4070   }
4071   ImportedModules.clear();
4072 }
4073 
4074 void ASTReader::finalizeForWriting() {
4075   while (!HiddenNamesMap.empty()) {
4076     auto HiddenNames = std::move(*HiddenNamesMap.begin());
4077     HiddenNamesMap.erase(HiddenNamesMap.begin());
4078     makeNamesVisible(HiddenNames.second, HiddenNames.first,
4079                      /*FromFinalization*/true);
4080   }
4081 }
4082 
4083 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the
4084 /// cursor into the start of the given block ID, returning false on success and
4085 /// true on failure.
4086 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4087   while (1) {
4088     llvm::BitstreamEntry Entry = Cursor.advance();
4089     switch (Entry.Kind) {
4090     case llvm::BitstreamEntry::Error:
4091     case llvm::BitstreamEntry::EndBlock:
4092       return true;
4093 
4094     case llvm::BitstreamEntry::Record:
4095       // Ignore top-level records.
4096       Cursor.skipRecord(Entry.ID);
4097       break;
4098 
4099     case llvm::BitstreamEntry::SubBlock:
4100       if (Entry.ID == BlockID) {
4101         if (Cursor.EnterSubBlock(BlockID))
4102           return true;
4103         // Found it!
4104         return false;
4105       }
4106 
4107       if (Cursor.SkipBlock())
4108         return true;
4109     }
4110   }
4111 }
4112 
4113 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile){
4114   BitstreamCursor Stream(StreamFile);
4115   if (Stream.Read(8) != 'C' ||
4116       Stream.Read(8) != 'P' ||
4117       Stream.Read(8) != 'C' ||
4118       Stream.Read(8) != 'H') {
4119     return 0;
4120   }
4121 
4122   // Scan for the CONTROL_BLOCK_ID block.
4123   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4124     return 0;
4125 
4126   // Scan for SIGNATURE inside the control block.
4127   ASTReader::RecordData Record;
4128   while (1) {
4129     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4130     if (Entry.Kind == llvm::BitstreamEntry::EndBlock ||
4131         Entry.Kind != llvm::BitstreamEntry::Record)
4132       return 0;
4133 
4134     Record.clear();
4135     StringRef Blob;
4136     if (SIGNATURE == Stream.readRecord(Entry.ID, Record, &Blob))
4137       return Record[0];
4138   }
4139 }
4140 
4141 /// \brief Retrieve the name of the original source file name
4142 /// directly from the AST file, without actually loading the AST
4143 /// file.
4144 std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
4145                                              FileManager &FileMgr,
4146                                              DiagnosticsEngine &Diags) {
4147   // Open the AST file.
4148   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
4149   if (!Buffer) {
4150     Diags.Report(diag::err_fe_unable_to_read_pch_file)
4151         << ASTFileName << Buffer.getError().message();
4152     return std::string();
4153   }
4154 
4155   // Initialize the stream
4156   llvm::BitstreamReader StreamFile;
4157   StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(),
4158                   (const unsigned char *)(*Buffer)->getBufferEnd());
4159   BitstreamCursor Stream(StreamFile);
4160 
4161   // Sniff for the signature.
4162   if (Stream.Read(8) != 'C' ||
4163       Stream.Read(8) != 'P' ||
4164       Stream.Read(8) != 'C' ||
4165       Stream.Read(8) != 'H') {
4166     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
4167     return std::string();
4168   }
4169 
4170   // Scan for the CONTROL_BLOCK_ID block.
4171   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
4172     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4173     return std::string();
4174   }
4175 
4176   // Scan for ORIGINAL_FILE inside the control block.
4177   RecordData Record;
4178   while (1) {
4179     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4180     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4181       return std::string();
4182 
4183     if (Entry.Kind != llvm::BitstreamEntry::Record) {
4184       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4185       return std::string();
4186     }
4187 
4188     Record.clear();
4189     StringRef Blob;
4190     if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE)
4191       return Blob.str();
4192   }
4193 }
4194 
4195 namespace {
4196   class SimplePCHValidator : public ASTReaderListener {
4197     const LangOptions &ExistingLangOpts;
4198     const TargetOptions &ExistingTargetOpts;
4199     const PreprocessorOptions &ExistingPPOpts;
4200     std::string ExistingModuleCachePath;
4201     FileManager &FileMgr;
4202 
4203   public:
4204     SimplePCHValidator(const LangOptions &ExistingLangOpts,
4205                        const TargetOptions &ExistingTargetOpts,
4206                        const PreprocessorOptions &ExistingPPOpts,
4207                        StringRef ExistingModuleCachePath,
4208                        FileManager &FileMgr)
4209       : ExistingLangOpts(ExistingLangOpts),
4210         ExistingTargetOpts(ExistingTargetOpts),
4211         ExistingPPOpts(ExistingPPOpts),
4212         ExistingModuleCachePath(ExistingModuleCachePath),
4213         FileMgr(FileMgr)
4214     {
4215     }
4216 
4217     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
4218                              bool AllowCompatibleDifferences) override {
4219       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
4220                                   AllowCompatibleDifferences);
4221     }
4222     bool ReadTargetOptions(const TargetOptions &TargetOpts,
4223                            bool Complain) override {
4224       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr);
4225     }
4226     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
4227                                  StringRef SpecificModuleCachePath,
4228                                  bool Complain) override {
4229       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4230                                       ExistingModuleCachePath,
4231                                       nullptr, ExistingLangOpts);
4232     }
4233     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
4234                                  bool Complain,
4235                                  std::string &SuggestedPredefines) override {
4236       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
4237                                       SuggestedPredefines, ExistingLangOpts);
4238     }
4239   };
4240 }
4241 
4242 bool ASTReader::readASTFileControlBlock(StringRef Filename,
4243                                         FileManager &FileMgr,
4244                                         ASTReaderListener &Listener) {
4245   // Open the AST file.
4246   auto Buffer = FileMgr.getBufferForFile(Filename);
4247   if (!Buffer) {
4248     return true;
4249   }
4250 
4251   // Initialize the stream
4252   llvm::BitstreamReader StreamFile;
4253   StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(),
4254                   (const unsigned char *)(*Buffer)->getBufferEnd());
4255   BitstreamCursor Stream(StreamFile);
4256 
4257   // Sniff for the signature.
4258   if (Stream.Read(8) != 'C' ||
4259       Stream.Read(8) != 'P' ||
4260       Stream.Read(8) != 'C' ||
4261       Stream.Read(8) != 'H') {
4262     return true;
4263   }
4264 
4265   // Scan for the CONTROL_BLOCK_ID block.
4266   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4267     return true;
4268 
4269   bool NeedsInputFiles = Listener.needsInputFileVisitation();
4270   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
4271   bool NeedsImports = Listener.needsImportVisitation();
4272   BitstreamCursor InputFilesCursor;
4273   if (NeedsInputFiles) {
4274     InputFilesCursor = Stream;
4275     if (SkipCursorToBlock(InputFilesCursor, INPUT_FILES_BLOCK_ID))
4276       return true;
4277 
4278     // Read the abbreviations
4279     while (true) {
4280       uint64_t Offset = InputFilesCursor.GetCurrentBitNo();
4281       unsigned Code = InputFilesCursor.ReadCode();
4282 
4283       // We expect all abbrevs to be at the start of the block.
4284       if (Code != llvm::bitc::DEFINE_ABBREV) {
4285         InputFilesCursor.JumpToBit(Offset);
4286         break;
4287       }
4288       InputFilesCursor.ReadAbbrevRecord();
4289     }
4290   }
4291 
4292   // Scan for ORIGINAL_FILE inside the control block.
4293   RecordData Record;
4294   std::string ModuleDir;
4295   while (1) {
4296     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4297     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4298       return false;
4299 
4300     if (Entry.Kind != llvm::BitstreamEntry::Record)
4301       return true;
4302 
4303     Record.clear();
4304     StringRef Blob;
4305     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4306     switch ((ControlRecordTypes)RecCode) {
4307     case METADATA: {
4308       if (Record[0] != VERSION_MAJOR)
4309         return true;
4310 
4311       if (Listener.ReadFullVersionInformation(Blob))
4312         return true;
4313 
4314       break;
4315     }
4316     case MODULE_NAME:
4317       Listener.ReadModuleName(Blob);
4318       break;
4319     case MODULE_DIRECTORY:
4320       ModuleDir = Blob;
4321       break;
4322     case MODULE_MAP_FILE: {
4323       unsigned Idx = 0;
4324       auto Path = ReadString(Record, Idx);
4325       ResolveImportedPath(Path, ModuleDir);
4326       Listener.ReadModuleMapFile(Path);
4327       break;
4328     }
4329     case LANGUAGE_OPTIONS:
4330       if (ParseLanguageOptions(Record, false, Listener,
4331                                /*AllowCompatibleConfigurationMismatch*/false))
4332         return true;
4333       break;
4334 
4335     case TARGET_OPTIONS:
4336       if (ParseTargetOptions(Record, false, Listener))
4337         return true;
4338       break;
4339 
4340     case DIAGNOSTIC_OPTIONS:
4341       if (ParseDiagnosticOptions(Record, false, Listener))
4342         return true;
4343       break;
4344 
4345     case FILE_SYSTEM_OPTIONS:
4346       if (ParseFileSystemOptions(Record, false, Listener))
4347         return true;
4348       break;
4349 
4350     case HEADER_SEARCH_OPTIONS:
4351       if (ParseHeaderSearchOptions(Record, false, Listener))
4352         return true;
4353       break;
4354 
4355     case PREPROCESSOR_OPTIONS: {
4356       std::string IgnoredSuggestedPredefines;
4357       if (ParsePreprocessorOptions(Record, false, Listener,
4358                                    IgnoredSuggestedPredefines))
4359         return true;
4360       break;
4361     }
4362 
4363     case INPUT_FILE_OFFSETS: {
4364       if (!NeedsInputFiles)
4365         break;
4366 
4367       unsigned NumInputFiles = Record[0];
4368       unsigned NumUserFiles = Record[1];
4369       const uint64_t *InputFileOffs = (const uint64_t *)Blob.data();
4370       for (unsigned I = 0; I != NumInputFiles; ++I) {
4371         // Go find this input file.
4372         bool isSystemFile = I >= NumUserFiles;
4373 
4374         if (isSystemFile && !NeedsSystemInputFiles)
4375           break; // the rest are system input files
4376 
4377         BitstreamCursor &Cursor = InputFilesCursor;
4378         SavedStreamPosition SavedPosition(Cursor);
4379         Cursor.JumpToBit(InputFileOffs[I]);
4380 
4381         unsigned Code = Cursor.ReadCode();
4382         RecordData Record;
4383         StringRef Blob;
4384         bool shouldContinue = false;
4385         switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) {
4386         case INPUT_FILE:
4387           bool Overridden = static_cast<bool>(Record[3]);
4388           std::string Filename = Blob;
4389           ResolveImportedPath(Filename, ModuleDir);
4390           shouldContinue =
4391               Listener.visitInputFile(Filename, isSystemFile, Overridden);
4392           break;
4393         }
4394         if (!shouldContinue)
4395           break;
4396       }
4397       break;
4398     }
4399 
4400     case IMPORTS: {
4401       if (!NeedsImports)
4402         break;
4403 
4404       unsigned Idx = 0, N = Record.size();
4405       while (Idx < N) {
4406         // Read information about the AST file.
4407         Idx += 5; // ImportLoc, Size, ModTime, Signature
4408         std::string Filename = ReadString(Record, Idx);
4409         ResolveImportedPath(Filename, ModuleDir);
4410         Listener.visitImport(Filename);
4411       }
4412       break;
4413     }
4414 
4415     default:
4416       // No other validation to perform.
4417       break;
4418     }
4419   }
4420 }
4421 
4422 
4423 bool ASTReader::isAcceptableASTFile(StringRef Filename,
4424                                     FileManager &FileMgr,
4425                                     const LangOptions &LangOpts,
4426                                     const TargetOptions &TargetOpts,
4427                                     const PreprocessorOptions &PPOpts,
4428                                     std::string ExistingModuleCachePath) {
4429   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
4430                                ExistingModuleCachePath, FileMgr);
4431   return !readASTFileControlBlock(Filename, FileMgr, validator);
4432 }
4433 
4434 ASTReader::ASTReadResult
4435 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
4436   // Enter the submodule block.
4437   if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
4438     Error("malformed submodule block record in AST file");
4439     return Failure;
4440   }
4441 
4442   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
4443   bool First = true;
4444   Module *CurrentModule = nullptr;
4445   RecordData Record;
4446   while (true) {
4447     llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks();
4448 
4449     switch (Entry.Kind) {
4450     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
4451     case llvm::BitstreamEntry::Error:
4452       Error("malformed block record in AST file");
4453       return Failure;
4454     case llvm::BitstreamEntry::EndBlock:
4455       return Success;
4456     case llvm::BitstreamEntry::Record:
4457       // The interesting case.
4458       break;
4459     }
4460 
4461     // Read a record.
4462     StringRef Blob;
4463     Record.clear();
4464     auto Kind = F.Stream.readRecord(Entry.ID, Record, &Blob);
4465 
4466     if ((Kind == SUBMODULE_METADATA) != First) {
4467       Error("submodule metadata record should be at beginning of block");
4468       return Failure;
4469     }
4470     First = false;
4471 
4472     // Submodule information is only valid if we have a current module.
4473     // FIXME: Should we error on these cases?
4474     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
4475         Kind != SUBMODULE_DEFINITION)
4476       continue;
4477 
4478     switch (Kind) {
4479     default:  // Default behavior: ignore.
4480       break;
4481 
4482     case SUBMODULE_DEFINITION: {
4483       if (Record.size() < 8) {
4484         Error("malformed module definition");
4485         return Failure;
4486       }
4487 
4488       StringRef Name = Blob;
4489       unsigned Idx = 0;
4490       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
4491       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
4492       bool IsFramework = Record[Idx++];
4493       bool IsExplicit = Record[Idx++];
4494       bool IsSystem = Record[Idx++];
4495       bool IsExternC = Record[Idx++];
4496       bool InferSubmodules = Record[Idx++];
4497       bool InferExplicitSubmodules = Record[Idx++];
4498       bool InferExportWildcard = Record[Idx++];
4499       bool ConfigMacrosExhaustive = Record[Idx++];
4500 
4501       Module *ParentModule = nullptr;
4502       if (Parent)
4503         ParentModule = getSubmodule(Parent);
4504 
4505       // Retrieve this (sub)module from the module map, creating it if
4506       // necessary.
4507       CurrentModule = ModMap.findOrCreateModule(Name, ParentModule, IsFramework,
4508                                                 IsExplicit).first;
4509 
4510       // FIXME: set the definition loc for CurrentModule, or call
4511       // ModMap.setInferredModuleAllowedBy()
4512 
4513       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
4514       if (GlobalIndex >= SubmodulesLoaded.size() ||
4515           SubmodulesLoaded[GlobalIndex]) {
4516         Error("too many submodules");
4517         return Failure;
4518       }
4519 
4520       if (!ParentModule) {
4521         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
4522           if (CurFile != F.File) {
4523             if (!Diags.isDiagnosticInFlight()) {
4524               Diag(diag::err_module_file_conflict)
4525                 << CurrentModule->getTopLevelModuleName()
4526                 << CurFile->getName()
4527                 << F.File->getName();
4528             }
4529             return Failure;
4530           }
4531         }
4532 
4533         CurrentModule->setASTFile(F.File);
4534       }
4535 
4536       CurrentModule->IsFromModuleFile = true;
4537       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
4538       CurrentModule->IsExternC = IsExternC;
4539       CurrentModule->InferSubmodules = InferSubmodules;
4540       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
4541       CurrentModule->InferExportWildcard = InferExportWildcard;
4542       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
4543       if (DeserializationListener)
4544         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
4545 
4546       SubmodulesLoaded[GlobalIndex] = CurrentModule;
4547 
4548       // Clear out data that will be replaced by what is the module file.
4549       CurrentModule->LinkLibraries.clear();
4550       CurrentModule->ConfigMacros.clear();
4551       CurrentModule->UnresolvedConflicts.clear();
4552       CurrentModule->Conflicts.clear();
4553       break;
4554     }
4555 
4556     case SUBMODULE_UMBRELLA_HEADER: {
4557       if (const FileEntry *Umbrella = PP.getFileManager().getFile(Blob)) {
4558         if (!CurrentModule->getUmbrellaHeader())
4559           ModMap.setUmbrellaHeader(CurrentModule, Umbrella);
4560         else if (CurrentModule->getUmbrellaHeader() != Umbrella) {
4561           // This can be a spurious difference caused by changing the VFS to
4562           // point to a different copy of the file, and it is too late to
4563           // to rebuild safely.
4564           // FIXME: If we wrote the virtual paths instead of the 'real' paths,
4565           // after input file validation only real problems would remain and we
4566           // could just error. For now, assume it's okay.
4567           break;
4568         }
4569       }
4570       break;
4571     }
4572 
4573     case SUBMODULE_HEADER:
4574     case SUBMODULE_EXCLUDED_HEADER:
4575     case SUBMODULE_PRIVATE_HEADER:
4576       // We lazily associate headers with their modules via the HeaderInfo table.
4577       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4578       // of complete filenames or remove it entirely.
4579       break;
4580 
4581     case SUBMODULE_TEXTUAL_HEADER:
4582     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
4583       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
4584       // them here.
4585       break;
4586 
4587     case SUBMODULE_TOPHEADER: {
4588       CurrentModule->addTopHeaderFilename(Blob);
4589       break;
4590     }
4591 
4592     case SUBMODULE_UMBRELLA_DIR: {
4593       if (const DirectoryEntry *Umbrella
4594                                   = PP.getFileManager().getDirectory(Blob)) {
4595         if (!CurrentModule->getUmbrellaDir())
4596           ModMap.setUmbrellaDir(CurrentModule, Umbrella);
4597         else if (CurrentModule->getUmbrellaDir() != Umbrella) {
4598           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4599             Error("mismatched umbrella directories in submodule");
4600           return OutOfDate;
4601         }
4602       }
4603       break;
4604     }
4605 
4606     case SUBMODULE_METADATA: {
4607       F.BaseSubmoduleID = getTotalNumSubmodules();
4608       F.LocalNumSubmodules = Record[0];
4609       unsigned LocalBaseSubmoduleID = Record[1];
4610       if (F.LocalNumSubmodules > 0) {
4611         // Introduce the global -> local mapping for submodules within this
4612         // module.
4613         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
4614 
4615         // Introduce the local -> global mapping for submodules within this
4616         // module.
4617         F.SubmoduleRemap.insertOrReplace(
4618           std::make_pair(LocalBaseSubmoduleID,
4619                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
4620 
4621         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
4622       }
4623       break;
4624     }
4625 
4626     case SUBMODULE_IMPORTS: {
4627       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
4628         UnresolvedModuleRef Unresolved;
4629         Unresolved.File = &F;
4630         Unresolved.Mod = CurrentModule;
4631         Unresolved.ID = Record[Idx];
4632         Unresolved.Kind = UnresolvedModuleRef::Import;
4633         Unresolved.IsWildcard = false;
4634         UnresolvedModuleRefs.push_back(Unresolved);
4635       }
4636       break;
4637     }
4638 
4639     case SUBMODULE_EXPORTS: {
4640       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
4641         UnresolvedModuleRef Unresolved;
4642         Unresolved.File = &F;
4643         Unresolved.Mod = CurrentModule;
4644         Unresolved.ID = Record[Idx];
4645         Unresolved.Kind = UnresolvedModuleRef::Export;
4646         Unresolved.IsWildcard = Record[Idx + 1];
4647         UnresolvedModuleRefs.push_back(Unresolved);
4648       }
4649 
4650       // Once we've loaded the set of exports, there's no reason to keep
4651       // the parsed, unresolved exports around.
4652       CurrentModule->UnresolvedExports.clear();
4653       break;
4654     }
4655     case SUBMODULE_REQUIRES: {
4656       CurrentModule->addRequirement(Blob, Record[0], Context.getLangOpts(),
4657                                     Context.getTargetInfo());
4658       break;
4659     }
4660 
4661     case SUBMODULE_LINK_LIBRARY:
4662       CurrentModule->LinkLibraries.push_back(
4663                                          Module::LinkLibrary(Blob, Record[0]));
4664       break;
4665 
4666     case SUBMODULE_CONFIG_MACRO:
4667       CurrentModule->ConfigMacros.push_back(Blob.str());
4668       break;
4669 
4670     case SUBMODULE_CONFLICT: {
4671       UnresolvedModuleRef Unresolved;
4672       Unresolved.File = &F;
4673       Unresolved.Mod = CurrentModule;
4674       Unresolved.ID = Record[0];
4675       Unresolved.Kind = UnresolvedModuleRef::Conflict;
4676       Unresolved.IsWildcard = false;
4677       Unresolved.String = Blob;
4678       UnresolvedModuleRefs.push_back(Unresolved);
4679       break;
4680     }
4681     }
4682   }
4683 }
4684 
4685 /// \brief Parse the record that corresponds to a LangOptions data
4686 /// structure.
4687 ///
4688 /// This routine parses the language options from the AST file and then gives
4689 /// them to the AST listener if one is set.
4690 ///
4691 /// \returns true if the listener deems the file unacceptable, false otherwise.
4692 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
4693                                      bool Complain,
4694                                      ASTReaderListener &Listener,
4695                                      bool AllowCompatibleDifferences) {
4696   LangOptions LangOpts;
4697   unsigned Idx = 0;
4698 #define LANGOPT(Name, Bits, Default, Description) \
4699   LangOpts.Name = Record[Idx++];
4700 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
4701   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
4702 #include "clang/Basic/LangOptions.def"
4703 #define SANITIZER(NAME, ID)                                                    \
4704   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
4705 #include "clang/Basic/Sanitizers.def"
4706 
4707   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
4708   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
4709   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
4710 
4711   unsigned Length = Record[Idx++];
4712   LangOpts.CurrentModule.assign(Record.begin() + Idx,
4713                                 Record.begin() + Idx + Length);
4714 
4715   Idx += Length;
4716 
4717   // Comment options.
4718   for (unsigned N = Record[Idx++]; N; --N) {
4719     LangOpts.CommentOpts.BlockCommandNames.push_back(
4720       ReadString(Record, Idx));
4721   }
4722   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
4723 
4724   return Listener.ReadLanguageOptions(LangOpts, Complain,
4725                                       AllowCompatibleDifferences);
4726 }
4727 
4728 bool ASTReader::ParseTargetOptions(const RecordData &Record,
4729                                    bool Complain,
4730                                    ASTReaderListener &Listener) {
4731   unsigned Idx = 0;
4732   TargetOptions TargetOpts;
4733   TargetOpts.Triple = ReadString(Record, Idx);
4734   TargetOpts.CPU = ReadString(Record, Idx);
4735   TargetOpts.ABI = ReadString(Record, Idx);
4736   for (unsigned N = Record[Idx++]; N; --N) {
4737     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
4738   }
4739   for (unsigned N = Record[Idx++]; N; --N) {
4740     TargetOpts.Features.push_back(ReadString(Record, Idx));
4741   }
4742 
4743   return Listener.ReadTargetOptions(TargetOpts, Complain);
4744 }
4745 
4746 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
4747                                        ASTReaderListener &Listener) {
4748   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
4749   unsigned Idx = 0;
4750 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
4751 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
4752   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
4753 #include "clang/Basic/DiagnosticOptions.def"
4754 
4755   for (unsigned N = Record[Idx++]; N; --N)
4756     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
4757   for (unsigned N = Record[Idx++]; N; --N)
4758     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
4759 
4760   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
4761 }
4762 
4763 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
4764                                        ASTReaderListener &Listener) {
4765   FileSystemOptions FSOpts;
4766   unsigned Idx = 0;
4767   FSOpts.WorkingDir = ReadString(Record, Idx);
4768   return Listener.ReadFileSystemOptions(FSOpts, Complain);
4769 }
4770 
4771 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
4772                                          bool Complain,
4773                                          ASTReaderListener &Listener) {
4774   HeaderSearchOptions HSOpts;
4775   unsigned Idx = 0;
4776   HSOpts.Sysroot = ReadString(Record, Idx);
4777 
4778   // Include entries.
4779   for (unsigned N = Record[Idx++]; N; --N) {
4780     std::string Path = ReadString(Record, Idx);
4781     frontend::IncludeDirGroup Group
4782       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
4783     bool IsFramework = Record[Idx++];
4784     bool IgnoreSysRoot = Record[Idx++];
4785     HSOpts.UserEntries.push_back(
4786       HeaderSearchOptions::Entry(Path, Group, IsFramework, IgnoreSysRoot));
4787   }
4788 
4789   // System header prefixes.
4790   for (unsigned N = Record[Idx++]; N; --N) {
4791     std::string Prefix = ReadString(Record, Idx);
4792     bool IsSystemHeader = Record[Idx++];
4793     HSOpts.SystemHeaderPrefixes.push_back(
4794       HeaderSearchOptions::SystemHeaderPrefix(Prefix, IsSystemHeader));
4795   }
4796 
4797   HSOpts.ResourceDir = ReadString(Record, Idx);
4798   HSOpts.ModuleCachePath = ReadString(Record, Idx);
4799   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
4800   HSOpts.DisableModuleHash = Record[Idx++];
4801   HSOpts.UseBuiltinIncludes = Record[Idx++];
4802   HSOpts.UseStandardSystemIncludes = Record[Idx++];
4803   HSOpts.UseStandardCXXIncludes = Record[Idx++];
4804   HSOpts.UseLibcxx = Record[Idx++];
4805   std::string SpecificModuleCachePath = ReadString(Record, Idx);
4806 
4807   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4808                                           Complain);
4809 }
4810 
4811 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
4812                                          bool Complain,
4813                                          ASTReaderListener &Listener,
4814                                          std::string &SuggestedPredefines) {
4815   PreprocessorOptions PPOpts;
4816   unsigned Idx = 0;
4817 
4818   // Macro definitions/undefs
4819   for (unsigned N = Record[Idx++]; N; --N) {
4820     std::string Macro = ReadString(Record, Idx);
4821     bool IsUndef = Record[Idx++];
4822     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
4823   }
4824 
4825   // Includes
4826   for (unsigned N = Record[Idx++]; N; --N) {
4827     PPOpts.Includes.push_back(ReadString(Record, Idx));
4828   }
4829 
4830   // Macro Includes
4831   for (unsigned N = Record[Idx++]; N; --N) {
4832     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
4833   }
4834 
4835   PPOpts.UsePredefines = Record[Idx++];
4836   PPOpts.DetailedRecord = Record[Idx++];
4837   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
4838   PPOpts.ImplicitPTHInclude = ReadString(Record, Idx);
4839   PPOpts.ObjCXXARCStandardLibrary =
4840     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
4841   SuggestedPredefines.clear();
4842   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
4843                                           SuggestedPredefines);
4844 }
4845 
4846 std::pair<ModuleFile *, unsigned>
4847 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
4848   GlobalPreprocessedEntityMapType::iterator
4849   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
4850   assert(I != GlobalPreprocessedEntityMap.end() &&
4851          "Corrupted global preprocessed entity map");
4852   ModuleFile *M = I->second;
4853   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
4854   return std::make_pair(M, LocalIndex);
4855 }
4856 
4857 llvm::iterator_range<PreprocessingRecord::iterator>
4858 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
4859   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
4860     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
4861                                              Mod.NumPreprocessedEntities);
4862 
4863   return llvm::make_range(PreprocessingRecord::iterator(),
4864                           PreprocessingRecord::iterator());
4865 }
4866 
4867 llvm::iterator_range<ASTReader::ModuleDeclIterator>
4868 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
4869   return llvm::make_range(
4870       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
4871       ModuleDeclIterator(this, &Mod,
4872                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
4873 }
4874 
4875 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
4876   PreprocessedEntityID PPID = Index+1;
4877   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
4878   ModuleFile &M = *PPInfo.first;
4879   unsigned LocalIndex = PPInfo.second;
4880   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
4881 
4882   if (!PP.getPreprocessingRecord()) {
4883     Error("no preprocessing record");
4884     return nullptr;
4885   }
4886 
4887   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
4888   M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
4889 
4890   llvm::BitstreamEntry Entry =
4891     M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
4892   if (Entry.Kind != llvm::BitstreamEntry::Record)
4893     return nullptr;
4894 
4895   // Read the record.
4896   SourceRange Range(ReadSourceLocation(M, PPOffs.Begin),
4897                     ReadSourceLocation(M, PPOffs.End));
4898   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
4899   StringRef Blob;
4900   RecordData Record;
4901   PreprocessorDetailRecordTypes RecType =
4902     (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord(
4903                                           Entry.ID, Record, &Blob);
4904   switch (RecType) {
4905   case PPD_MACRO_EXPANSION: {
4906     bool isBuiltin = Record[0];
4907     IdentifierInfo *Name = nullptr;
4908     MacroDefinition *Def = nullptr;
4909     if (isBuiltin)
4910       Name = getLocalIdentifier(M, Record[1]);
4911     else {
4912       PreprocessedEntityID
4913           GlobalID = getGlobalPreprocessedEntityID(M, Record[1]);
4914       Def =cast<MacroDefinition>(PPRec.getLoadedPreprocessedEntity(GlobalID-1));
4915     }
4916 
4917     MacroExpansion *ME;
4918     if (isBuiltin)
4919       ME = new (PPRec) MacroExpansion(Name, Range);
4920     else
4921       ME = new (PPRec) MacroExpansion(Def, Range);
4922 
4923     return ME;
4924   }
4925 
4926   case PPD_MACRO_DEFINITION: {
4927     // Decode the identifier info and then check again; if the macro is
4928     // still defined and associated with the identifier,
4929     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
4930     MacroDefinition *MD
4931       = new (PPRec) MacroDefinition(II, Range);
4932 
4933     if (DeserializationListener)
4934       DeserializationListener->MacroDefinitionRead(PPID, MD);
4935 
4936     return MD;
4937   }
4938 
4939   case PPD_INCLUSION_DIRECTIVE: {
4940     const char *FullFileNameStart = Blob.data() + Record[0];
4941     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
4942     const FileEntry *File = nullptr;
4943     if (!FullFileName.empty())
4944       File = PP.getFileManager().getFile(FullFileName);
4945 
4946     // FIXME: Stable encoding
4947     InclusionDirective::InclusionKind Kind
4948       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
4949     InclusionDirective *ID
4950       = new (PPRec) InclusionDirective(PPRec, Kind,
4951                                        StringRef(Blob.data(), Record[0]),
4952                                        Record[1], Record[3],
4953                                        File,
4954                                        Range);
4955     return ID;
4956   }
4957   }
4958 
4959   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
4960 }
4961 
4962 /// \brief \arg SLocMapI points at a chunk of a module that contains no
4963 /// preprocessed entities or the entities it contains are not the ones we are
4964 /// looking for. Find the next module that contains entities and return the ID
4965 /// of the first entry.
4966 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
4967                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
4968   ++SLocMapI;
4969   for (GlobalSLocOffsetMapType::const_iterator
4970          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
4971     ModuleFile &M = *SLocMapI->second;
4972     if (M.NumPreprocessedEntities)
4973       return M.BasePreprocessedEntityID;
4974   }
4975 
4976   return getTotalNumPreprocessedEntities();
4977 }
4978 
4979 namespace {
4980 
4981 template <unsigned PPEntityOffset::*PPLoc>
4982 struct PPEntityComp {
4983   const ASTReader &Reader;
4984   ModuleFile &M;
4985 
4986   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
4987 
4988   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
4989     SourceLocation LHS = getLoc(L);
4990     SourceLocation RHS = getLoc(R);
4991     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4992   }
4993 
4994   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
4995     SourceLocation LHS = getLoc(L);
4996     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4997   }
4998 
4999   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
5000     SourceLocation RHS = getLoc(R);
5001     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5002   }
5003 
5004   SourceLocation getLoc(const PPEntityOffset &PPE) const {
5005     return Reader.ReadSourceLocation(M, PPE.*PPLoc);
5006   }
5007 };
5008 
5009 }
5010 
5011 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
5012                                                        bool EndsAfter) const {
5013   if (SourceMgr.isLocalSourceLocation(Loc))
5014     return getTotalNumPreprocessedEntities();
5015 
5016   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
5017       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
5018   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
5019          "Corrupted global sloc offset map");
5020 
5021   if (SLocMapI->second->NumPreprocessedEntities == 0)
5022     return findNextPreprocessedEntity(SLocMapI);
5023 
5024   ModuleFile &M = *SLocMapI->second;
5025   typedef const PPEntityOffset *pp_iterator;
5026   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
5027   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
5028 
5029   size_t Count = M.NumPreprocessedEntities;
5030   size_t Half;
5031   pp_iterator First = pp_begin;
5032   pp_iterator PPI;
5033 
5034   if (EndsAfter) {
5035     PPI = std::upper_bound(pp_begin, pp_end, Loc,
5036                            PPEntityComp<&PPEntityOffset::Begin>(*this, M));
5037   } else {
5038     // Do a binary search manually instead of using std::lower_bound because
5039     // The end locations of entities may be unordered (when a macro expansion
5040     // is inside another macro argument), but for this case it is not important
5041     // whether we get the first macro expansion or its containing macro.
5042     while (Count > 0) {
5043       Half = Count / 2;
5044       PPI = First;
5045       std::advance(PPI, Half);
5046       if (SourceMgr.isBeforeInTranslationUnit(ReadSourceLocation(M, PPI->End),
5047                                               Loc)) {
5048         First = PPI;
5049         ++First;
5050         Count = Count - Half - 1;
5051       } else
5052         Count = Half;
5053     }
5054   }
5055 
5056   if (PPI == pp_end)
5057     return findNextPreprocessedEntity(SLocMapI);
5058 
5059   return M.BasePreprocessedEntityID + (PPI - pp_begin);
5060 }
5061 
5062 /// \brief Returns a pair of [Begin, End) indices of preallocated
5063 /// preprocessed entities that \arg Range encompasses.
5064 std::pair<unsigned, unsigned>
5065     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
5066   if (Range.isInvalid())
5067     return std::make_pair(0,0);
5068   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
5069 
5070   PreprocessedEntityID BeginID =
5071       findPreprocessedEntity(Range.getBegin(), false);
5072   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
5073   return std::make_pair(BeginID, EndID);
5074 }
5075 
5076 /// \brief Optionally returns true or false if the preallocated preprocessed
5077 /// entity with index \arg Index came from file \arg FID.
5078 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
5079                                                              FileID FID) {
5080   if (FID.isInvalid())
5081     return false;
5082 
5083   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5084   ModuleFile &M = *PPInfo.first;
5085   unsigned LocalIndex = PPInfo.second;
5086   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5087 
5088   SourceLocation Loc = ReadSourceLocation(M, PPOffs.Begin);
5089   if (Loc.isInvalid())
5090     return false;
5091 
5092   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
5093     return true;
5094   else
5095     return false;
5096 }
5097 
5098 namespace {
5099   /// \brief Visitor used to search for information about a header file.
5100   class HeaderFileInfoVisitor {
5101     const FileEntry *FE;
5102 
5103     Optional<HeaderFileInfo> HFI;
5104 
5105   public:
5106     explicit HeaderFileInfoVisitor(const FileEntry *FE)
5107       : FE(FE) { }
5108 
5109     static bool visit(ModuleFile &M, void *UserData) {
5110       HeaderFileInfoVisitor *This
5111         = static_cast<HeaderFileInfoVisitor *>(UserData);
5112 
5113       HeaderFileInfoLookupTable *Table
5114         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
5115       if (!Table)
5116         return false;
5117 
5118       // Look in the on-disk hash table for an entry for this file name.
5119       HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE);
5120       if (Pos == Table->end())
5121         return false;
5122 
5123       This->HFI = *Pos;
5124       return true;
5125     }
5126 
5127     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
5128   };
5129 }
5130 
5131 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
5132   HeaderFileInfoVisitor Visitor(FE);
5133   ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor);
5134   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
5135     return *HFI;
5136 
5137   return HeaderFileInfo();
5138 }
5139 
5140 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
5141   // FIXME: Make it work properly with modules.
5142   SmallVector<DiagnosticsEngine::DiagState *, 32> DiagStates;
5143   for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) {
5144     ModuleFile &F = *(*I);
5145     unsigned Idx = 0;
5146     DiagStates.clear();
5147     assert(!Diag.DiagStates.empty());
5148     DiagStates.push_back(&Diag.DiagStates.front()); // the command-line one.
5149     while (Idx < F.PragmaDiagMappings.size()) {
5150       SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
5151       unsigned DiagStateID = F.PragmaDiagMappings[Idx++];
5152       if (DiagStateID != 0) {
5153         Diag.DiagStatePoints.push_back(
5154                     DiagnosticsEngine::DiagStatePoint(DiagStates[DiagStateID-1],
5155                     FullSourceLoc(Loc, SourceMgr)));
5156         continue;
5157       }
5158 
5159       assert(DiagStateID == 0);
5160       // A new DiagState was created here.
5161       Diag.DiagStates.push_back(*Diag.GetCurDiagState());
5162       DiagnosticsEngine::DiagState *NewState = &Diag.DiagStates.back();
5163       DiagStates.push_back(NewState);
5164       Diag.DiagStatePoints.push_back(
5165           DiagnosticsEngine::DiagStatePoint(NewState,
5166                                             FullSourceLoc(Loc, SourceMgr)));
5167       while (1) {
5168         assert(Idx < F.PragmaDiagMappings.size() &&
5169                "Invalid data, didn't find '-1' marking end of diag/map pairs");
5170         if (Idx >= F.PragmaDiagMappings.size()) {
5171           break; // Something is messed up but at least avoid infinite loop in
5172                  // release build.
5173         }
5174         unsigned DiagID = F.PragmaDiagMappings[Idx++];
5175         if (DiagID == (unsigned)-1) {
5176           break; // no more diag/map pairs for this location.
5177         }
5178         diag::Severity Map = (diag::Severity)F.PragmaDiagMappings[Idx++];
5179         DiagnosticMapping Mapping = Diag.makeUserMapping(Map, Loc);
5180         Diag.GetCurDiagState()->setMapping(DiagID, Mapping);
5181       }
5182     }
5183   }
5184 }
5185 
5186 /// \brief Get the correct cursor and offset for loading a type.
5187 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
5188   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
5189   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
5190   ModuleFile *M = I->second;
5191   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
5192 }
5193 
5194 /// \brief Read and return the type with the given index..
5195 ///
5196 /// The index is the type ID, shifted and minus the number of predefs. This
5197 /// routine actually reads the record corresponding to the type at the given
5198 /// location. It is a helper routine for GetType, which deals with reading type
5199 /// IDs.
5200 QualType ASTReader::readTypeRecord(unsigned Index) {
5201   RecordLocation Loc = TypeCursorForIndex(Index);
5202   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
5203 
5204   // Keep track of where we are in the stream, then jump back there
5205   // after reading this type.
5206   SavedStreamPosition SavedPosition(DeclsCursor);
5207 
5208   ReadingKindTracker ReadingKind(Read_Type, *this);
5209 
5210   // Note that we are loading a type record.
5211   Deserializing AType(this);
5212 
5213   unsigned Idx = 0;
5214   DeclsCursor.JumpToBit(Loc.Offset);
5215   RecordData Record;
5216   unsigned Code = DeclsCursor.ReadCode();
5217   switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) {
5218   case TYPE_EXT_QUAL: {
5219     if (Record.size() != 2) {
5220       Error("Incorrect encoding of extended qualifier type");
5221       return QualType();
5222     }
5223     QualType Base = readType(*Loc.F, Record, Idx);
5224     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
5225     return Context.getQualifiedType(Base, Quals);
5226   }
5227 
5228   case TYPE_COMPLEX: {
5229     if (Record.size() != 1) {
5230       Error("Incorrect encoding of complex type");
5231       return QualType();
5232     }
5233     QualType ElemType = readType(*Loc.F, Record, Idx);
5234     return Context.getComplexType(ElemType);
5235   }
5236 
5237   case TYPE_POINTER: {
5238     if (Record.size() != 1) {
5239       Error("Incorrect encoding of pointer type");
5240       return QualType();
5241     }
5242     QualType PointeeType = readType(*Loc.F, Record, Idx);
5243     return Context.getPointerType(PointeeType);
5244   }
5245 
5246   case TYPE_DECAYED: {
5247     if (Record.size() != 1) {
5248       Error("Incorrect encoding of decayed type");
5249       return QualType();
5250     }
5251     QualType OriginalType = readType(*Loc.F, Record, Idx);
5252     QualType DT = Context.getAdjustedParameterType(OriginalType);
5253     if (!isa<DecayedType>(DT))
5254       Error("Decayed type does not decay");
5255     return DT;
5256   }
5257 
5258   case TYPE_ADJUSTED: {
5259     if (Record.size() != 2) {
5260       Error("Incorrect encoding of adjusted type");
5261       return QualType();
5262     }
5263     QualType OriginalTy = readType(*Loc.F, Record, Idx);
5264     QualType AdjustedTy = readType(*Loc.F, Record, Idx);
5265     return Context.getAdjustedType(OriginalTy, AdjustedTy);
5266   }
5267 
5268   case TYPE_BLOCK_POINTER: {
5269     if (Record.size() != 1) {
5270       Error("Incorrect encoding of block pointer type");
5271       return QualType();
5272     }
5273     QualType PointeeType = readType(*Loc.F, Record, Idx);
5274     return Context.getBlockPointerType(PointeeType);
5275   }
5276 
5277   case TYPE_LVALUE_REFERENCE: {
5278     if (Record.size() != 2) {
5279       Error("Incorrect encoding of lvalue reference type");
5280       return QualType();
5281     }
5282     QualType PointeeType = readType(*Loc.F, Record, Idx);
5283     return Context.getLValueReferenceType(PointeeType, Record[1]);
5284   }
5285 
5286   case TYPE_RVALUE_REFERENCE: {
5287     if (Record.size() != 1) {
5288       Error("Incorrect encoding of rvalue reference type");
5289       return QualType();
5290     }
5291     QualType PointeeType = readType(*Loc.F, Record, Idx);
5292     return Context.getRValueReferenceType(PointeeType);
5293   }
5294 
5295   case TYPE_MEMBER_POINTER: {
5296     if (Record.size() != 2) {
5297       Error("Incorrect encoding of member pointer type");
5298       return QualType();
5299     }
5300     QualType PointeeType = readType(*Loc.F, Record, Idx);
5301     QualType ClassType = readType(*Loc.F, Record, Idx);
5302     if (PointeeType.isNull() || ClassType.isNull())
5303       return QualType();
5304 
5305     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
5306   }
5307 
5308   case TYPE_CONSTANT_ARRAY: {
5309     QualType ElementType = readType(*Loc.F, Record, Idx);
5310     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5311     unsigned IndexTypeQuals = Record[2];
5312     unsigned Idx = 3;
5313     llvm::APInt Size = ReadAPInt(Record, Idx);
5314     return Context.getConstantArrayType(ElementType, Size,
5315                                          ASM, IndexTypeQuals);
5316   }
5317 
5318   case TYPE_INCOMPLETE_ARRAY: {
5319     QualType ElementType = readType(*Loc.F, Record, Idx);
5320     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5321     unsigned IndexTypeQuals = Record[2];
5322     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
5323   }
5324 
5325   case TYPE_VARIABLE_ARRAY: {
5326     QualType ElementType = readType(*Loc.F, Record, Idx);
5327     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5328     unsigned IndexTypeQuals = Record[2];
5329     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
5330     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
5331     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
5332                                          ASM, IndexTypeQuals,
5333                                          SourceRange(LBLoc, RBLoc));
5334   }
5335 
5336   case TYPE_VECTOR: {
5337     if (Record.size() != 3) {
5338       Error("incorrect encoding of vector type in AST file");
5339       return QualType();
5340     }
5341 
5342     QualType ElementType = readType(*Loc.F, Record, Idx);
5343     unsigned NumElements = Record[1];
5344     unsigned VecKind = Record[2];
5345     return Context.getVectorType(ElementType, NumElements,
5346                                   (VectorType::VectorKind)VecKind);
5347   }
5348 
5349   case TYPE_EXT_VECTOR: {
5350     if (Record.size() != 3) {
5351       Error("incorrect encoding of extended vector type in AST file");
5352       return QualType();
5353     }
5354 
5355     QualType ElementType = readType(*Loc.F, Record, Idx);
5356     unsigned NumElements = Record[1];
5357     return Context.getExtVectorType(ElementType, NumElements);
5358   }
5359 
5360   case TYPE_FUNCTION_NO_PROTO: {
5361     if (Record.size() != 6) {
5362       Error("incorrect encoding of no-proto function type");
5363       return QualType();
5364     }
5365     QualType ResultType = readType(*Loc.F, Record, Idx);
5366     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
5367                                (CallingConv)Record[4], Record[5]);
5368     return Context.getFunctionNoProtoType(ResultType, Info);
5369   }
5370 
5371   case TYPE_FUNCTION_PROTO: {
5372     QualType ResultType = readType(*Loc.F, Record, Idx);
5373 
5374     FunctionProtoType::ExtProtoInfo EPI;
5375     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
5376                                         /*hasregparm*/ Record[2],
5377                                         /*regparm*/ Record[3],
5378                                         static_cast<CallingConv>(Record[4]),
5379                                         /*produces*/ Record[5]);
5380 
5381     unsigned Idx = 6;
5382 
5383     EPI.Variadic = Record[Idx++];
5384     EPI.HasTrailingReturn = Record[Idx++];
5385     EPI.TypeQuals = Record[Idx++];
5386     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
5387     SmallVector<QualType, 8> ExceptionStorage;
5388     readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx);
5389 
5390     unsigned NumParams = Record[Idx++];
5391     SmallVector<QualType, 16> ParamTypes;
5392     for (unsigned I = 0; I != NumParams; ++I)
5393       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
5394 
5395     return Context.getFunctionType(ResultType, ParamTypes, EPI);
5396   }
5397 
5398   case TYPE_UNRESOLVED_USING: {
5399     unsigned Idx = 0;
5400     return Context.getTypeDeclType(
5401                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
5402   }
5403 
5404   case TYPE_TYPEDEF: {
5405     if (Record.size() != 2) {
5406       Error("incorrect encoding of typedef type");
5407       return QualType();
5408     }
5409     unsigned Idx = 0;
5410     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
5411     QualType Canonical = readType(*Loc.F, Record, Idx);
5412     if (!Canonical.isNull())
5413       Canonical = Context.getCanonicalType(Canonical);
5414     return Context.getTypedefType(Decl, Canonical);
5415   }
5416 
5417   case TYPE_TYPEOF_EXPR:
5418     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
5419 
5420   case TYPE_TYPEOF: {
5421     if (Record.size() != 1) {
5422       Error("incorrect encoding of typeof(type) in AST file");
5423       return QualType();
5424     }
5425     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5426     return Context.getTypeOfType(UnderlyingType);
5427   }
5428 
5429   case TYPE_DECLTYPE: {
5430     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5431     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
5432   }
5433 
5434   case TYPE_UNARY_TRANSFORM: {
5435     QualType BaseType = readType(*Loc.F, Record, Idx);
5436     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5437     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
5438     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
5439   }
5440 
5441   case TYPE_AUTO: {
5442     QualType Deduced = readType(*Loc.F, Record, Idx);
5443     bool IsDecltypeAuto = Record[Idx++];
5444     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
5445     return Context.getAutoType(Deduced, IsDecltypeAuto, IsDependent);
5446   }
5447 
5448   case TYPE_RECORD: {
5449     if (Record.size() != 2) {
5450       Error("incorrect encoding of record type");
5451       return QualType();
5452     }
5453     unsigned Idx = 0;
5454     bool IsDependent = Record[Idx++];
5455     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
5456     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
5457     QualType T = Context.getRecordType(RD);
5458     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5459     return T;
5460   }
5461 
5462   case TYPE_ENUM: {
5463     if (Record.size() != 2) {
5464       Error("incorrect encoding of enum type");
5465       return QualType();
5466     }
5467     unsigned Idx = 0;
5468     bool IsDependent = Record[Idx++];
5469     QualType T
5470       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
5471     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5472     return T;
5473   }
5474 
5475   case TYPE_ATTRIBUTED: {
5476     if (Record.size() != 3) {
5477       Error("incorrect encoding of attributed type");
5478       return QualType();
5479     }
5480     QualType modifiedType = readType(*Loc.F, Record, Idx);
5481     QualType equivalentType = readType(*Loc.F, Record, Idx);
5482     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
5483     return Context.getAttributedType(kind, modifiedType, equivalentType);
5484   }
5485 
5486   case TYPE_PAREN: {
5487     if (Record.size() != 1) {
5488       Error("incorrect encoding of paren type");
5489       return QualType();
5490     }
5491     QualType InnerType = readType(*Loc.F, Record, Idx);
5492     return Context.getParenType(InnerType);
5493   }
5494 
5495   case TYPE_PACK_EXPANSION: {
5496     if (Record.size() != 2) {
5497       Error("incorrect encoding of pack expansion type");
5498       return QualType();
5499     }
5500     QualType Pattern = readType(*Loc.F, Record, Idx);
5501     if (Pattern.isNull())
5502       return QualType();
5503     Optional<unsigned> NumExpansions;
5504     if (Record[1])
5505       NumExpansions = Record[1] - 1;
5506     return Context.getPackExpansionType(Pattern, NumExpansions);
5507   }
5508 
5509   case TYPE_ELABORATED: {
5510     unsigned Idx = 0;
5511     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5512     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5513     QualType NamedType = readType(*Loc.F, Record, Idx);
5514     return Context.getElaboratedType(Keyword, NNS, NamedType);
5515   }
5516 
5517   case TYPE_OBJC_INTERFACE: {
5518     unsigned Idx = 0;
5519     ObjCInterfaceDecl *ItfD
5520       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
5521     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
5522   }
5523 
5524   case TYPE_OBJC_OBJECT: {
5525     unsigned Idx = 0;
5526     QualType Base = readType(*Loc.F, Record, Idx);
5527     unsigned NumProtos = Record[Idx++];
5528     SmallVector<ObjCProtocolDecl*, 4> Protos;
5529     for (unsigned I = 0; I != NumProtos; ++I)
5530       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
5531     return Context.getObjCObjectType(Base, Protos.data(), NumProtos);
5532   }
5533 
5534   case TYPE_OBJC_OBJECT_POINTER: {
5535     unsigned Idx = 0;
5536     QualType Pointee = readType(*Loc.F, Record, Idx);
5537     return Context.getObjCObjectPointerType(Pointee);
5538   }
5539 
5540   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
5541     unsigned Idx = 0;
5542     QualType Parm = readType(*Loc.F, Record, Idx);
5543     QualType Replacement = readType(*Loc.F, Record, Idx);
5544     return Context.getSubstTemplateTypeParmType(
5545         cast<TemplateTypeParmType>(Parm),
5546         Context.getCanonicalType(Replacement));
5547   }
5548 
5549   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
5550     unsigned Idx = 0;
5551     QualType Parm = readType(*Loc.F, Record, Idx);
5552     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
5553     return Context.getSubstTemplateTypeParmPackType(
5554                                                cast<TemplateTypeParmType>(Parm),
5555                                                      ArgPack);
5556   }
5557 
5558   case TYPE_INJECTED_CLASS_NAME: {
5559     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
5560     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
5561     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
5562     // for AST reading, too much interdependencies.
5563     const Type *T = nullptr;
5564     for (auto *DI = D; DI; DI = DI->getPreviousDecl()) {
5565       if (const Type *Existing = DI->getTypeForDecl()) {
5566         T = Existing;
5567         break;
5568       }
5569     }
5570     if (!T) {
5571       T = new (Context, TypeAlignment) InjectedClassNameType(D, TST);
5572       for (auto *DI = D; DI; DI = DI->getPreviousDecl())
5573         DI->setTypeForDecl(T);
5574     }
5575     return QualType(T, 0);
5576   }
5577 
5578   case TYPE_TEMPLATE_TYPE_PARM: {
5579     unsigned Idx = 0;
5580     unsigned Depth = Record[Idx++];
5581     unsigned Index = Record[Idx++];
5582     bool Pack = Record[Idx++];
5583     TemplateTypeParmDecl *D
5584       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
5585     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
5586   }
5587 
5588   case TYPE_DEPENDENT_NAME: {
5589     unsigned Idx = 0;
5590     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5591     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5592     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
5593     QualType Canon = readType(*Loc.F, Record, Idx);
5594     if (!Canon.isNull())
5595       Canon = Context.getCanonicalType(Canon);
5596     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
5597   }
5598 
5599   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
5600     unsigned Idx = 0;
5601     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5602     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5603     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
5604     unsigned NumArgs = Record[Idx++];
5605     SmallVector<TemplateArgument, 8> Args;
5606     Args.reserve(NumArgs);
5607     while (NumArgs--)
5608       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
5609     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
5610                                                       Args.size(), Args.data());
5611   }
5612 
5613   case TYPE_DEPENDENT_SIZED_ARRAY: {
5614     unsigned Idx = 0;
5615 
5616     // ArrayType
5617     QualType ElementType = readType(*Loc.F, Record, Idx);
5618     ArrayType::ArraySizeModifier ASM
5619       = (ArrayType::ArraySizeModifier)Record[Idx++];
5620     unsigned IndexTypeQuals = Record[Idx++];
5621 
5622     // DependentSizedArrayType
5623     Expr *NumElts = ReadExpr(*Loc.F);
5624     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
5625 
5626     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
5627                                                IndexTypeQuals, Brackets);
5628   }
5629 
5630   case TYPE_TEMPLATE_SPECIALIZATION: {
5631     unsigned Idx = 0;
5632     bool IsDependent = Record[Idx++];
5633     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
5634     SmallVector<TemplateArgument, 8> Args;
5635     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
5636     QualType Underlying = readType(*Loc.F, Record, Idx);
5637     QualType T;
5638     if (Underlying.isNull())
5639       T = Context.getCanonicalTemplateSpecializationType(Name, Args.data(),
5640                                                           Args.size());
5641     else
5642       T = Context.getTemplateSpecializationType(Name, Args.data(),
5643                                                  Args.size(), Underlying);
5644     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5645     return T;
5646   }
5647 
5648   case TYPE_ATOMIC: {
5649     if (Record.size() != 1) {
5650       Error("Incorrect encoding of atomic type");
5651       return QualType();
5652     }
5653     QualType ValueType = readType(*Loc.F, Record, Idx);
5654     return Context.getAtomicType(ValueType);
5655   }
5656   }
5657   llvm_unreachable("Invalid TypeCode!");
5658 }
5659 
5660 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile,
5661                                   SmallVectorImpl<QualType> &Exceptions,
5662                                   FunctionProtoType::ExceptionSpecInfo &ESI,
5663                                   const RecordData &Record, unsigned &Idx) {
5664   ExceptionSpecificationType EST =
5665       static_cast<ExceptionSpecificationType>(Record[Idx++]);
5666   ESI.Type = EST;
5667   if (EST == EST_Dynamic) {
5668     for (unsigned I = 0, N = Record[Idx++]; I != N; ++I)
5669       Exceptions.push_back(readType(ModuleFile, Record, Idx));
5670     ESI.Exceptions = Exceptions;
5671   } else if (EST == EST_ComputedNoexcept) {
5672     ESI.NoexceptExpr = ReadExpr(ModuleFile);
5673   } else if (EST == EST_Uninstantiated) {
5674     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5675     ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5676   } else if (EST == EST_Unevaluated) {
5677     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5678   }
5679 }
5680 
5681 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
5682   ASTReader &Reader;
5683   ModuleFile &F;
5684   const ASTReader::RecordData &Record;
5685   unsigned &Idx;
5686 
5687   SourceLocation ReadSourceLocation(const ASTReader::RecordData &R,
5688                                     unsigned &I) {
5689     return Reader.ReadSourceLocation(F, R, I);
5690   }
5691 
5692   template<typename T>
5693   T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) {
5694     return Reader.ReadDeclAs<T>(F, Record, Idx);
5695   }
5696 
5697 public:
5698   TypeLocReader(ASTReader &Reader, ModuleFile &F,
5699                 const ASTReader::RecordData &Record, unsigned &Idx)
5700     : Reader(Reader), F(F), Record(Record), Idx(Idx)
5701   { }
5702 
5703   // We want compile-time assurance that we've enumerated all of
5704   // these, so unfortunately we have to declare them first, then
5705   // define them out-of-line.
5706 #define ABSTRACT_TYPELOC(CLASS, PARENT)
5707 #define TYPELOC(CLASS, PARENT) \
5708   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
5709 #include "clang/AST/TypeLocNodes.def"
5710 
5711   void VisitFunctionTypeLoc(FunctionTypeLoc);
5712   void VisitArrayTypeLoc(ArrayTypeLoc);
5713 };
5714 
5715 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
5716   // nothing to do
5717 }
5718 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
5719   TL.setBuiltinLoc(ReadSourceLocation(Record, Idx));
5720   if (TL.needsExtraLocalData()) {
5721     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
5722     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
5723     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
5724     TL.setModeAttr(Record[Idx++]);
5725   }
5726 }
5727 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
5728   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5729 }
5730 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
5731   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5732 }
5733 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
5734   // nothing to do
5735 }
5736 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
5737   // nothing to do
5738 }
5739 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
5740   TL.setCaretLoc(ReadSourceLocation(Record, Idx));
5741 }
5742 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
5743   TL.setAmpLoc(ReadSourceLocation(Record, Idx));
5744 }
5745 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
5746   TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx));
5747 }
5748 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
5749   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5750   TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5751 }
5752 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
5753   TL.setLBracketLoc(ReadSourceLocation(Record, Idx));
5754   TL.setRBracketLoc(ReadSourceLocation(Record, Idx));
5755   if (Record[Idx++])
5756     TL.setSizeExpr(Reader.ReadExpr(F));
5757   else
5758     TL.setSizeExpr(nullptr);
5759 }
5760 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
5761   VisitArrayTypeLoc(TL);
5762 }
5763 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
5764   VisitArrayTypeLoc(TL);
5765 }
5766 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
5767   VisitArrayTypeLoc(TL);
5768 }
5769 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
5770                                             DependentSizedArrayTypeLoc TL) {
5771   VisitArrayTypeLoc(TL);
5772 }
5773 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
5774                                         DependentSizedExtVectorTypeLoc TL) {
5775   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5776 }
5777 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
5778   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5779 }
5780 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
5781   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5782 }
5783 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
5784   TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx));
5785   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5786   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5787   TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx));
5788   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
5789     TL.setParam(i, ReadDeclAs<ParmVarDecl>(Record, Idx));
5790   }
5791 }
5792 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
5793   VisitFunctionTypeLoc(TL);
5794 }
5795 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
5796   VisitFunctionTypeLoc(TL);
5797 }
5798 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
5799   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5800 }
5801 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
5802   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5803 }
5804 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
5805   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5806   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5807   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5808 }
5809 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
5810   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5811   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5812   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5813   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5814 }
5815 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
5816   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5817 }
5818 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
5819   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5820   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5821   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5822   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5823 }
5824 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
5825   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5826 }
5827 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
5828   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5829 }
5830 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
5831   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5832 }
5833 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
5834   TL.setAttrNameLoc(ReadSourceLocation(Record, Idx));
5835   if (TL.hasAttrOperand()) {
5836     SourceRange range;
5837     range.setBegin(ReadSourceLocation(Record, Idx));
5838     range.setEnd(ReadSourceLocation(Record, Idx));
5839     TL.setAttrOperandParensRange(range);
5840   }
5841   if (TL.hasAttrExprOperand()) {
5842     if (Record[Idx++])
5843       TL.setAttrExprOperand(Reader.ReadExpr(F));
5844     else
5845       TL.setAttrExprOperand(nullptr);
5846   } else if (TL.hasAttrEnumOperand())
5847     TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx));
5848 }
5849 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
5850   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5851 }
5852 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
5853                                             SubstTemplateTypeParmTypeLoc TL) {
5854   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5855 }
5856 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
5857                                           SubstTemplateTypeParmPackTypeLoc TL) {
5858   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5859 }
5860 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
5861                                            TemplateSpecializationTypeLoc TL) {
5862   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5863   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5864   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5865   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5866   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
5867     TL.setArgLocInfo(i,
5868         Reader.GetTemplateArgumentLocInfo(F,
5869                                           TL.getTypePtr()->getArg(i).getKind(),
5870                                           Record, Idx));
5871 }
5872 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
5873   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5874   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5875 }
5876 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
5877   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5878   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5879 }
5880 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
5881   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5882 }
5883 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
5884   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5885   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5886   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5887 }
5888 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
5889        DependentTemplateSpecializationTypeLoc TL) {
5890   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5891   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5892   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5893   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5894   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5895   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5896   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
5897     TL.setArgLocInfo(I,
5898         Reader.GetTemplateArgumentLocInfo(F,
5899                                           TL.getTypePtr()->getArg(I).getKind(),
5900                                           Record, Idx));
5901 }
5902 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
5903   TL.setEllipsisLoc(ReadSourceLocation(Record, Idx));
5904 }
5905 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
5906   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5907 }
5908 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
5909   TL.setHasBaseTypeAsWritten(Record[Idx++]);
5910   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5911   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5912   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
5913     TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx));
5914 }
5915 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
5916   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5917 }
5918 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
5919   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5920   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5921   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5922 }
5923 
5924 TypeSourceInfo *ASTReader::GetTypeSourceInfo(ModuleFile &F,
5925                                              const RecordData &Record,
5926                                              unsigned &Idx) {
5927   QualType InfoTy = readType(F, Record, Idx);
5928   if (InfoTy.isNull())
5929     return nullptr;
5930 
5931   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
5932   TypeLocReader TLR(*this, F, Record, Idx);
5933   for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
5934     TLR.Visit(TL);
5935   return TInfo;
5936 }
5937 
5938 QualType ASTReader::GetType(TypeID ID) {
5939   unsigned FastQuals = ID & Qualifiers::FastMask;
5940   unsigned Index = ID >> Qualifiers::FastWidth;
5941 
5942   if (Index < NUM_PREDEF_TYPE_IDS) {
5943     QualType T;
5944     switch ((PredefinedTypeIDs)Index) {
5945     case PREDEF_TYPE_NULL_ID: return QualType();
5946     case PREDEF_TYPE_VOID_ID: T = Context.VoidTy; break;
5947     case PREDEF_TYPE_BOOL_ID: T = Context.BoolTy; break;
5948 
5949     case PREDEF_TYPE_CHAR_U_ID:
5950     case PREDEF_TYPE_CHAR_S_ID:
5951       // FIXME: Check that the signedness of CharTy is correct!
5952       T = Context.CharTy;
5953       break;
5954 
5955     case PREDEF_TYPE_UCHAR_ID:      T = Context.UnsignedCharTy;     break;
5956     case PREDEF_TYPE_USHORT_ID:     T = Context.UnsignedShortTy;    break;
5957     case PREDEF_TYPE_UINT_ID:       T = Context.UnsignedIntTy;      break;
5958     case PREDEF_TYPE_ULONG_ID:      T = Context.UnsignedLongTy;     break;
5959     case PREDEF_TYPE_ULONGLONG_ID:  T = Context.UnsignedLongLongTy; break;
5960     case PREDEF_TYPE_UINT128_ID:    T = Context.UnsignedInt128Ty;   break;
5961     case PREDEF_TYPE_SCHAR_ID:      T = Context.SignedCharTy;       break;
5962     case PREDEF_TYPE_WCHAR_ID:      T = Context.WCharTy;            break;
5963     case PREDEF_TYPE_SHORT_ID:      T = Context.ShortTy;            break;
5964     case PREDEF_TYPE_INT_ID:        T = Context.IntTy;              break;
5965     case PREDEF_TYPE_LONG_ID:       T = Context.LongTy;             break;
5966     case PREDEF_TYPE_LONGLONG_ID:   T = Context.LongLongTy;         break;
5967     case PREDEF_TYPE_INT128_ID:     T = Context.Int128Ty;           break;
5968     case PREDEF_TYPE_HALF_ID:       T = Context.HalfTy;             break;
5969     case PREDEF_TYPE_FLOAT_ID:      T = Context.FloatTy;            break;
5970     case PREDEF_TYPE_DOUBLE_ID:     T = Context.DoubleTy;           break;
5971     case PREDEF_TYPE_LONGDOUBLE_ID: T = Context.LongDoubleTy;       break;
5972     case PREDEF_TYPE_OVERLOAD_ID:   T = Context.OverloadTy;         break;
5973     case PREDEF_TYPE_BOUND_MEMBER:  T = Context.BoundMemberTy;      break;
5974     case PREDEF_TYPE_PSEUDO_OBJECT: T = Context.PseudoObjectTy;     break;
5975     case PREDEF_TYPE_DEPENDENT_ID:  T = Context.DependentTy;        break;
5976     case PREDEF_TYPE_UNKNOWN_ANY:   T = Context.UnknownAnyTy;       break;
5977     case PREDEF_TYPE_NULLPTR_ID:    T = Context.NullPtrTy;          break;
5978     case PREDEF_TYPE_CHAR16_ID:     T = Context.Char16Ty;           break;
5979     case PREDEF_TYPE_CHAR32_ID:     T = Context.Char32Ty;           break;
5980     case PREDEF_TYPE_OBJC_ID:       T = Context.ObjCBuiltinIdTy;    break;
5981     case PREDEF_TYPE_OBJC_CLASS:    T = Context.ObjCBuiltinClassTy; break;
5982     case PREDEF_TYPE_OBJC_SEL:      T = Context.ObjCBuiltinSelTy;   break;
5983     case PREDEF_TYPE_IMAGE1D_ID:    T = Context.OCLImage1dTy;       break;
5984     case PREDEF_TYPE_IMAGE1D_ARR_ID: T = Context.OCLImage1dArrayTy; break;
5985     case PREDEF_TYPE_IMAGE1D_BUFF_ID: T = Context.OCLImage1dBufferTy; break;
5986     case PREDEF_TYPE_IMAGE2D_ID:    T = Context.OCLImage2dTy;       break;
5987     case PREDEF_TYPE_IMAGE2D_ARR_ID: T = Context.OCLImage2dArrayTy; break;
5988     case PREDEF_TYPE_IMAGE3D_ID:    T = Context.OCLImage3dTy;       break;
5989     case PREDEF_TYPE_SAMPLER_ID:    T = Context.OCLSamplerTy;       break;
5990     case PREDEF_TYPE_EVENT_ID:      T = Context.OCLEventTy;         break;
5991     case PREDEF_TYPE_AUTO_DEDUCT:   T = Context.getAutoDeductType(); break;
5992 
5993     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
5994       T = Context.getAutoRRefDeductType();
5995       break;
5996 
5997     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
5998       T = Context.ARCUnbridgedCastTy;
5999       break;
6000 
6001     case PREDEF_TYPE_VA_LIST_TAG:
6002       T = Context.getVaListTagType();
6003       break;
6004 
6005     case PREDEF_TYPE_BUILTIN_FN:
6006       T = Context.BuiltinFnTy;
6007       break;
6008     }
6009 
6010     assert(!T.isNull() && "Unknown predefined type");
6011     return T.withFastQualifiers(FastQuals);
6012   }
6013 
6014   Index -= NUM_PREDEF_TYPE_IDS;
6015   assert(Index < TypesLoaded.size() && "Type index out-of-range");
6016   if (TypesLoaded[Index].isNull()) {
6017     TypesLoaded[Index] = readTypeRecord(Index);
6018     if (TypesLoaded[Index].isNull())
6019       return QualType();
6020 
6021     TypesLoaded[Index]->setFromAST();
6022     if (DeserializationListener)
6023       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
6024                                         TypesLoaded[Index]);
6025   }
6026 
6027   return TypesLoaded[Index].withFastQualifiers(FastQuals);
6028 }
6029 
6030 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
6031   return GetType(getGlobalTypeID(F, LocalID));
6032 }
6033 
6034 serialization::TypeID
6035 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
6036   unsigned FastQuals = LocalID & Qualifiers::FastMask;
6037   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
6038 
6039   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
6040     return LocalID;
6041 
6042   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6043     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
6044   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
6045 
6046   unsigned GlobalIndex = LocalIndex + I->second;
6047   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
6048 }
6049 
6050 TemplateArgumentLocInfo
6051 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
6052                                       TemplateArgument::ArgKind Kind,
6053                                       const RecordData &Record,
6054                                       unsigned &Index) {
6055   switch (Kind) {
6056   case TemplateArgument::Expression:
6057     return ReadExpr(F);
6058   case TemplateArgument::Type:
6059     return GetTypeSourceInfo(F, Record, Index);
6060   case TemplateArgument::Template: {
6061     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6062                                                                      Index);
6063     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6064     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6065                                    SourceLocation());
6066   }
6067   case TemplateArgument::TemplateExpansion: {
6068     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6069                                                                      Index);
6070     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6071     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
6072     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6073                                    EllipsisLoc);
6074   }
6075   case TemplateArgument::Null:
6076   case TemplateArgument::Integral:
6077   case TemplateArgument::Declaration:
6078   case TemplateArgument::NullPtr:
6079   case TemplateArgument::Pack:
6080     // FIXME: Is this right?
6081     return TemplateArgumentLocInfo();
6082   }
6083   llvm_unreachable("unexpected template argument loc");
6084 }
6085 
6086 TemplateArgumentLoc
6087 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
6088                                    const RecordData &Record, unsigned &Index) {
6089   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
6090 
6091   if (Arg.getKind() == TemplateArgument::Expression) {
6092     if (Record[Index++]) // bool InfoHasSameExpr.
6093       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
6094   }
6095   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
6096                                                              Record, Index));
6097 }
6098 
6099 const ASTTemplateArgumentListInfo*
6100 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
6101                                            const RecordData &Record,
6102                                            unsigned &Index) {
6103   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
6104   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
6105   unsigned NumArgsAsWritten = Record[Index++];
6106   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
6107   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
6108     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
6109   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
6110 }
6111 
6112 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
6113   return GetDecl(ID);
6114 }
6115 
6116 template<typename TemplateSpecializationDecl>
6117 static void completeRedeclChainForTemplateSpecialization(Decl *D) {
6118   if (auto *TSD = dyn_cast<TemplateSpecializationDecl>(D))
6119     TSD->getSpecializedTemplate()->LoadLazySpecializations();
6120 }
6121 
6122 void ASTReader::CompleteRedeclChain(const Decl *D) {
6123   if (NumCurrentElementsDeserializing) {
6124     // We arrange to not care about the complete redeclaration chain while we're
6125     // deserializing. Just remember that the AST has marked this one as complete
6126     // but that it's not actually complete yet, so we know we still need to
6127     // complete it later.
6128     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
6129     return;
6130   }
6131 
6132   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
6133 
6134   // If this is a named declaration, complete it by looking it up
6135   // within its context.
6136   //
6137   // FIXME: Merging a function definition should merge
6138   // all mergeable entities within it.
6139   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
6140       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
6141     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
6142       auto *II = Name.getAsIdentifierInfo();
6143       if (isa<TranslationUnitDecl>(DC) && II) {
6144         // Outside of C++, we don't have a lookup table for the TU, so update
6145         // the identifier instead. In C++, either way should work fine.
6146         if (II->isOutOfDate())
6147           updateOutOfDateIdentifier(*II);
6148       } else
6149         DC->lookup(Name);
6150     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
6151       // FIXME: It'd be nice to do something a bit more targeted here.
6152       D->getDeclContext()->decls_begin();
6153     }
6154   }
6155 
6156   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
6157     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
6158   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
6159     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
6160   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
6161     if (auto *Template = FD->getPrimaryTemplate())
6162       Template->LoadLazySpecializations();
6163   }
6164 }
6165 
6166 uint64_t ASTReader::readCXXBaseSpecifiers(ModuleFile &M,
6167                                           const RecordData &Record,
6168                                           unsigned &Idx) {
6169   if (Idx >= Record.size() || Record[Idx] > M.LocalNumCXXBaseSpecifiers) {
6170     Error("malformed AST file: missing C++ base specifier");
6171     return 0;
6172   }
6173 
6174   unsigned LocalID = Record[Idx++];
6175   return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]);
6176 }
6177 
6178 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
6179   RecordLocation Loc = getLocalBitOffset(Offset);
6180   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6181   SavedStreamPosition SavedPosition(Cursor);
6182   Cursor.JumpToBit(Loc.Offset);
6183   ReadingKindTracker ReadingKind(Read_Decl, *this);
6184   RecordData Record;
6185   unsigned Code = Cursor.ReadCode();
6186   unsigned RecCode = Cursor.readRecord(Code, Record);
6187   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
6188     Error("malformed AST file: missing C++ base specifiers");
6189     return nullptr;
6190   }
6191 
6192   unsigned Idx = 0;
6193   unsigned NumBases = Record[Idx++];
6194   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
6195   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
6196   for (unsigned I = 0; I != NumBases; ++I)
6197     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
6198   return Bases;
6199 }
6200 
6201 serialization::DeclID
6202 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
6203   if (LocalID < NUM_PREDEF_DECL_IDS)
6204     return LocalID;
6205 
6206   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6207     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
6208   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
6209 
6210   return LocalID + I->second;
6211 }
6212 
6213 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
6214                                    ModuleFile &M) const {
6215   // Predefined decls aren't from any module.
6216   if (ID < NUM_PREDEF_DECL_IDS)
6217     return false;
6218 
6219   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID);
6220   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6221   return &M == I->second;
6222 }
6223 
6224 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
6225   if (!D->isFromASTFile())
6226     return nullptr;
6227   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
6228   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6229   return I->second;
6230 }
6231 
6232 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
6233   if (ID < NUM_PREDEF_DECL_IDS)
6234     return SourceLocation();
6235 
6236   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6237 
6238   if (Index > DeclsLoaded.size()) {
6239     Error("declaration ID out-of-range for AST file");
6240     return SourceLocation();
6241   }
6242 
6243   if (Decl *D = DeclsLoaded[Index])
6244     return D->getLocation();
6245 
6246   unsigned RawLocation = 0;
6247   RecordLocation Rec = DeclCursorForID(ID, RawLocation);
6248   return ReadSourceLocation(*Rec.F, RawLocation);
6249 }
6250 
6251 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
6252   switch (ID) {
6253   case PREDEF_DECL_NULL_ID:
6254     return nullptr;
6255 
6256   case PREDEF_DECL_TRANSLATION_UNIT_ID:
6257     return Context.getTranslationUnitDecl();
6258 
6259   case PREDEF_DECL_OBJC_ID_ID:
6260     return Context.getObjCIdDecl();
6261 
6262   case PREDEF_DECL_OBJC_SEL_ID:
6263     return Context.getObjCSelDecl();
6264 
6265   case PREDEF_DECL_OBJC_CLASS_ID:
6266     return Context.getObjCClassDecl();
6267 
6268   case PREDEF_DECL_OBJC_PROTOCOL_ID:
6269     return Context.getObjCProtocolDecl();
6270 
6271   case PREDEF_DECL_INT_128_ID:
6272     return Context.getInt128Decl();
6273 
6274   case PREDEF_DECL_UNSIGNED_INT_128_ID:
6275     return Context.getUInt128Decl();
6276 
6277   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
6278     return Context.getObjCInstanceTypeDecl();
6279 
6280   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
6281     return Context.getBuiltinVaListDecl();
6282 
6283   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
6284     return Context.getExternCContextDecl();
6285   }
6286   llvm_unreachable("PredefinedDeclIDs unknown enum value");
6287 }
6288 
6289 Decl *ASTReader::GetExistingDecl(DeclID ID) {
6290   if (ID < NUM_PREDEF_DECL_IDS) {
6291     Decl *D = getPredefinedDecl(Context, (PredefinedDeclIDs)ID);
6292     if (D) {
6293       // Track that we have merged the declaration with ID \p ID into the
6294       // pre-existing predefined declaration \p D.
6295       auto &Merged = MergedDecls[D->getCanonicalDecl()];
6296       if (Merged.empty())
6297         Merged.push_back(ID);
6298     }
6299     return D;
6300   }
6301 
6302   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6303 
6304   if (Index >= DeclsLoaded.size()) {
6305     assert(0 && "declaration ID out-of-range for AST file");
6306     Error("declaration ID out-of-range for AST file");
6307     return nullptr;
6308   }
6309 
6310   return DeclsLoaded[Index];
6311 }
6312 
6313 Decl *ASTReader::GetDecl(DeclID ID) {
6314   if (ID < NUM_PREDEF_DECL_IDS)
6315     return GetExistingDecl(ID);
6316 
6317   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6318 
6319   if (Index >= DeclsLoaded.size()) {
6320     assert(0 && "declaration ID out-of-range for AST file");
6321     Error("declaration ID out-of-range for AST file");
6322     return nullptr;
6323   }
6324 
6325   if (!DeclsLoaded[Index]) {
6326     ReadDeclRecord(ID);
6327     if (DeserializationListener)
6328       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
6329   }
6330 
6331   return DeclsLoaded[Index];
6332 }
6333 
6334 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
6335                                                   DeclID GlobalID) {
6336   if (GlobalID < NUM_PREDEF_DECL_IDS)
6337     return GlobalID;
6338 
6339   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
6340   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6341   ModuleFile *Owner = I->second;
6342 
6343   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
6344     = M.GlobalToLocalDeclIDs.find(Owner);
6345   if (Pos == M.GlobalToLocalDeclIDs.end())
6346     return 0;
6347 
6348   return GlobalID - Owner->BaseDeclID + Pos->second;
6349 }
6350 
6351 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
6352                                             const RecordData &Record,
6353                                             unsigned &Idx) {
6354   if (Idx >= Record.size()) {
6355     Error("Corrupted AST file");
6356     return 0;
6357   }
6358 
6359   return getGlobalDeclID(F, Record[Idx++]);
6360 }
6361 
6362 /// \brief Resolve the offset of a statement into a statement.
6363 ///
6364 /// This operation will read a new statement from the external
6365 /// source each time it is called, and is meant to be used via a
6366 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
6367 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
6368   // Switch case IDs are per Decl.
6369   ClearSwitchCaseIDs();
6370 
6371   // Offset here is a global offset across the entire chain.
6372   RecordLocation Loc = getLocalBitOffset(Offset);
6373   Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
6374   return ReadStmtFromStream(*Loc.F);
6375 }
6376 
6377 namespace {
6378   class FindExternalLexicalDeclsVisitor {
6379     ASTReader &Reader;
6380     const DeclContext *DC;
6381     bool (*isKindWeWant)(Decl::Kind);
6382 
6383     SmallVectorImpl<Decl*> &Decls;
6384     bool PredefsVisited[NUM_PREDEF_DECL_IDS];
6385 
6386   public:
6387     FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC,
6388                                     bool (*isKindWeWant)(Decl::Kind),
6389                                     SmallVectorImpl<Decl*> &Decls)
6390       : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls)
6391     {
6392       for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I)
6393         PredefsVisited[I] = false;
6394     }
6395 
6396     static bool visit(ModuleFile &M, bool Preorder, void *UserData) {
6397       if (Preorder)
6398         return false;
6399 
6400       FindExternalLexicalDeclsVisitor *This
6401         = static_cast<FindExternalLexicalDeclsVisitor *>(UserData);
6402 
6403       ModuleFile::DeclContextInfosMap::iterator Info
6404         = M.DeclContextInfos.find(This->DC);
6405       if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls)
6406         return false;
6407 
6408       // Load all of the declaration IDs
6409       for (const KindDeclIDPair *ID = Info->second.LexicalDecls,
6410                                *IDE = ID + Info->second.NumLexicalDecls;
6411            ID != IDE; ++ID) {
6412         if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first))
6413           continue;
6414 
6415         // Don't add predefined declarations to the lexical context more
6416         // than once.
6417         if (ID->second < NUM_PREDEF_DECL_IDS) {
6418           if (This->PredefsVisited[ID->second])
6419             continue;
6420 
6421           This->PredefsVisited[ID->second] = true;
6422         }
6423 
6424         if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) {
6425           if (!This->DC->isDeclInLexicalTraversal(D))
6426             This->Decls.push_back(D);
6427         }
6428       }
6429 
6430       return false;
6431     }
6432   };
6433 }
6434 
6435 ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
6436                                          bool (*isKindWeWant)(Decl::Kind),
6437                                          SmallVectorImpl<Decl*> &Decls) {
6438   // There might be lexical decls in multiple modules, for the TU at
6439   // least. Walk all of the modules in the order they were loaded.
6440   FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls);
6441   ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor);
6442   ++NumLexicalDeclContextsRead;
6443   return ELR_Success;
6444 }
6445 
6446 namespace {
6447 
6448 class DeclIDComp {
6449   ASTReader &Reader;
6450   ModuleFile &Mod;
6451 
6452 public:
6453   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
6454 
6455   bool operator()(LocalDeclID L, LocalDeclID R) const {
6456     SourceLocation LHS = getLocation(L);
6457     SourceLocation RHS = getLocation(R);
6458     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6459   }
6460 
6461   bool operator()(SourceLocation LHS, LocalDeclID R) const {
6462     SourceLocation RHS = getLocation(R);
6463     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6464   }
6465 
6466   bool operator()(LocalDeclID L, SourceLocation RHS) const {
6467     SourceLocation LHS = getLocation(L);
6468     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6469   }
6470 
6471   SourceLocation getLocation(LocalDeclID ID) const {
6472     return Reader.getSourceManager().getFileLoc(
6473             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
6474   }
6475 };
6476 
6477 }
6478 
6479 void ASTReader::FindFileRegionDecls(FileID File,
6480                                     unsigned Offset, unsigned Length,
6481                                     SmallVectorImpl<Decl *> &Decls) {
6482   SourceManager &SM = getSourceManager();
6483 
6484   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
6485   if (I == FileDeclIDs.end())
6486     return;
6487 
6488   FileDeclsInfo &DInfo = I->second;
6489   if (DInfo.Decls.empty())
6490     return;
6491 
6492   SourceLocation
6493     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
6494   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
6495 
6496   DeclIDComp DIDComp(*this, *DInfo.Mod);
6497   ArrayRef<serialization::LocalDeclID>::iterator
6498     BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6499                                BeginLoc, DIDComp);
6500   if (BeginIt != DInfo.Decls.begin())
6501     --BeginIt;
6502 
6503   // If we are pointing at a top-level decl inside an objc container, we need
6504   // to backtrack until we find it otherwise we will fail to report that the
6505   // region overlaps with an objc container.
6506   while (BeginIt != DInfo.Decls.begin() &&
6507          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
6508              ->isTopLevelDeclInObjCContainer())
6509     --BeginIt;
6510 
6511   ArrayRef<serialization::LocalDeclID>::iterator
6512     EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6513                              EndLoc, DIDComp);
6514   if (EndIt != DInfo.Decls.end())
6515     ++EndIt;
6516 
6517   for (ArrayRef<serialization::LocalDeclID>::iterator
6518          DIt = BeginIt; DIt != EndIt; ++DIt)
6519     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
6520 }
6521 
6522 namespace {
6523   /// \brief ModuleFile visitor used to perform name lookup into a
6524   /// declaration context.
6525   class DeclContextNameLookupVisitor {
6526     ASTReader &Reader;
6527     ArrayRef<const DeclContext *> Contexts;
6528     DeclarationName Name;
6529     SmallVectorImpl<NamedDecl *> &Decls;
6530     llvm::SmallPtrSetImpl<NamedDecl *> &DeclSet;
6531 
6532   public:
6533     DeclContextNameLookupVisitor(ASTReader &Reader,
6534                                  ArrayRef<const DeclContext *> Contexts,
6535                                  DeclarationName Name,
6536                                  SmallVectorImpl<NamedDecl *> &Decls,
6537                                  llvm::SmallPtrSetImpl<NamedDecl *> &DeclSet)
6538       : Reader(Reader), Contexts(Contexts), Name(Name), Decls(Decls),
6539         DeclSet(DeclSet) { }
6540 
6541     static bool visit(ModuleFile &M, void *UserData) {
6542       DeclContextNameLookupVisitor *This
6543         = static_cast<DeclContextNameLookupVisitor *>(UserData);
6544 
6545       // Check whether we have any visible declaration information for
6546       // this context in this module.
6547       ModuleFile::DeclContextInfosMap::iterator Info;
6548       bool FoundInfo = false;
6549       for (auto *DC : This->Contexts) {
6550         Info = M.DeclContextInfos.find(DC);
6551         if (Info != M.DeclContextInfos.end() &&
6552             Info->second.NameLookupTableData) {
6553           FoundInfo = true;
6554           break;
6555         }
6556       }
6557 
6558       if (!FoundInfo)
6559         return false;
6560 
6561       // Look for this name within this module.
6562       ASTDeclContextNameLookupTable *LookupTable =
6563         Info->second.NameLookupTableData;
6564       ASTDeclContextNameLookupTable::iterator Pos
6565         = LookupTable->find(This->Name);
6566       if (Pos == LookupTable->end())
6567         return false;
6568 
6569       bool FoundAnything = false;
6570       ASTDeclContextNameLookupTrait::data_type Data = *Pos;
6571       for (; Data.first != Data.second; ++Data.first) {
6572         NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first);
6573         if (!ND)
6574           continue;
6575 
6576         if (ND->getDeclName() != This->Name) {
6577           // A name might be null because the decl's redeclarable part is
6578           // currently read before reading its name. The lookup is triggered by
6579           // building that decl (likely indirectly), and so it is later in the
6580           // sense of "already existing" and can be ignored here.
6581           // FIXME: This should not happen; deserializing declarations should
6582           // not perform lookups since that can lead to deserialization cycles.
6583           continue;
6584         }
6585 
6586         // Record this declaration.
6587         FoundAnything = true;
6588         if (This->DeclSet.insert(ND).second)
6589           This->Decls.push_back(ND);
6590       }
6591 
6592       return FoundAnything;
6593     }
6594   };
6595 }
6596 
6597 /// \brief Retrieve the "definitive" module file for the definition of the
6598 /// given declaration context, if there is one.
6599 ///
6600 /// The "definitive" module file is the only place where we need to look to
6601 /// find information about the declarations within the given declaration
6602 /// context. For example, C++ and Objective-C classes, C structs/unions, and
6603 /// Objective-C protocols, categories, and extensions are all defined in a
6604 /// single place in the source code, so they have definitive module files
6605 /// associated with them. C++ namespaces, on the other hand, can have
6606 /// definitions in multiple different module files.
6607 ///
6608 /// Note: this needs to be kept in sync with ASTWriter::AddedVisibleDecl's
6609 /// NDEBUG checking.
6610 static ModuleFile *getDefinitiveModuleFileFor(const DeclContext *DC,
6611                                               ASTReader &Reader) {
6612   if (const DeclContext *DefDC = getDefinitiveDeclContext(DC))
6613     return Reader.getOwningModuleFile(cast<Decl>(DefDC));
6614 
6615   return nullptr;
6616 }
6617 
6618 bool
6619 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
6620                                           DeclarationName Name) {
6621   assert(DC->hasExternalVisibleStorage() &&
6622          "DeclContext has no visible decls in storage");
6623   if (!Name)
6624     return false;
6625 
6626   Deserializing LookupResults(this);
6627 
6628   SmallVector<NamedDecl *, 64> Decls;
6629   llvm::SmallPtrSet<NamedDecl*, 64> DeclSet;
6630 
6631   // Compute the declaration contexts we need to look into. Multiple such
6632   // declaration contexts occur when two declaration contexts from disjoint
6633   // modules get merged, e.g., when two namespaces with the same name are
6634   // independently defined in separate modules.
6635   SmallVector<const DeclContext *, 2> Contexts;
6636   Contexts.push_back(DC);
6637 
6638   if (DC->isNamespace()) {
6639     auto Merged = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
6640     if (Merged != MergedDecls.end()) {
6641       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
6642         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
6643     }
6644   }
6645 
6646   auto LookUpInContexts = [&](ArrayRef<const DeclContext*> Contexts) {
6647     DeclContextNameLookupVisitor Visitor(*this, Contexts, Name, Decls, DeclSet);
6648 
6649     // If we can definitively determine which module file to look into,
6650     // only look there. Otherwise, look in all module files.
6651     ModuleFile *Definitive;
6652     if (Contexts.size() == 1 &&
6653         (Definitive = getDefinitiveModuleFileFor(Contexts[0], *this))) {
6654       DeclContextNameLookupVisitor::visit(*Definitive, &Visitor);
6655     } else {
6656       ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor);
6657     }
6658   };
6659 
6660   LookUpInContexts(Contexts);
6661 
6662   // If this might be an implicit special member function, then also search
6663   // all merged definitions of the surrounding class. We need to search them
6664   // individually, because finding an entity in one of them doesn't imply that
6665   // we can't find a different entity in another one.
6666   if (isa<CXXRecordDecl>(DC)) {
6667     auto Kind = Name.getNameKind();
6668     if (Kind == DeclarationName::CXXConstructorName ||
6669         Kind == DeclarationName::CXXDestructorName ||
6670         (Kind == DeclarationName::CXXOperatorName &&
6671          Name.getCXXOverloadedOperator() == OO_Equal)) {
6672       auto Merged = MergedLookups.find(DC);
6673       if (Merged != MergedLookups.end()) {
6674         for (unsigned I = 0; I != Merged->second.size(); ++I) {
6675           const DeclContext *Context = Merged->second[I];
6676           LookUpInContexts(Context);
6677           // We might have just added some more merged lookups. If so, our
6678           // iterator is now invalid, so grab a fresh one before continuing.
6679           Merged = MergedLookups.find(DC);
6680         }
6681       }
6682     }
6683   }
6684 
6685   ++NumVisibleDeclContextsRead;
6686   SetExternalVisibleDeclsForName(DC, Name, Decls);
6687   return !Decls.empty();
6688 }
6689 
6690 namespace {
6691   /// \brief ModuleFile visitor used to retrieve all visible names in a
6692   /// declaration context.
6693   class DeclContextAllNamesVisitor {
6694     ASTReader &Reader;
6695     SmallVectorImpl<const DeclContext *> &Contexts;
6696     DeclsMap &Decls;
6697     llvm::SmallPtrSet<NamedDecl *, 256> DeclSet;
6698     bool VisitAll;
6699 
6700   public:
6701     DeclContextAllNamesVisitor(ASTReader &Reader,
6702                                SmallVectorImpl<const DeclContext *> &Contexts,
6703                                DeclsMap &Decls, bool VisitAll)
6704       : Reader(Reader), Contexts(Contexts), Decls(Decls), VisitAll(VisitAll) { }
6705 
6706     static bool visit(ModuleFile &M, void *UserData) {
6707       DeclContextAllNamesVisitor *This
6708         = static_cast<DeclContextAllNamesVisitor *>(UserData);
6709 
6710       // Check whether we have any visible declaration information for
6711       // this context in this module.
6712       ModuleFile::DeclContextInfosMap::iterator Info;
6713       bool FoundInfo = false;
6714       for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
6715         Info = M.DeclContextInfos.find(This->Contexts[I]);
6716         if (Info != M.DeclContextInfos.end() &&
6717             Info->second.NameLookupTableData) {
6718           FoundInfo = true;
6719           break;
6720         }
6721       }
6722 
6723       if (!FoundInfo)
6724         return false;
6725 
6726       ASTDeclContextNameLookupTable *LookupTable =
6727         Info->second.NameLookupTableData;
6728       bool FoundAnything = false;
6729       for (ASTDeclContextNameLookupTable::data_iterator
6730              I = LookupTable->data_begin(), E = LookupTable->data_end();
6731            I != E;
6732            ++I) {
6733         ASTDeclContextNameLookupTrait::data_type Data = *I;
6734         for (; Data.first != Data.second; ++Data.first) {
6735           NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M,
6736                                                                  *Data.first);
6737           if (!ND)
6738             continue;
6739 
6740           // Record this declaration.
6741           FoundAnything = true;
6742           if (This->DeclSet.insert(ND).second)
6743             This->Decls[ND->getDeclName()].push_back(ND);
6744         }
6745       }
6746 
6747       return FoundAnything && !This->VisitAll;
6748     }
6749   };
6750 }
6751 
6752 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
6753   if (!DC->hasExternalVisibleStorage())
6754     return;
6755   DeclsMap Decls;
6756 
6757   // Compute the declaration contexts we need to look into. Multiple such
6758   // declaration contexts occur when two declaration contexts from disjoint
6759   // modules get merged, e.g., when two namespaces with the same name are
6760   // independently defined in separate modules.
6761   SmallVector<const DeclContext *, 2> Contexts;
6762   Contexts.push_back(DC);
6763 
6764   if (DC->isNamespace()) {
6765     MergedDeclsMap::iterator Merged
6766       = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
6767     if (Merged != MergedDecls.end()) {
6768       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
6769         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
6770     }
6771   }
6772 
6773   DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls,
6774                                      /*VisitAll=*/DC->isFileContext());
6775   ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor);
6776   ++NumVisibleDeclContextsRead;
6777 
6778   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
6779     SetExternalVisibleDeclsForName(DC, I->first, I->second);
6780   }
6781   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
6782 }
6783 
6784 /// \brief Under non-PCH compilation the consumer receives the objc methods
6785 /// before receiving the implementation, and codegen depends on this.
6786 /// We simulate this by deserializing and passing to consumer the methods of the
6787 /// implementation before passing the deserialized implementation decl.
6788 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
6789                                        ASTConsumer *Consumer) {
6790   assert(ImplD && Consumer);
6791 
6792   for (auto *I : ImplD->methods())
6793     Consumer->HandleInterestingDecl(DeclGroupRef(I));
6794 
6795   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
6796 }
6797 
6798 void ASTReader::PassInterestingDeclsToConsumer() {
6799   assert(Consumer);
6800 
6801   if (PassingDeclsToConsumer)
6802     return;
6803 
6804   // Guard variable to avoid recursively redoing the process of passing
6805   // decls to consumer.
6806   SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer,
6807                                                    true);
6808 
6809   while (!InterestingDecls.empty()) {
6810     Decl *D = InterestingDecls.front();
6811     InterestingDecls.pop_front();
6812 
6813     PassInterestingDeclToConsumer(D);
6814   }
6815 }
6816 
6817 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
6818   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
6819     PassObjCImplDeclToConsumer(ImplD, Consumer);
6820   else
6821     Consumer->HandleInterestingDecl(DeclGroupRef(D));
6822 }
6823 
6824 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
6825   this->Consumer = Consumer;
6826 
6827   if (!Consumer)
6828     return;
6829 
6830   for (unsigned I = 0, N = EagerlyDeserializedDecls.size(); I != N; ++I) {
6831     // Force deserialization of this decl, which will cause it to be queued for
6832     // passing to the consumer.
6833     GetDecl(EagerlyDeserializedDecls[I]);
6834   }
6835   EagerlyDeserializedDecls.clear();
6836 
6837   PassInterestingDeclsToConsumer();
6838 }
6839 
6840 void ASTReader::PrintStats() {
6841   std::fprintf(stderr, "*** AST File Statistics:\n");
6842 
6843   unsigned NumTypesLoaded
6844     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
6845                                       QualType());
6846   unsigned NumDeclsLoaded
6847     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
6848                                       (Decl *)nullptr);
6849   unsigned NumIdentifiersLoaded
6850     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
6851                                             IdentifiersLoaded.end(),
6852                                             (IdentifierInfo *)nullptr);
6853   unsigned NumMacrosLoaded
6854     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
6855                                        MacrosLoaded.end(),
6856                                        (MacroInfo *)nullptr);
6857   unsigned NumSelectorsLoaded
6858     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
6859                                           SelectorsLoaded.end(),
6860                                           Selector());
6861 
6862   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
6863     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
6864                  NumSLocEntriesRead, TotalNumSLocEntries,
6865                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
6866   if (!TypesLoaded.empty())
6867     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
6868                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
6869                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
6870   if (!DeclsLoaded.empty())
6871     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
6872                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
6873                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
6874   if (!IdentifiersLoaded.empty())
6875     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
6876                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
6877                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
6878   if (!MacrosLoaded.empty())
6879     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6880                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
6881                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
6882   if (!SelectorsLoaded.empty())
6883     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
6884                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
6885                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
6886   if (TotalNumStatements)
6887     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
6888                  NumStatementsRead, TotalNumStatements,
6889                  ((float)NumStatementsRead/TotalNumStatements * 100));
6890   if (TotalNumMacros)
6891     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6892                  NumMacrosRead, TotalNumMacros,
6893                  ((float)NumMacrosRead/TotalNumMacros * 100));
6894   if (TotalLexicalDeclContexts)
6895     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
6896                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
6897                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
6898                   * 100));
6899   if (TotalVisibleDeclContexts)
6900     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
6901                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
6902                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
6903                   * 100));
6904   if (TotalNumMethodPoolEntries) {
6905     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
6906                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
6907                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
6908                   * 100));
6909   }
6910   if (NumMethodPoolLookups) {
6911     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
6912                  NumMethodPoolHits, NumMethodPoolLookups,
6913                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
6914   }
6915   if (NumMethodPoolTableLookups) {
6916     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
6917                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
6918                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
6919                   * 100.0));
6920   }
6921 
6922   if (NumIdentifierLookupHits) {
6923     std::fprintf(stderr,
6924                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
6925                  NumIdentifierLookupHits, NumIdentifierLookups,
6926                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
6927   }
6928 
6929   if (GlobalIndex) {
6930     std::fprintf(stderr, "\n");
6931     GlobalIndex->printStats();
6932   }
6933 
6934   std::fprintf(stderr, "\n");
6935   dump();
6936   std::fprintf(stderr, "\n");
6937 }
6938 
6939 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
6940 static void
6941 dumpModuleIDMap(StringRef Name,
6942                 const ContinuousRangeMap<Key, ModuleFile *,
6943                                          InitialCapacity> &Map) {
6944   if (Map.begin() == Map.end())
6945     return;
6946 
6947   typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
6948   llvm::errs() << Name << ":\n";
6949   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
6950        I != IEnd; ++I) {
6951     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
6952       << "\n";
6953   }
6954 }
6955 
6956 void ASTReader::dump() {
6957   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
6958   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
6959   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
6960   dumpModuleIDMap("Global type map", GlobalTypeMap);
6961   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
6962   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
6963   dumpModuleIDMap("Global macro map", GlobalMacroMap);
6964   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
6965   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
6966   dumpModuleIDMap("Global preprocessed entity map",
6967                   GlobalPreprocessedEntityMap);
6968 
6969   llvm::errs() << "\n*** PCH/Modules Loaded:";
6970   for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(),
6971                                        MEnd = ModuleMgr.end();
6972        M != MEnd; ++M)
6973     (*M)->dump();
6974 }
6975 
6976 /// Return the amount of memory used by memory buffers, breaking down
6977 /// by heap-backed versus mmap'ed memory.
6978 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
6979   for (ModuleConstIterator I = ModuleMgr.begin(),
6980       E = ModuleMgr.end(); I != E; ++I) {
6981     if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) {
6982       size_t bytes = buf->getBufferSize();
6983       switch (buf->getBufferKind()) {
6984         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
6985           sizes.malloc_bytes += bytes;
6986           break;
6987         case llvm::MemoryBuffer::MemoryBuffer_MMap:
6988           sizes.mmap_bytes += bytes;
6989           break;
6990       }
6991     }
6992   }
6993 }
6994 
6995 void ASTReader::InitializeSema(Sema &S) {
6996   SemaObj = &S;
6997   S.addExternalSource(this);
6998 
6999   // Makes sure any declarations that were deserialized "too early"
7000   // still get added to the identifier's declaration chains.
7001   for (uint64_t ID : PreloadedDeclIDs) {
7002     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7003     pushExternalDeclIntoScope(D, D->getDeclName());
7004   }
7005   PreloadedDeclIDs.clear();
7006 
7007   // FIXME: What happens if these are changed by a module import?
7008   if (!FPPragmaOptions.empty()) {
7009     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7010     SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
7011   }
7012 
7013   // FIXME: What happens if these are changed by a module import?
7014   if (!OpenCLExtensions.empty()) {
7015     unsigned I = 0;
7016 #define OPENCLEXT(nm)  SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++];
7017 #include "clang/Basic/OpenCLExtensions.def"
7018 
7019     assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS");
7020   }
7021 
7022   UpdateSema();
7023 }
7024 
7025 void ASTReader::UpdateSema() {
7026   assert(SemaObj && "no Sema to update");
7027 
7028   // Load the offsets of the declarations that Sema references.
7029   // They will be lazily deserialized when needed.
7030   if (!SemaDeclRefs.empty()) {
7031     assert(SemaDeclRefs.size() % 2 == 0);
7032     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 2) {
7033       if (!SemaObj->StdNamespace)
7034         SemaObj->StdNamespace = SemaDeclRefs[I];
7035       if (!SemaObj->StdBadAlloc)
7036         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7037     }
7038     SemaDeclRefs.clear();
7039   }
7040 
7041   // Update the state of 'pragma clang optimize'. Use the same API as if we had
7042   // encountered the pragma in the source.
7043   if(OptimizeOffPragmaLocation.isValid())
7044     SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation);
7045 }
7046 
7047 IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
7048   // Note that we are loading an identifier.
7049   Deserializing AnIdentifier(this);
7050   StringRef Name(NameStart, NameEnd - NameStart);
7051 
7052   // If there is a global index, look there first to determine which modules
7053   // provably do not have any results for this identifier.
7054   GlobalModuleIndex::HitSet Hits;
7055   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7056   if (!loadGlobalIndex()) {
7057     if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7058       HitsPtr = &Hits;
7059     }
7060   }
7061   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7062                                   NumIdentifierLookups,
7063                                   NumIdentifierLookupHits);
7064   ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor, HitsPtr);
7065   IdentifierInfo *II = Visitor.getIdentifierInfo();
7066   markIdentifierUpToDate(II);
7067   return II;
7068 }
7069 
7070 namespace clang {
7071   /// \brief An identifier-lookup iterator that enumerates all of the
7072   /// identifiers stored within a set of AST files.
7073   class ASTIdentifierIterator : public IdentifierIterator {
7074     /// \brief The AST reader whose identifiers are being enumerated.
7075     const ASTReader &Reader;
7076 
7077     /// \brief The current index into the chain of AST files stored in
7078     /// the AST reader.
7079     unsigned Index;
7080 
7081     /// \brief The current position within the identifier lookup table
7082     /// of the current AST file.
7083     ASTIdentifierLookupTable::key_iterator Current;
7084 
7085     /// \brief The end position within the identifier lookup table of
7086     /// the current AST file.
7087     ASTIdentifierLookupTable::key_iterator End;
7088 
7089   public:
7090     explicit ASTIdentifierIterator(const ASTReader &Reader);
7091 
7092     StringRef Next() override;
7093   };
7094 }
7095 
7096 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader)
7097   : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) {
7098   ASTIdentifierLookupTable *IdTable
7099     = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable;
7100   Current = IdTable->key_begin();
7101   End = IdTable->key_end();
7102 }
7103 
7104 StringRef ASTIdentifierIterator::Next() {
7105   while (Current == End) {
7106     // If we have exhausted all of our AST files, we're done.
7107     if (Index == 0)
7108       return StringRef();
7109 
7110     --Index;
7111     ASTIdentifierLookupTable *IdTable
7112       = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].
7113         IdentifierLookupTable;
7114     Current = IdTable->key_begin();
7115     End = IdTable->key_end();
7116   }
7117 
7118   // We have any identifiers remaining in the current AST file; return
7119   // the next one.
7120   StringRef Result = *Current;
7121   ++Current;
7122   return Result;
7123 }
7124 
7125 IdentifierIterator *ASTReader::getIdentifiers() {
7126   if (!loadGlobalIndex())
7127     return GlobalIndex->createIdentifierIterator();
7128 
7129   return new ASTIdentifierIterator(*this);
7130 }
7131 
7132 namespace clang { namespace serialization {
7133   class ReadMethodPoolVisitor {
7134     ASTReader &Reader;
7135     Selector Sel;
7136     unsigned PriorGeneration;
7137     unsigned InstanceBits;
7138     unsigned FactoryBits;
7139     bool InstanceHasMoreThanOneDecl;
7140     bool FactoryHasMoreThanOneDecl;
7141     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7142     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7143 
7144   public:
7145     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7146                           unsigned PriorGeneration)
7147         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration),
7148           InstanceBits(0), FactoryBits(0), InstanceHasMoreThanOneDecl(false),
7149           FactoryHasMoreThanOneDecl(false) {}
7150 
7151     static bool visit(ModuleFile &M, void *UserData) {
7152       ReadMethodPoolVisitor *This
7153         = static_cast<ReadMethodPoolVisitor *>(UserData);
7154 
7155       if (!M.SelectorLookupTable)
7156         return false;
7157 
7158       // If we've already searched this module file, skip it now.
7159       if (M.Generation <= This->PriorGeneration)
7160         return true;
7161 
7162       ++This->Reader.NumMethodPoolTableLookups;
7163       ASTSelectorLookupTable *PoolTable
7164         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
7165       ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel);
7166       if (Pos == PoolTable->end())
7167         return false;
7168 
7169       ++This->Reader.NumMethodPoolTableHits;
7170       ++This->Reader.NumSelectorsRead;
7171       // FIXME: Not quite happy with the statistics here. We probably should
7172       // disable this tracking when called via LoadSelector.
7173       // Also, should entries without methods count as misses?
7174       ++This->Reader.NumMethodPoolEntriesRead;
7175       ASTSelectorLookupTrait::data_type Data = *Pos;
7176       if (This->Reader.DeserializationListener)
7177         This->Reader.DeserializationListener->SelectorRead(Data.ID,
7178                                                            This->Sel);
7179 
7180       This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
7181       This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
7182       This->InstanceBits = Data.InstanceBits;
7183       This->FactoryBits = Data.FactoryBits;
7184       This->InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
7185       This->FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
7186       return true;
7187     }
7188 
7189     /// \brief Retrieve the instance methods found by this visitor.
7190     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
7191       return InstanceMethods;
7192     }
7193 
7194     /// \brief Retrieve the instance methods found by this visitor.
7195     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
7196       return FactoryMethods;
7197     }
7198 
7199     unsigned getInstanceBits() const { return InstanceBits; }
7200     unsigned getFactoryBits() const { return FactoryBits; }
7201     bool instanceHasMoreThanOneDecl() const {
7202       return InstanceHasMoreThanOneDecl;
7203     }
7204     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
7205   };
7206 } } // end namespace clang::serialization
7207 
7208 /// \brief Add the given set of methods to the method list.
7209 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
7210                              ObjCMethodList &List) {
7211   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
7212     S.addMethodToGlobalList(&List, Methods[I]);
7213   }
7214 }
7215 
7216 void ASTReader::ReadMethodPool(Selector Sel) {
7217   // Get the selector generation and update it to the current generation.
7218   unsigned &Generation = SelectorGeneration[Sel];
7219   unsigned PriorGeneration = Generation;
7220   Generation = getGeneration();
7221 
7222   // Search for methods defined with this selector.
7223   ++NumMethodPoolLookups;
7224   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
7225   ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor);
7226 
7227   if (Visitor.getInstanceMethods().empty() &&
7228       Visitor.getFactoryMethods().empty())
7229     return;
7230 
7231   ++NumMethodPoolHits;
7232 
7233   if (!getSema())
7234     return;
7235 
7236   Sema &S = *getSema();
7237   Sema::GlobalMethodPool::iterator Pos
7238     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
7239 
7240   Pos->second.first.setBits(Visitor.getInstanceBits());
7241   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
7242   Pos->second.second.setBits(Visitor.getFactoryBits());
7243   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
7244 
7245   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
7246   // when building a module we keep every method individually and may need to
7247   // update hasMoreThanOneDecl as we add the methods.
7248   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
7249   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
7250 }
7251 
7252 void ASTReader::ReadKnownNamespaces(
7253                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
7254   Namespaces.clear();
7255 
7256   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
7257     if (NamespaceDecl *Namespace
7258                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
7259       Namespaces.push_back(Namespace);
7260   }
7261 }
7262 
7263 void ASTReader::ReadUndefinedButUsed(
7264                         llvm::DenseMap<NamedDecl*, SourceLocation> &Undefined) {
7265   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
7266     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
7267     SourceLocation Loc =
7268         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
7269     Undefined.insert(std::make_pair(D, Loc));
7270   }
7271 }
7272 
7273 void ASTReader::ReadTentativeDefinitions(
7274                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
7275   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
7276     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
7277     if (Var)
7278       TentativeDefs.push_back(Var);
7279   }
7280   TentativeDefinitions.clear();
7281 }
7282 
7283 void ASTReader::ReadUnusedFileScopedDecls(
7284                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
7285   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
7286     DeclaratorDecl *D
7287       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
7288     if (D)
7289       Decls.push_back(D);
7290   }
7291   UnusedFileScopedDecls.clear();
7292 }
7293 
7294 void ASTReader::ReadDelegatingConstructors(
7295                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
7296   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
7297     CXXConstructorDecl *D
7298       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
7299     if (D)
7300       Decls.push_back(D);
7301   }
7302   DelegatingCtorDecls.clear();
7303 }
7304 
7305 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
7306   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
7307     TypedefNameDecl *D
7308       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
7309     if (D)
7310       Decls.push_back(D);
7311   }
7312   ExtVectorDecls.clear();
7313 }
7314 
7315 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
7316     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
7317   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
7318        ++I) {
7319     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
7320         GetDecl(UnusedLocalTypedefNameCandidates[I]));
7321     if (D)
7322       Decls.insert(D);
7323   }
7324   UnusedLocalTypedefNameCandidates.clear();
7325 }
7326 
7327 void ASTReader::ReadReferencedSelectors(
7328        SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
7329   if (ReferencedSelectorsData.empty())
7330     return;
7331 
7332   // If there are @selector references added them to its pool. This is for
7333   // implementation of -Wselector.
7334   unsigned int DataSize = ReferencedSelectorsData.size()-1;
7335   unsigned I = 0;
7336   while (I < DataSize) {
7337     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
7338     SourceLocation SelLoc
7339       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
7340     Sels.push_back(std::make_pair(Sel, SelLoc));
7341   }
7342   ReferencedSelectorsData.clear();
7343 }
7344 
7345 void ASTReader::ReadWeakUndeclaredIdentifiers(
7346        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
7347   if (WeakUndeclaredIdentifiers.empty())
7348     return;
7349 
7350   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
7351     IdentifierInfo *WeakId
7352       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7353     IdentifierInfo *AliasId
7354       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7355     SourceLocation Loc
7356       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
7357     bool Used = WeakUndeclaredIdentifiers[I++];
7358     WeakInfo WI(AliasId, Loc);
7359     WI.setUsed(Used);
7360     WeakIDs.push_back(std::make_pair(WeakId, WI));
7361   }
7362   WeakUndeclaredIdentifiers.clear();
7363 }
7364 
7365 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
7366   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
7367     ExternalVTableUse VT;
7368     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
7369     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
7370     VT.DefinitionRequired = VTableUses[Idx++];
7371     VTables.push_back(VT);
7372   }
7373 
7374   VTableUses.clear();
7375 }
7376 
7377 void ASTReader::ReadPendingInstantiations(
7378        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
7379   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
7380     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
7381     SourceLocation Loc
7382       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
7383 
7384     Pending.push_back(std::make_pair(D, Loc));
7385   }
7386   PendingInstantiations.clear();
7387 }
7388 
7389 void ASTReader::ReadLateParsedTemplates(
7390     llvm::DenseMap<const FunctionDecl *, LateParsedTemplate *> &LPTMap) {
7391   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
7392        /* In loop */) {
7393     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
7394 
7395     LateParsedTemplate *LT = new LateParsedTemplate;
7396     LT->D = GetDecl(LateParsedTemplates[Idx++]);
7397 
7398     ModuleFile *F = getOwningModuleFile(LT->D);
7399     assert(F && "No module");
7400 
7401     unsigned TokN = LateParsedTemplates[Idx++];
7402     LT->Toks.reserve(TokN);
7403     for (unsigned T = 0; T < TokN; ++T)
7404       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
7405 
7406     LPTMap[FD] = LT;
7407   }
7408 
7409   LateParsedTemplates.clear();
7410 }
7411 
7412 void ASTReader::LoadSelector(Selector Sel) {
7413   // It would be complicated to avoid reading the methods anyway. So don't.
7414   ReadMethodPool(Sel);
7415 }
7416 
7417 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
7418   assert(ID && "Non-zero identifier ID required");
7419   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
7420   IdentifiersLoaded[ID - 1] = II;
7421   if (DeserializationListener)
7422     DeserializationListener->IdentifierRead(ID, II);
7423 }
7424 
7425 /// \brief Set the globally-visible declarations associated with the given
7426 /// identifier.
7427 ///
7428 /// If the AST reader is currently in a state where the given declaration IDs
7429 /// cannot safely be resolved, they are queued until it is safe to resolve
7430 /// them.
7431 ///
7432 /// \param II an IdentifierInfo that refers to one or more globally-visible
7433 /// declarations.
7434 ///
7435 /// \param DeclIDs the set of declaration IDs with the name @p II that are
7436 /// visible at global scope.
7437 ///
7438 /// \param Decls if non-null, this vector will be populated with the set of
7439 /// deserialized declarations. These declarations will not be pushed into
7440 /// scope.
7441 void
7442 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
7443                               const SmallVectorImpl<uint32_t> &DeclIDs,
7444                                    SmallVectorImpl<Decl *> *Decls) {
7445   if (NumCurrentElementsDeserializing && !Decls) {
7446     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
7447     return;
7448   }
7449 
7450   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
7451     if (!SemaObj) {
7452       // Queue this declaration so that it will be added to the
7453       // translation unit scope and identifier's declaration chain
7454       // once a Sema object is known.
7455       PreloadedDeclIDs.push_back(DeclIDs[I]);
7456       continue;
7457     }
7458 
7459     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
7460 
7461     // If we're simply supposed to record the declarations, do so now.
7462     if (Decls) {
7463       Decls->push_back(D);
7464       continue;
7465     }
7466 
7467     // Introduce this declaration into the translation-unit scope
7468     // and add it to the declaration chain for this identifier, so
7469     // that (unqualified) name lookup will find it.
7470     pushExternalDeclIntoScope(D, II);
7471   }
7472 }
7473 
7474 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
7475   if (ID == 0)
7476     return nullptr;
7477 
7478   if (IdentifiersLoaded.empty()) {
7479     Error("no identifier table in AST file");
7480     return nullptr;
7481   }
7482 
7483   ID -= 1;
7484   if (!IdentifiersLoaded[ID]) {
7485     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
7486     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
7487     ModuleFile *M = I->second;
7488     unsigned Index = ID - M->BaseIdentifierID;
7489     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
7490 
7491     // All of the strings in the AST file are preceded by a 16-bit length.
7492     // Extract that 16-bit length to avoid having to execute strlen().
7493     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
7494     //  unsigned integers.  This is important to avoid integer overflow when
7495     //  we cast them to 'unsigned'.
7496     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
7497     unsigned StrLen = (((unsigned) StrLenPtr[0])
7498                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
7499     IdentifiersLoaded[ID]
7500       = &PP.getIdentifierTable().get(StringRef(Str, StrLen));
7501     if (DeserializationListener)
7502       DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
7503   }
7504 
7505   return IdentifiersLoaded[ID];
7506 }
7507 
7508 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
7509   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
7510 }
7511 
7512 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
7513   if (LocalID < NUM_PREDEF_IDENT_IDS)
7514     return LocalID;
7515 
7516   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7517     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
7518   assert(I != M.IdentifierRemap.end()
7519          && "Invalid index into identifier index remap");
7520 
7521   return LocalID + I->second;
7522 }
7523 
7524 MacroInfo *ASTReader::getMacro(MacroID ID) {
7525   if (ID == 0)
7526     return nullptr;
7527 
7528   if (MacrosLoaded.empty()) {
7529     Error("no macro table in AST file");
7530     return nullptr;
7531   }
7532 
7533   ID -= NUM_PREDEF_MACRO_IDS;
7534   if (!MacrosLoaded[ID]) {
7535     GlobalMacroMapType::iterator I
7536       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
7537     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
7538     ModuleFile *M = I->second;
7539     unsigned Index = ID - M->BaseMacroID;
7540     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
7541 
7542     if (DeserializationListener)
7543       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
7544                                          MacrosLoaded[ID]);
7545   }
7546 
7547   return MacrosLoaded[ID];
7548 }
7549 
7550 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
7551   if (LocalID < NUM_PREDEF_MACRO_IDS)
7552     return LocalID;
7553 
7554   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7555     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
7556   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
7557 
7558   return LocalID + I->second;
7559 }
7560 
7561 serialization::SubmoduleID
7562 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
7563   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
7564     return LocalID;
7565 
7566   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7567     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
7568   assert(I != M.SubmoduleRemap.end()
7569          && "Invalid index into submodule index remap");
7570 
7571   return LocalID + I->second;
7572 }
7573 
7574 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
7575   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
7576     assert(GlobalID == 0 && "Unhandled global submodule ID");
7577     return nullptr;
7578   }
7579 
7580   if (GlobalID > SubmodulesLoaded.size()) {
7581     Error("submodule ID out of range in AST file");
7582     return nullptr;
7583   }
7584 
7585   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
7586 }
7587 
7588 Module *ASTReader::getModule(unsigned ID) {
7589   return getSubmodule(ID);
7590 }
7591 
7592 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
7593   return DecodeSelector(getGlobalSelectorID(M, LocalID));
7594 }
7595 
7596 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
7597   if (ID == 0)
7598     return Selector();
7599 
7600   if (ID > SelectorsLoaded.size()) {
7601     Error("selector ID out of range in AST file");
7602     return Selector();
7603   }
7604 
7605   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
7606     // Load this selector from the selector table.
7607     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
7608     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
7609     ModuleFile &M = *I->second;
7610     ASTSelectorLookupTrait Trait(*this, M);
7611     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
7612     SelectorsLoaded[ID - 1] =
7613       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
7614     if (DeserializationListener)
7615       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
7616   }
7617 
7618   return SelectorsLoaded[ID - 1];
7619 }
7620 
7621 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
7622   return DecodeSelector(ID);
7623 }
7624 
7625 uint32_t ASTReader::GetNumExternalSelectors() {
7626   // ID 0 (the null selector) is considered an external selector.
7627   return getTotalNumSelectors() + 1;
7628 }
7629 
7630 serialization::SelectorID
7631 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
7632   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
7633     return LocalID;
7634 
7635   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7636     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
7637   assert(I != M.SelectorRemap.end()
7638          && "Invalid index into selector index remap");
7639 
7640   return LocalID + I->second;
7641 }
7642 
7643 DeclarationName
7644 ASTReader::ReadDeclarationName(ModuleFile &F,
7645                                const RecordData &Record, unsigned &Idx) {
7646   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
7647   switch (Kind) {
7648   case DeclarationName::Identifier:
7649     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
7650 
7651   case DeclarationName::ObjCZeroArgSelector:
7652   case DeclarationName::ObjCOneArgSelector:
7653   case DeclarationName::ObjCMultiArgSelector:
7654     return DeclarationName(ReadSelector(F, Record, Idx));
7655 
7656   case DeclarationName::CXXConstructorName:
7657     return Context.DeclarationNames.getCXXConstructorName(
7658                           Context.getCanonicalType(readType(F, Record, Idx)));
7659 
7660   case DeclarationName::CXXDestructorName:
7661     return Context.DeclarationNames.getCXXDestructorName(
7662                           Context.getCanonicalType(readType(F, Record, Idx)));
7663 
7664   case DeclarationName::CXXConversionFunctionName:
7665     return Context.DeclarationNames.getCXXConversionFunctionName(
7666                           Context.getCanonicalType(readType(F, Record, Idx)));
7667 
7668   case DeclarationName::CXXOperatorName:
7669     return Context.DeclarationNames.getCXXOperatorName(
7670                                        (OverloadedOperatorKind)Record[Idx++]);
7671 
7672   case DeclarationName::CXXLiteralOperatorName:
7673     return Context.DeclarationNames.getCXXLiteralOperatorName(
7674                                        GetIdentifierInfo(F, Record, Idx));
7675 
7676   case DeclarationName::CXXUsingDirective:
7677     return DeclarationName::getUsingDirectiveName();
7678   }
7679 
7680   llvm_unreachable("Invalid NameKind!");
7681 }
7682 
7683 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
7684                                        DeclarationNameLoc &DNLoc,
7685                                        DeclarationName Name,
7686                                       const RecordData &Record, unsigned &Idx) {
7687   switch (Name.getNameKind()) {
7688   case DeclarationName::CXXConstructorName:
7689   case DeclarationName::CXXDestructorName:
7690   case DeclarationName::CXXConversionFunctionName:
7691     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
7692     break;
7693 
7694   case DeclarationName::CXXOperatorName:
7695     DNLoc.CXXOperatorName.BeginOpNameLoc
7696         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7697     DNLoc.CXXOperatorName.EndOpNameLoc
7698         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7699     break;
7700 
7701   case DeclarationName::CXXLiteralOperatorName:
7702     DNLoc.CXXLiteralOperatorName.OpNameLoc
7703         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7704     break;
7705 
7706   case DeclarationName::Identifier:
7707   case DeclarationName::ObjCZeroArgSelector:
7708   case DeclarationName::ObjCOneArgSelector:
7709   case DeclarationName::ObjCMultiArgSelector:
7710   case DeclarationName::CXXUsingDirective:
7711     break;
7712   }
7713 }
7714 
7715 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
7716                                         DeclarationNameInfo &NameInfo,
7717                                       const RecordData &Record, unsigned &Idx) {
7718   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
7719   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
7720   DeclarationNameLoc DNLoc;
7721   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
7722   NameInfo.setInfo(DNLoc);
7723 }
7724 
7725 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
7726                                   const RecordData &Record, unsigned &Idx) {
7727   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
7728   unsigned NumTPLists = Record[Idx++];
7729   Info.NumTemplParamLists = NumTPLists;
7730   if (NumTPLists) {
7731     Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
7732     for (unsigned i=0; i != NumTPLists; ++i)
7733       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
7734   }
7735 }
7736 
7737 TemplateName
7738 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
7739                             unsigned &Idx) {
7740   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
7741   switch (Kind) {
7742   case TemplateName::Template:
7743       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
7744 
7745   case TemplateName::OverloadedTemplate: {
7746     unsigned size = Record[Idx++];
7747     UnresolvedSet<8> Decls;
7748     while (size--)
7749       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
7750 
7751     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
7752   }
7753 
7754   case TemplateName::QualifiedTemplate: {
7755     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
7756     bool hasTemplKeyword = Record[Idx++];
7757     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
7758     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
7759   }
7760 
7761   case TemplateName::DependentTemplate: {
7762     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
7763     if (Record[Idx++])  // isIdentifier
7764       return Context.getDependentTemplateName(NNS,
7765                                                GetIdentifierInfo(F, Record,
7766                                                                  Idx));
7767     return Context.getDependentTemplateName(NNS,
7768                                          (OverloadedOperatorKind)Record[Idx++]);
7769   }
7770 
7771   case TemplateName::SubstTemplateTemplateParm: {
7772     TemplateTemplateParmDecl *param
7773       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
7774     if (!param) return TemplateName();
7775     TemplateName replacement = ReadTemplateName(F, Record, Idx);
7776     return Context.getSubstTemplateTemplateParm(param, replacement);
7777   }
7778 
7779   case TemplateName::SubstTemplateTemplateParmPack: {
7780     TemplateTemplateParmDecl *Param
7781       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
7782     if (!Param)
7783       return TemplateName();
7784 
7785     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
7786     if (ArgPack.getKind() != TemplateArgument::Pack)
7787       return TemplateName();
7788 
7789     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
7790   }
7791   }
7792 
7793   llvm_unreachable("Unhandled template name kind!");
7794 }
7795 
7796 TemplateArgument
7797 ASTReader::ReadTemplateArgument(ModuleFile &F,
7798                                 const RecordData &Record, unsigned &Idx) {
7799   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
7800   switch (Kind) {
7801   case TemplateArgument::Null:
7802     return TemplateArgument();
7803   case TemplateArgument::Type:
7804     return TemplateArgument(readType(F, Record, Idx));
7805   case TemplateArgument::Declaration: {
7806     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
7807     return TemplateArgument(D, readType(F, Record, Idx));
7808   }
7809   case TemplateArgument::NullPtr:
7810     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
7811   case TemplateArgument::Integral: {
7812     llvm::APSInt Value = ReadAPSInt(Record, Idx);
7813     QualType T = readType(F, Record, Idx);
7814     return TemplateArgument(Context, Value, T);
7815   }
7816   case TemplateArgument::Template:
7817     return TemplateArgument(ReadTemplateName(F, Record, Idx));
7818   case TemplateArgument::TemplateExpansion: {
7819     TemplateName Name = ReadTemplateName(F, Record, Idx);
7820     Optional<unsigned> NumTemplateExpansions;
7821     if (unsigned NumExpansions = Record[Idx++])
7822       NumTemplateExpansions = NumExpansions - 1;
7823     return TemplateArgument(Name, NumTemplateExpansions);
7824   }
7825   case TemplateArgument::Expression:
7826     return TemplateArgument(ReadExpr(F));
7827   case TemplateArgument::Pack: {
7828     unsigned NumArgs = Record[Idx++];
7829     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
7830     for (unsigned I = 0; I != NumArgs; ++I)
7831       Args[I] = ReadTemplateArgument(F, Record, Idx);
7832     return TemplateArgument(Args, NumArgs);
7833   }
7834   }
7835 
7836   llvm_unreachable("Unhandled template argument kind!");
7837 }
7838 
7839 TemplateParameterList *
7840 ASTReader::ReadTemplateParameterList(ModuleFile &F,
7841                                      const RecordData &Record, unsigned &Idx) {
7842   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
7843   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
7844   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
7845 
7846   unsigned NumParams = Record[Idx++];
7847   SmallVector<NamedDecl *, 16> Params;
7848   Params.reserve(NumParams);
7849   while (NumParams--)
7850     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
7851 
7852   TemplateParameterList* TemplateParams =
7853     TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
7854                                   Params.data(), Params.size(), RAngleLoc);
7855   return TemplateParams;
7856 }
7857 
7858 void
7859 ASTReader::
7860 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
7861                          ModuleFile &F, const RecordData &Record,
7862                          unsigned &Idx) {
7863   unsigned NumTemplateArgs = Record[Idx++];
7864   TemplArgs.reserve(NumTemplateArgs);
7865   while (NumTemplateArgs--)
7866     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx));
7867 }
7868 
7869 /// \brief Read a UnresolvedSet structure.
7870 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
7871                                   const RecordData &Record, unsigned &Idx) {
7872   unsigned NumDecls = Record[Idx++];
7873   Set.reserve(Context, NumDecls);
7874   while (NumDecls--) {
7875     DeclID ID = ReadDeclID(F, Record, Idx);
7876     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
7877     Set.addLazyDecl(Context, ID, AS);
7878   }
7879 }
7880 
7881 CXXBaseSpecifier
7882 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
7883                                 const RecordData &Record, unsigned &Idx) {
7884   bool isVirtual = static_cast<bool>(Record[Idx++]);
7885   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
7886   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
7887   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
7888   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
7889   SourceRange Range = ReadSourceRange(F, Record, Idx);
7890   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
7891   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
7892                           EllipsisLoc);
7893   Result.setInheritConstructors(inheritConstructors);
7894   return Result;
7895 }
7896 
7897 std::pair<CXXCtorInitializer **, unsigned>
7898 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
7899                                    unsigned &Idx) {
7900   CXXCtorInitializer **CtorInitializers = nullptr;
7901   unsigned NumInitializers = Record[Idx++];
7902   if (NumInitializers) {
7903     CtorInitializers
7904         = new (Context) CXXCtorInitializer*[NumInitializers];
7905     for (unsigned i=0; i != NumInitializers; ++i) {
7906       TypeSourceInfo *TInfo = nullptr;
7907       bool IsBaseVirtual = false;
7908       FieldDecl *Member = nullptr;
7909       IndirectFieldDecl *IndirectMember = nullptr;
7910 
7911       CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
7912       switch (Type) {
7913       case CTOR_INITIALIZER_BASE:
7914         TInfo = GetTypeSourceInfo(F, Record, Idx);
7915         IsBaseVirtual = Record[Idx++];
7916         break;
7917 
7918       case CTOR_INITIALIZER_DELEGATING:
7919         TInfo = GetTypeSourceInfo(F, Record, Idx);
7920         break;
7921 
7922        case CTOR_INITIALIZER_MEMBER:
7923         Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
7924         break;
7925 
7926        case CTOR_INITIALIZER_INDIRECT_MEMBER:
7927         IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
7928         break;
7929       }
7930 
7931       SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
7932       Expr *Init = ReadExpr(F);
7933       SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
7934       SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
7935       bool IsWritten = Record[Idx++];
7936       unsigned SourceOrderOrNumArrayIndices;
7937       SmallVector<VarDecl *, 8> Indices;
7938       if (IsWritten) {
7939         SourceOrderOrNumArrayIndices = Record[Idx++];
7940       } else {
7941         SourceOrderOrNumArrayIndices = Record[Idx++];
7942         Indices.reserve(SourceOrderOrNumArrayIndices);
7943         for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
7944           Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx));
7945       }
7946 
7947       CXXCtorInitializer *BOMInit;
7948       if (Type == CTOR_INITIALIZER_BASE) {
7949         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, IsBaseVirtual,
7950                                              LParenLoc, Init, RParenLoc,
7951                                              MemberOrEllipsisLoc);
7952       } else if (Type == CTOR_INITIALIZER_DELEGATING) {
7953         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, LParenLoc,
7954                                                    Init, RParenLoc);
7955       } else if (IsWritten) {
7956         if (Member)
7957           BOMInit = new (Context) CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc,
7958                                                LParenLoc, Init, RParenLoc);
7959         else
7960           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7961                                                MemberOrEllipsisLoc, LParenLoc,
7962                                                Init, RParenLoc);
7963       } else {
7964         if (IndirectMember) {
7965           assert(Indices.empty() && "Indirect field improperly initialized");
7966           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7967                                                      MemberOrEllipsisLoc, LParenLoc,
7968                                                      Init, RParenLoc);
7969         } else {
7970           BOMInit = CXXCtorInitializer::Create(Context, Member, MemberOrEllipsisLoc,
7971                                                LParenLoc, Init, RParenLoc,
7972                                                Indices.data(), Indices.size());
7973         }
7974       }
7975 
7976       if (IsWritten)
7977         BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
7978       CtorInitializers[i] = BOMInit;
7979     }
7980   }
7981 
7982   return std::make_pair(CtorInitializers, NumInitializers);
7983 }
7984 
7985 NestedNameSpecifier *
7986 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
7987                                    const RecordData &Record, unsigned &Idx) {
7988   unsigned N = Record[Idx++];
7989   NestedNameSpecifier *NNS = nullptr, *Prev = nullptr;
7990   for (unsigned I = 0; I != N; ++I) {
7991     NestedNameSpecifier::SpecifierKind Kind
7992       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
7993     switch (Kind) {
7994     case NestedNameSpecifier::Identifier: {
7995       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
7996       NNS = NestedNameSpecifier::Create(Context, Prev, II);
7997       break;
7998     }
7999 
8000     case NestedNameSpecifier::Namespace: {
8001       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8002       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
8003       break;
8004     }
8005 
8006     case NestedNameSpecifier::NamespaceAlias: {
8007       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8008       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
8009       break;
8010     }
8011 
8012     case NestedNameSpecifier::TypeSpec:
8013     case NestedNameSpecifier::TypeSpecWithTemplate: {
8014       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
8015       if (!T)
8016         return nullptr;
8017 
8018       bool Template = Record[Idx++];
8019       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
8020       break;
8021     }
8022 
8023     case NestedNameSpecifier::Global: {
8024       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
8025       // No associated value, and there can't be a prefix.
8026       break;
8027     }
8028 
8029     case NestedNameSpecifier::Super: {
8030       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8031       NNS = NestedNameSpecifier::SuperSpecifier(Context, RD);
8032       break;
8033     }
8034     }
8035     Prev = NNS;
8036   }
8037   return NNS;
8038 }
8039 
8040 NestedNameSpecifierLoc
8041 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
8042                                       unsigned &Idx) {
8043   unsigned N = Record[Idx++];
8044   NestedNameSpecifierLocBuilder Builder;
8045   for (unsigned I = 0; I != N; ++I) {
8046     NestedNameSpecifier::SpecifierKind Kind
8047       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
8048     switch (Kind) {
8049     case NestedNameSpecifier::Identifier: {
8050       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
8051       SourceRange Range = ReadSourceRange(F, Record, Idx);
8052       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8053       break;
8054     }
8055 
8056     case NestedNameSpecifier::Namespace: {
8057       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8058       SourceRange Range = ReadSourceRange(F, Record, Idx);
8059       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8060       break;
8061     }
8062 
8063     case NestedNameSpecifier::NamespaceAlias: {
8064       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8065       SourceRange Range = ReadSourceRange(F, Record, Idx);
8066       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8067       break;
8068     }
8069 
8070     case NestedNameSpecifier::TypeSpec:
8071     case NestedNameSpecifier::TypeSpecWithTemplate: {
8072       bool Template = Record[Idx++];
8073       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
8074       if (!T)
8075         return NestedNameSpecifierLoc();
8076       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8077 
8078       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8079       Builder.Extend(Context,
8080                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8081                      T->getTypeLoc(), ColonColonLoc);
8082       break;
8083     }
8084 
8085     case NestedNameSpecifier::Global: {
8086       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8087       Builder.MakeGlobal(Context, ColonColonLoc);
8088       break;
8089     }
8090 
8091     case NestedNameSpecifier::Super: {
8092       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8093       SourceRange Range = ReadSourceRange(F, Record, Idx);
8094       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8095       break;
8096     }
8097     }
8098   }
8099 
8100   return Builder.getWithLocInContext(Context);
8101 }
8102 
8103 SourceRange
8104 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8105                            unsigned &Idx) {
8106   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8107   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8108   return SourceRange(beg, end);
8109 }
8110 
8111 /// \brief Read an integral value
8112 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
8113   unsigned BitWidth = Record[Idx++];
8114   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
8115   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
8116   Idx += NumWords;
8117   return Result;
8118 }
8119 
8120 /// \brief Read a signed integral value
8121 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
8122   bool isUnsigned = Record[Idx++];
8123   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
8124 }
8125 
8126 /// \brief Read a floating-point value
8127 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
8128                                      const llvm::fltSemantics &Sem,
8129                                      unsigned &Idx) {
8130   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
8131 }
8132 
8133 // \brief Read a string
8134 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8135   unsigned Len = Record[Idx++];
8136   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8137   Idx += Len;
8138   return Result;
8139 }
8140 
8141 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8142                                 unsigned &Idx) {
8143   std::string Filename = ReadString(Record, Idx);
8144   ResolveImportedPath(F, Filename);
8145   return Filename;
8146 }
8147 
8148 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8149                                          unsigned &Idx) {
8150   unsigned Major = Record[Idx++];
8151   unsigned Minor = Record[Idx++];
8152   unsigned Subminor = Record[Idx++];
8153   if (Minor == 0)
8154     return VersionTuple(Major);
8155   if (Subminor == 0)
8156     return VersionTuple(Major, Minor - 1);
8157   return VersionTuple(Major, Minor - 1, Subminor - 1);
8158 }
8159 
8160 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8161                                           const RecordData &Record,
8162                                           unsigned &Idx) {
8163   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8164   return CXXTemporary::Create(Context, Decl);
8165 }
8166 
8167 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
8168   return Diag(CurrentImportLoc, DiagID);
8169 }
8170 
8171 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
8172   return Diags.Report(Loc, DiagID);
8173 }
8174 
8175 /// \brief Retrieve the identifier table associated with the
8176 /// preprocessor.
8177 IdentifierTable &ASTReader::getIdentifierTable() {
8178   return PP.getIdentifierTable();
8179 }
8180 
8181 /// \brief Record that the given ID maps to the given switch-case
8182 /// statement.
8183 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8184   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8185          "Already have a SwitchCase with this ID");
8186   (*CurrSwitchCaseStmts)[ID] = SC;
8187 }
8188 
8189 /// \brief Retrieve the switch-case statement with the given ID.
8190 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8191   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8192   return (*CurrSwitchCaseStmts)[ID];
8193 }
8194 
8195 void ASTReader::ClearSwitchCaseIDs() {
8196   CurrSwitchCaseStmts->clear();
8197 }
8198 
8199 void ASTReader::ReadComments() {
8200   std::vector<RawComment *> Comments;
8201   for (SmallVectorImpl<std::pair<BitstreamCursor,
8202                                  serialization::ModuleFile *> >::iterator
8203        I = CommentsCursors.begin(),
8204        E = CommentsCursors.end();
8205        I != E; ++I) {
8206     Comments.clear();
8207     BitstreamCursor &Cursor = I->first;
8208     serialization::ModuleFile &F = *I->second;
8209     SavedStreamPosition SavedPosition(Cursor);
8210 
8211     RecordData Record;
8212     while (true) {
8213       llvm::BitstreamEntry Entry =
8214         Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd);
8215 
8216       switch (Entry.Kind) {
8217       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
8218       case llvm::BitstreamEntry::Error:
8219         Error("malformed block record in AST file");
8220         return;
8221       case llvm::BitstreamEntry::EndBlock:
8222         goto NextCursor;
8223       case llvm::BitstreamEntry::Record:
8224         // The interesting case.
8225         break;
8226       }
8227 
8228       // Read a record.
8229       Record.clear();
8230       switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
8231       case COMMENTS_RAW_COMMENT: {
8232         unsigned Idx = 0;
8233         SourceRange SR = ReadSourceRange(F, Record, Idx);
8234         RawComment::CommentKind Kind =
8235             (RawComment::CommentKind) Record[Idx++];
8236         bool IsTrailingComment = Record[Idx++];
8237         bool IsAlmostTrailingComment = Record[Idx++];
8238         Comments.push_back(new (Context) RawComment(
8239             SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
8240             Context.getLangOpts().CommentOpts.ParseAllComments));
8241         break;
8242       }
8243       }
8244     }
8245   NextCursor:
8246     Context.Comments.addDeserializedComments(Comments);
8247   }
8248 }
8249 
8250 void ASTReader::getInputFiles(ModuleFile &F,
8251                              SmallVectorImpl<serialization::InputFile> &Files) {
8252   for (unsigned I = 0, E = F.InputFilesLoaded.size(); I != E; ++I) {
8253     unsigned ID = I+1;
8254     Files.push_back(getInputFile(F, ID));
8255   }
8256 }
8257 
8258 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
8259   // If we know the owning module, use it.
8260   if (Module *M = D->getOwningModule())
8261     return M->getFullModuleName();
8262 
8263   // Otherwise, use the name of the top-level module the decl is within.
8264   if (ModuleFile *M = getOwningModuleFile(D))
8265     return M->ModuleName;
8266 
8267   // Not from a module.
8268   return "";
8269 }
8270 
8271 void ASTReader::finishPendingActions() {
8272   while (!PendingIdentifierInfos.empty() ||
8273          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
8274          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
8275          !PendingUpdateRecords.empty()) {
8276     // If any identifiers with corresponding top-level declarations have
8277     // been loaded, load those declarations now.
8278     typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> >
8279       TopLevelDeclsMap;
8280     TopLevelDeclsMap TopLevelDecls;
8281 
8282     while (!PendingIdentifierInfos.empty()) {
8283       IdentifierInfo *II = PendingIdentifierInfos.back().first;
8284       SmallVector<uint32_t, 4> DeclIDs =
8285           std::move(PendingIdentifierInfos.back().second);
8286       PendingIdentifierInfos.pop_back();
8287 
8288       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
8289     }
8290 
8291     // For each decl chain that we wanted to complete while deserializing, mark
8292     // it as "still needs to be completed".
8293     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
8294       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
8295     }
8296     PendingIncompleteDeclChains.clear();
8297 
8298     // Load pending declaration chains.
8299     for (unsigned I = 0; I != PendingDeclChains.size(); ++I) {
8300       loadPendingDeclChain(PendingDeclChains[I]);
8301       PendingDeclChainsKnown.erase(PendingDeclChains[I]);
8302     }
8303     assert(PendingDeclChainsKnown.empty());
8304     PendingDeclChains.clear();
8305 
8306     // Make the most recent of the top-level declarations visible.
8307     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
8308            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
8309       IdentifierInfo *II = TLD->first;
8310       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
8311         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
8312       }
8313     }
8314 
8315     // Load any pending macro definitions.
8316     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
8317       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
8318       SmallVector<PendingMacroInfo, 2> GlobalIDs;
8319       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
8320       // Initialize the macro history from chained-PCHs ahead of module imports.
8321       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8322            ++IDIdx) {
8323         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8324         if (Info.M->Kind != MK_ImplicitModule &&
8325             Info.M->Kind != MK_ExplicitModule)
8326           resolvePendingMacro(II, Info);
8327       }
8328       // Handle module imports.
8329       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8330            ++IDIdx) {
8331         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8332         if (Info.M->Kind == MK_ImplicitModule ||
8333             Info.M->Kind == MK_ExplicitModule)
8334           resolvePendingMacro(II, Info);
8335       }
8336     }
8337     PendingMacroIDs.clear();
8338 
8339     // Wire up the DeclContexts for Decls that we delayed setting until
8340     // recursive loading is completed.
8341     while (!PendingDeclContextInfos.empty()) {
8342       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
8343       PendingDeclContextInfos.pop_front();
8344       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
8345       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
8346       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
8347     }
8348 
8349     // Perform any pending declaration updates.
8350     while (!PendingUpdateRecords.empty()) {
8351       auto Update = PendingUpdateRecords.pop_back_val();
8352       ReadingKindTracker ReadingKind(Read_Decl, *this);
8353       loadDeclUpdateRecords(Update.first, Update.second);
8354     }
8355   }
8356 
8357   // At this point, all update records for loaded decls are in place, so any
8358   // fake class definitions should have become real.
8359   assert(PendingFakeDefinitionData.empty() &&
8360          "faked up a class definition but never saw the real one");
8361 
8362   // If we deserialized any C++ or Objective-C class definitions, any
8363   // Objective-C protocol definitions, or any redeclarable templates, make sure
8364   // that all redeclarations point to the definitions. Note that this can only
8365   // happen now, after the redeclaration chains have been fully wired.
8366   for (Decl *D : PendingDefinitions) {
8367     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
8368       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
8369         // Make sure that the TagType points at the definition.
8370         const_cast<TagType*>(TagT)->decl = TD;
8371       }
8372 
8373       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
8374         for (auto R : RD->redecls()) {
8375           assert((R == D) == R->isThisDeclarationADefinition() &&
8376                  "declaration thinks it's the definition but it isn't");
8377           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
8378         }
8379       }
8380 
8381       continue;
8382     }
8383 
8384     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
8385       // Make sure that the ObjCInterfaceType points at the definition.
8386       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
8387         ->Decl = ID;
8388 
8389       for (auto R : ID->redecls())
8390         R->Data = ID->Data;
8391 
8392       continue;
8393     }
8394 
8395     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
8396       for (auto R : PD->redecls())
8397         R->Data = PD->Data;
8398 
8399       continue;
8400     }
8401 
8402     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
8403     for (auto R : RTD->redecls())
8404       R->Common = RTD->Common;
8405   }
8406   PendingDefinitions.clear();
8407 
8408   // Load the bodies of any functions or methods we've encountered. We do
8409   // this now (delayed) so that we can be sure that the declaration chains
8410   // have been fully wired up.
8411   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
8412                                PBEnd = PendingBodies.end();
8413        PB != PBEnd; ++PB) {
8414     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
8415       // FIXME: Check for =delete/=default?
8416       // FIXME: Complain about ODR violations here?
8417       if (!getContext().getLangOpts().Modules || !FD->hasBody())
8418         FD->setLazyBody(PB->second);
8419       continue;
8420     }
8421 
8422     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
8423     if (!getContext().getLangOpts().Modules || !MD->hasBody())
8424       MD->setLazyBody(PB->second);
8425   }
8426   PendingBodies.clear();
8427 }
8428 
8429 void ASTReader::diagnoseOdrViolations() {
8430   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty())
8431     return;
8432 
8433   // Trigger the import of the full definition of each class that had any
8434   // odr-merging problems, so we can produce better diagnostics for them.
8435   // These updates may in turn find and diagnose some ODR failures, so take
8436   // ownership of the set first.
8437   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
8438   PendingOdrMergeFailures.clear();
8439   for (auto &Merge : OdrMergeFailures) {
8440     Merge.first->buildLookup();
8441     Merge.first->decls_begin();
8442     Merge.first->bases_begin();
8443     Merge.first->vbases_begin();
8444     for (auto *RD : Merge.second) {
8445       RD->decls_begin();
8446       RD->bases_begin();
8447       RD->vbases_begin();
8448     }
8449   }
8450 
8451   // For each declaration from a merged context, check that the canonical
8452   // definition of that context also contains a declaration of the same
8453   // entity.
8454   //
8455   // Caution: this loop does things that might invalidate iterators into
8456   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
8457   while (!PendingOdrMergeChecks.empty()) {
8458     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
8459 
8460     // FIXME: Skip over implicit declarations for now. This matters for things
8461     // like implicitly-declared special member functions. This isn't entirely
8462     // correct; we can end up with multiple unmerged declarations of the same
8463     // implicit entity.
8464     if (D->isImplicit())
8465       continue;
8466 
8467     DeclContext *CanonDef = D->getDeclContext();
8468 
8469     bool Found = false;
8470     const Decl *DCanon = D->getCanonicalDecl();
8471 
8472     for (auto RI : D->redecls()) {
8473       if (RI->getLexicalDeclContext() == CanonDef) {
8474         Found = true;
8475         break;
8476       }
8477     }
8478     if (Found)
8479       continue;
8480 
8481     llvm::SmallVector<const NamedDecl*, 4> Candidates;
8482     DeclContext::lookup_result R = CanonDef->lookup(D->getDeclName());
8483     for (DeclContext::lookup_iterator I = R.begin(), E = R.end();
8484          !Found && I != E; ++I) {
8485       for (auto RI : (*I)->redecls()) {
8486         if (RI->getLexicalDeclContext() == CanonDef) {
8487           // This declaration is present in the canonical definition. If it's
8488           // in the same redecl chain, it's the one we're looking for.
8489           if (RI->getCanonicalDecl() == DCanon)
8490             Found = true;
8491           else
8492             Candidates.push_back(cast<NamedDecl>(RI));
8493           break;
8494         }
8495       }
8496     }
8497 
8498     if (!Found) {
8499       // The AST doesn't like TagDecls becoming invalid after they've been
8500       // completed. We only really need to mark FieldDecls as invalid here.
8501       if (!isa<TagDecl>(D))
8502         D->setInvalidDecl();
8503 
8504       // Ensure we don't accidentally recursively enter deserialization while
8505       // we're producing our diagnostic.
8506       Deserializing RecursionGuard(this);
8507 
8508       std::string CanonDefModule =
8509           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
8510       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
8511         << D << getOwningModuleNameForDiagnostic(D)
8512         << CanonDef << CanonDefModule.empty() << CanonDefModule;
8513 
8514       if (Candidates.empty())
8515         Diag(cast<Decl>(CanonDef)->getLocation(),
8516              diag::note_module_odr_violation_no_possible_decls) << D;
8517       else {
8518         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
8519           Diag(Candidates[I]->getLocation(),
8520                diag::note_module_odr_violation_possible_decl)
8521             << Candidates[I];
8522       }
8523 
8524       DiagnosedOdrMergeFailures.insert(CanonDef);
8525     }
8526   }
8527 
8528   if (OdrMergeFailures.empty())
8529     return;
8530 
8531   // Ensure we don't accidentally recursively enter deserialization while
8532   // we're producing our diagnostics.
8533   Deserializing RecursionGuard(this);
8534 
8535   // Issue any pending ODR-failure diagnostics.
8536   for (auto &Merge : OdrMergeFailures) {
8537     // If we've already pointed out a specific problem with this class, don't
8538     // bother issuing a general "something's different" diagnostic.
8539     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
8540       continue;
8541 
8542     bool Diagnosed = false;
8543     for (auto *RD : Merge.second) {
8544       // Multiple different declarations got merged together; tell the user
8545       // where they came from.
8546       if (Merge.first != RD) {
8547         // FIXME: Walk the definition, figure out what's different,
8548         // and diagnose that.
8549         if (!Diagnosed) {
8550           std::string Module = getOwningModuleNameForDiagnostic(Merge.first);
8551           Diag(Merge.first->getLocation(),
8552                diag::err_module_odr_violation_different_definitions)
8553             << Merge.first << Module.empty() << Module;
8554           Diagnosed = true;
8555         }
8556 
8557         Diag(RD->getLocation(),
8558              diag::note_module_odr_violation_different_definitions)
8559           << getOwningModuleNameForDiagnostic(RD);
8560       }
8561     }
8562 
8563     if (!Diagnosed) {
8564       // All definitions are updates to the same declaration. This happens if a
8565       // module instantiates the declaration of a class template specialization
8566       // and two or more other modules instantiate its definition.
8567       //
8568       // FIXME: Indicate which modules had instantiations of this definition.
8569       // FIXME: How can this even happen?
8570       Diag(Merge.first->getLocation(),
8571            diag::err_module_odr_violation_different_instantiations)
8572         << Merge.first;
8573     }
8574   }
8575 }
8576 
8577 void ASTReader::FinishedDeserializing() {
8578   assert(NumCurrentElementsDeserializing &&
8579          "FinishedDeserializing not paired with StartedDeserializing");
8580   if (NumCurrentElementsDeserializing == 1) {
8581     // We decrease NumCurrentElementsDeserializing only after pending actions
8582     // are finished, to avoid recursively re-calling finishPendingActions().
8583     finishPendingActions();
8584   }
8585   --NumCurrentElementsDeserializing;
8586 
8587   if (NumCurrentElementsDeserializing == 0) {
8588     diagnoseOdrViolations();
8589 
8590     // We are not in recursive loading, so it's safe to pass the "interesting"
8591     // decls to the consumer.
8592     if (Consumer)
8593       PassInterestingDeclsToConsumer();
8594   }
8595 }
8596 
8597 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
8598   D = D->getMostRecentDecl();
8599 
8600   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
8601     SemaObj->TUScope->AddDecl(D);
8602   } else if (SemaObj->TUScope) {
8603     // Adding the decl to IdResolver may have failed because it was already in
8604     // (even though it was not added in scope). If it is already in, make sure
8605     // it gets in the scope as well.
8606     if (std::find(SemaObj->IdResolver.begin(Name),
8607                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
8608       SemaObj->TUScope->AddDecl(D);
8609   }
8610 }
8611 
8612 ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot,
8613                      bool DisableValidation, bool AllowASTWithCompilerErrors,
8614                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
8615                      bool UseGlobalIndex)
8616     : Listener(new PCHValidator(PP, *this)), DeserializationListener(nullptr),
8617       OwnsDeserializationListener(false), SourceMgr(PP.getSourceManager()),
8618       FileMgr(PP.getFileManager()), Diags(PP.getDiagnostics()),
8619       SemaObj(nullptr), PP(PP), Context(Context), Consumer(nullptr),
8620       ModuleMgr(PP.getFileManager()), isysroot(isysroot),
8621       DisableValidation(DisableValidation),
8622       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
8623       AllowConfigurationMismatch(AllowConfigurationMismatch),
8624       ValidateSystemInputs(ValidateSystemInputs),
8625       UseGlobalIndex(UseGlobalIndex), TriedLoadingGlobalIndex(false),
8626       CurrSwitchCaseStmts(&SwitchCaseStmts),
8627       NumSLocEntriesRead(0), TotalNumSLocEntries(0), NumStatementsRead(0),
8628       TotalNumStatements(0), NumMacrosRead(0), TotalNumMacros(0),
8629       NumIdentifierLookups(0), NumIdentifierLookupHits(0), NumSelectorsRead(0),
8630       NumMethodPoolEntriesRead(0), NumMethodPoolLookups(0),
8631       NumMethodPoolHits(0), NumMethodPoolTableLookups(0),
8632       NumMethodPoolTableHits(0), TotalNumMethodPoolEntries(0),
8633       NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0),
8634       NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0),
8635       TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0),
8636       PassingDeclsToConsumer(false), NumCXXBaseSpecifiersLoaded(0),
8637       ReadingKind(Read_None) {
8638   SourceMgr.setExternalSLocEntrySource(this);
8639 }
8640 
8641 ASTReader::~ASTReader() {
8642   if (OwnsDeserializationListener)
8643     delete DeserializationListener;
8644 
8645   for (DeclContextVisibleUpdatesPending::iterator
8646            I = PendingVisibleUpdates.begin(),
8647            E = PendingVisibleUpdates.end();
8648        I != E; ++I) {
8649     for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
8650                                              F = I->second.end();
8651          J != F; ++J)
8652       delete J->first;
8653   }
8654 }
8655