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