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