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