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