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, in ReadAST.
2345         SourceLocation ImportLoc =
2346             ReadUntranslatedSourceLocation(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 OBJC_CATEGORIES_MAP: {
3037       if (F.LocalNumObjCCategoriesInMap != 0) {
3038         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3039         return Failure;
3040       }
3041 
3042       F.LocalNumObjCCategoriesInMap = Record[0];
3043       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3044       break;
3045     }
3046 
3047     case OBJC_CATEGORIES:
3048       F.ObjCCategories.swap(Record);
3049       break;
3050 
3051     case CXX_BASE_SPECIFIER_OFFSETS: {
3052       if (F.LocalNumCXXBaseSpecifiers != 0) {
3053         Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
3054         return Failure;
3055       }
3056 
3057       F.LocalNumCXXBaseSpecifiers = Record[0];
3058       F.CXXBaseSpecifiersOffsets = (const uint32_t *)Blob.data();
3059       break;
3060     }
3061 
3062     case CXX_CTOR_INITIALIZERS_OFFSETS: {
3063       if (F.LocalNumCXXCtorInitializers != 0) {
3064         Error("duplicate CXX_CTOR_INITIALIZERS_OFFSETS record in AST file");
3065         return Failure;
3066       }
3067 
3068       F.LocalNumCXXCtorInitializers = Record[0];
3069       F.CXXCtorInitializersOffsets = (const uint32_t *)Blob.data();
3070       break;
3071     }
3072 
3073     case DIAG_PRAGMA_MAPPINGS:
3074       if (F.PragmaDiagMappings.empty())
3075         F.PragmaDiagMappings.swap(Record);
3076       else
3077         F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
3078                                     Record.begin(), Record.end());
3079       break;
3080 
3081     case CUDA_SPECIAL_DECL_REFS:
3082       // Later tables overwrite earlier ones.
3083       // FIXME: Modules will have trouble with this.
3084       CUDASpecialDeclRefs.clear();
3085       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3086         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3087       break;
3088 
3089     case HEADER_SEARCH_TABLE: {
3090       F.HeaderFileInfoTableData = Blob.data();
3091       F.LocalNumHeaderFileInfos = Record[1];
3092       if (Record[0]) {
3093         F.HeaderFileInfoTable
3094           = HeaderFileInfoLookupTable::Create(
3095                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3096                    (const unsigned char *)F.HeaderFileInfoTableData,
3097                    HeaderFileInfoTrait(*this, F,
3098                                        &PP.getHeaderSearchInfo(),
3099                                        Blob.data() + Record[2]));
3100 
3101         PP.getHeaderSearchInfo().SetExternalSource(this);
3102         if (!PP.getHeaderSearchInfo().getExternalLookup())
3103           PP.getHeaderSearchInfo().SetExternalLookup(this);
3104       }
3105       break;
3106     }
3107 
3108     case FP_PRAGMA_OPTIONS:
3109       // Later tables overwrite earlier ones.
3110       FPPragmaOptions.swap(Record);
3111       break;
3112 
3113     case OPENCL_EXTENSIONS:
3114       // Later tables overwrite earlier ones.
3115       OpenCLExtensions.swap(Record);
3116       break;
3117 
3118     case TENTATIVE_DEFINITIONS:
3119       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3120         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3121       break;
3122 
3123     case KNOWN_NAMESPACES:
3124       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3125         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3126       break;
3127 
3128     case UNDEFINED_BUT_USED:
3129       if (UndefinedButUsed.size() % 2 != 0) {
3130         Error("Invalid existing UndefinedButUsed");
3131         return Failure;
3132       }
3133 
3134       if (Record.size() % 2 != 0) {
3135         Error("invalid undefined-but-used record");
3136         return Failure;
3137       }
3138       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3139         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3140         UndefinedButUsed.push_back(
3141             ReadSourceLocation(F, Record, I).getRawEncoding());
3142       }
3143       break;
3144     case DELETE_EXPRS_TO_ANALYZE:
3145       for (unsigned I = 0, N = Record.size(); I != N;) {
3146         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3147         const uint64_t Count = Record[I++];
3148         DelayedDeleteExprs.push_back(Count);
3149         for (uint64_t C = 0; C < Count; ++C) {
3150           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3151           bool IsArrayForm = Record[I++] == 1;
3152           DelayedDeleteExprs.push_back(IsArrayForm);
3153         }
3154       }
3155       break;
3156 
3157     case IMPORTED_MODULES: {
3158       if (F.Kind != MK_ImplicitModule && F.Kind != MK_ExplicitModule) {
3159         // If we aren't loading a module (which has its own exports), make
3160         // all of the imported modules visible.
3161         // FIXME: Deal with macros-only imports.
3162         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3163           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3164           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3165           if (GlobalID)
3166             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3167         }
3168       }
3169       break;
3170     }
3171 
3172     case MACRO_OFFSET: {
3173       if (F.LocalNumMacros != 0) {
3174         Error("duplicate MACRO_OFFSET record in AST file");
3175         return Failure;
3176       }
3177       F.MacroOffsets = (const uint32_t *)Blob.data();
3178       F.LocalNumMacros = Record[0];
3179       unsigned LocalBaseMacroID = Record[1];
3180       F.BaseMacroID = getTotalNumMacros();
3181 
3182       if (F.LocalNumMacros > 0) {
3183         // Introduce the global -> local mapping for macros within this module.
3184         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3185 
3186         // Introduce the local -> global mapping for macros within this module.
3187         F.MacroRemap.insertOrReplace(
3188           std::make_pair(LocalBaseMacroID,
3189                          F.BaseMacroID - LocalBaseMacroID));
3190 
3191         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3192       }
3193       break;
3194     }
3195 
3196     case LATE_PARSED_TEMPLATE: {
3197       LateParsedTemplates.append(Record.begin(), Record.end());
3198       break;
3199     }
3200 
3201     case OPTIMIZE_PRAGMA_OPTIONS:
3202       if (Record.size() != 1) {
3203         Error("invalid pragma optimize record");
3204         return Failure;
3205       }
3206       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3207       break;
3208 
3209     case MSSTRUCT_PRAGMA_OPTIONS:
3210       if (Record.size() != 1) {
3211         Error("invalid pragma ms_struct record");
3212         return Failure;
3213       }
3214       PragmaMSStructState = Record[0];
3215       break;
3216 
3217     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3218       if (Record.size() != 2) {
3219         Error("invalid pragma ms_struct record");
3220         return Failure;
3221       }
3222       PragmaMSPointersToMembersState = Record[0];
3223       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3224       break;
3225 
3226     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3227       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3228         UnusedLocalTypedefNameCandidates.push_back(
3229             getGlobalDeclID(F, Record[I]));
3230       break;
3231     }
3232   }
3233 }
3234 
3235 ASTReader::ASTReadResult
3236 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3237                                   const ModuleFile *ImportedBy,
3238                                   unsigned ClientLoadCapabilities) {
3239   unsigned Idx = 0;
3240   F.ModuleMapPath = ReadPath(F, Record, Idx);
3241 
3242   if (F.Kind == MK_ExplicitModule) {
3243     // For an explicitly-loaded module, we don't care whether the original
3244     // module map file exists or matches.
3245     return Success;
3246   }
3247 
3248   // Try to resolve ModuleName in the current header search context and
3249   // verify that it is found in the same module map file as we saved. If the
3250   // top-level AST file is a main file, skip this check because there is no
3251   // usable header search context.
3252   assert(!F.ModuleName.empty() &&
3253          "MODULE_NAME should come before MODULE_MAP_FILE");
3254   if (F.Kind == MK_ImplicitModule &&
3255       (*ModuleMgr.begin())->Kind != MK_MainFile) {
3256     // An implicitly-loaded module file should have its module listed in some
3257     // module map file that we've already loaded.
3258     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3259     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3260     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3261     if (!ModMap) {
3262       assert(ImportedBy && "top-level import should be verified");
3263       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3264         if (auto *ASTFE = M ? M->getASTFile() : nullptr)
3265           // This module was defined by an imported (explicit) module.
3266           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3267                                                << ASTFE->getName();
3268         else
3269           // This module was built with a different module map.
3270           Diag(diag::err_imported_module_not_found)
3271               << F.ModuleName << F.FileName << ImportedBy->FileName
3272               << F.ModuleMapPath;
3273       }
3274       return OutOfDate;
3275     }
3276 
3277     assert(M->Name == F.ModuleName && "found module with different name");
3278 
3279     // Check the primary module map file.
3280     const FileEntry *StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3281     if (StoredModMap == nullptr || StoredModMap != ModMap) {
3282       assert(ModMap && "found module is missing module map file");
3283       assert(ImportedBy && "top-level import should be verified");
3284       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3285         Diag(diag::err_imported_module_modmap_changed)
3286           << F.ModuleName << ImportedBy->FileName
3287           << ModMap->getName() << F.ModuleMapPath;
3288       return OutOfDate;
3289     }
3290 
3291     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3292     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3293       // FIXME: we should use input files rather than storing names.
3294       std::string Filename = ReadPath(F, Record, Idx);
3295       const FileEntry *F =
3296           FileMgr.getFile(Filename, false, false);
3297       if (F == nullptr) {
3298         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3299           Error("could not find file '" + Filename +"' referenced by AST file");
3300         return OutOfDate;
3301       }
3302       AdditionalStoredMaps.insert(F);
3303     }
3304 
3305     // Check any additional module map files (e.g. module.private.modulemap)
3306     // that are not in the pcm.
3307     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3308       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3309         // Remove files that match
3310         // Note: SmallPtrSet::erase is really remove
3311         if (!AdditionalStoredMaps.erase(ModMap)) {
3312           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3313             Diag(diag::err_module_different_modmap)
3314               << F.ModuleName << /*new*/0 << ModMap->getName();
3315           return OutOfDate;
3316         }
3317       }
3318     }
3319 
3320     // Check any additional module map files that are in the pcm, but not
3321     // found in header search. Cases that match are already removed.
3322     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3323       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3324         Diag(diag::err_module_different_modmap)
3325           << F.ModuleName << /*not new*/1 << ModMap->getName();
3326       return OutOfDate;
3327     }
3328   }
3329 
3330   if (Listener)
3331     Listener->ReadModuleMapFile(F.ModuleMapPath);
3332   return Success;
3333 }
3334 
3335 
3336 /// \brief Move the given method to the back of the global list of methods.
3337 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3338   // Find the entry for this selector in the method pool.
3339   Sema::GlobalMethodPool::iterator Known
3340     = S.MethodPool.find(Method->getSelector());
3341   if (Known == S.MethodPool.end())
3342     return;
3343 
3344   // Retrieve the appropriate method list.
3345   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3346                                                     : Known->second.second;
3347   bool Found = false;
3348   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3349     if (!Found) {
3350       if (List->getMethod() == Method) {
3351         Found = true;
3352       } else {
3353         // Keep searching.
3354         continue;
3355       }
3356     }
3357 
3358     if (List->getNext())
3359       List->setMethod(List->getNext()->getMethod());
3360     else
3361       List->setMethod(Method);
3362   }
3363 }
3364 
3365 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
3366   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
3367   for (Decl *D : Names) {
3368     bool wasHidden = D->Hidden;
3369     D->Hidden = false;
3370 
3371     if (wasHidden && SemaObj) {
3372       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
3373         moveMethodToBackOfGlobalList(*SemaObj, Method);
3374       }
3375     }
3376   }
3377 }
3378 
3379 void ASTReader::makeModuleVisible(Module *Mod,
3380                                   Module::NameVisibilityKind NameVisibility,
3381                                   SourceLocation ImportLoc) {
3382   llvm::SmallPtrSet<Module *, 4> Visited;
3383   SmallVector<Module *, 4> Stack;
3384   Stack.push_back(Mod);
3385   while (!Stack.empty()) {
3386     Mod = Stack.pop_back_val();
3387 
3388     if (NameVisibility <= Mod->NameVisibility) {
3389       // This module already has this level of visibility (or greater), so
3390       // there is nothing more to do.
3391       continue;
3392     }
3393 
3394     if (!Mod->isAvailable()) {
3395       // Modules that aren't available cannot be made visible.
3396       continue;
3397     }
3398 
3399     // Update the module's name visibility.
3400     Mod->NameVisibility = NameVisibility;
3401 
3402     // If we've already deserialized any names from this module,
3403     // mark them as visible.
3404     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
3405     if (Hidden != HiddenNamesMap.end()) {
3406       auto HiddenNames = std::move(*Hidden);
3407       HiddenNamesMap.erase(Hidden);
3408       makeNamesVisible(HiddenNames.second, HiddenNames.first);
3409       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
3410              "making names visible added hidden names");
3411     }
3412 
3413     // Push any exported modules onto the stack to be marked as visible.
3414     SmallVector<Module *, 16> Exports;
3415     Mod->getExportedModules(Exports);
3416     for (SmallVectorImpl<Module *>::iterator
3417            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
3418       Module *Exported = *I;
3419       if (Visited.insert(Exported).second)
3420         Stack.push_back(Exported);
3421     }
3422   }
3423 }
3424 
3425 bool ASTReader::loadGlobalIndex() {
3426   if (GlobalIndex)
3427     return false;
3428 
3429   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
3430       !Context.getLangOpts().Modules)
3431     return true;
3432 
3433   // Try to load the global index.
3434   TriedLoadingGlobalIndex = true;
3435   StringRef ModuleCachePath
3436     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
3437   std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result
3438     = GlobalModuleIndex::readIndex(ModuleCachePath);
3439   if (!Result.first)
3440     return true;
3441 
3442   GlobalIndex.reset(Result.first);
3443   ModuleMgr.setGlobalIndex(GlobalIndex.get());
3444   return false;
3445 }
3446 
3447 bool ASTReader::isGlobalIndexUnavailable() const {
3448   return Context.getLangOpts().Modules && UseGlobalIndex &&
3449          !hasGlobalIndex() && TriedLoadingGlobalIndex;
3450 }
3451 
3452 static void updateModuleTimestamp(ModuleFile &MF) {
3453   // Overwrite the timestamp file contents so that file's mtime changes.
3454   std::string TimestampFilename = MF.getTimestampFilename();
3455   std::error_code EC;
3456   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::F_Text);
3457   if (EC)
3458     return;
3459   OS << "Timestamp file\n";
3460 }
3461 
3462 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the
3463 /// cursor into the start of the given block ID, returning false on success and
3464 /// true on failure.
3465 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
3466   while (1) {
3467     llvm::BitstreamEntry Entry = Cursor.advance();
3468     switch (Entry.Kind) {
3469     case llvm::BitstreamEntry::Error:
3470     case llvm::BitstreamEntry::EndBlock:
3471       return true;
3472 
3473     case llvm::BitstreamEntry::Record:
3474       // Ignore top-level records.
3475       Cursor.skipRecord(Entry.ID);
3476       break;
3477 
3478     case llvm::BitstreamEntry::SubBlock:
3479       if (Entry.ID == BlockID) {
3480         if (Cursor.EnterSubBlock(BlockID))
3481           return true;
3482         // Found it!
3483         return false;
3484       }
3485 
3486       if (Cursor.SkipBlock())
3487         return true;
3488     }
3489   }
3490 }
3491 
3492 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
3493                                             ModuleKind Type,
3494                                             SourceLocation ImportLoc,
3495                                             unsigned ClientLoadCapabilities) {
3496   llvm::SaveAndRestore<SourceLocation>
3497     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
3498 
3499   // Defer any pending actions until we get to the end of reading the AST file.
3500   Deserializing AnASTFile(this);
3501 
3502   // Bump the generation number.
3503   unsigned PreviousGeneration = incrementGeneration(Context);
3504 
3505   unsigned NumModules = ModuleMgr.size();
3506   SmallVector<ImportedModule, 4> Loaded;
3507   switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc,
3508                                                 /*ImportedBy=*/nullptr, Loaded,
3509                                                 0, 0, 0,
3510                                                 ClientLoadCapabilities)) {
3511   case Failure:
3512   case Missing:
3513   case OutOfDate:
3514   case VersionMismatch:
3515   case ConfigurationMismatch:
3516   case HadErrors: {
3517     llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet;
3518     for (const ImportedModule &IM : Loaded)
3519       LoadedSet.insert(IM.Mod);
3520 
3521     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end(),
3522                             LoadedSet,
3523                             Context.getLangOpts().Modules
3524                               ? &PP.getHeaderSearchInfo().getModuleMap()
3525                               : nullptr);
3526 
3527     // If we find that any modules are unusable, the global index is going
3528     // to be out-of-date. Just remove it.
3529     GlobalIndex.reset();
3530     ModuleMgr.setGlobalIndex(nullptr);
3531     return ReadResult;
3532   }
3533   case Success:
3534     break;
3535   }
3536 
3537   // Here comes stuff that we only do once the entire chain is loaded.
3538 
3539   // Load the AST blocks of all of the modules that we loaded.
3540   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3541                                               MEnd = Loaded.end();
3542        M != MEnd; ++M) {
3543     ModuleFile &F = *M->Mod;
3544 
3545     // Read the AST block.
3546     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
3547       return Result;
3548 
3549     // Read the extension blocks.
3550     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
3551       if (ASTReadResult Result = ReadExtensionBlock(F))
3552         return Result;
3553     }
3554 
3555     // Once read, set the ModuleFile bit base offset and update the size in
3556     // bits of all files we've seen.
3557     F.GlobalBitOffset = TotalModulesSizeInBits;
3558     TotalModulesSizeInBits += F.SizeInBits;
3559     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
3560 
3561     // Preload SLocEntries.
3562     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
3563       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
3564       // Load it through the SourceManager and don't call ReadSLocEntry()
3565       // directly because the entry may have already been loaded in which case
3566       // calling ReadSLocEntry() directly would trigger an assertion in
3567       // SourceManager.
3568       SourceMgr.getLoadedSLocEntryByID(Index);
3569     }
3570 
3571     // Preload all the pending interesting identifiers by marking them out of
3572     // date.
3573     for (auto Offset : F.PreloadIdentifierOffsets) {
3574       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
3575           F.IdentifierTableData + Offset);
3576 
3577       ASTIdentifierLookupTrait Trait(*this, F);
3578       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
3579       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
3580       auto &II = PP.getIdentifierTable().getOwn(Key);
3581       II.setOutOfDate(true);
3582 
3583       // Mark this identifier as being from an AST file so that we can track
3584       // whether we need to serialize it.
3585       markIdentifierFromAST(*this, II);
3586 
3587       // Associate the ID with the identifier so that the writer can reuse it.
3588       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
3589       SetIdentifierInfo(ID, &II);
3590     }
3591   }
3592 
3593   // Setup the import locations and notify the module manager that we've
3594   // committed to these module files.
3595   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3596                                               MEnd = Loaded.end();
3597        M != MEnd; ++M) {
3598     ModuleFile &F = *M->Mod;
3599 
3600     ModuleMgr.moduleFileAccepted(&F);
3601 
3602     // Set the import location.
3603     F.DirectImportLoc = ImportLoc;
3604     // FIXME: We assume that locations from PCH / preamble do not need
3605     // any translation.
3606     if (!M->ImportedBy)
3607       F.ImportLoc = M->ImportLoc;
3608     else
3609       F.ImportLoc = TranslateSourceLocation(*M->ImportedBy, M->ImportLoc);
3610   }
3611 
3612   if (!Context.getLangOpts().CPlusPlus ||
3613       (Type != MK_ImplicitModule && Type != MK_ExplicitModule)) {
3614     // Mark all of the identifiers in the identifier table as being out of date,
3615     // so that various accessors know to check the loaded modules when the
3616     // identifier is used.
3617     //
3618     // For C++ modules, we don't need information on many identifiers (just
3619     // those that provide macros or are poisoned), so we mark all of
3620     // the interesting ones via PreloadIdentifierOffsets.
3621     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
3622                                 IdEnd = PP.getIdentifierTable().end();
3623          Id != IdEnd; ++Id)
3624       Id->second->setOutOfDate(true);
3625   }
3626 
3627   // Resolve any unresolved module exports.
3628   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
3629     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
3630     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
3631     Module *ResolvedMod = getSubmodule(GlobalID);
3632 
3633     switch (Unresolved.Kind) {
3634     case UnresolvedModuleRef::Conflict:
3635       if (ResolvedMod) {
3636         Module::Conflict Conflict;
3637         Conflict.Other = ResolvedMod;
3638         Conflict.Message = Unresolved.String.str();
3639         Unresolved.Mod->Conflicts.push_back(Conflict);
3640       }
3641       continue;
3642 
3643     case UnresolvedModuleRef::Import:
3644       if (ResolvedMod)
3645         Unresolved.Mod->Imports.insert(ResolvedMod);
3646       continue;
3647 
3648     case UnresolvedModuleRef::Export:
3649       if (ResolvedMod || Unresolved.IsWildcard)
3650         Unresolved.Mod->Exports.push_back(
3651           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
3652       continue;
3653     }
3654   }
3655   UnresolvedModuleRefs.clear();
3656 
3657   // FIXME: How do we load the 'use'd modules? They may not be submodules.
3658   // Might be unnecessary as use declarations are only used to build the
3659   // module itself.
3660 
3661   InitializeContext();
3662 
3663   if (SemaObj)
3664     UpdateSema();
3665 
3666   if (DeserializationListener)
3667     DeserializationListener->ReaderInitialized(this);
3668 
3669   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
3670   if (PrimaryModule.OriginalSourceFileID.isValid()) {
3671     PrimaryModule.OriginalSourceFileID
3672       = FileID::get(PrimaryModule.SLocEntryBaseID
3673                     + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
3674 
3675     // If this AST file is a precompiled preamble, then set the
3676     // preamble file ID of the source manager to the file source file
3677     // from which the preamble was built.
3678     if (Type == MK_Preamble) {
3679       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
3680     } else if (Type == MK_MainFile) {
3681       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
3682     }
3683   }
3684 
3685   // For any Objective-C class definitions we have already loaded, make sure
3686   // that we load any additional categories.
3687   for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
3688     loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
3689                        ObjCClassesLoaded[I],
3690                        PreviousGeneration);
3691   }
3692 
3693   if (PP.getHeaderSearchInfo()
3694           .getHeaderSearchOpts()
3695           .ModulesValidateOncePerBuildSession) {
3696     // Now we are certain that the module and all modules it depends on are
3697     // up to date.  Create or update timestamp files for modules that are
3698     // located in the module cache (not for PCH files that could be anywhere
3699     // in the filesystem).
3700     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
3701       ImportedModule &M = Loaded[I];
3702       if (M.Mod->Kind == MK_ImplicitModule) {
3703         updateModuleTimestamp(*M.Mod);
3704       }
3705     }
3706   }
3707 
3708   return Success;
3709 }
3710 
3711 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile);
3712 
3713 /// \brief Whether \p Stream starts with the AST/PCH file magic number 'CPCH'.
3714 static bool startsWithASTFileMagic(BitstreamCursor &Stream) {
3715   return Stream.Read(8) == 'C' &&
3716          Stream.Read(8) == 'P' &&
3717          Stream.Read(8) == 'C' &&
3718          Stream.Read(8) == 'H';
3719 }
3720 
3721 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
3722   switch (Kind) {
3723   case MK_PCH:
3724     return 0; // PCH
3725   case MK_ImplicitModule:
3726   case MK_ExplicitModule:
3727     return 1; // module
3728   case MK_MainFile:
3729   case MK_Preamble:
3730     return 2; // main source file
3731   }
3732   llvm_unreachable("unknown module kind");
3733 }
3734 
3735 ASTReader::ASTReadResult
3736 ASTReader::ReadASTCore(StringRef FileName,
3737                        ModuleKind Type,
3738                        SourceLocation ImportLoc,
3739                        ModuleFile *ImportedBy,
3740                        SmallVectorImpl<ImportedModule> &Loaded,
3741                        off_t ExpectedSize, time_t ExpectedModTime,
3742                        ASTFileSignature ExpectedSignature,
3743                        unsigned ClientLoadCapabilities) {
3744   ModuleFile *M;
3745   std::string ErrorStr;
3746   ModuleManager::AddModuleResult AddResult
3747     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
3748                           getGeneration(), ExpectedSize, ExpectedModTime,
3749                           ExpectedSignature, readASTFileSignature,
3750                           M, ErrorStr);
3751 
3752   switch (AddResult) {
3753   case ModuleManager::AlreadyLoaded:
3754     return Success;
3755 
3756   case ModuleManager::NewlyLoaded:
3757     // Load module file below.
3758     break;
3759 
3760   case ModuleManager::Missing:
3761     // The module file was missing; if the client can handle that, return
3762     // it.
3763     if (ClientLoadCapabilities & ARR_Missing)
3764       return Missing;
3765 
3766     // Otherwise, return an error.
3767     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
3768                                           << FileName << ErrorStr.empty()
3769                                           << ErrorStr;
3770     return Failure;
3771 
3772   case ModuleManager::OutOfDate:
3773     // We couldn't load the module file because it is out-of-date. If the
3774     // client can handle out-of-date, return it.
3775     if (ClientLoadCapabilities & ARR_OutOfDate)
3776       return OutOfDate;
3777 
3778     // Otherwise, return an error.
3779     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
3780                                             << FileName << ErrorStr.empty()
3781                                             << ErrorStr;
3782     return Failure;
3783   }
3784 
3785   assert(M && "Missing module file");
3786 
3787   // FIXME: This seems rather a hack. Should CurrentDir be part of the
3788   // module?
3789   if (FileName != "-") {
3790     CurrentDir = llvm::sys::path::parent_path(FileName);
3791     if (CurrentDir.empty()) CurrentDir = ".";
3792   }
3793 
3794   ModuleFile &F = *M;
3795   BitstreamCursor &Stream = F.Stream;
3796   PCHContainerRdr.ExtractPCH(F.Buffer->getMemBufferRef(), F.StreamFile);
3797   Stream.init(&F.StreamFile);
3798   F.SizeInBits = F.Buffer->getBufferSize() * 8;
3799 
3800   // Sniff for the signature.
3801   if (!startsWithASTFileMagic(Stream)) {
3802     Diag(diag::err_module_file_invalid) << moduleKindForDiagnostic(Type)
3803                                         << FileName;
3804     return Failure;
3805   }
3806 
3807   // This is used for compatibility with older PCH formats.
3808   bool HaveReadControlBlock = false;
3809   while (1) {
3810     llvm::BitstreamEntry Entry = Stream.advance();
3811 
3812     switch (Entry.Kind) {
3813     case llvm::BitstreamEntry::Error:
3814     case llvm::BitstreamEntry::Record:
3815     case llvm::BitstreamEntry::EndBlock:
3816       Error("invalid record at top-level of AST file");
3817       return Failure;
3818 
3819     case llvm::BitstreamEntry::SubBlock:
3820       break;
3821     }
3822 
3823     switch (Entry.ID) {
3824     case CONTROL_BLOCK_ID:
3825       HaveReadControlBlock = true;
3826       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
3827       case Success:
3828         // Check that we didn't try to load a non-module AST file as a module.
3829         //
3830         // FIXME: Should we also perform the converse check? Loading a module as
3831         // a PCH file sort of works, but it's a bit wonky.
3832         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule) &&
3833             F.ModuleName.empty()) {
3834           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
3835           if (Result != OutOfDate ||
3836               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
3837             Diag(diag::err_module_file_not_module) << FileName;
3838           return Result;
3839         }
3840         break;
3841 
3842       case Failure: return Failure;
3843       case Missing: return Missing;
3844       case OutOfDate: return OutOfDate;
3845       case VersionMismatch: return VersionMismatch;
3846       case ConfigurationMismatch: return ConfigurationMismatch;
3847       case HadErrors: return HadErrors;
3848       }
3849       break;
3850 
3851     case AST_BLOCK_ID:
3852       if (!HaveReadControlBlock) {
3853         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
3854           Diag(diag::err_pch_version_too_old);
3855         return VersionMismatch;
3856       }
3857 
3858       // Record that we've loaded this module.
3859       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
3860       return Success;
3861 
3862     default:
3863       if (Stream.SkipBlock()) {
3864         Error("malformed block record in AST file");
3865         return Failure;
3866       }
3867       break;
3868     }
3869   }
3870 
3871   return Success;
3872 }
3873 
3874 /// Parse a record and blob containing module file extension metadata.
3875 static bool parseModuleFileExtensionMetadata(
3876               const SmallVectorImpl<uint64_t> &Record,
3877               StringRef Blob,
3878               ModuleFileExtensionMetadata &Metadata) {
3879   if (Record.size() < 4) return true;
3880 
3881   Metadata.MajorVersion = Record[0];
3882   Metadata.MinorVersion = Record[1];
3883 
3884   unsigned BlockNameLen = Record[2];
3885   unsigned UserInfoLen = Record[3];
3886 
3887   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
3888 
3889   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
3890   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
3891                                   Blob.data() + BlockNameLen + UserInfoLen);
3892   return false;
3893 }
3894 
3895 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
3896   BitstreamCursor &Stream = F.Stream;
3897 
3898   RecordData Record;
3899   while (true) {
3900     llvm::BitstreamEntry Entry = Stream.advance();
3901     switch (Entry.Kind) {
3902     case llvm::BitstreamEntry::SubBlock:
3903       if (Stream.SkipBlock())
3904         return Failure;
3905 
3906       continue;
3907 
3908     case llvm::BitstreamEntry::EndBlock:
3909       return Success;
3910 
3911     case llvm::BitstreamEntry::Error:
3912       return HadErrors;
3913 
3914     case llvm::BitstreamEntry::Record:
3915       break;
3916     }
3917 
3918     Record.clear();
3919     StringRef Blob;
3920     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
3921     switch (RecCode) {
3922     case EXTENSION_METADATA: {
3923       ModuleFileExtensionMetadata Metadata;
3924       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
3925         return Failure;
3926 
3927       // Find a module file extension with this block name.
3928       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
3929       if (Known == ModuleFileExtensions.end()) break;
3930 
3931       // Form a reader.
3932       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
3933                                                              F, Stream)) {
3934         F.ExtensionReaders.push_back(std::move(Reader));
3935       }
3936 
3937       break;
3938     }
3939     }
3940   }
3941 
3942   return Success;
3943 }
3944 
3945 void ASTReader::InitializeContext() {
3946   // If there's a listener, notify them that we "read" the translation unit.
3947   if (DeserializationListener)
3948     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
3949                                       Context.getTranslationUnitDecl());
3950 
3951   // FIXME: Find a better way to deal with collisions between these
3952   // built-in types. Right now, we just ignore the problem.
3953 
3954   // Load the special types.
3955   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
3956     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
3957       if (!Context.CFConstantStringTypeDecl)
3958         Context.setCFConstantStringType(GetType(String));
3959     }
3960 
3961     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
3962       QualType FileType = GetType(File);
3963       if (FileType.isNull()) {
3964         Error("FILE type is NULL");
3965         return;
3966       }
3967 
3968       if (!Context.FILEDecl) {
3969         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
3970           Context.setFILEDecl(Typedef->getDecl());
3971         else {
3972           const TagType *Tag = FileType->getAs<TagType>();
3973           if (!Tag) {
3974             Error("Invalid FILE type in AST file");
3975             return;
3976           }
3977           Context.setFILEDecl(Tag->getDecl());
3978         }
3979       }
3980     }
3981 
3982     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
3983       QualType Jmp_bufType = GetType(Jmp_buf);
3984       if (Jmp_bufType.isNull()) {
3985         Error("jmp_buf type is NULL");
3986         return;
3987       }
3988 
3989       if (!Context.jmp_bufDecl) {
3990         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
3991           Context.setjmp_bufDecl(Typedef->getDecl());
3992         else {
3993           const TagType *Tag = Jmp_bufType->getAs<TagType>();
3994           if (!Tag) {
3995             Error("Invalid jmp_buf type in AST file");
3996             return;
3997           }
3998           Context.setjmp_bufDecl(Tag->getDecl());
3999         }
4000       }
4001     }
4002 
4003     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4004       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4005       if (Sigjmp_bufType.isNull()) {
4006         Error("sigjmp_buf type is NULL");
4007         return;
4008       }
4009 
4010       if (!Context.sigjmp_bufDecl) {
4011         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4012           Context.setsigjmp_bufDecl(Typedef->getDecl());
4013         else {
4014           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4015           assert(Tag && "Invalid sigjmp_buf type in AST file");
4016           Context.setsigjmp_bufDecl(Tag->getDecl());
4017         }
4018       }
4019     }
4020 
4021     if (unsigned ObjCIdRedef
4022           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4023       if (Context.ObjCIdRedefinitionType.isNull())
4024         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4025     }
4026 
4027     if (unsigned ObjCClassRedef
4028           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4029       if (Context.ObjCClassRedefinitionType.isNull())
4030         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4031     }
4032 
4033     if (unsigned ObjCSelRedef
4034           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4035       if (Context.ObjCSelRedefinitionType.isNull())
4036         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4037     }
4038 
4039     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4040       QualType Ucontext_tType = GetType(Ucontext_t);
4041       if (Ucontext_tType.isNull()) {
4042         Error("ucontext_t type is NULL");
4043         return;
4044       }
4045 
4046       if (!Context.ucontext_tDecl) {
4047         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4048           Context.setucontext_tDecl(Typedef->getDecl());
4049         else {
4050           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4051           assert(Tag && "Invalid ucontext_t type in AST file");
4052           Context.setucontext_tDecl(Tag->getDecl());
4053         }
4054       }
4055     }
4056   }
4057 
4058   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4059 
4060   // If there were any CUDA special declarations, deserialize them.
4061   if (!CUDASpecialDeclRefs.empty()) {
4062     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4063     Context.setcudaConfigureCallDecl(
4064                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4065   }
4066 
4067   // Re-export any modules that were imported by a non-module AST file.
4068   // FIXME: This does not make macro-only imports visible again.
4069   for (auto &Import : ImportedModules) {
4070     if (Module *Imported = getSubmodule(Import.ID)) {
4071       makeModuleVisible(Imported, Module::AllVisible,
4072                         /*ImportLoc=*/Import.ImportLoc);
4073       if (Import.ImportLoc.isValid())
4074         PP.makeModuleVisible(Imported, Import.ImportLoc);
4075       // FIXME: should we tell Sema to make the module visible too?
4076     }
4077   }
4078   ImportedModules.clear();
4079 }
4080 
4081 void ASTReader::finalizeForWriting() {
4082   // Nothing to do for now.
4083 }
4084 
4085 /// \brief Reads and return the signature record from \p StreamFile's control
4086 /// block, or else returns 0.
4087 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile){
4088   BitstreamCursor Stream(StreamFile);
4089   if (!startsWithASTFileMagic(Stream))
4090     return 0;
4091 
4092   // Scan for the CONTROL_BLOCK_ID block.
4093   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4094     return 0;
4095 
4096   // Scan for SIGNATURE inside the control block.
4097   ASTReader::RecordData Record;
4098   while (1) {
4099     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4100     if (Entry.Kind == llvm::BitstreamEntry::EndBlock ||
4101         Entry.Kind != llvm::BitstreamEntry::Record)
4102       return 0;
4103 
4104     Record.clear();
4105     StringRef Blob;
4106     if (SIGNATURE == Stream.readRecord(Entry.ID, Record, &Blob))
4107       return Record[0];
4108   }
4109 }
4110 
4111 /// \brief Retrieve the name of the original source file name
4112 /// directly from the AST file, without actually loading the AST
4113 /// file.
4114 std::string ASTReader::getOriginalSourceFile(
4115     const std::string &ASTFileName, FileManager &FileMgr,
4116     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
4117   // Open the AST file.
4118   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
4119   if (!Buffer) {
4120     Diags.Report(diag::err_fe_unable_to_read_pch_file)
4121         << ASTFileName << Buffer.getError().message();
4122     return std::string();
4123   }
4124 
4125   // Initialize the stream
4126   llvm::BitstreamReader StreamFile;
4127   PCHContainerRdr.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
4128   BitstreamCursor Stream(StreamFile);
4129 
4130   // Sniff for the signature.
4131   if (!startsWithASTFileMagic(Stream)) {
4132     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
4133     return std::string();
4134   }
4135 
4136   // Scan for the CONTROL_BLOCK_ID block.
4137   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
4138     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4139     return std::string();
4140   }
4141 
4142   // Scan for ORIGINAL_FILE inside the control block.
4143   RecordData Record;
4144   while (1) {
4145     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4146     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4147       return std::string();
4148 
4149     if (Entry.Kind != llvm::BitstreamEntry::Record) {
4150       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4151       return std::string();
4152     }
4153 
4154     Record.clear();
4155     StringRef Blob;
4156     if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE)
4157       return Blob.str();
4158   }
4159 }
4160 
4161 namespace {
4162   class SimplePCHValidator : public ASTReaderListener {
4163     const LangOptions &ExistingLangOpts;
4164     const TargetOptions &ExistingTargetOpts;
4165     const PreprocessorOptions &ExistingPPOpts;
4166     std::string ExistingModuleCachePath;
4167     FileManager &FileMgr;
4168 
4169   public:
4170     SimplePCHValidator(const LangOptions &ExistingLangOpts,
4171                        const TargetOptions &ExistingTargetOpts,
4172                        const PreprocessorOptions &ExistingPPOpts,
4173                        StringRef ExistingModuleCachePath,
4174                        FileManager &FileMgr)
4175       : ExistingLangOpts(ExistingLangOpts),
4176         ExistingTargetOpts(ExistingTargetOpts),
4177         ExistingPPOpts(ExistingPPOpts),
4178         ExistingModuleCachePath(ExistingModuleCachePath),
4179         FileMgr(FileMgr)
4180     {
4181     }
4182 
4183     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
4184                              bool AllowCompatibleDifferences) override {
4185       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
4186                                   AllowCompatibleDifferences);
4187     }
4188     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
4189                            bool AllowCompatibleDifferences) override {
4190       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
4191                                 AllowCompatibleDifferences);
4192     }
4193     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
4194                                  StringRef SpecificModuleCachePath,
4195                                  bool Complain) override {
4196       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4197                                       ExistingModuleCachePath,
4198                                       nullptr, ExistingLangOpts);
4199     }
4200     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
4201                                  bool Complain,
4202                                  std::string &SuggestedPredefines) override {
4203       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
4204                                       SuggestedPredefines, ExistingLangOpts);
4205     }
4206   };
4207 }
4208 
4209 bool ASTReader::readASTFileControlBlock(
4210     StringRef Filename, FileManager &FileMgr,
4211     const PCHContainerReader &PCHContainerRdr,
4212     bool FindModuleFileExtensions,
4213     ASTReaderListener &Listener) {
4214   // Open the AST file.
4215   // FIXME: This allows use of the VFS; we do not allow use of the
4216   // VFS when actually loading a module.
4217   auto Buffer = FileMgr.getBufferForFile(Filename);
4218   if (!Buffer) {
4219     return true;
4220   }
4221 
4222   // Initialize the stream
4223   llvm::BitstreamReader StreamFile;
4224   PCHContainerRdr.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
4225   BitstreamCursor Stream(StreamFile);
4226 
4227   // Sniff for the signature.
4228   if (!startsWithASTFileMagic(Stream))
4229     return true;
4230 
4231   // Scan for the CONTROL_BLOCK_ID block.
4232   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4233     return true;
4234 
4235   bool NeedsInputFiles = Listener.needsInputFileVisitation();
4236   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
4237   bool NeedsImports = Listener.needsImportVisitation();
4238   BitstreamCursor InputFilesCursor;
4239 
4240   RecordData Record;
4241   std::string ModuleDir;
4242   bool DoneWithControlBlock = false;
4243   while (!DoneWithControlBlock) {
4244     llvm::BitstreamEntry Entry = Stream.advance();
4245 
4246     switch (Entry.Kind) {
4247     case llvm::BitstreamEntry::SubBlock: {
4248       switch (Entry.ID) {
4249       case OPTIONS_BLOCK_ID: {
4250         std::string IgnoredSuggestedPredefines;
4251         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
4252                              /*AllowCompatibleConfigurationMismatch*/ false,
4253                              Listener, IgnoredSuggestedPredefines) != Success)
4254           return true;
4255         break;
4256       }
4257 
4258       case INPUT_FILES_BLOCK_ID:
4259         InputFilesCursor = Stream;
4260         if (Stream.SkipBlock() ||
4261             (NeedsInputFiles &&
4262              ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID)))
4263           return true;
4264         break;
4265 
4266       default:
4267         if (Stream.SkipBlock())
4268           return true;
4269         break;
4270       }
4271 
4272       continue;
4273     }
4274 
4275     case llvm::BitstreamEntry::EndBlock:
4276       DoneWithControlBlock = true;
4277       break;
4278 
4279     case llvm::BitstreamEntry::Error:
4280       return true;
4281 
4282     case llvm::BitstreamEntry::Record:
4283       break;
4284     }
4285 
4286     if (DoneWithControlBlock) break;
4287 
4288     Record.clear();
4289     StringRef Blob;
4290     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4291     switch ((ControlRecordTypes)RecCode) {
4292     case METADATA: {
4293       if (Record[0] != VERSION_MAJOR)
4294         return true;
4295 
4296       if (Listener.ReadFullVersionInformation(Blob))
4297         return true;
4298 
4299       break;
4300     }
4301     case MODULE_NAME:
4302       Listener.ReadModuleName(Blob);
4303       break;
4304     case MODULE_DIRECTORY:
4305       ModuleDir = Blob;
4306       break;
4307     case MODULE_MAP_FILE: {
4308       unsigned Idx = 0;
4309       auto Path = ReadString(Record, Idx);
4310       ResolveImportedPath(Path, ModuleDir);
4311       Listener.ReadModuleMapFile(Path);
4312       break;
4313     }
4314     case INPUT_FILE_OFFSETS: {
4315       if (!NeedsInputFiles)
4316         break;
4317 
4318       unsigned NumInputFiles = Record[0];
4319       unsigned NumUserFiles = Record[1];
4320       const uint64_t *InputFileOffs = (const uint64_t *)Blob.data();
4321       for (unsigned I = 0; I != NumInputFiles; ++I) {
4322         // Go find this input file.
4323         bool isSystemFile = I >= NumUserFiles;
4324 
4325         if (isSystemFile && !NeedsSystemInputFiles)
4326           break; // the rest are system input files
4327 
4328         BitstreamCursor &Cursor = InputFilesCursor;
4329         SavedStreamPosition SavedPosition(Cursor);
4330         Cursor.JumpToBit(InputFileOffs[I]);
4331 
4332         unsigned Code = Cursor.ReadCode();
4333         RecordData Record;
4334         StringRef Blob;
4335         bool shouldContinue = false;
4336         switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) {
4337         case INPUT_FILE:
4338           bool Overridden = static_cast<bool>(Record[3]);
4339           std::string Filename = Blob;
4340           ResolveImportedPath(Filename, ModuleDir);
4341           shouldContinue = Listener.visitInputFile(
4342               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
4343           break;
4344         }
4345         if (!shouldContinue)
4346           break;
4347       }
4348       break;
4349     }
4350 
4351     case IMPORTS: {
4352       if (!NeedsImports)
4353         break;
4354 
4355       unsigned Idx = 0, N = Record.size();
4356       while (Idx < N) {
4357         // Read information about the AST file.
4358         Idx += 5; // ImportLoc, Size, ModTime, Signature
4359         std::string Filename = ReadString(Record, Idx);
4360         ResolveImportedPath(Filename, ModuleDir);
4361         Listener.visitImport(Filename);
4362       }
4363       break;
4364     }
4365 
4366     default:
4367       // No other validation to perform.
4368       break;
4369     }
4370   }
4371 
4372   // Look for module file extension blocks, if requested.
4373   if (FindModuleFileExtensions) {
4374     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
4375       bool DoneWithExtensionBlock = false;
4376       while (!DoneWithExtensionBlock) {
4377        llvm::BitstreamEntry Entry = Stream.advance();
4378 
4379        switch (Entry.Kind) {
4380        case llvm::BitstreamEntry::SubBlock:
4381          if (Stream.SkipBlock())
4382            return true;
4383 
4384          continue;
4385 
4386        case llvm::BitstreamEntry::EndBlock:
4387          DoneWithExtensionBlock = true;
4388          continue;
4389 
4390        case llvm::BitstreamEntry::Error:
4391          return true;
4392 
4393        case llvm::BitstreamEntry::Record:
4394          break;
4395        }
4396 
4397        Record.clear();
4398        StringRef Blob;
4399        unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4400        switch (RecCode) {
4401        case EXTENSION_METADATA: {
4402          ModuleFileExtensionMetadata Metadata;
4403          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4404            return true;
4405 
4406          Listener.readModuleFileExtension(Metadata);
4407          break;
4408        }
4409        }
4410       }
4411     }
4412   }
4413 
4414   return false;
4415 }
4416 
4417 bool ASTReader::isAcceptableASTFile(
4418     StringRef Filename, FileManager &FileMgr,
4419     const PCHContainerReader &PCHContainerRdr, const LangOptions &LangOpts,
4420     const TargetOptions &TargetOpts, const PreprocessorOptions &PPOpts,
4421     std::string ExistingModuleCachePath) {
4422   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
4423                                ExistingModuleCachePath, FileMgr);
4424   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
4425                                   /*FindModuleFileExtensions=*/false,
4426                                   validator);
4427 }
4428 
4429 ASTReader::ASTReadResult
4430 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
4431   // Enter the submodule block.
4432   if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
4433     Error("malformed submodule block record in AST file");
4434     return Failure;
4435   }
4436 
4437   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
4438   bool First = true;
4439   Module *CurrentModule = nullptr;
4440   RecordData Record;
4441   while (true) {
4442     llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks();
4443 
4444     switch (Entry.Kind) {
4445     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
4446     case llvm::BitstreamEntry::Error:
4447       Error("malformed block record in AST file");
4448       return Failure;
4449     case llvm::BitstreamEntry::EndBlock:
4450       return Success;
4451     case llvm::BitstreamEntry::Record:
4452       // The interesting case.
4453       break;
4454     }
4455 
4456     // Read a record.
4457     StringRef Blob;
4458     Record.clear();
4459     auto Kind = F.Stream.readRecord(Entry.ID, Record, &Blob);
4460 
4461     if ((Kind == SUBMODULE_METADATA) != First) {
4462       Error("submodule metadata record should be at beginning of block");
4463       return Failure;
4464     }
4465     First = false;
4466 
4467     // Submodule information is only valid if we have a current module.
4468     // FIXME: Should we error on these cases?
4469     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
4470         Kind != SUBMODULE_DEFINITION)
4471       continue;
4472 
4473     switch (Kind) {
4474     default:  // Default behavior: ignore.
4475       break;
4476 
4477     case SUBMODULE_DEFINITION: {
4478       if (Record.size() < 8) {
4479         Error("malformed module definition");
4480         return Failure;
4481       }
4482 
4483       StringRef Name = Blob;
4484       unsigned Idx = 0;
4485       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
4486       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
4487       bool IsFramework = Record[Idx++];
4488       bool IsExplicit = Record[Idx++];
4489       bool IsSystem = Record[Idx++];
4490       bool IsExternC = Record[Idx++];
4491       bool InferSubmodules = Record[Idx++];
4492       bool InferExplicitSubmodules = Record[Idx++];
4493       bool InferExportWildcard = Record[Idx++];
4494       bool ConfigMacrosExhaustive = Record[Idx++];
4495 
4496       Module *ParentModule = nullptr;
4497       if (Parent)
4498         ParentModule = getSubmodule(Parent);
4499 
4500       // Retrieve this (sub)module from the module map, creating it if
4501       // necessary.
4502       CurrentModule = ModMap.findOrCreateModule(Name, ParentModule, IsFramework,
4503                                                 IsExplicit).first;
4504 
4505       // FIXME: set the definition loc for CurrentModule, or call
4506       // ModMap.setInferredModuleAllowedBy()
4507 
4508       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
4509       if (GlobalIndex >= SubmodulesLoaded.size() ||
4510           SubmodulesLoaded[GlobalIndex]) {
4511         Error("too many submodules");
4512         return Failure;
4513       }
4514 
4515       if (!ParentModule) {
4516         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
4517           if (CurFile != F.File) {
4518             if (!Diags.isDiagnosticInFlight()) {
4519               Diag(diag::err_module_file_conflict)
4520                 << CurrentModule->getTopLevelModuleName()
4521                 << CurFile->getName()
4522                 << F.File->getName();
4523             }
4524             return Failure;
4525           }
4526         }
4527 
4528         CurrentModule->setASTFile(F.File);
4529       }
4530 
4531       CurrentModule->Signature = F.Signature;
4532       CurrentModule->IsFromModuleFile = true;
4533       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
4534       CurrentModule->IsExternC = IsExternC;
4535       CurrentModule->InferSubmodules = InferSubmodules;
4536       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
4537       CurrentModule->InferExportWildcard = InferExportWildcard;
4538       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
4539       if (DeserializationListener)
4540         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
4541 
4542       SubmodulesLoaded[GlobalIndex] = CurrentModule;
4543 
4544       // Clear out data that will be replaced by what is in the module file.
4545       CurrentModule->LinkLibraries.clear();
4546       CurrentModule->ConfigMacros.clear();
4547       CurrentModule->UnresolvedConflicts.clear();
4548       CurrentModule->Conflicts.clear();
4549 
4550       // The module is available unless it's missing a requirement; relevant
4551       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
4552       // Missing headers that were present when the module was built do not
4553       // make it unavailable -- if we got this far, this must be an explicitly
4554       // imported module file.
4555       CurrentModule->Requirements.clear();
4556       CurrentModule->MissingHeaders.clear();
4557       CurrentModule->IsMissingRequirement =
4558           ParentModule && ParentModule->IsMissingRequirement;
4559       CurrentModule->IsAvailable = !CurrentModule->IsMissingRequirement;
4560       break;
4561     }
4562 
4563     case SUBMODULE_UMBRELLA_HEADER: {
4564       std::string Filename = Blob;
4565       ResolveImportedPath(F, Filename);
4566       if (auto *Umbrella = PP.getFileManager().getFile(Filename)) {
4567         if (!CurrentModule->getUmbrellaHeader())
4568           ModMap.setUmbrellaHeader(CurrentModule, Umbrella, Blob);
4569         else if (CurrentModule->getUmbrellaHeader().Entry != Umbrella) {
4570           // This can be a spurious difference caused by changing the VFS to
4571           // point to a different copy of the file, and it is too late to
4572           // to rebuild safely.
4573           // FIXME: If we wrote the virtual paths instead of the 'real' paths,
4574           // after input file validation only real problems would remain and we
4575           // could just error. For now, assume it's okay.
4576           break;
4577         }
4578       }
4579       break;
4580     }
4581 
4582     case SUBMODULE_HEADER:
4583     case SUBMODULE_EXCLUDED_HEADER:
4584     case SUBMODULE_PRIVATE_HEADER:
4585       // We lazily associate headers with their modules via the HeaderInfo table.
4586       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4587       // of complete filenames or remove it entirely.
4588       break;
4589 
4590     case SUBMODULE_TEXTUAL_HEADER:
4591     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
4592       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
4593       // them here.
4594       break;
4595 
4596     case SUBMODULE_TOPHEADER: {
4597       CurrentModule->addTopHeaderFilename(Blob);
4598       break;
4599     }
4600 
4601     case SUBMODULE_UMBRELLA_DIR: {
4602       std::string Dirname = Blob;
4603       ResolveImportedPath(F, Dirname);
4604       if (auto *Umbrella = PP.getFileManager().getDirectory(Dirname)) {
4605         if (!CurrentModule->getUmbrellaDir())
4606           ModMap.setUmbrellaDir(CurrentModule, Umbrella, Blob);
4607         else if (CurrentModule->getUmbrellaDir().Entry != Umbrella) {
4608           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4609             Error("mismatched umbrella directories in submodule");
4610           return OutOfDate;
4611         }
4612       }
4613       break;
4614     }
4615 
4616     case SUBMODULE_METADATA: {
4617       F.BaseSubmoduleID = getTotalNumSubmodules();
4618       F.LocalNumSubmodules = Record[0];
4619       unsigned LocalBaseSubmoduleID = Record[1];
4620       if (F.LocalNumSubmodules > 0) {
4621         // Introduce the global -> local mapping for submodules within this
4622         // module.
4623         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
4624 
4625         // Introduce the local -> global mapping for submodules within this
4626         // module.
4627         F.SubmoduleRemap.insertOrReplace(
4628           std::make_pair(LocalBaseSubmoduleID,
4629                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
4630 
4631         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
4632       }
4633       break;
4634     }
4635 
4636     case SUBMODULE_IMPORTS: {
4637       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
4638         UnresolvedModuleRef Unresolved;
4639         Unresolved.File = &F;
4640         Unresolved.Mod = CurrentModule;
4641         Unresolved.ID = Record[Idx];
4642         Unresolved.Kind = UnresolvedModuleRef::Import;
4643         Unresolved.IsWildcard = false;
4644         UnresolvedModuleRefs.push_back(Unresolved);
4645       }
4646       break;
4647     }
4648 
4649     case SUBMODULE_EXPORTS: {
4650       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
4651         UnresolvedModuleRef Unresolved;
4652         Unresolved.File = &F;
4653         Unresolved.Mod = CurrentModule;
4654         Unresolved.ID = Record[Idx];
4655         Unresolved.Kind = UnresolvedModuleRef::Export;
4656         Unresolved.IsWildcard = Record[Idx + 1];
4657         UnresolvedModuleRefs.push_back(Unresolved);
4658       }
4659 
4660       // Once we've loaded the set of exports, there's no reason to keep
4661       // the parsed, unresolved exports around.
4662       CurrentModule->UnresolvedExports.clear();
4663       break;
4664     }
4665     case SUBMODULE_REQUIRES: {
4666       CurrentModule->addRequirement(Blob, Record[0], Context.getLangOpts(),
4667                                     Context.getTargetInfo());
4668       break;
4669     }
4670 
4671     case SUBMODULE_LINK_LIBRARY:
4672       CurrentModule->LinkLibraries.push_back(
4673                                          Module::LinkLibrary(Blob, Record[0]));
4674       break;
4675 
4676     case SUBMODULE_CONFIG_MACRO:
4677       CurrentModule->ConfigMacros.push_back(Blob.str());
4678       break;
4679 
4680     case SUBMODULE_CONFLICT: {
4681       UnresolvedModuleRef Unresolved;
4682       Unresolved.File = &F;
4683       Unresolved.Mod = CurrentModule;
4684       Unresolved.ID = Record[0];
4685       Unresolved.Kind = UnresolvedModuleRef::Conflict;
4686       Unresolved.IsWildcard = false;
4687       Unresolved.String = Blob;
4688       UnresolvedModuleRefs.push_back(Unresolved);
4689       break;
4690     }
4691     }
4692   }
4693 }
4694 
4695 /// \brief Parse the record that corresponds to a LangOptions data
4696 /// structure.
4697 ///
4698 /// This routine parses the language options from the AST file and then gives
4699 /// them to the AST listener if one is set.
4700 ///
4701 /// \returns true if the listener deems the file unacceptable, false otherwise.
4702 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
4703                                      bool Complain,
4704                                      ASTReaderListener &Listener,
4705                                      bool AllowCompatibleDifferences) {
4706   LangOptions LangOpts;
4707   unsigned Idx = 0;
4708 #define LANGOPT(Name, Bits, Default, Description) \
4709   LangOpts.Name = Record[Idx++];
4710 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
4711   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
4712 #include "clang/Basic/LangOptions.def"
4713 #define SANITIZER(NAME, ID)                                                    \
4714   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
4715 #include "clang/Basic/Sanitizers.def"
4716 
4717   for (unsigned N = Record[Idx++]; N; --N)
4718     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
4719 
4720   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
4721   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
4722   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
4723 
4724   LangOpts.CurrentModule = ReadString(Record, Idx);
4725 
4726   // Comment options.
4727   for (unsigned N = Record[Idx++]; N; --N) {
4728     LangOpts.CommentOpts.BlockCommandNames.push_back(
4729       ReadString(Record, Idx));
4730   }
4731   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
4732 
4733   // OpenMP offloading options.
4734   for (unsigned N = Record[Idx++]; N; --N) {
4735     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
4736   }
4737 
4738   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
4739 
4740   return Listener.ReadLanguageOptions(LangOpts, Complain,
4741                                       AllowCompatibleDifferences);
4742 }
4743 
4744 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
4745                                    ASTReaderListener &Listener,
4746                                    bool AllowCompatibleDifferences) {
4747   unsigned Idx = 0;
4748   TargetOptions TargetOpts;
4749   TargetOpts.Triple = ReadString(Record, Idx);
4750   TargetOpts.CPU = ReadString(Record, Idx);
4751   TargetOpts.ABI = ReadString(Record, Idx);
4752   for (unsigned N = Record[Idx++]; N; --N) {
4753     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
4754   }
4755   for (unsigned N = Record[Idx++]; N; --N) {
4756     TargetOpts.Features.push_back(ReadString(Record, Idx));
4757   }
4758 
4759   return Listener.ReadTargetOptions(TargetOpts, Complain,
4760                                     AllowCompatibleDifferences);
4761 }
4762 
4763 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
4764                                        ASTReaderListener &Listener) {
4765   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
4766   unsigned Idx = 0;
4767 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
4768 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
4769   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
4770 #include "clang/Basic/DiagnosticOptions.def"
4771 
4772   for (unsigned N = Record[Idx++]; N; --N)
4773     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
4774   for (unsigned N = Record[Idx++]; N; --N)
4775     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
4776 
4777   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
4778 }
4779 
4780 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
4781                                        ASTReaderListener &Listener) {
4782   FileSystemOptions FSOpts;
4783   unsigned Idx = 0;
4784   FSOpts.WorkingDir = ReadString(Record, Idx);
4785   return Listener.ReadFileSystemOptions(FSOpts, Complain);
4786 }
4787 
4788 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
4789                                          bool Complain,
4790                                          ASTReaderListener &Listener) {
4791   HeaderSearchOptions HSOpts;
4792   unsigned Idx = 0;
4793   HSOpts.Sysroot = ReadString(Record, Idx);
4794 
4795   // Include entries.
4796   for (unsigned N = Record[Idx++]; N; --N) {
4797     std::string Path = ReadString(Record, Idx);
4798     frontend::IncludeDirGroup Group
4799       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
4800     bool IsFramework = Record[Idx++];
4801     bool IgnoreSysRoot = Record[Idx++];
4802     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
4803                                     IgnoreSysRoot);
4804   }
4805 
4806   // System header prefixes.
4807   for (unsigned N = Record[Idx++]; N; --N) {
4808     std::string Prefix = ReadString(Record, Idx);
4809     bool IsSystemHeader = Record[Idx++];
4810     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
4811   }
4812 
4813   HSOpts.ResourceDir = ReadString(Record, Idx);
4814   HSOpts.ModuleCachePath = ReadString(Record, Idx);
4815   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
4816   HSOpts.DisableModuleHash = Record[Idx++];
4817   HSOpts.UseBuiltinIncludes = Record[Idx++];
4818   HSOpts.UseStandardSystemIncludes = Record[Idx++];
4819   HSOpts.UseStandardCXXIncludes = Record[Idx++];
4820   HSOpts.UseLibcxx = Record[Idx++];
4821   std::string SpecificModuleCachePath = ReadString(Record, Idx);
4822 
4823   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4824                                           Complain);
4825 }
4826 
4827 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
4828                                          bool Complain,
4829                                          ASTReaderListener &Listener,
4830                                          std::string &SuggestedPredefines) {
4831   PreprocessorOptions PPOpts;
4832   unsigned Idx = 0;
4833 
4834   // Macro definitions/undefs
4835   for (unsigned N = Record[Idx++]; N; --N) {
4836     std::string Macro = ReadString(Record, Idx);
4837     bool IsUndef = Record[Idx++];
4838     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
4839   }
4840 
4841   // Includes
4842   for (unsigned N = Record[Idx++]; N; --N) {
4843     PPOpts.Includes.push_back(ReadString(Record, Idx));
4844   }
4845 
4846   // Macro Includes
4847   for (unsigned N = Record[Idx++]; N; --N) {
4848     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
4849   }
4850 
4851   PPOpts.UsePredefines = Record[Idx++];
4852   PPOpts.DetailedRecord = Record[Idx++];
4853   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
4854   PPOpts.ImplicitPTHInclude = ReadString(Record, Idx);
4855   PPOpts.ObjCXXARCStandardLibrary =
4856     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
4857   SuggestedPredefines.clear();
4858   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
4859                                           SuggestedPredefines);
4860 }
4861 
4862 std::pair<ModuleFile *, unsigned>
4863 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
4864   GlobalPreprocessedEntityMapType::iterator
4865   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
4866   assert(I != GlobalPreprocessedEntityMap.end() &&
4867          "Corrupted global preprocessed entity map");
4868   ModuleFile *M = I->second;
4869   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
4870   return std::make_pair(M, LocalIndex);
4871 }
4872 
4873 llvm::iterator_range<PreprocessingRecord::iterator>
4874 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
4875   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
4876     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
4877                                              Mod.NumPreprocessedEntities);
4878 
4879   return llvm::make_range(PreprocessingRecord::iterator(),
4880                           PreprocessingRecord::iterator());
4881 }
4882 
4883 llvm::iterator_range<ASTReader::ModuleDeclIterator>
4884 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
4885   return llvm::make_range(
4886       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
4887       ModuleDeclIterator(this, &Mod,
4888                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
4889 }
4890 
4891 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
4892   PreprocessedEntityID PPID = Index+1;
4893   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
4894   ModuleFile &M = *PPInfo.first;
4895   unsigned LocalIndex = PPInfo.second;
4896   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
4897 
4898   if (!PP.getPreprocessingRecord()) {
4899     Error("no preprocessing record");
4900     return nullptr;
4901   }
4902 
4903   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
4904   M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
4905 
4906   llvm::BitstreamEntry Entry =
4907     M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
4908   if (Entry.Kind != llvm::BitstreamEntry::Record)
4909     return nullptr;
4910 
4911   // Read the record.
4912   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
4913                     TranslateSourceLocation(M, PPOffs.getEnd()));
4914   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
4915   StringRef Blob;
4916   RecordData Record;
4917   PreprocessorDetailRecordTypes RecType =
4918     (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord(
4919                                           Entry.ID, Record, &Blob);
4920   switch (RecType) {
4921   case PPD_MACRO_EXPANSION: {
4922     bool isBuiltin = Record[0];
4923     IdentifierInfo *Name = nullptr;
4924     MacroDefinitionRecord *Def = nullptr;
4925     if (isBuiltin)
4926       Name = getLocalIdentifier(M, Record[1]);
4927     else {
4928       PreprocessedEntityID GlobalID =
4929           getGlobalPreprocessedEntityID(M, Record[1]);
4930       Def = cast<MacroDefinitionRecord>(
4931           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
4932     }
4933 
4934     MacroExpansion *ME;
4935     if (isBuiltin)
4936       ME = new (PPRec) MacroExpansion(Name, Range);
4937     else
4938       ME = new (PPRec) MacroExpansion(Def, Range);
4939 
4940     return ME;
4941   }
4942 
4943   case PPD_MACRO_DEFINITION: {
4944     // Decode the identifier info and then check again; if the macro is
4945     // still defined and associated with the identifier,
4946     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
4947     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
4948 
4949     if (DeserializationListener)
4950       DeserializationListener->MacroDefinitionRead(PPID, MD);
4951 
4952     return MD;
4953   }
4954 
4955   case PPD_INCLUSION_DIRECTIVE: {
4956     const char *FullFileNameStart = Blob.data() + Record[0];
4957     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
4958     const FileEntry *File = nullptr;
4959     if (!FullFileName.empty())
4960       File = PP.getFileManager().getFile(FullFileName);
4961 
4962     // FIXME: Stable encoding
4963     InclusionDirective::InclusionKind Kind
4964       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
4965     InclusionDirective *ID
4966       = new (PPRec) InclusionDirective(PPRec, Kind,
4967                                        StringRef(Blob.data(), Record[0]),
4968                                        Record[1], Record[3],
4969                                        File,
4970                                        Range);
4971     return ID;
4972   }
4973   }
4974 
4975   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
4976 }
4977 
4978 /// \brief \arg SLocMapI points at a chunk of a module that contains no
4979 /// preprocessed entities or the entities it contains are not the ones we are
4980 /// looking for. Find the next module that contains entities and return the ID
4981 /// of the first entry.
4982 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
4983                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
4984   ++SLocMapI;
4985   for (GlobalSLocOffsetMapType::const_iterator
4986          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
4987     ModuleFile &M = *SLocMapI->second;
4988     if (M.NumPreprocessedEntities)
4989       return M.BasePreprocessedEntityID;
4990   }
4991 
4992   return getTotalNumPreprocessedEntities();
4993 }
4994 
4995 namespace {
4996 
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.TranslateSourceLocation(M, PPE.getBegin());
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(*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(
5062               TranslateSourceLocation(M, PPI->getEnd()), 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 = TranslateSourceLocation(M, PPOffs.getBegin());
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   SourceLocation Loc;
6441   DeclCursorForID(ID, Loc);
6442   return Loc;
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::MapVector<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