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