ASTReader.cpp revision 5db255e02fde04cbfec65e4596a217591933a76b
1//===--- ASTReader.cpp - AST File Reader ------------------------*- C++ -*-===//
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 "clang/Serialization/ASTDeserializationListener.h"
16#include "clang/Serialization/ModuleManager.h"
17#include "ASTCommon.h"
18#include "ASTReaderInternals.h"
19#include "clang/Frontend/FrontendDiagnostic.h"
20#include "clang/Frontend/Utils.h"
21#include "clang/Sema/Sema.h"
22#include "clang/Sema/Scope.h"
23#include "clang/AST/ASTConsumer.h"
24#include "clang/AST/ASTContext.h"
25#include "clang/AST/DeclTemplate.h"
26#include "clang/AST/Expr.h"
27#include "clang/AST/ExprCXX.h"
28#include "clang/AST/NestedNameSpecifier.h"
29#include "clang/AST/Type.h"
30#include "clang/AST/TypeLocVisitor.h"
31#include "clang/Lex/MacroInfo.h"
32#include "clang/Lex/PreprocessingRecord.h"
33#include "clang/Lex/Preprocessor.h"
34#include "clang/Lex/HeaderSearch.h"
35#include "clang/Basic/OnDiskHashTable.h"
36#include "clang/Basic/SourceManager.h"
37#include "clang/Basic/SourceManagerInternals.h"
38#include "clang/Basic/FileManager.h"
39#include "clang/Basic/FileSystemStatCache.h"
40#include "clang/Basic/TargetInfo.h"
41#include "clang/Basic/Version.h"
42#include "clang/Basic/VersionTuple.h"
43#include "llvm/ADT/StringExtras.h"
44#include "llvm/Bitcode/BitstreamReader.h"
45#include "llvm/Support/MemoryBuffer.h"
46#include "llvm/Support/ErrorHandling.h"
47#include "llvm/Support/FileSystem.h"
48#include "llvm/Support/Path.h"
49#include "llvm/Support/system_error.h"
50#include <algorithm>
51#include <iterator>
52#include <cstdio>
53#include <sys/stat.h>
54
55using namespace clang;
56using namespace clang::serialization;
57using namespace clang::serialization::reader;
58
59//===----------------------------------------------------------------------===//
60// PCH validator implementation
61//===----------------------------------------------------------------------===//
62
63ASTReaderListener::~ASTReaderListener() {}
64
65bool
66PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
67  const LangOptions &PPLangOpts = PP.getLangOptions();
68#define PARSE_LANGOPT_BENIGN(Option)
69#define PARSE_LANGOPT_IMPORTANT(Option, DiagID)                    \
70  if (PPLangOpts.Option != LangOpts.Option) {                      \
71    Reader.Diag(DiagID) << LangOpts.Option << PPLangOpts.Option;   \
72    return true;                                                   \
73  }
74
75  PARSE_LANGOPT_BENIGN(Trigraphs);
76  PARSE_LANGOPT_BENIGN(BCPLComment);
77  PARSE_LANGOPT_BENIGN(DollarIdents);
78  PARSE_LANGOPT_BENIGN(AsmPreprocessor);
79  PARSE_LANGOPT_IMPORTANT(GNUMode, diag::warn_pch_gnu_extensions);
80  PARSE_LANGOPT_IMPORTANT(GNUKeywords, diag::warn_pch_gnu_keywords);
81  PARSE_LANGOPT_BENIGN(ImplicitInt);
82  PARSE_LANGOPT_BENIGN(Digraphs);
83  PARSE_LANGOPT_BENIGN(HexFloats);
84  PARSE_LANGOPT_IMPORTANT(C99, diag::warn_pch_c99);
85  PARSE_LANGOPT_IMPORTANT(C1X, diag::warn_pch_c1x);
86  PARSE_LANGOPT_IMPORTANT(Microsoft, diag::warn_pch_microsoft_extensions);
87  PARSE_LANGOPT_BENIGN(MSCVersion);
88  PARSE_LANGOPT_IMPORTANT(CPlusPlus, diag::warn_pch_cplusplus);
89  PARSE_LANGOPT_IMPORTANT(CPlusPlus0x, diag::warn_pch_cplusplus0x);
90  PARSE_LANGOPT_BENIGN(CXXOperatorName);
91  PARSE_LANGOPT_IMPORTANT(ObjC1, diag::warn_pch_objective_c);
92  PARSE_LANGOPT_IMPORTANT(ObjC2, diag::warn_pch_objective_c2);
93  PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI, diag::warn_pch_nonfragile_abi);
94  PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI2, diag::warn_pch_nonfragile_abi2);
95  PARSE_LANGOPT_IMPORTANT(AppleKext, diag::warn_pch_apple_kext);
96  PARSE_LANGOPT_IMPORTANT(ObjCDefaultSynthProperties,
97                          diag::warn_pch_objc_auto_properties);
98  PARSE_LANGOPT_BENIGN(ObjCInferRelatedResultType)
99  PARSE_LANGOPT_IMPORTANT(NoConstantCFStrings,
100                          diag::warn_pch_no_constant_cfstrings);
101  PARSE_LANGOPT_BENIGN(PascalStrings);
102  PARSE_LANGOPT_BENIGN(WritableStrings);
103  PARSE_LANGOPT_IMPORTANT(LaxVectorConversions,
104                          diag::warn_pch_lax_vector_conversions);
105  PARSE_LANGOPT_IMPORTANT(AltiVec, diag::warn_pch_altivec);
106  PARSE_LANGOPT_IMPORTANT(Exceptions, diag::warn_pch_exceptions);
107  PARSE_LANGOPT_IMPORTANT(ObjCExceptions, diag::warn_pch_objc_exceptions);
108  PARSE_LANGOPT_IMPORTANT(CXXExceptions, diag::warn_pch_cxx_exceptions);
109  PARSE_LANGOPT_IMPORTANT(SjLjExceptions, diag::warn_pch_sjlj_exceptions);
110  PARSE_LANGOPT_IMPORTANT(MSBitfields, diag::warn_pch_ms_bitfields);
111  PARSE_LANGOPT_IMPORTANT(NeXTRuntime, diag::warn_pch_objc_runtime);
112  PARSE_LANGOPT_IMPORTANT(Freestanding, diag::warn_pch_freestanding);
113  PARSE_LANGOPT_IMPORTANT(NoBuiltin, diag::warn_pch_builtins);
114  PARSE_LANGOPT_IMPORTANT(ThreadsafeStatics,
115                          diag::warn_pch_thread_safe_statics);
116  PARSE_LANGOPT_IMPORTANT(POSIXThreads, diag::warn_pch_posix_threads);
117  PARSE_LANGOPT_IMPORTANT(Blocks, diag::warn_pch_blocks);
118  PARSE_LANGOPT_BENIGN(EmitAllDecls);
119  PARSE_LANGOPT_IMPORTANT(MathErrno, diag::warn_pch_math_errno);
120  PARSE_LANGOPT_BENIGN(getSignedOverflowBehavior());
121  PARSE_LANGOPT_IMPORTANT(HeinousExtensions,
122                          diag::warn_pch_heinous_extensions);
123  // FIXME: Most of the options below are benign if the macro wasn't
124  // used. Unfortunately, this means that a PCH compiled without
125  // optimization can't be used with optimization turned on, even
126  // though the only thing that changes is whether __OPTIMIZE__ was
127  // defined... but if __OPTIMIZE__ never showed up in the header, it
128  // doesn't matter. We could consider making this some special kind
129  // of check.
130  PARSE_LANGOPT_IMPORTANT(Optimize, diag::warn_pch_optimize);
131  PARSE_LANGOPT_IMPORTANT(OptimizeSize, diag::warn_pch_optimize_size);
132  PARSE_LANGOPT_IMPORTANT(Static, diag::warn_pch_static);
133  PARSE_LANGOPT_IMPORTANT(PICLevel, diag::warn_pch_pic_level);
134  PARSE_LANGOPT_IMPORTANT(GNUInline, diag::warn_pch_gnu_inline);
135  PARSE_LANGOPT_IMPORTANT(NoInline, diag::warn_pch_no_inline);
136  PARSE_LANGOPT_IMPORTANT(Deprecated, diag::warn_pch_deprecated);
137  PARSE_LANGOPT_IMPORTANT(AccessControl, diag::warn_pch_access_control);
138  PARSE_LANGOPT_IMPORTANT(CharIsSigned, diag::warn_pch_char_signed);
139  PARSE_LANGOPT_IMPORTANT(ShortWChar, diag::warn_pch_short_wchar);
140  PARSE_LANGOPT_IMPORTANT(ShortEnums, diag::warn_pch_short_enums);
141  if ((PPLangOpts.getGCMode() != 0) != (LangOpts.getGCMode() != 0)) {
142    Reader.Diag(diag::warn_pch_gc_mode)
143      << LangOpts.getGCMode() << PPLangOpts.getGCMode();
144    return true;
145  }
146  PARSE_LANGOPT_BENIGN(getVisibilityMode());
147  PARSE_LANGOPT_IMPORTANT(getStackProtectorMode(),
148                          diag::warn_pch_stack_protector);
149  PARSE_LANGOPT_BENIGN(InstantiationDepth);
150  PARSE_LANGOPT_IMPORTANT(OpenCL, diag::warn_pch_opencl);
151  PARSE_LANGOPT_IMPORTANT(CUDA, diag::warn_pch_cuda);
152  PARSE_LANGOPT_BENIGN(CatchUndefined);
153  PARSE_LANGOPT_BENIGN(DefaultFPContract);
154  PARSE_LANGOPT_IMPORTANT(ElideConstructors, diag::warn_pch_elide_constructors);
155  PARSE_LANGOPT_BENIGN(SpellChecking);
156  PARSE_LANGOPT_IMPORTANT(ObjCAutoRefCount, diag::warn_pch_auto_ref_count);
157#undef PARSE_LANGOPT_IMPORTANT
158#undef PARSE_LANGOPT_BENIGN
159
160  return false;
161}
162
163bool PCHValidator::ReadTargetTriple(StringRef Triple) {
164  if (Triple == PP.getTargetInfo().getTriple().str())
165    return false;
166
167  Reader.Diag(diag::warn_pch_target_triple)
168    << Triple << PP.getTargetInfo().getTriple().str();
169  return true;
170}
171
172namespace {
173  struct EmptyStringRef {
174    bool operator ()(StringRef r) const { return r.empty(); }
175  };
176  struct EmptyBlock {
177    bool operator ()(const PCHPredefinesBlock &r) const {return r.Data.empty();}
178  };
179}
180
181static bool EqualConcatenations(SmallVector<StringRef, 2> L,
182                                PCHPredefinesBlocks R) {
183  // First, sum up the lengths.
184  unsigned LL = 0, RL = 0;
185  for (unsigned I = 0, N = L.size(); I != N; ++I) {
186    LL += L[I].size();
187  }
188  for (unsigned I = 0, N = R.size(); I != N; ++I) {
189    RL += R[I].Data.size();
190  }
191  if (LL != RL)
192    return false;
193  if (LL == 0 && RL == 0)
194    return true;
195
196  // Kick out empty parts, they confuse the algorithm below.
197  L.erase(std::remove_if(L.begin(), L.end(), EmptyStringRef()), L.end());
198  R.erase(std::remove_if(R.begin(), R.end(), EmptyBlock()), R.end());
199
200  // Do it the hard way. At this point, both vectors must be non-empty.
201  StringRef LR = L[0], RR = R[0].Data;
202  unsigned LI = 0, RI = 0, LN = L.size(), RN = R.size();
203  (void) RN;
204  for (;;) {
205    // Compare the current pieces.
206    if (LR.size() == RR.size()) {
207      // If they're the same length, it's pretty easy.
208      if (LR != RR)
209        return false;
210      // Both pieces are done, advance.
211      ++LI;
212      ++RI;
213      // If either string is done, they're both done, since they're the same
214      // length.
215      if (LI == LN) {
216        assert(RI == RN && "Strings not the same length after all?");
217        return true;
218      }
219      LR = L[LI];
220      RR = R[RI].Data;
221    } else if (LR.size() < RR.size()) {
222      // Right piece is longer.
223      if (!RR.startswith(LR))
224        return false;
225      ++LI;
226      assert(LI != LN && "Strings not the same length after all?");
227      RR = RR.substr(LR.size());
228      LR = L[LI];
229    } else {
230      // Left piece is longer.
231      if (!LR.startswith(RR))
232        return false;
233      ++RI;
234      assert(RI != RN && "Strings not the same length after all?");
235      LR = LR.substr(RR.size());
236      RR = R[RI].Data;
237    }
238  }
239}
240
241static std::pair<FileID, StringRef::size_type>
242FindMacro(const PCHPredefinesBlocks &Buffers, StringRef MacroDef) {
243  std::pair<FileID, StringRef::size_type> Res;
244  for (unsigned I = 0, N = Buffers.size(); I != N; ++I) {
245    Res.second = Buffers[I].Data.find(MacroDef);
246    if (Res.second != StringRef::npos) {
247      Res.first = Buffers[I].BufferID;
248      break;
249    }
250  }
251  return Res;
252}
253
254bool PCHValidator::ReadPredefinesBuffer(const PCHPredefinesBlocks &Buffers,
255                                        StringRef OriginalFileName,
256                                        std::string &SuggestedPredefines,
257                                        FileManager &FileMgr) {
258  // We are in the context of an implicit include, so the predefines buffer will
259  // have a #include entry for the PCH file itself (as normalized by the
260  // preprocessor initialization). Find it and skip over it in the checking
261  // below.
262  llvm::SmallString<256> PCHInclude;
263  PCHInclude += "#include \"";
264  PCHInclude += NormalizeDashIncludePath(OriginalFileName, FileMgr);
265  PCHInclude += "\"\n";
266  std::pair<StringRef,StringRef> Split =
267    StringRef(PP.getPredefines()).split(PCHInclude.str());
268  StringRef Left =  Split.first, Right = Split.second;
269  if (Left == PP.getPredefines()) {
270    Error("Missing PCH include entry!");
271    return true;
272  }
273
274  // If the concatenation of all the PCH buffers is equal to the adjusted
275  // command line, we're done.
276  SmallVector<StringRef, 2> CommandLine;
277  CommandLine.push_back(Left);
278  CommandLine.push_back(Right);
279  if (EqualConcatenations(CommandLine, Buffers))
280    return false;
281
282  SourceManager &SourceMgr = PP.getSourceManager();
283
284  // The predefines buffers are different. Determine what the differences are,
285  // and whether they require us to reject the PCH file.
286  SmallVector<StringRef, 8> PCHLines;
287  for (unsigned I = 0, N = Buffers.size(); I != N; ++I)
288    Buffers[I].Data.split(PCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
289
290  SmallVector<StringRef, 8> CmdLineLines;
291  Left.split(CmdLineLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
292
293  // Pick out implicit #includes after the PCH and don't consider them for
294  // validation; we will insert them into SuggestedPredefines so that the
295  // preprocessor includes them.
296  std::string IncludesAfterPCH;
297  SmallVector<StringRef, 8> AfterPCHLines;
298  Right.split(AfterPCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
299  for (unsigned i = 0, e = AfterPCHLines.size(); i != e; ++i) {
300    if (AfterPCHLines[i].startswith("#include ")) {
301      IncludesAfterPCH += AfterPCHLines[i];
302      IncludesAfterPCH += '\n';
303    } else {
304      CmdLineLines.push_back(AfterPCHLines[i]);
305    }
306  }
307
308  // Make sure we add the includes last into SuggestedPredefines before we
309  // exit this function.
310  struct AddIncludesRAII {
311    std::string &SuggestedPredefines;
312    std::string &IncludesAfterPCH;
313
314    AddIncludesRAII(std::string &SuggestedPredefines,
315                    std::string &IncludesAfterPCH)
316      : SuggestedPredefines(SuggestedPredefines),
317        IncludesAfterPCH(IncludesAfterPCH) { }
318    ~AddIncludesRAII() {
319      SuggestedPredefines += IncludesAfterPCH;
320    }
321  } AddIncludes(SuggestedPredefines, IncludesAfterPCH);
322
323  // Sort both sets of predefined buffer lines, since we allow some extra
324  // definitions and they may appear at any point in the output.
325  std::sort(CmdLineLines.begin(), CmdLineLines.end());
326  std::sort(PCHLines.begin(), PCHLines.end());
327
328  // Determine which predefines that were used to build the PCH file are missing
329  // from the command line.
330  std::vector<StringRef> MissingPredefines;
331  std::set_difference(PCHLines.begin(), PCHLines.end(),
332                      CmdLineLines.begin(), CmdLineLines.end(),
333                      std::back_inserter(MissingPredefines));
334
335  bool MissingDefines = false;
336  bool ConflictingDefines = false;
337  for (unsigned I = 0, N = MissingPredefines.size(); I != N; ++I) {
338    StringRef Missing = MissingPredefines[I];
339    if (Missing.startswith("#include ")) {
340      // An -include was specified when generating the PCH; it is included in
341      // the PCH, just ignore it.
342      continue;
343    }
344    if (!Missing.startswith("#define ")) {
345      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
346      return true;
347    }
348
349    // This is a macro definition. Determine the name of the macro we're
350    // defining.
351    std::string::size_type StartOfMacroName = strlen("#define ");
352    std::string::size_type EndOfMacroName
353      = Missing.find_first_of("( \n\r", StartOfMacroName);
354    assert(EndOfMacroName != std::string::npos &&
355           "Couldn't find the end of the macro name");
356    StringRef MacroName = Missing.slice(StartOfMacroName, EndOfMacroName);
357
358    // Determine whether this macro was given a different definition on the
359    // command line.
360    std::string MacroDefStart = "#define " + MacroName.str();
361    std::string::size_type MacroDefLen = MacroDefStart.size();
362    SmallVector<StringRef, 8>::iterator ConflictPos
363      = std::lower_bound(CmdLineLines.begin(), CmdLineLines.end(),
364                         MacroDefStart);
365    for (; ConflictPos != CmdLineLines.end(); ++ConflictPos) {
366      if (!ConflictPos->startswith(MacroDefStart)) {
367        // Different macro; we're done.
368        ConflictPos = CmdLineLines.end();
369        break;
370      }
371
372      assert(ConflictPos->size() > MacroDefLen &&
373             "Invalid #define in predefines buffer?");
374      if ((*ConflictPos)[MacroDefLen] != ' ' &&
375          (*ConflictPos)[MacroDefLen] != '(')
376        continue; // Longer macro name; keep trying.
377
378      // We found a conflicting macro definition.
379      break;
380    }
381
382    if (ConflictPos != CmdLineLines.end()) {
383      Reader.Diag(diag::warn_cmdline_conflicting_macro_def)
384          << MacroName;
385
386      // Show the definition of this macro within the PCH file.
387      std::pair<FileID, StringRef::size_type> MacroLoc =
388          FindMacro(Buffers, Missing);
389      assert(MacroLoc.second!=StringRef::npos && "Unable to find macro!");
390      SourceLocation PCHMissingLoc =
391          SourceMgr.getLocForStartOfFile(MacroLoc.first)
392            .getFileLocWithOffset(MacroLoc.second);
393      Reader.Diag(PCHMissingLoc, diag::note_pch_macro_defined_as) << MacroName;
394
395      ConflictingDefines = true;
396      continue;
397    }
398
399    // If the macro doesn't conflict, then we'll just pick up the macro
400    // definition from the PCH file. Warn the user that they made a mistake.
401    if (ConflictingDefines)
402      continue; // Don't complain if there are already conflicting defs
403
404    if (!MissingDefines) {
405      Reader.Diag(diag::warn_cmdline_missing_macro_defs);
406      MissingDefines = true;
407    }
408
409    // Show the definition of this macro within the PCH file.
410    std::pair<FileID, StringRef::size_type> MacroLoc =
411        FindMacro(Buffers, Missing);
412    assert(MacroLoc.second!=StringRef::npos && "Unable to find macro!");
413    SourceLocation PCHMissingLoc =
414        SourceMgr.getLocForStartOfFile(MacroLoc.first)
415          .getFileLocWithOffset(MacroLoc.second);
416    Reader.Diag(PCHMissingLoc, diag::note_using_macro_def_from_pch);
417  }
418
419  if (ConflictingDefines)
420    return true;
421
422  // Determine what predefines were introduced based on command-line
423  // parameters that were not present when building the PCH
424  // file. Extra #defines are okay, so long as the identifiers being
425  // defined were not used within the precompiled header.
426  std::vector<StringRef> ExtraPredefines;
427  std::set_difference(CmdLineLines.begin(), CmdLineLines.end(),
428                      PCHLines.begin(), PCHLines.end(),
429                      std::back_inserter(ExtraPredefines));
430  for (unsigned I = 0, N = ExtraPredefines.size(); I != N; ++I) {
431    StringRef &Extra = ExtraPredefines[I];
432    if (!Extra.startswith("#define ")) {
433      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
434      return true;
435    }
436
437    // This is an extra macro definition. Determine the name of the
438    // macro we're defining.
439    std::string::size_type StartOfMacroName = strlen("#define ");
440    std::string::size_type EndOfMacroName
441      = Extra.find_first_of("( \n\r", StartOfMacroName);
442    assert(EndOfMacroName != std::string::npos &&
443           "Couldn't find the end of the macro name");
444    StringRef MacroName = Extra.slice(StartOfMacroName, EndOfMacroName);
445
446    // Check whether this name was used somewhere in the PCH file. If
447    // so, defining it as a macro could change behavior, so we reject
448    // the PCH file.
449    if (IdentifierInfo *II = Reader.get(MacroName)) {
450      Reader.Diag(diag::warn_macro_name_used_in_pch) << II;
451      return true;
452    }
453
454    // Add this definition to the suggested predefines buffer.
455    SuggestedPredefines += Extra;
456    SuggestedPredefines += '\n';
457  }
458
459  // If we get here, it's because the predefines buffer had compatible
460  // contents. Accept the PCH file.
461  return false;
462}
463
464void PCHValidator::ReadHeaderFileInfo(const HeaderFileInfo &HFI,
465                                      unsigned ID) {
466  PP.getHeaderSearchInfo().setHeaderFileInfoForUID(HFI, ID);
467  ++NumHeaderInfos;
468}
469
470void PCHValidator::ReadCounter(unsigned Value) {
471  PP.setCounterValue(Value);
472}
473
474//===----------------------------------------------------------------------===//
475// AST reader implementation
476//===----------------------------------------------------------------------===//
477
478void
479ASTReader::setDeserializationListener(ASTDeserializationListener *Listener) {
480  DeserializationListener = Listener;
481}
482
483
484
485unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
486  return serialization::ComputeHash(Sel);
487}
488
489
490std::pair<unsigned, unsigned>
491ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
492  using namespace clang::io;
493  unsigned KeyLen = ReadUnalignedLE16(d);
494  unsigned DataLen = ReadUnalignedLE16(d);
495  return std::make_pair(KeyLen, DataLen);
496}
497
498ASTSelectorLookupTrait::internal_key_type
499ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
500  using namespace clang::io;
501  SelectorTable &SelTable = Reader.getContext()->Selectors;
502  unsigned N = ReadUnalignedLE16(d);
503  IdentifierInfo *FirstII
504    = Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
505  if (N == 0)
506    return SelTable.getNullarySelector(FirstII);
507  else if (N == 1)
508    return SelTable.getUnarySelector(FirstII);
509
510  SmallVector<IdentifierInfo *, 16> Args;
511  Args.push_back(FirstII);
512  for (unsigned I = 1; I != N; ++I)
513    Args.push_back(Reader.getLocalIdentifier(F, ReadUnalignedLE32(d)));
514
515  return SelTable.getSelector(N, Args.data());
516}
517
518ASTSelectorLookupTrait::data_type
519ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
520                                 unsigned DataLen) {
521  using namespace clang::io;
522
523  data_type Result;
524
525  Result.ID = Reader.getGlobalSelectorID(F, ReadUnalignedLE32(d));
526  unsigned NumInstanceMethods = ReadUnalignedLE16(d);
527  unsigned NumFactoryMethods = ReadUnalignedLE16(d);
528
529  // Load instance methods
530  for (unsigned I = 0; I != NumInstanceMethods; ++I) {
531    if (ObjCMethodDecl *Method
532          = Reader.GetLocalDeclAs<ObjCMethodDecl>(F, ReadUnalignedLE32(d)))
533      Result.Instance.push_back(Method);
534  }
535
536  // Load factory methods
537  for (unsigned I = 0; I != NumFactoryMethods; ++I) {
538    if (ObjCMethodDecl *Method
539          = Reader.GetLocalDeclAs<ObjCMethodDecl>(F, ReadUnalignedLE32(d)))
540      Result.Factory.push_back(Method);
541  }
542
543  return Result;
544}
545
546unsigned ASTIdentifierLookupTrait::ComputeHash(const internal_key_type& a) {
547  return llvm::HashString(StringRef(a.first, a.second));
548}
549
550std::pair<unsigned, unsigned>
551ASTIdentifierLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
552  using namespace clang::io;
553  unsigned DataLen = ReadUnalignedLE16(d);
554  unsigned KeyLen = ReadUnalignedLE16(d);
555  return std::make_pair(KeyLen, DataLen);
556}
557
558std::pair<const char*, unsigned>
559ASTIdentifierLookupTrait::ReadKey(const unsigned char* d, unsigned n) {
560  assert(n >= 2 && d[n-1] == '\0');
561  return std::make_pair((const char*) d, n-1);
562}
563
564IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
565                                                   const unsigned char* d,
566                                                   unsigned DataLen) {
567  using namespace clang::io;
568  unsigned RawID = ReadUnalignedLE32(d);
569  bool IsInteresting = RawID & 0x01;
570
571  // Wipe out the "is interesting" bit.
572  RawID = RawID >> 1;
573
574  IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
575  if (!IsInteresting) {
576    // For uninteresting identifiers, just build the IdentifierInfo
577    // and associate it with the persistent ID.
578    IdentifierInfo *II = KnownII;
579    if (!II)
580      II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second));
581    Reader.SetIdentifierInfo(ID, II);
582    II->setIsFromAST();
583    return II;
584  }
585
586  unsigned Bits = ReadUnalignedLE16(d);
587  bool CPlusPlusOperatorKeyword = Bits & 0x01;
588  Bits >>= 1;
589  bool HasRevertedTokenIDToIdentifier = Bits & 0x01;
590  Bits >>= 1;
591  bool Poisoned = Bits & 0x01;
592  Bits >>= 1;
593  bool ExtensionToken = Bits & 0x01;
594  Bits >>= 1;
595  bool hasMacroDefinition = Bits & 0x01;
596  Bits >>= 1;
597  unsigned ObjCOrBuiltinID = Bits & 0x3FF;
598  Bits >>= 10;
599
600  assert(Bits == 0 && "Extra bits in the identifier?");
601  DataLen -= 6;
602
603  // Build the IdentifierInfo itself and link the identifier ID with
604  // the new IdentifierInfo.
605  IdentifierInfo *II = KnownII;
606  if (!II)
607    II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second));
608  Reader.SetIdentifierInfo(ID, II);
609
610  // Set or check the various bits in the IdentifierInfo structure.
611  // Token IDs are read-only.
612  if (HasRevertedTokenIDToIdentifier)
613    II->RevertTokenIDToIdentifier();
614  II->setObjCOrBuiltinID(ObjCOrBuiltinID);
615  assert(II->isExtensionToken() == ExtensionToken &&
616         "Incorrect extension token flag");
617  (void)ExtensionToken;
618  if (Poisoned)
619    II->setIsPoisoned(true);
620  assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
621         "Incorrect C++ operator keyword flag");
622  (void)CPlusPlusOperatorKeyword;
623
624  // If this identifier is a macro, deserialize the macro
625  // definition.
626  if (hasMacroDefinition) {
627    // FIXME: Check for conflicts?
628    uint32_t Offset = ReadUnalignedLE32(d);
629    Reader.SetIdentifierIsMacro(II, F, Offset);
630    DataLen -= 4;
631  }
632
633  // Read all of the declarations visible at global scope with this
634  // name.
635  if (Reader.getContext() == 0) return II;
636  if (DataLen > 0) {
637    SmallVector<uint32_t, 4> DeclIDs;
638    for (; DataLen > 0; DataLen -= 4)
639      DeclIDs.push_back(Reader.getGlobalDeclID(F, ReadUnalignedLE32(d)));
640    Reader.SetGloballyVisibleDecls(II, DeclIDs);
641  }
642
643  II->setIsFromAST();
644  return II;
645}
646
647unsigned
648ASTDeclContextNameLookupTrait::ComputeHash(const DeclNameKey &Key) const {
649  llvm::FoldingSetNodeID ID;
650  ID.AddInteger(Key.Kind);
651
652  switch (Key.Kind) {
653  case DeclarationName::Identifier:
654  case DeclarationName::CXXLiteralOperatorName:
655    ID.AddString(((IdentifierInfo*)Key.Data)->getName());
656    break;
657  case DeclarationName::ObjCZeroArgSelector:
658  case DeclarationName::ObjCOneArgSelector:
659  case DeclarationName::ObjCMultiArgSelector:
660    ID.AddInteger(serialization::ComputeHash(Selector(Key.Data)));
661    break;
662  case DeclarationName::CXXOperatorName:
663    ID.AddInteger((OverloadedOperatorKind)Key.Data);
664    break;
665  case DeclarationName::CXXConstructorName:
666  case DeclarationName::CXXDestructorName:
667  case DeclarationName::CXXConversionFunctionName:
668  case DeclarationName::CXXUsingDirective:
669    break;
670  }
671
672  return ID.ComputeHash();
673}
674
675ASTDeclContextNameLookupTrait::internal_key_type
676ASTDeclContextNameLookupTrait::GetInternalKey(
677                                          const external_key_type& Name) const {
678  DeclNameKey Key;
679  Key.Kind = Name.getNameKind();
680  switch (Name.getNameKind()) {
681  case DeclarationName::Identifier:
682    Key.Data = (uint64_t)Name.getAsIdentifierInfo();
683    break;
684  case DeclarationName::ObjCZeroArgSelector:
685  case DeclarationName::ObjCOneArgSelector:
686  case DeclarationName::ObjCMultiArgSelector:
687    Key.Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
688    break;
689  case DeclarationName::CXXOperatorName:
690    Key.Data = Name.getCXXOverloadedOperator();
691    break;
692  case DeclarationName::CXXLiteralOperatorName:
693    Key.Data = (uint64_t)Name.getCXXLiteralIdentifier();
694    break;
695  case DeclarationName::CXXConstructorName:
696  case DeclarationName::CXXDestructorName:
697  case DeclarationName::CXXConversionFunctionName:
698  case DeclarationName::CXXUsingDirective:
699    Key.Data = 0;
700    break;
701  }
702
703  return Key;
704}
705
706ASTDeclContextNameLookupTrait::external_key_type
707ASTDeclContextNameLookupTrait::GetExternalKey(
708                                          const internal_key_type& Key) const {
709  ASTContext *Context = Reader.getContext();
710  switch (Key.Kind) {
711  case DeclarationName::Identifier:
712    return DeclarationName((IdentifierInfo*)Key.Data);
713
714  case DeclarationName::ObjCZeroArgSelector:
715  case DeclarationName::ObjCOneArgSelector:
716  case DeclarationName::ObjCMultiArgSelector:
717    return DeclarationName(Selector(Key.Data));
718
719  case DeclarationName::CXXConstructorName:
720    return Context->DeclarationNames.getCXXConstructorName(
721             Context->getCanonicalType(Reader.getLocalType(F, Key.Data)));
722
723  case DeclarationName::CXXDestructorName:
724    return Context->DeclarationNames.getCXXDestructorName(
725             Context->getCanonicalType(Reader.getLocalType(F, Key.Data)));
726
727  case DeclarationName::CXXConversionFunctionName:
728    return Context->DeclarationNames.getCXXConversionFunctionName(
729             Context->getCanonicalType(Reader.getLocalType(F, Key.Data)));
730
731  case DeclarationName::CXXOperatorName:
732    return Context->DeclarationNames.getCXXOperatorName(
733                                       (OverloadedOperatorKind)Key.Data);
734
735  case DeclarationName::CXXLiteralOperatorName:
736    return Context->DeclarationNames.getCXXLiteralOperatorName(
737                                                   (IdentifierInfo*)Key.Data);
738
739  case DeclarationName::CXXUsingDirective:
740    return DeclarationName::getUsingDirectiveName();
741  }
742
743  llvm_unreachable("Invalid Name Kind ?");
744}
745
746std::pair<unsigned, unsigned>
747ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
748  using namespace clang::io;
749  unsigned KeyLen = ReadUnalignedLE16(d);
750  unsigned DataLen = ReadUnalignedLE16(d);
751  return std::make_pair(KeyLen, DataLen);
752}
753
754ASTDeclContextNameLookupTrait::internal_key_type
755ASTDeclContextNameLookupTrait::ReadKey(const unsigned char* d, unsigned) {
756  using namespace clang::io;
757
758  DeclNameKey Key;
759  Key.Kind = (DeclarationName::NameKind)*d++;
760  switch (Key.Kind) {
761  case DeclarationName::Identifier:
762    Key.Data = (uint64_t)Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
763    break;
764  case DeclarationName::ObjCZeroArgSelector:
765  case DeclarationName::ObjCOneArgSelector:
766  case DeclarationName::ObjCMultiArgSelector:
767    Key.Data =
768       (uint64_t)Reader.getLocalSelector(F, ReadUnalignedLE32(d))
769                   .getAsOpaquePtr();
770    break;
771  case DeclarationName::CXXOperatorName:
772    Key.Data = *d++; // OverloadedOperatorKind
773    break;
774  case DeclarationName::CXXLiteralOperatorName:
775    Key.Data = (uint64_t)Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
776    break;
777  case DeclarationName::CXXConstructorName:
778  case DeclarationName::CXXDestructorName:
779  case DeclarationName::CXXConversionFunctionName:
780  case DeclarationName::CXXUsingDirective:
781    Key.Data = 0;
782    break;
783  }
784
785  return Key;
786}
787
788ASTDeclContextNameLookupTrait::data_type
789ASTDeclContextNameLookupTrait::ReadData(internal_key_type,
790                                        const unsigned char* d,
791                                      unsigned DataLen) {
792  using namespace clang::io;
793  unsigned NumDecls = ReadUnalignedLE16(d);
794  DeclID *Start = (DeclID *)d;
795  return std::make_pair(Start, Start + NumDecls);
796}
797
798bool ASTReader::ReadDeclContextStorage(Module &M,
799                                       llvm::BitstreamCursor &Cursor,
800                                   const std::pair<uint64_t, uint64_t> &Offsets,
801                                       DeclContextInfo &Info) {
802  SavedStreamPosition SavedPosition(Cursor);
803  // First the lexical decls.
804  if (Offsets.first != 0) {
805    Cursor.JumpToBit(Offsets.first);
806
807    RecordData Record;
808    const char *Blob;
809    unsigned BlobLen;
810    unsigned Code = Cursor.ReadCode();
811    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
812    if (RecCode != DECL_CONTEXT_LEXICAL) {
813      Error("Expected lexical block");
814      return true;
815    }
816
817    Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair*>(Blob);
818    Info.NumLexicalDecls = BlobLen / sizeof(KindDeclIDPair);
819  }
820
821  // Now the lookup table.
822  if (Offsets.second != 0) {
823    Cursor.JumpToBit(Offsets.second);
824
825    RecordData Record;
826    const char *Blob;
827    unsigned BlobLen;
828    unsigned Code = Cursor.ReadCode();
829    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
830    if (RecCode != DECL_CONTEXT_VISIBLE) {
831      Error("Expected visible lookup table block");
832      return true;
833    }
834    Info.NameLookupTableData
835      = ASTDeclContextNameLookupTable::Create(
836                    (const unsigned char *)Blob + Record[0],
837                    (const unsigned char *)Blob,
838                    ASTDeclContextNameLookupTrait(*this, M));
839  }
840
841  return false;
842}
843
844void ASTReader::Error(StringRef Msg) {
845  Error(diag::err_fe_pch_malformed, Msg);
846}
847
848void ASTReader::Error(unsigned DiagID,
849                      StringRef Arg1, StringRef Arg2) {
850  if (Diags.isDiagnosticInFlight())
851    Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2);
852  else
853    Diag(DiagID) << Arg1 << Arg2;
854}
855
856/// \brief Tell the AST listener about the predefines buffers in the chain.
857bool ASTReader::CheckPredefinesBuffers() {
858  if (Listener)
859    return Listener->ReadPredefinesBuffer(PCHPredefinesBuffers,
860                                          ActualOriginalFileName,
861                                          SuggestedPredefines,
862                                          FileMgr);
863  return false;
864}
865
866//===----------------------------------------------------------------------===//
867// Source Manager Deserialization
868//===----------------------------------------------------------------------===//
869
870/// \brief Read the line table in the source manager block.
871/// \returns true if there was an error.
872bool ASTReader::ParseLineTable(Module &F,
873                               SmallVectorImpl<uint64_t> &Record) {
874  unsigned Idx = 0;
875  LineTableInfo &LineTable = SourceMgr.getLineTable();
876
877  // Parse the file names
878  std::map<int, int> FileIDs;
879  for (int I = 0, N = Record[Idx++]; I != N; ++I) {
880    // Extract the file name
881    unsigned FilenameLen = Record[Idx++];
882    std::string Filename(&Record[Idx], &Record[Idx] + FilenameLen);
883    Idx += FilenameLen;
884    MaybeAddSystemRootToFilename(Filename);
885    FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
886  }
887
888  // Parse the line entries
889  std::vector<LineEntry> Entries;
890  while (Idx < Record.size()) {
891    int FID = Record[Idx++];
892    assert(FID >= 0 && "Serialized line entries for non-local file.");
893    // Remap FileID from 1-based old view.
894    FID += F.SLocEntryBaseID - 1;
895
896    // Extract the line entries
897    unsigned NumEntries = Record[Idx++];
898    assert(NumEntries && "Numentries is 00000");
899    Entries.clear();
900    Entries.reserve(NumEntries);
901    for (unsigned I = 0; I != NumEntries; ++I) {
902      unsigned FileOffset = Record[Idx++];
903      unsigned LineNo = Record[Idx++];
904      int FilenameID = FileIDs[Record[Idx++]];
905      SrcMgr::CharacteristicKind FileKind
906        = (SrcMgr::CharacteristicKind)Record[Idx++];
907      unsigned IncludeOffset = Record[Idx++];
908      Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
909                                       FileKind, IncludeOffset));
910    }
911    LineTable.AddEntry(FID, Entries);
912  }
913
914  return false;
915}
916
917namespace {
918
919class ASTStatData {
920public:
921  const ino_t ino;
922  const dev_t dev;
923  const mode_t mode;
924  const time_t mtime;
925  const off_t size;
926
927  ASTStatData(ino_t i, dev_t d, mode_t mo, time_t m, off_t s)
928    : ino(i), dev(d), mode(mo), mtime(m), size(s) {}
929};
930
931class ASTStatLookupTrait {
932 public:
933  typedef const char *external_key_type;
934  typedef const char *internal_key_type;
935
936  typedef ASTStatData data_type;
937
938  static unsigned ComputeHash(const char *path) {
939    return llvm::HashString(path);
940  }
941
942  static internal_key_type GetInternalKey(const char *path) { return path; }
943
944  static bool EqualKey(internal_key_type a, internal_key_type b) {
945    return strcmp(a, b) == 0;
946  }
947
948  static std::pair<unsigned, unsigned>
949  ReadKeyDataLength(const unsigned char*& d) {
950    unsigned KeyLen = (unsigned) clang::io::ReadUnalignedLE16(d);
951    unsigned DataLen = (unsigned) *d++;
952    return std::make_pair(KeyLen + 1, DataLen);
953  }
954
955  static internal_key_type ReadKey(const unsigned char *d, unsigned) {
956    return (const char *)d;
957  }
958
959  static data_type ReadData(const internal_key_type, const unsigned char *d,
960                            unsigned /*DataLen*/) {
961    using namespace clang::io;
962
963    ino_t ino = (ino_t) ReadUnalignedLE32(d);
964    dev_t dev = (dev_t) ReadUnalignedLE32(d);
965    mode_t mode = (mode_t) ReadUnalignedLE16(d);
966    time_t mtime = (time_t) ReadUnalignedLE64(d);
967    off_t size = (off_t) ReadUnalignedLE64(d);
968    return data_type(ino, dev, mode, mtime, size);
969  }
970};
971
972/// \brief stat() cache for precompiled headers.
973///
974/// This cache is very similar to the stat cache used by pretokenized
975/// headers.
976class ASTStatCache : public FileSystemStatCache {
977  typedef OnDiskChainedHashTable<ASTStatLookupTrait> CacheTy;
978  CacheTy *Cache;
979
980  unsigned &NumStatHits, &NumStatMisses;
981public:
982  ASTStatCache(const unsigned char *Buckets, const unsigned char *Base,
983               unsigned &NumStatHits, unsigned &NumStatMisses)
984    : Cache(0), NumStatHits(NumStatHits), NumStatMisses(NumStatMisses) {
985    Cache = CacheTy::Create(Buckets, Base);
986  }
987
988  ~ASTStatCache() { delete Cache; }
989
990  LookupResult getStat(const char *Path, struct stat &StatBuf,
991                       int *FileDescriptor) {
992    // Do the lookup for the file's data in the AST file.
993    CacheTy::iterator I = Cache->find(Path);
994
995    // If we don't get a hit in the AST file just forward to 'stat'.
996    if (I == Cache->end()) {
997      ++NumStatMisses;
998      return statChained(Path, StatBuf, FileDescriptor);
999    }
1000
1001    ++NumStatHits;
1002    ASTStatData Data = *I;
1003
1004    StatBuf.st_ino = Data.ino;
1005    StatBuf.st_dev = Data.dev;
1006    StatBuf.st_mtime = Data.mtime;
1007    StatBuf.st_mode = Data.mode;
1008    StatBuf.st_size = Data.size;
1009    return CacheExists;
1010  }
1011};
1012} // end anonymous namespace
1013
1014
1015/// \brief Read a source manager block
1016ASTReader::ASTReadResult ASTReader::ReadSourceManagerBlock(Module &F) {
1017  using namespace SrcMgr;
1018
1019  llvm::BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1020
1021  // Set the source-location entry cursor to the current position in
1022  // the stream. This cursor will be used to read the contents of the
1023  // source manager block initially, and then lazily read
1024  // source-location entries as needed.
1025  SLocEntryCursor = F.Stream;
1026
1027  // The stream itself is going to skip over the source manager block.
1028  if (F.Stream.SkipBlock()) {
1029    Error("malformed block record in AST file");
1030    return Failure;
1031  }
1032
1033  // Enter the source manager block.
1034  if (SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1035    Error("malformed source manager block record in AST file");
1036    return Failure;
1037  }
1038
1039  RecordData Record;
1040  while (true) {
1041    unsigned Code = SLocEntryCursor.ReadCode();
1042    if (Code == llvm::bitc::END_BLOCK) {
1043      if (SLocEntryCursor.ReadBlockEnd()) {
1044        Error("error at end of Source Manager block in AST file");
1045        return Failure;
1046      }
1047      return Success;
1048    }
1049
1050    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1051      // No known subblocks, always skip them.
1052      SLocEntryCursor.ReadSubBlockID();
1053      if (SLocEntryCursor.SkipBlock()) {
1054        Error("malformed block record in AST file");
1055        return Failure;
1056      }
1057      continue;
1058    }
1059
1060    if (Code == llvm::bitc::DEFINE_ABBREV) {
1061      SLocEntryCursor.ReadAbbrevRecord();
1062      continue;
1063    }
1064
1065    // Read a record.
1066    const char *BlobStart;
1067    unsigned BlobLen;
1068    Record.clear();
1069    switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1070    default:  // Default behavior: ignore.
1071      break;
1072
1073    case SM_SLOC_FILE_ENTRY:
1074    case SM_SLOC_BUFFER_ENTRY:
1075    case SM_SLOC_EXPANSION_ENTRY:
1076      // Once we hit one of the source location entries, we're done.
1077      return Success;
1078    }
1079  }
1080}
1081
1082/// \brief If a header file is not found at the path that we expect it to be
1083/// and the PCH file was moved from its original location, try to resolve the
1084/// file by assuming that header+PCH were moved together and the header is in
1085/// the same place relative to the PCH.
1086static std::string
1087resolveFileRelativeToOriginalDir(const std::string &Filename,
1088                                 const std::string &OriginalDir,
1089                                 const std::string &CurrDir) {
1090  assert(OriginalDir != CurrDir &&
1091         "No point trying to resolve the file if the PCH dir didn't change");
1092  using namespace llvm::sys;
1093  llvm::SmallString<128> filePath(Filename);
1094  fs::make_absolute(filePath);
1095  assert(path::is_absolute(OriginalDir));
1096  llvm::SmallString<128> currPCHPath(CurrDir);
1097
1098  path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1099                       fileDirE = path::end(path::parent_path(filePath));
1100  path::const_iterator origDirI = path::begin(OriginalDir),
1101                       origDirE = path::end(OriginalDir);
1102  // Skip the common path components from filePath and OriginalDir.
1103  while (fileDirI != fileDirE && origDirI != origDirE &&
1104         *fileDirI == *origDirI) {
1105    ++fileDirI;
1106    ++origDirI;
1107  }
1108  for (; origDirI != origDirE; ++origDirI)
1109    path::append(currPCHPath, "..");
1110  path::append(currPCHPath, fileDirI, fileDirE);
1111  path::append(currPCHPath, path::filename(Filename));
1112  return currPCHPath.str();
1113}
1114
1115/// \brief Read in the source location entry with the given ID.
1116ASTReader::ASTReadResult ASTReader::ReadSLocEntryRecord(int ID) {
1117  if (ID == 0)
1118    return Success;
1119
1120  if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1121    Error("source location entry ID out-of-range for AST file");
1122    return Failure;
1123  }
1124
1125  Module *F = GlobalSLocEntryMap.find(-ID)->second;
1126  F->SLocEntryCursor.JumpToBit(F->SLocEntryOffsets[ID - F->SLocEntryBaseID]);
1127  llvm::BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1128  unsigned BaseOffset = F->SLocEntryBaseOffset;
1129
1130  ++NumSLocEntriesRead;
1131  unsigned Code = SLocEntryCursor.ReadCode();
1132  if (Code == llvm::bitc::END_BLOCK ||
1133      Code == llvm::bitc::ENTER_SUBBLOCK ||
1134      Code == llvm::bitc::DEFINE_ABBREV) {
1135    Error("incorrectly-formatted source location entry in AST file");
1136    return Failure;
1137  }
1138
1139  RecordData Record;
1140  const char *BlobStart;
1141  unsigned BlobLen;
1142  switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1143  default:
1144    Error("incorrectly-formatted source location entry in AST file");
1145    return Failure;
1146
1147  case SM_SLOC_FILE_ENTRY: {
1148    std::string Filename(BlobStart, BlobStart + BlobLen);
1149    MaybeAddSystemRootToFilename(Filename);
1150    const FileEntry *File = FileMgr.getFile(Filename);
1151    if (File == 0 && !OriginalDir.empty() && !CurrentDir.empty() &&
1152        OriginalDir != CurrentDir) {
1153      std::string resolved = resolveFileRelativeToOriginalDir(Filename,
1154                                                              OriginalDir,
1155                                                              CurrentDir);
1156      if (!resolved.empty())
1157        File = FileMgr.getFile(resolved);
1158    }
1159    if (File == 0)
1160      File = FileMgr.getVirtualFile(Filename, (off_t)Record[4],
1161                                    (time_t)Record[5]);
1162    if (File == 0) {
1163      std::string ErrorStr = "could not find file '";
1164      ErrorStr += Filename;
1165      ErrorStr += "' referenced by AST file";
1166      Error(ErrorStr.c_str());
1167      return Failure;
1168    }
1169
1170    if (Record.size() < 6) {
1171      Error("source location entry is incorrect");
1172      return Failure;
1173    }
1174
1175    if (!DisableValidation &&
1176        ((off_t)Record[4] != File->getSize()
1177#if !defined(LLVM_ON_WIN32)
1178        // In our regression testing, the Windows file system seems to
1179        // have inconsistent modification times that sometimes
1180        // erroneously trigger this error-handling path.
1181         || (time_t)Record[5] != File->getModificationTime()
1182#endif
1183        )) {
1184      Error(diag::err_fe_pch_file_modified, Filename);
1185      return Failure;
1186    }
1187
1188    SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1189    if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1190      // This is the module's main file.
1191      IncludeLoc = getImportLocation(F);
1192    }
1193    FileID FID = SourceMgr.createFileID(File, IncludeLoc,
1194                                        (SrcMgr::CharacteristicKind)Record[2],
1195                                        ID, BaseOffset + Record[0]);
1196    SrcMgr::FileInfo &FileInfo =
1197          const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1198    FileInfo.NumCreatedFIDs = Record[6];
1199    if (Record[3])
1200      FileInfo.setHasLineDirectives();
1201
1202    break;
1203  }
1204
1205  case SM_SLOC_BUFFER_ENTRY: {
1206    const char *Name = BlobStart;
1207    unsigned Offset = Record[0];
1208    unsigned Code = SLocEntryCursor.ReadCode();
1209    Record.clear();
1210    unsigned RecCode
1211      = SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen);
1212
1213    if (RecCode != SM_SLOC_BUFFER_BLOB) {
1214      Error("AST record has invalid code");
1215      return Failure;
1216    }
1217
1218    llvm::MemoryBuffer *Buffer
1219    = llvm::MemoryBuffer::getMemBuffer(StringRef(BlobStart, BlobLen - 1),
1220                                       Name);
1221    FileID BufferID = SourceMgr.createFileIDForMemBuffer(Buffer, ID,
1222                                                         BaseOffset + Offset);
1223
1224    if (strcmp(Name, "<built-in>") == 0) {
1225      PCHPredefinesBlock Block = {
1226        BufferID,
1227        StringRef(BlobStart, BlobLen - 1)
1228      };
1229      PCHPredefinesBuffers.push_back(Block);
1230    }
1231
1232    break;
1233  }
1234
1235  case SM_SLOC_EXPANSION_ENTRY: {
1236    SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1237    SourceMgr.createExpansionLoc(SpellingLoc,
1238                                     ReadSourceLocation(*F, Record[2]),
1239                                     ReadSourceLocation(*F, Record[3]),
1240                                     Record[4],
1241                                     ID,
1242                                     BaseOffset + Record[0]);
1243    break;
1244  }
1245  }
1246
1247  return Success;
1248}
1249
1250/// \brief Find the location where the module F is imported.
1251SourceLocation ASTReader::getImportLocation(Module *F) {
1252  if (F->ImportLoc.isValid())
1253    return F->ImportLoc;
1254
1255  // Otherwise we have a PCH. It's considered to be "imported" at the first
1256  // location of its includer.
1257  if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1258    // Main file is the importer. We assume that it is the first entry in the
1259    // entry table. We can't ask the manager, because at the time of PCH loading
1260    // the main file entry doesn't exist yet.
1261    // The very first entry is the invalid instantiation loc, which takes up
1262    // offsets 0 and 1.
1263    return SourceLocation::getFromRawEncoding(2U);
1264  }
1265  //return F->Loaders[0]->FirstLoc;
1266  return F->ImportedBy[0]->FirstLoc;
1267}
1268
1269/// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
1270/// specified cursor.  Read the abbreviations that are at the top of the block
1271/// and then leave the cursor pointing into the block.
1272bool ASTReader::ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor,
1273                                 unsigned BlockID) {
1274  if (Cursor.EnterSubBlock(BlockID)) {
1275    Error("malformed block record in AST file");
1276    return Failure;
1277  }
1278
1279  while (true) {
1280    uint64_t Offset = Cursor.GetCurrentBitNo();
1281    unsigned Code = Cursor.ReadCode();
1282
1283    // We expect all abbrevs to be at the start of the block.
1284    if (Code != llvm::bitc::DEFINE_ABBREV) {
1285      Cursor.JumpToBit(Offset);
1286      return false;
1287    }
1288    Cursor.ReadAbbrevRecord();
1289  }
1290}
1291
1292void ASTReader::ReadMacroRecord(Module &F, uint64_t Offset) {
1293  assert(PP && "Forgot to set Preprocessor ?");
1294  llvm::BitstreamCursor &Stream = F.MacroCursor;
1295
1296  // Keep track of where we are in the stream, then jump back there
1297  // after reading this macro.
1298  SavedStreamPosition SavedPosition(Stream);
1299
1300  Stream.JumpToBit(Offset);
1301  RecordData Record;
1302  SmallVector<IdentifierInfo*, 16> MacroArgs;
1303  MacroInfo *Macro = 0;
1304
1305  while (true) {
1306    unsigned Code = Stream.ReadCode();
1307    switch (Code) {
1308    case llvm::bitc::END_BLOCK:
1309      return;
1310
1311    case llvm::bitc::ENTER_SUBBLOCK:
1312      // No known subblocks, always skip them.
1313      Stream.ReadSubBlockID();
1314      if (Stream.SkipBlock()) {
1315        Error("malformed block record in AST file");
1316        return;
1317      }
1318      continue;
1319
1320    case llvm::bitc::DEFINE_ABBREV:
1321      Stream.ReadAbbrevRecord();
1322      continue;
1323    default: break;
1324    }
1325
1326    // Read a record.
1327    const char *BlobStart = 0;
1328    unsigned BlobLen = 0;
1329    Record.clear();
1330    PreprocessorRecordTypes RecType =
1331      (PreprocessorRecordTypes)Stream.ReadRecord(Code, Record, BlobStart,
1332                                                 BlobLen);
1333    switch (RecType) {
1334    case PP_MACRO_OBJECT_LIKE:
1335    case PP_MACRO_FUNCTION_LIKE: {
1336      // If we already have a macro, that means that we've hit the end
1337      // of the definition of the macro we were looking for. We're
1338      // done.
1339      if (Macro)
1340        return;
1341
1342      IdentifierInfo *II = getLocalIdentifier(F, Record[0]);
1343      if (II == 0) {
1344        Error("macro must have a name in AST file");
1345        return;
1346      }
1347      SourceLocation Loc = ReadSourceLocation(F, Record[1]);
1348      bool isUsed = Record[2];
1349
1350      MacroInfo *MI = PP->AllocateMacroInfo(Loc);
1351      MI->setIsUsed(isUsed);
1352      MI->setIsFromAST();
1353
1354      unsigned NextIndex = 3;
1355      MI->setExportLocation(ReadSourceLocation(F, Record, NextIndex));
1356
1357      if (RecType == PP_MACRO_FUNCTION_LIKE) {
1358        // Decode function-like macro info.
1359        bool isC99VarArgs = Record[NextIndex++];
1360        bool isGNUVarArgs = Record[NextIndex++];
1361        MacroArgs.clear();
1362        unsigned NumArgs = Record[NextIndex++];
1363        for (unsigned i = 0; i != NumArgs; ++i)
1364          MacroArgs.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1365
1366        // Install function-like macro info.
1367        MI->setIsFunctionLike();
1368        if (isC99VarArgs) MI->setIsC99Varargs();
1369        if (isGNUVarArgs) MI->setIsGNUVarargs();
1370        MI->setArgumentList(MacroArgs.data(), MacroArgs.size(),
1371                            PP->getPreprocessorAllocator());
1372      }
1373
1374      // Finally, install the macro.
1375      PP->setMacroInfo(II, MI);
1376
1377      // Remember that we saw this macro last so that we add the tokens that
1378      // form its body to it.
1379      Macro = MI;
1380
1381      if (NextIndex + 1 == Record.size() && PP->getPreprocessingRecord()) {
1382        // We have a macro definition. Load it now.
1383        PP->getPreprocessingRecord()->RegisterMacroDefinition(Macro,
1384              getLocalMacroDefinition(F, Record[NextIndex]));
1385      }
1386
1387      ++NumMacrosRead;
1388      break;
1389    }
1390
1391    case PP_TOKEN: {
1392      // If we see a TOKEN before a PP_MACRO_*, then the file is
1393      // erroneous, just pretend we didn't see this.
1394      if (Macro == 0) break;
1395
1396      Token Tok;
1397      Tok.startToken();
1398      Tok.setLocation(ReadSourceLocation(F, Record[0]));
1399      Tok.setLength(Record[1]);
1400      if (IdentifierInfo *II = getLocalIdentifier(F, Record[2]))
1401        Tok.setIdentifierInfo(II);
1402      Tok.setKind((tok::TokenKind)Record[3]);
1403      Tok.setFlag((Token::TokenFlags)Record[4]);
1404      Macro->AddTokenToBody(Tok);
1405      break;
1406    }
1407  }
1408  }
1409
1410  return;
1411}
1412
1413PreprocessedEntity *ASTReader::LoadPreprocessedEntity(Module &F) {
1414  assert(PP && "Forgot to set Preprocessor ?");
1415  unsigned Code = F.PreprocessorDetailCursor.ReadCode();
1416  switch (Code) {
1417  case llvm::bitc::END_BLOCK:
1418    return 0;
1419
1420  case llvm::bitc::ENTER_SUBBLOCK:
1421    Error("unexpected subblock record in preprocessor detail block");
1422    return 0;
1423
1424  case llvm::bitc::DEFINE_ABBREV:
1425    Error("unexpected abbrevation record in preprocessor detail block");
1426    return 0;
1427
1428  default:
1429    break;
1430  }
1431
1432  if (!PP->getPreprocessingRecord()) {
1433    Error("no preprocessing record");
1434    return 0;
1435  }
1436
1437  // Read the record.
1438  PreprocessingRecord &PPRec = *PP->getPreprocessingRecord();
1439  const char *BlobStart = 0;
1440  unsigned BlobLen = 0;
1441  RecordData Record;
1442  PreprocessorDetailRecordTypes RecType =
1443    (PreprocessorDetailRecordTypes)F.PreprocessorDetailCursor.ReadRecord(
1444                                             Code, Record, BlobStart, BlobLen);
1445  switch (RecType) {
1446  case PPD_MACRO_EXPANSION: {
1447    PreprocessedEntityID GlobalID = getGlobalPreprocessedEntityID(F, Record[0]);
1448    if (PreprocessedEntity *PE = PPRec.getLoadedPreprocessedEntity(GlobalID-1))
1449      return PE;
1450
1451    bool isBuiltin = Record[3];
1452    MacroExpansion *ME;
1453    if (isBuiltin)
1454      ME = new (PPRec) MacroExpansion(getLocalIdentifier(F, Record[4]),
1455                                 SourceRange(ReadSourceLocation(F, Record[1]),
1456                                             ReadSourceLocation(F, Record[2])));
1457    else
1458      ME = new (PPRec) MacroExpansion(getLocalMacroDefinition(F, Record[4]),
1459                                 SourceRange(ReadSourceLocation(F, Record[1]),
1460                                             ReadSourceLocation(F, Record[2])));
1461    PPRec.setLoadedPreallocatedEntity(GlobalID - 1, ME);
1462    return ME;
1463  }
1464
1465  case PPD_MACRO_DEFINITION: {
1466    PreprocessedEntityID GlobalID = getGlobalPreprocessedEntityID(F, Record[0]);
1467    if (PreprocessedEntity *PE = PPRec.getLoadedPreprocessedEntity(GlobalID-1))
1468      return PE;
1469
1470    unsigned MacroDefID = getGlobalMacroDefinitionID(F, Record[1]);
1471    if (MacroDefID > MacroDefinitionsLoaded.size()) {
1472      Error("out-of-bounds macro definition record");
1473      return 0;
1474    }
1475
1476    // Decode the identifier info and then check again; if the macro is
1477    // still defined and associated with the identifier,
1478    IdentifierInfo *II = getLocalIdentifier(F, Record[4]);
1479    if (!MacroDefinitionsLoaded[MacroDefID - 1]) {
1480      MacroDefinition *MD
1481        = new (PPRec) MacroDefinition(II,
1482                                      ReadSourceLocation(F, Record[5]),
1483                                      SourceRange(
1484                                            ReadSourceLocation(F, Record[2]),
1485                                            ReadSourceLocation(F, Record[3])));
1486
1487      PPRec.setLoadedPreallocatedEntity(GlobalID - 1, MD);
1488      MacroDefinitionsLoaded[MacroDefID - 1] = MD;
1489
1490      if (DeserializationListener)
1491        DeserializationListener->MacroDefinitionRead(MacroDefID, MD);
1492    }
1493
1494    return MacroDefinitionsLoaded[MacroDefID - 1];
1495  }
1496
1497  case PPD_INCLUSION_DIRECTIVE: {
1498    PreprocessedEntityID GlobalID = getGlobalPreprocessedEntityID(F, Record[0]);
1499    if (PreprocessedEntity *PE = PPRec.getLoadedPreprocessedEntity(GlobalID-1))
1500      return PE;
1501
1502    const char *FullFileNameStart = BlobStart + Record[3];
1503    const FileEntry *File
1504      = PP->getFileManager().getFile(StringRef(FullFileNameStart,
1505                                               BlobLen - Record[3]));
1506
1507    // FIXME: Stable encoding
1508    InclusionDirective::InclusionKind Kind
1509      = static_cast<InclusionDirective::InclusionKind>(Record[5]);
1510    InclusionDirective *ID
1511      = new (PPRec) InclusionDirective(PPRec, Kind,
1512                                       StringRef(BlobStart, Record[3]),
1513                                       Record[4],
1514                                       File,
1515                                 SourceRange(ReadSourceLocation(F, Record[1]),
1516                                             ReadSourceLocation(F, Record[2])));
1517    PPRec.setLoadedPreallocatedEntity(GlobalID - 1, ID);
1518    return ID;
1519  }
1520  }
1521
1522  Error("invalid offset in preprocessor detail block");
1523  return 0;
1524}
1525
1526PreprocessedEntityID
1527ASTReader::getGlobalPreprocessedEntityID(Module &M, unsigned LocalID) {
1528  ContinuousRangeMap<uint32_t, int, 2>::iterator
1529    I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1530  assert(I != M.PreprocessedEntityRemap.end()
1531         && "Invalid index into preprocessed entity index remap");
1532
1533  return LocalID + I->second;
1534}
1535
1536unsigned HeaderFileInfoTrait::ComputeHash(const char *path) {
1537  return llvm::HashString(llvm::sys::path::filename(path));
1538}
1539
1540HeaderFileInfoTrait::internal_key_type
1541HeaderFileInfoTrait::GetInternalKey(const char *path) { return path; }
1542
1543bool HeaderFileInfoTrait::EqualKey(internal_key_type a, internal_key_type b) {
1544  if (strcmp(a, b) == 0)
1545    return true;
1546
1547  if (llvm::sys::path::filename(a) != llvm::sys::path::filename(b))
1548    return false;
1549
1550  // The file names match, but the path names don't. stat() the files to
1551  // see if they are the same.
1552  struct stat StatBufA, StatBufB;
1553  if (StatSimpleCache(a, &StatBufA) || StatSimpleCache(b, &StatBufB))
1554    return false;
1555
1556  return StatBufA.st_ino == StatBufB.st_ino;
1557}
1558
1559std::pair<unsigned, unsigned>
1560HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1561  unsigned KeyLen = (unsigned) clang::io::ReadUnalignedLE16(d);
1562  unsigned DataLen = (unsigned) *d++;
1563  return std::make_pair(KeyLen + 1, DataLen);
1564}
1565
1566HeaderFileInfoTrait::data_type
1567HeaderFileInfoTrait::ReadData(const internal_key_type, const unsigned char *d,
1568                              unsigned DataLen) {
1569  const unsigned char *End = d + DataLen;
1570  using namespace clang::io;
1571  HeaderFileInfo HFI;
1572  unsigned Flags = *d++;
1573  HFI.isImport = (Flags >> 5) & 0x01;
1574  HFI.isPragmaOnce = (Flags >> 4) & 0x01;
1575  HFI.DirInfo = (Flags >> 2) & 0x03;
1576  HFI.Resolved = (Flags >> 1) & 0x01;
1577  HFI.IndexHeaderMapHeader = Flags & 0x01;
1578  HFI.NumIncludes = ReadUnalignedLE16(d);
1579  HFI.ControllingMacroID = Reader.getGlobalDeclID(M, ReadUnalignedLE32(d));
1580  if (unsigned FrameworkOffset = ReadUnalignedLE32(d)) {
1581    // The framework offset is 1 greater than the actual offset,
1582    // since 0 is used as an indicator for "no framework name".
1583    StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1584    HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1585  }
1586
1587  assert(End == d && "Wrong data length in HeaderFileInfo deserialization");
1588  (void)End;
1589
1590  // This HeaderFileInfo was externally loaded.
1591  HFI.External = true;
1592  return HFI;
1593}
1594
1595void ASTReader::SetIdentifierIsMacro(IdentifierInfo *II, Module &F,
1596                                     uint64_t LocalOffset) {
1597  // Note that this identifier has a macro definition.
1598  II->setHasMacroDefinition(true);
1599
1600  // Adjust the offset to a global offset.
1601  UnreadMacroRecordOffsets[II] = F.GlobalBitOffset + LocalOffset;
1602}
1603
1604void ASTReader::ReadDefinedMacros() {
1605  for (ModuleReverseIterator I = ModuleMgr.rbegin(),
1606      E = ModuleMgr.rend(); I != E; ++I) {
1607    llvm::BitstreamCursor &MacroCursor = (*I)->MacroCursor;
1608
1609    // If there was no preprocessor block, skip this file.
1610    if (!MacroCursor.getBitStreamReader())
1611      continue;
1612
1613    llvm::BitstreamCursor Cursor = MacroCursor;
1614    Cursor.JumpToBit((*I)->MacroStartOffset);
1615
1616    RecordData Record;
1617    while (true) {
1618      unsigned Code = Cursor.ReadCode();
1619      if (Code == llvm::bitc::END_BLOCK)
1620        break;
1621
1622      if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1623        // No known subblocks, always skip them.
1624        Cursor.ReadSubBlockID();
1625        if (Cursor.SkipBlock()) {
1626          Error("malformed block record in AST file");
1627          return;
1628        }
1629        continue;
1630      }
1631
1632      if (Code == llvm::bitc::DEFINE_ABBREV) {
1633        Cursor.ReadAbbrevRecord();
1634        continue;
1635      }
1636
1637      // Read a record.
1638      const char *BlobStart;
1639      unsigned BlobLen;
1640      Record.clear();
1641      switch (Cursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1642      default:  // Default behavior: ignore.
1643        break;
1644
1645      case PP_MACRO_OBJECT_LIKE:
1646      case PP_MACRO_FUNCTION_LIKE:
1647        getLocalIdentifier(**I, Record[0]);
1648        break;
1649
1650      case PP_TOKEN:
1651        // Ignore tokens.
1652        break;
1653      }
1654    }
1655  }
1656
1657  // Drain the unread macro-record offsets map.
1658  while (!UnreadMacroRecordOffsets.empty())
1659    LoadMacroDefinition(UnreadMacroRecordOffsets.begin());
1660}
1661
1662void ASTReader::LoadMacroDefinition(
1663                     llvm::DenseMap<IdentifierInfo *, uint64_t>::iterator Pos) {
1664  assert(Pos != UnreadMacroRecordOffsets.end() && "Unknown macro definition");
1665  uint64_t Offset = Pos->second;
1666  UnreadMacroRecordOffsets.erase(Pos);
1667
1668  RecordLocation Loc = getLocalBitOffset(Offset);
1669  ReadMacroRecord(*Loc.F, Loc.Offset);
1670}
1671
1672void ASTReader::LoadMacroDefinition(IdentifierInfo *II) {
1673  llvm::DenseMap<IdentifierInfo *, uint64_t>::iterator Pos
1674    = UnreadMacroRecordOffsets.find(II);
1675  LoadMacroDefinition(Pos);
1676}
1677
1678MacroDefinition *ASTReader::getMacroDefinition(MacroID ID) {
1679  if (ID == 0 || ID > MacroDefinitionsLoaded.size())
1680    return 0;
1681
1682  if (!MacroDefinitionsLoaded[ID - 1]) {
1683    GlobalMacroDefinitionMapType::iterator I =GlobalMacroDefinitionMap.find(ID);
1684    assert(I != GlobalMacroDefinitionMap.end() &&
1685           "Corrupted global macro definition map");
1686    Module &M = *I->second;
1687    unsigned Index = ID - 1 - M.BaseMacroDefinitionID;
1688    SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
1689    M.PreprocessorDetailCursor.JumpToBit(M.MacroDefinitionOffsets[Index]);
1690    LoadPreprocessedEntity(M);
1691  }
1692
1693  return MacroDefinitionsLoaded[ID - 1];
1694}
1695
1696const FileEntry *ASTReader::getFileEntry(StringRef filenameStrRef) {
1697  std::string Filename = filenameStrRef;
1698  MaybeAddSystemRootToFilename(Filename);
1699  const FileEntry *File = FileMgr.getFile(Filename);
1700  if (File == 0 && !OriginalDir.empty() && !CurrentDir.empty() &&
1701      OriginalDir != CurrentDir) {
1702    std::string resolved = resolveFileRelativeToOriginalDir(Filename,
1703                                                            OriginalDir,
1704                                                            CurrentDir);
1705    if (!resolved.empty())
1706      File = FileMgr.getFile(resolved);
1707  }
1708
1709  return File;
1710}
1711
1712MacroID ASTReader::getGlobalMacroDefinitionID(Module &M, unsigned LocalID) {
1713  if (LocalID < NUM_PREDEF_MACRO_IDS)
1714    return LocalID;
1715
1716  ContinuousRangeMap<uint32_t, int, 2>::iterator I
1717    = M.MacroDefinitionRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
1718  assert(I != M.MacroDefinitionRemap.end() &&
1719         "Invalid index into macro definition ID remap");
1720
1721  return LocalID + I->second;
1722}
1723
1724/// \brief If we are loading a relocatable PCH file, and the filename is
1725/// not an absolute path, add the system root to the beginning of the file
1726/// name.
1727void ASTReader::MaybeAddSystemRootToFilename(std::string &Filename) {
1728  // If this is not a relocatable PCH file, there's nothing to do.
1729  if (!RelocatablePCH)
1730    return;
1731
1732  if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
1733    return;
1734
1735  if (isysroot.empty()) {
1736    // If no system root was given, default to '/'
1737    Filename.insert(Filename.begin(), '/');
1738    return;
1739  }
1740
1741  unsigned Length = isysroot.size();
1742  if (isysroot[Length - 1] != '/')
1743    Filename.insert(Filename.begin(), '/');
1744
1745  Filename.insert(Filename.begin(), isysroot.begin(), isysroot.end());
1746}
1747
1748ASTReader::ASTReadResult
1749ASTReader::ReadASTBlock(Module &F) {
1750  llvm::BitstreamCursor &Stream = F.Stream;
1751
1752  if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
1753    Error("malformed block record in AST file");
1754    return Failure;
1755  }
1756
1757  // Read all of the records and blocks for the ASt file.
1758  RecordData Record;
1759  while (!Stream.AtEndOfStream()) {
1760    unsigned Code = Stream.ReadCode();
1761    if (Code == llvm::bitc::END_BLOCK) {
1762      if (Stream.ReadBlockEnd()) {
1763        Error("error at end of module block in AST file");
1764        return Failure;
1765      }
1766
1767      return Success;
1768    }
1769
1770    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1771      switch (Stream.ReadSubBlockID()) {
1772      case DECLTYPES_BLOCK_ID:
1773        // We lazily load the decls block, but we want to set up the
1774        // DeclsCursor cursor to point into it.  Clone our current bitcode
1775        // cursor to it, enter the block and read the abbrevs in that block.
1776        // With the main cursor, we just skip over it.
1777        F.DeclsCursor = Stream;
1778        if (Stream.SkipBlock() ||  // Skip with the main cursor.
1779            // Read the abbrevs.
1780            ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
1781          Error("malformed block record in AST file");
1782          return Failure;
1783        }
1784        break;
1785
1786      case DECL_UPDATES_BLOCK_ID:
1787        if (Stream.SkipBlock()) {
1788          Error("malformed block record in AST file");
1789          return Failure;
1790        }
1791        break;
1792
1793      case PREPROCESSOR_BLOCK_ID:
1794        F.MacroCursor = Stream;
1795        if (PP)
1796          PP->setExternalSource(this);
1797
1798        if (Stream.SkipBlock() ||
1799            ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
1800          Error("malformed block record in AST file");
1801          return Failure;
1802        }
1803        F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
1804        break;
1805
1806      case PREPROCESSOR_DETAIL_BLOCK_ID:
1807        F.PreprocessorDetailCursor = Stream;
1808        if (Stream.SkipBlock() ||
1809            ReadBlockAbbrevs(F.PreprocessorDetailCursor,
1810                             PREPROCESSOR_DETAIL_BLOCK_ID)) {
1811          Error("malformed preprocessor detail record in AST file");
1812          return Failure;
1813        }
1814        F.PreprocessorDetailStartOffset
1815          = F.PreprocessorDetailCursor.GetCurrentBitNo();
1816        break;
1817
1818      case SOURCE_MANAGER_BLOCK_ID:
1819        switch (ReadSourceManagerBlock(F)) {
1820        case Success:
1821          break;
1822
1823        case Failure:
1824          Error("malformed source manager block in AST file");
1825          return Failure;
1826
1827        case IgnorePCH:
1828          return IgnorePCH;
1829        }
1830        break;
1831      }
1832      continue;
1833    }
1834
1835    if (Code == llvm::bitc::DEFINE_ABBREV) {
1836      Stream.ReadAbbrevRecord();
1837      continue;
1838    }
1839
1840    // Read and process a record.
1841    Record.clear();
1842    const char *BlobStart = 0;
1843    unsigned BlobLen = 0;
1844    switch ((ASTRecordTypes)Stream.ReadRecord(Code, Record,
1845                                              &BlobStart, &BlobLen)) {
1846    default:  // Default behavior: ignore.
1847      break;
1848
1849    case METADATA: {
1850      if (Record[0] != VERSION_MAJOR && !DisableValidation) {
1851        Diag(Record[0] < VERSION_MAJOR? diag::warn_pch_version_too_old
1852                                           : diag::warn_pch_version_too_new);
1853        return IgnorePCH;
1854      }
1855
1856      RelocatablePCH = Record[4];
1857      if (Listener) {
1858        std::string TargetTriple(BlobStart, BlobLen);
1859        if (Listener->ReadTargetTriple(TargetTriple))
1860          return IgnorePCH;
1861      }
1862      break;
1863    }
1864
1865    case IMPORTS: {
1866      // Load each of the imported PCH files.
1867      unsigned Idx = 0, N = Record.size();
1868      while (Idx < N) {
1869        // Read information about the AST file.
1870        ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
1871        unsigned Length = Record[Idx++];
1872        llvm::SmallString<128> ImportedFile(Record.begin() + Idx,
1873                                            Record.begin() + Idx + Length);
1874        Idx += Length;
1875
1876        // Load the AST file.
1877        switch(ReadASTCore(ImportedFile, ImportedKind, &F)) {
1878        case Failure: return Failure;
1879          // If we have to ignore the dependency, we'll have to ignore this too.
1880        case IgnorePCH: return IgnorePCH;
1881        case Success: break;
1882        }
1883      }
1884      break;
1885    }
1886
1887    case TYPE_OFFSET: {
1888      if (F.LocalNumTypes != 0) {
1889        Error("duplicate TYPE_OFFSET record in AST file");
1890        return Failure;
1891      }
1892      F.TypeOffsets = (const uint32_t *)BlobStart;
1893      F.LocalNumTypes = Record[0];
1894      unsigned LocalBaseTypeIndex = Record[1];
1895      F.BaseTypeIndex = getTotalNumTypes();
1896
1897      if (F.LocalNumTypes > 0) {
1898        // Introduce the global -> local mapping for types within this module.
1899        GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
1900
1901        // Introduce the local -> global mapping for types within this module.
1902        F.TypeRemap.insert(std::make_pair(LocalBaseTypeIndex,
1903                             F.BaseTypeIndex - LocalBaseTypeIndex));
1904
1905        TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
1906      }
1907      break;
1908    }
1909
1910    case DECL_OFFSET: {
1911      if (F.LocalNumDecls != 0) {
1912        Error("duplicate DECL_OFFSET record in AST file");
1913        return Failure;
1914      }
1915      F.DeclOffsets = (const uint32_t *)BlobStart;
1916      F.LocalNumDecls = Record[0];
1917      unsigned LocalBaseDeclID = Record[1];
1918      F.BaseDeclID = getTotalNumDecls();
1919
1920      if (F.LocalNumDecls > 0) {
1921        // Introduce the global -> local mapping for declarations within this
1922        // module.
1923        GlobalDeclMap.insert(
1924          std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
1925
1926        // Introduce the local -> global mapping for declarations within this
1927        // module.
1928        F.DeclRemap.insert(std::make_pair(LocalBaseDeclID,
1929                                          F.BaseDeclID - LocalBaseDeclID));
1930
1931        DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
1932      }
1933      break;
1934    }
1935
1936    case TU_UPDATE_LEXICAL: {
1937      DeclContext *TU = Context ? Context->getTranslationUnitDecl() : 0;
1938      DeclContextInfo &Info = F.DeclContextInfos[TU];
1939      Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair *>(BlobStart);
1940      Info.NumLexicalDecls
1941        = static_cast<unsigned int>(BlobLen / sizeof(KindDeclIDPair));
1942      if (TU)
1943        TU->setHasExternalLexicalStorage(true);
1944
1945      break;
1946    }
1947
1948    case UPDATE_VISIBLE: {
1949      unsigned Idx = 0;
1950      serialization::DeclID ID = ReadDeclID(F, Record, Idx);
1951      void *Table = ASTDeclContextNameLookupTable::Create(
1952                        (const unsigned char *)BlobStart + Record[Idx++],
1953                        (const unsigned char *)BlobStart,
1954                        ASTDeclContextNameLookupTrait(*this, F));
1955      if (ID == PREDEF_DECL_TRANSLATION_UNIT_ID && Context) { // Is it the TU?
1956        DeclContext *TU = Context->getTranslationUnitDecl();
1957        F.DeclContextInfos[TU].NameLookupTableData = Table;
1958        TU->setHasExternalVisibleStorage(true);
1959      } else
1960        PendingVisibleUpdates[ID].push_back(std::make_pair(Table, &F));
1961      break;
1962    }
1963
1964    case REDECLS_UPDATE_LATEST: {
1965      assert(Record.size() % 2 == 0 && "Expected pairs of DeclIDs");
1966      for (unsigned i = 0, e = Record.size(); i < e; /* in loop */) {
1967        DeclID First = ReadDeclID(F, Record, i);
1968        DeclID Latest = ReadDeclID(F, Record, i);
1969        FirstLatestDeclIDs[First] = Latest;
1970      }
1971      break;
1972    }
1973
1974    case LANGUAGE_OPTIONS:
1975      if (ParseLanguageOptions(Record) && !DisableValidation)
1976        return IgnorePCH;
1977      break;
1978
1979    case IDENTIFIER_TABLE:
1980      F.IdentifierTableData = BlobStart;
1981      if (Record[0]) {
1982        F.IdentifierLookupTable
1983          = ASTIdentifierLookupTable::Create(
1984                       (const unsigned char *)F.IdentifierTableData + Record[0],
1985                       (const unsigned char *)F.IdentifierTableData,
1986                       ASTIdentifierLookupTrait(*this, F));
1987        if (PP) {
1988          PP->getIdentifierTable().setExternalIdentifierLookup(this);
1989          PP->getHeaderSearchInfo().SetExternalLookup(this);
1990        }
1991      }
1992      break;
1993
1994    case IDENTIFIER_OFFSET: {
1995      if (F.LocalNumIdentifiers != 0) {
1996        Error("duplicate IDENTIFIER_OFFSET record in AST file");
1997        return Failure;
1998      }
1999      F.IdentifierOffsets = (const uint32_t *)BlobStart;
2000      F.LocalNumIdentifiers = Record[0];
2001      unsigned LocalBaseIdentifierID = Record[1];
2002      F.BaseIdentifierID = getTotalNumIdentifiers();
2003
2004      if (F.LocalNumIdentifiers > 0) {
2005        // Introduce the global -> local mapping for identifiers within this
2006        // module.
2007        GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
2008                                                  &F));
2009
2010        // Introduce the local -> global mapping for identifiers within this
2011        // module.
2012        F.IdentifierRemap.insert(
2013                            std::make_pair(LocalBaseIdentifierID,
2014                              F.BaseIdentifierID - LocalBaseIdentifierID));
2015
2016        IdentifiersLoaded.resize(IdentifiersLoaded.size()
2017                                 + F.LocalNumIdentifiers);
2018      }
2019      break;
2020    }
2021
2022    case EXTERNAL_DEFINITIONS:
2023      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2024        ExternalDefinitions.push_back(getGlobalDeclID(F, Record[I]));
2025      break;
2026
2027    case SPECIAL_TYPES:
2028      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2029        SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
2030      break;
2031
2032    case STATISTICS:
2033      TotalNumStatements += Record[0];
2034      TotalNumMacros += Record[1];
2035      TotalLexicalDeclContexts += Record[2];
2036      TotalVisibleDeclContexts += Record[3];
2037      break;
2038
2039    case UNUSED_FILESCOPED_DECLS:
2040      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2041        UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
2042      break;
2043
2044    case DELEGATING_CTORS:
2045      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2046        DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
2047      break;
2048
2049    case WEAK_UNDECLARED_IDENTIFIERS:
2050      if (Record.size() % 4 != 0) {
2051        Error("invalid weak identifiers record");
2052        return Failure;
2053      }
2054
2055      // FIXME: Ignore weak undeclared identifiers from non-original PCH
2056      // files. This isn't the way to do it :)
2057      WeakUndeclaredIdentifiers.clear();
2058
2059      // Translate the weak, undeclared identifiers into global IDs.
2060      for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
2061        WeakUndeclaredIdentifiers.push_back(
2062          getGlobalIdentifierID(F, Record[I++]));
2063        WeakUndeclaredIdentifiers.push_back(
2064          getGlobalIdentifierID(F, Record[I++]));
2065        WeakUndeclaredIdentifiers.push_back(
2066          ReadSourceLocation(F, Record, I).getRawEncoding());
2067        WeakUndeclaredIdentifiers.push_back(Record[I++]);
2068      }
2069      break;
2070
2071    case LOCALLY_SCOPED_EXTERNAL_DECLS:
2072      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2073        LocallyScopedExternalDecls.push_back(getGlobalDeclID(F, Record[I]));
2074      break;
2075
2076    case SELECTOR_OFFSETS: {
2077      F.SelectorOffsets = (const uint32_t *)BlobStart;
2078      F.LocalNumSelectors = Record[0];
2079      unsigned LocalBaseSelectorID = Record[1];
2080      F.BaseSelectorID = getTotalNumSelectors();
2081
2082      if (F.LocalNumSelectors > 0) {
2083        // Introduce the global -> local mapping for selectors within this
2084        // module.
2085        GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
2086
2087        // Introduce the local -> global mapping for selectors within this
2088        // module.
2089        F.SelectorRemap.insert(std::make_pair(LocalBaseSelectorID,
2090                                 F.BaseSelectorID - LocalBaseSelectorID));
2091
2092        SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
2093      }
2094      break;
2095    }
2096
2097    case METHOD_POOL:
2098      F.SelectorLookupTableData = (const unsigned char *)BlobStart;
2099      if (Record[0])
2100        F.SelectorLookupTable
2101          = ASTSelectorLookupTable::Create(
2102                        F.SelectorLookupTableData + Record[0],
2103                        F.SelectorLookupTableData,
2104                        ASTSelectorLookupTrait(*this, F));
2105      TotalNumMethodPoolEntries += Record[1];
2106      break;
2107
2108    case REFERENCED_SELECTOR_POOL:
2109      if (!Record.empty()) {
2110        for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
2111          ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
2112                                                                Record[Idx++]));
2113          ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
2114                                              getRawEncoding());
2115        }
2116      }
2117      break;
2118
2119    case PP_COUNTER_VALUE:
2120      if (!Record.empty() && Listener)
2121        Listener->ReadCounter(Record[0]);
2122      break;
2123
2124    case SOURCE_LOCATION_OFFSETS: {
2125      F.SLocEntryOffsets = (const uint32_t *)BlobStart;
2126      F.LocalNumSLocEntries = Record[0];
2127      llvm::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
2128          SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries, Record[1]);
2129      // Make our entry in the range map. BaseID is negative and growing, so
2130      // we invert it. Because we invert it, though, we need the other end of
2131      // the range.
2132      unsigned RangeStart =
2133          unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
2134      GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
2135      F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
2136
2137      // Initialize the remapping table.
2138      // Invalid stays invalid.
2139      F.SLocRemap.insert(std::make_pair(0U, 0));
2140      // This module. Base was 2 when being compiled.
2141      F.SLocRemap.insert(std::make_pair(2U,
2142                                  static_cast<int>(F.SLocEntryBaseOffset - 2)));
2143
2144      TotalNumSLocEntries += F.LocalNumSLocEntries;
2145      break;
2146    }
2147
2148    case MODULE_OFFSET_MAP: {
2149      // Additional remapping information.
2150      const unsigned char *Data = (const unsigned char*)BlobStart;
2151      const unsigned char *DataEnd = Data + BlobLen;
2152
2153      // Continuous range maps we may be updating in our module.
2154      ContinuousRangeMap<uint32_t, int, 2>::Builder SLocRemap(F.SLocRemap);
2155      ContinuousRangeMap<uint32_t, int, 2>::Builder
2156        IdentifierRemap(F.IdentifierRemap);
2157      ContinuousRangeMap<uint32_t, int, 2>::Builder
2158        PreprocessedEntityRemap(F.PreprocessedEntityRemap);
2159      ContinuousRangeMap<uint32_t, int, 2>::Builder
2160        MacroDefinitionRemap(F.MacroDefinitionRemap);
2161      ContinuousRangeMap<uint32_t, int, 2>::Builder
2162        SelectorRemap(F.SelectorRemap);
2163      ContinuousRangeMap<uint32_t, int, 2>::Builder DeclRemap(F.DeclRemap);
2164      ContinuousRangeMap<uint32_t, int, 2>::Builder TypeRemap(F.TypeRemap);
2165
2166      while(Data < DataEnd) {
2167        uint16_t Len = io::ReadUnalignedLE16(Data);
2168        StringRef Name = StringRef((const char*)Data, Len);
2169        Data += Len;
2170        Module *OM = ModuleMgr.lookup(Name);
2171        if (!OM) {
2172          Error("SourceLocation remap refers to unknown module");
2173          return Failure;
2174        }
2175
2176        uint32_t SLocOffset = io::ReadUnalignedLE32(Data);
2177        uint32_t IdentifierIDOffset = io::ReadUnalignedLE32(Data);
2178        uint32_t PreprocessedEntityIDOffset = io::ReadUnalignedLE32(Data);
2179        uint32_t MacroDefinitionIDOffset = io::ReadUnalignedLE32(Data);
2180        uint32_t SelectorIDOffset = io::ReadUnalignedLE32(Data);
2181        uint32_t DeclIDOffset = io::ReadUnalignedLE32(Data);
2182        uint32_t TypeIndexOffset = io::ReadUnalignedLE32(Data);
2183
2184        // Source location offset is mapped to OM->SLocEntryBaseOffset.
2185        SLocRemap.insert(std::make_pair(SLocOffset,
2186          static_cast<int>(OM->SLocEntryBaseOffset - SLocOffset)));
2187        IdentifierRemap.insert(
2188          std::make_pair(IdentifierIDOffset,
2189                         OM->BaseIdentifierID - IdentifierIDOffset));
2190        PreprocessedEntityRemap.insert(
2191          std::make_pair(PreprocessedEntityIDOffset,
2192            OM->BasePreprocessedEntityID - PreprocessedEntityIDOffset));
2193        MacroDefinitionRemap.insert(
2194          std::make_pair(MacroDefinitionIDOffset,
2195                         OM->BaseMacroDefinitionID - MacroDefinitionIDOffset));
2196        SelectorRemap.insert(std::make_pair(SelectorIDOffset,
2197                               OM->BaseSelectorID - SelectorIDOffset));
2198        DeclRemap.insert(std::make_pair(DeclIDOffset,
2199                                        OM->BaseDeclID - DeclIDOffset));
2200
2201        TypeRemap.insert(std::make_pair(TypeIndexOffset,
2202                                    OM->BaseTypeIndex - TypeIndexOffset));
2203      }
2204      break;
2205    }
2206
2207    case SOURCE_MANAGER_LINE_TABLE:
2208      if (ParseLineTable(F, Record))
2209        return Failure;
2210      break;
2211
2212    case FILE_SOURCE_LOCATION_OFFSETS:
2213      F.SLocFileOffsets = (const uint32_t *)BlobStart;
2214      F.LocalNumSLocFileEntries = Record[0];
2215      break;
2216
2217    case SOURCE_LOCATION_PRELOADS: {
2218      // Need to transform from the local view (1-based IDs) to the global view,
2219      // which is based off F.SLocEntryBaseID.
2220      if (!F.PreloadSLocEntries.empty()) {
2221        Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
2222        return Failure;
2223      }
2224
2225      F.PreloadSLocEntries.swap(Record);
2226      break;
2227    }
2228
2229    case STAT_CACHE: {
2230      if (!DisableStatCache) {
2231        ASTStatCache *MyStatCache =
2232          new ASTStatCache((const unsigned char *)BlobStart + Record[0],
2233                           (const unsigned char *)BlobStart,
2234                           NumStatHits, NumStatMisses);
2235        FileMgr.addStatCache(MyStatCache);
2236        F.StatCache = MyStatCache;
2237      }
2238      break;
2239    }
2240
2241    case EXT_VECTOR_DECLS:
2242      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2243        ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
2244      break;
2245
2246    case VTABLE_USES:
2247      if (Record.size() % 3 != 0) {
2248        Error("Invalid VTABLE_USES record");
2249        return Failure;
2250      }
2251
2252      // Later tables overwrite earlier ones.
2253      // FIXME: Modules will have some trouble with this. This is clearly not
2254      // the right way to do this.
2255      VTableUses.clear();
2256
2257      for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
2258        VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
2259        VTableUses.push_back(
2260          ReadSourceLocation(F, Record, Idx).getRawEncoding());
2261        VTableUses.push_back(Record[Idx++]);
2262      }
2263      break;
2264
2265    case DYNAMIC_CLASSES:
2266      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2267        DynamicClasses.push_back(getGlobalDeclID(F, Record[I]));
2268      break;
2269
2270    case PENDING_IMPLICIT_INSTANTIATIONS:
2271      if (PendingInstantiations.size() % 2 != 0) {
2272        Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
2273        return Failure;
2274      }
2275
2276      // Later lists of pending instantiations overwrite earlier ones.
2277      // FIXME: This is most certainly wrong for modules.
2278      PendingInstantiations.clear();
2279      for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
2280        PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
2281        PendingInstantiations.push_back(
2282          ReadSourceLocation(F, Record, I).getRawEncoding());
2283      }
2284      break;
2285
2286    case SEMA_DECL_REFS:
2287      // Later tables overwrite earlier ones.
2288      // FIXME: Modules will have some trouble with this.
2289      SemaDeclRefs.clear();
2290      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2291        SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2292      break;
2293
2294    case ORIGINAL_FILE_NAME:
2295      // The primary AST will be the last to get here, so it will be the one
2296      // that's used.
2297      ActualOriginalFileName.assign(BlobStart, BlobLen);
2298      OriginalFileName = ActualOriginalFileName;
2299      MaybeAddSystemRootToFilename(OriginalFileName);
2300      break;
2301
2302    case ORIGINAL_FILE_ID:
2303      OriginalFileID = FileID::get(Record[0]);
2304      break;
2305
2306    case ORIGINAL_PCH_DIR:
2307      // The primary AST will be the last to get here, so it will be the one
2308      // that's used.
2309      OriginalDir.assign(BlobStart, BlobLen);
2310      break;
2311
2312    case VERSION_CONTROL_BRANCH_REVISION: {
2313      const std::string &CurBranch = getClangFullRepositoryVersion();
2314      StringRef ASTBranch(BlobStart, BlobLen);
2315      if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2316        Diag(diag::warn_pch_different_branch) << ASTBranch << CurBranch;
2317        return IgnorePCH;
2318      }
2319      break;
2320    }
2321
2322    case MACRO_DEFINITION_OFFSETS: {
2323      F.MacroDefinitionOffsets = (const uint32_t *)BlobStart;
2324      F.NumPreallocatedPreprocessingEntities = Record[0];
2325      unsigned LocalBasePreprocessedEntityID = Record[1];
2326      F.LocalNumMacroDefinitions = Record[2];
2327      unsigned LocalBaseMacroID = Record[3];
2328
2329      unsigned StartingID;
2330      if (PP) {
2331        if (!PP->getPreprocessingRecord())
2332          PP->createPreprocessingRecord(true);
2333        if (!PP->getPreprocessingRecord()->getExternalSource())
2334          PP->getPreprocessingRecord()->SetExternalSource(*this);
2335        StartingID
2336          = PP->getPreprocessingRecord()
2337              ->allocateLoadedEntities(F.NumPreallocatedPreprocessingEntities);
2338      } else {
2339        // FIXME: We'll eventually want to kill this path, since it assumes
2340        // a particular allocation strategy in the preprocessing record.
2341        StartingID = getTotalNumPreprocessedEntities()
2342                   - F.NumPreallocatedPreprocessingEntities;
2343      }
2344      F.BaseMacroDefinitionID = getTotalNumMacroDefinitions();
2345      F.BasePreprocessedEntityID = StartingID;
2346
2347      if (F.NumPreallocatedPreprocessingEntities > 0) {
2348        // Introduce the global -> local mapping for preprocessed entities in
2349        // this module.
2350        GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
2351
2352        // Introduce the local -> global mapping for preprocessed entities in
2353        // this module.
2354        F.PreprocessedEntityRemap.insert(
2355          std::make_pair(LocalBasePreprocessedEntityID,
2356            F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
2357      }
2358
2359
2360      if (F.LocalNumMacroDefinitions > 0) {
2361        // Introduce the global -> local mapping for macro definitions within
2362        // this module.
2363        GlobalMacroDefinitionMap.insert(
2364          std::make_pair(getTotalNumMacroDefinitions() + 1, &F));
2365
2366        // Introduce the local -> global mapping for macro definitions within
2367        // this module.
2368        F.MacroDefinitionRemap.insert(
2369          std::make_pair(LocalBaseMacroID,
2370                         F.BaseMacroDefinitionID - LocalBaseMacroID));
2371
2372        MacroDefinitionsLoaded.resize(
2373                    MacroDefinitionsLoaded.size() + F.LocalNumMacroDefinitions);
2374      }
2375
2376      break;
2377    }
2378
2379    case DECL_UPDATE_OFFSETS: {
2380      if (Record.size() % 2 != 0) {
2381        Error("invalid DECL_UPDATE_OFFSETS block in AST file");
2382        return Failure;
2383      }
2384      for (unsigned I = 0, N = Record.size(); I != N; I += 2)
2385        DeclUpdateOffsets[getGlobalDeclID(F, Record[I])]
2386          .push_back(std::make_pair(&F, Record[I+1]));
2387      break;
2388    }
2389
2390    case DECL_REPLACEMENTS: {
2391      if (Record.size() % 2 != 0) {
2392        Error("invalid DECL_REPLACEMENTS block in AST file");
2393        return Failure;
2394      }
2395      for (unsigned I = 0, N = Record.size(); I != N; I += 2)
2396        ReplacedDecls[getGlobalDeclID(F, Record[I])]
2397          = std::make_pair(&F, Record[I+1]);
2398      break;
2399    }
2400
2401    case OBJC_CHAINED_CATEGORIES: {
2402      if (Record.size() % 3 != 0) {
2403        Error("invalid OBJC_CHAINED_CATEGORIES block in AST file");
2404        return Failure;
2405      }
2406      for (unsigned I = 0, N = Record.size(); I != N; I += 3) {
2407        serialization::GlobalDeclID GlobID = getGlobalDeclID(F, Record[I]);
2408        F.ChainedObjCCategories[GlobID] = std::make_pair(Record[I+1],
2409                                                         Record[I+2]);
2410        ObjCChainedCategoriesInterfaces.insert(GlobID);
2411      }
2412      break;
2413    }
2414
2415    case CXX_BASE_SPECIFIER_OFFSETS: {
2416      if (F.LocalNumCXXBaseSpecifiers != 0) {
2417        Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
2418        return Failure;
2419      }
2420
2421      F.LocalNumCXXBaseSpecifiers = Record[0];
2422      F.CXXBaseSpecifiersOffsets = (const uint32_t *)BlobStart;
2423      NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers;
2424      break;
2425    }
2426
2427    case DIAG_PRAGMA_MAPPINGS:
2428      if (Record.size() % 2 != 0) {
2429        Error("invalid DIAG_USER_MAPPINGS block in AST file");
2430        return Failure;
2431      }
2432
2433      if (F.PragmaDiagMappings.empty())
2434        F.PragmaDiagMappings.swap(Record);
2435      else
2436        F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
2437                                    Record.begin(), Record.end());
2438      break;
2439
2440    case CUDA_SPECIAL_DECL_REFS:
2441      // Later tables overwrite earlier ones.
2442      // FIXME: Modules will have trouble with this.
2443      CUDASpecialDeclRefs.clear();
2444      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2445        CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2446      break;
2447
2448    case HEADER_SEARCH_TABLE: {
2449      F.HeaderFileInfoTableData = BlobStart;
2450      F.LocalNumHeaderFileInfos = Record[1];
2451      F.HeaderFileFrameworkStrings = BlobStart + Record[2];
2452      if (Record[0]) {
2453        F.HeaderFileInfoTable
2454          = HeaderFileInfoLookupTable::Create(
2455                   (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
2456                   (const unsigned char *)F.HeaderFileInfoTableData,
2457                   HeaderFileInfoTrait(*this, F,
2458                                       PP? &PP->getHeaderSearchInfo() : 0,
2459                                       BlobStart + Record[2]));
2460        if (PP)
2461          PP->getHeaderSearchInfo().SetExternalSource(this);
2462      }
2463      break;
2464    }
2465
2466    case FP_PRAGMA_OPTIONS:
2467      // Later tables overwrite earlier ones.
2468      FPPragmaOptions.swap(Record);
2469      break;
2470
2471    case OPENCL_EXTENSIONS:
2472      // Later tables overwrite earlier ones.
2473      OpenCLExtensions.swap(Record);
2474      break;
2475
2476    case TENTATIVE_DEFINITIONS:
2477      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2478        TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
2479      break;
2480
2481    case KNOWN_NAMESPACES:
2482      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2483        KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
2484      break;
2485    }
2486  }
2487  Error("premature end of bitstream in AST file");
2488  return Failure;
2489}
2490
2491ASTReader::ASTReadResult ASTReader::validateFileEntries(Module &M) {
2492  llvm::BitstreamCursor &SLocEntryCursor = M.SLocEntryCursor;
2493
2494  for (unsigned i = 0, e = M.LocalNumSLocFileEntries; i != e; ++i) {
2495    SLocEntryCursor.JumpToBit(M.SLocFileOffsets[i]);
2496    unsigned Code = SLocEntryCursor.ReadCode();
2497    if (Code == llvm::bitc::END_BLOCK ||
2498        Code == llvm::bitc::ENTER_SUBBLOCK ||
2499        Code == llvm::bitc::DEFINE_ABBREV) {
2500      Error("incorrectly-formatted source location entry in AST file");
2501      return Failure;
2502    }
2503
2504    RecordData Record;
2505    const char *BlobStart;
2506    unsigned BlobLen;
2507    switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
2508    default:
2509      Error("incorrectly-formatted source location entry in AST file");
2510      return Failure;
2511
2512    case SM_SLOC_FILE_ENTRY: {
2513      StringRef Filename(BlobStart, BlobLen);
2514      const FileEntry *File = getFileEntry(Filename);
2515
2516      if (File == 0) {
2517        std::string ErrorStr = "could not find file '";
2518        ErrorStr += Filename;
2519        ErrorStr += "' referenced by AST file";
2520        Error(ErrorStr.c_str());
2521        return IgnorePCH;
2522      }
2523
2524      if (Record.size() < 6) {
2525        Error("source location entry is incorrect");
2526        return Failure;
2527      }
2528
2529      // The stat info from the FileEntry came from the cached stat
2530      // info of the PCH, so we cannot trust it.
2531      struct stat StatBuf;
2532      if (::stat(File->getName(), &StatBuf) != 0) {
2533        StatBuf.st_size = File->getSize();
2534        StatBuf.st_mtime = File->getModificationTime();
2535      }
2536
2537      if (((off_t)Record[4] != StatBuf.st_size
2538#if !defined(LLVM_ON_WIN32)
2539          // In our regression testing, the Windows file system seems to
2540          // have inconsistent modification times that sometimes
2541          // erroneously trigger this error-handling path.
2542           || (time_t)Record[5] != StatBuf.st_mtime
2543#endif
2544          )) {
2545        Error(diag::err_fe_pch_file_modified, Filename);
2546        return IgnorePCH;
2547      }
2548
2549      break;
2550    }
2551    }
2552  }
2553
2554  return Success;
2555}
2556
2557namespace {
2558  /// \brief Visitor class used to look up identifirs in an AST file.
2559  class IdentifierLookupVisitor {
2560    StringRef Name;
2561    IdentifierInfo *Found;
2562  public:
2563    explicit IdentifierLookupVisitor(StringRef Name) : Name(Name), Found() { }
2564
2565    static bool visit(Module &M, void *UserData) {
2566      IdentifierLookupVisitor *This
2567      = static_cast<IdentifierLookupVisitor *>(UserData);
2568
2569      ASTIdentifierLookupTable *IdTable
2570        = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2571      if (!IdTable)
2572        return false;
2573
2574      std::pair<const char*, unsigned> Key(This->Name.begin(),
2575                                           This->Name.size());
2576      ASTIdentifierLookupTable::iterator Pos = IdTable->find(Key);
2577      if (Pos == IdTable->end())
2578        return false;
2579
2580      // Dereferencing the iterator has the effect of building the
2581      // IdentifierInfo node and populating it with the various
2582      // declarations it needs.
2583      This->Found = *Pos;
2584      return true;
2585    }
2586
2587    // \brief Retrieve the identifier info found within the module
2588    // files.
2589    IdentifierInfo *getIdentifierInfo() const { return Found; }
2590  };
2591}
2592
2593
2594ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
2595                                            ModuleKind Type) {
2596  switch(ReadASTCore(FileName, Type, /*ImportedBy=*/0)) {
2597  case Failure: return Failure;
2598  case IgnorePCH: return IgnorePCH;
2599  case Success: break;
2600  }
2601
2602  // Here comes stuff that we only do once the entire chain is loaded.
2603
2604  // Check the predefines buffers.
2605  if (!DisableValidation && Type != MK_Module && CheckPredefinesBuffers())
2606    return IgnorePCH;
2607
2608  if (PP) {
2609    // Initialization of keywords and pragmas occurs before the
2610    // AST file is read, so there may be some identifiers that were
2611    // loaded into the IdentifierTable before we intercepted the
2612    // creation of identifiers. Iterate through the list of known
2613    // identifiers and determine whether we have to establish
2614    // preprocessor definitions or top-level identifier declaration
2615    // chains for those identifiers.
2616    //
2617    // We copy the IdentifierInfo pointers to a small vector first,
2618    // since de-serializing declarations or macro definitions can add
2619    // new entries into the identifier table, invalidating the
2620    // iterators.
2621    //
2622    // FIXME: We need a lazier way to load this information, e.g., by marking
2623    // the identifier data as 'dirty', so that it will be looked up in the
2624    // AST file(s) if it is uttered in the source. This could save us some
2625    // module load time.
2626    SmallVector<IdentifierInfo *, 128> Identifiers;
2627    for (IdentifierTable::iterator Id = PP->getIdentifierTable().begin(),
2628                                IdEnd = PP->getIdentifierTable().end();
2629         Id != IdEnd; ++Id)
2630      Identifiers.push_back(Id->second);
2631
2632    for (unsigned I = 0, N = Identifiers.size(); I != N; ++I) {
2633      IdentifierLookupVisitor Visitor(Identifiers[I]->getName());
2634      ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor);
2635    }
2636  }
2637
2638  if (Context)
2639    InitializeContext(*Context);
2640
2641  if (DeserializationListener)
2642    DeserializationListener->ReaderInitialized(this);
2643
2644  // If this AST file is a precompiled preamble, then set the main file ID of
2645  // the source manager to the file source file from which the preamble was
2646  // built. This is the only valid way to use a precompiled preamble.
2647  if (Type == MK_Preamble) {
2648    if (OriginalFileID.isInvalid()) {
2649      SourceLocation Loc
2650        = SourceMgr.getLocation(FileMgr.getFile(getOriginalSourceFile()), 1, 1);
2651      if (Loc.isValid())
2652        OriginalFileID = SourceMgr.getDecomposedLoc(Loc).first;
2653    }
2654    else {
2655      OriginalFileID = FileID::get(ModuleMgr.getPrimaryModule().SLocEntryBaseID
2656                                        + OriginalFileID.getOpaqueValue() - 1);
2657    }
2658
2659    if (!OriginalFileID.isInvalid())
2660      SourceMgr.SetPreambleFileID(OriginalFileID);
2661  }
2662
2663  return Success;
2664}
2665
2666ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName,
2667                                                ModuleKind Type,
2668                                                Module *ImportedBy) {
2669  Module *M;
2670  bool NewModule;
2671  std::string ErrorStr;
2672  llvm::tie(M, NewModule) = ModuleMgr.addModule(FileName, Type, ImportedBy,
2673                                                ErrorStr);
2674
2675  if (!M) {
2676    // We couldn't load the module.
2677    std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
2678      + ErrorStr;
2679    Error(Msg);
2680    return Failure;
2681  }
2682
2683  if (!NewModule) {
2684    // We've already loaded this module.
2685    return Success;
2686  }
2687
2688  // FIXME: This seems rather a hack. Should CurrentDir be part of the
2689  // module?
2690  if (FileName != "-") {
2691    CurrentDir = llvm::sys::path::parent_path(FileName);
2692    if (CurrentDir.empty()) CurrentDir = ".";
2693  }
2694
2695  Module &F = *M;
2696  llvm::BitstreamCursor &Stream = F.Stream;
2697  Stream.init(F.StreamFile);
2698  F.SizeInBits = F.Buffer->getBufferSize() * 8;
2699
2700  // Sniff for the signature.
2701  if (Stream.Read(8) != 'C' ||
2702      Stream.Read(8) != 'P' ||
2703      Stream.Read(8) != 'C' ||
2704      Stream.Read(8) != 'H') {
2705    Diag(diag::err_not_a_pch_file) << FileName;
2706    return Failure;
2707  }
2708
2709  while (!Stream.AtEndOfStream()) {
2710    unsigned Code = Stream.ReadCode();
2711
2712    if (Code != llvm::bitc::ENTER_SUBBLOCK) {
2713      Error("invalid record at top-level of AST file");
2714      return Failure;
2715    }
2716
2717    unsigned BlockID = Stream.ReadSubBlockID();
2718
2719    // We only know the AST subblock ID.
2720    switch (BlockID) {
2721    case llvm::bitc::BLOCKINFO_BLOCK_ID:
2722      if (Stream.ReadBlockInfoBlock()) {
2723        Error("malformed BlockInfoBlock in AST file");
2724        return Failure;
2725      }
2726      break;
2727    case AST_BLOCK_ID:
2728      switch (ReadASTBlock(F)) {
2729      case Success:
2730        break;
2731
2732      case Failure:
2733        return Failure;
2734
2735      case IgnorePCH:
2736        // FIXME: We could consider reading through to the end of this
2737        // AST block, skipping subblocks, to see if there are other
2738        // AST blocks elsewhere.
2739
2740        // FIXME: We can't clear loaded slocentries anymore.
2741        //SourceMgr.ClearPreallocatedSLocEntries();
2742
2743        // Remove the stat cache.
2744        if (F.StatCache)
2745          FileMgr.removeStatCache((ASTStatCache*)F.StatCache);
2746
2747        return IgnorePCH;
2748      }
2749      break;
2750    default:
2751      if (Stream.SkipBlock()) {
2752        Error("malformed block record in AST file");
2753        return Failure;
2754      }
2755      break;
2756    }
2757  }
2758
2759  // Once read, set the Module bit base offset and update the size in
2760  // bits of all files we've seen.
2761  F.GlobalBitOffset = TotalModulesSizeInBits;
2762  TotalModulesSizeInBits += F.SizeInBits;
2763  GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
2764
2765  // Make sure that the files this module was built against are still available.
2766  if (!DisableValidation) {
2767    switch(validateFileEntries(*M)) {
2768    case Failure: return Failure;
2769    case IgnorePCH: return IgnorePCH;
2770    case Success: break;
2771    }
2772  }
2773
2774  // Preload SLocEntries.
2775  for (unsigned I = 0, N = M->PreloadSLocEntries.size(); I != N; ++I) {
2776    int Index = int(M->PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
2777    ASTReadResult Result = ReadSLocEntryRecord(Index);
2778    if (Result != Success)
2779      return Failure;
2780  }
2781
2782
2783  return Success;
2784}
2785
2786void ASTReader::setPreprocessor(Preprocessor &pp) {
2787  PP = &pp;
2788
2789  if (unsigned N = getTotalNumPreprocessedEntities()) {
2790    if (!PP->getPreprocessingRecord())
2791      PP->createPreprocessingRecord(true);
2792    PP->getPreprocessingRecord()->SetExternalSource(*this);
2793    PP->getPreprocessingRecord()->allocateLoadedEntities(N);
2794  }
2795
2796  PP->getHeaderSearchInfo().SetExternalLookup(this);
2797  PP->getHeaderSearchInfo().SetExternalSource(this);
2798}
2799
2800void ASTReader::InitializeContext(ASTContext &Ctx) {
2801  Context = &Ctx;
2802  assert(Context && "Passed null context!");
2803
2804  assert(PP && "Forgot to set Preprocessor ?");
2805  PP->getIdentifierTable().setExternalIdentifierLookup(this);
2806  PP->setExternalSource(this);
2807
2808  // If we have any update blocks for the TU waiting, we have to add
2809  // them before we deserialize anything.
2810  TranslationUnitDecl *TU = Ctx.getTranslationUnitDecl();
2811  for (ModuleIterator M = ModuleMgr.begin(), MEnd = ModuleMgr.end();
2812       M != MEnd; ++M) {
2813    Module::DeclContextInfosMap::iterator DCU
2814      = (*M)->DeclContextInfos.find(0);
2815    if (DCU != (*M)->DeclContextInfos.end()) {
2816      // Insertion could invalidate map, so grab value first.
2817      DeclContextInfo Info = DCU->second;
2818      (*M)->DeclContextInfos.erase(DCU);
2819      (*M)->DeclContextInfos[TU] = Info;
2820
2821      if (Info.NumLexicalDecls)
2822        TU->setHasExternalLexicalStorage();
2823      if (Info.NameLookupTableData)
2824        TU->setHasExternalVisibleStorage();
2825    }
2826  }
2827
2828  // If there's a listener, notify them that we "read" the translation unit.
2829  if (DeserializationListener)
2830    DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID, TU);
2831
2832  // Make sure we load the declaration update records for the translation unit,
2833  // if there are any.
2834  loadDeclUpdateRecords(PREDEF_DECL_TRANSLATION_UNIT_ID, TU);
2835
2836  // FIXME: Find a better way to deal with collisions between these
2837  // built-in types. Right now, we just ignore the problem.
2838
2839  // Load the special types.
2840  if (Context->getBuiltinVaListType().isNull()) {
2841    Context->setBuiltinVaListType(
2842      GetType(SpecialTypes[SPECIAL_TYPE_BUILTIN_VA_LIST]));
2843  }
2844
2845  if (unsigned Proto = SpecialTypes[SPECIAL_TYPE_OBJC_PROTOCOL]) {
2846    if (Context->ObjCProtoType.isNull())
2847      Context->ObjCProtoType = GetType(Proto);
2848  }
2849
2850  if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
2851    if (!Context->CFConstantStringTypeDecl)
2852      Context->setCFConstantStringType(GetType(String));
2853  }
2854
2855  if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
2856    QualType FileType = GetType(File);
2857    if (FileType.isNull()) {
2858      Error("FILE type is NULL");
2859      return;
2860    }
2861
2862    if (!Context->FILEDecl) {
2863      if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
2864        Context->setFILEDecl(Typedef->getDecl());
2865      else {
2866        const TagType *Tag = FileType->getAs<TagType>();
2867        if (!Tag) {
2868          Error("Invalid FILE type in AST file");
2869          return;
2870        }
2871        Context->setFILEDecl(Tag->getDecl());
2872      }
2873    }
2874  }
2875
2876  if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_jmp_buf]) {
2877    QualType Jmp_bufType = GetType(Jmp_buf);
2878    if (Jmp_bufType.isNull()) {
2879      Error("jmp_buf type is NULL");
2880      return;
2881    }
2882
2883    if (!Context->jmp_bufDecl) {
2884      if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
2885        Context->setjmp_bufDecl(Typedef->getDecl());
2886      else {
2887        const TagType *Tag = Jmp_bufType->getAs<TagType>();
2888        if (!Tag) {
2889          Error("Invalid jmp_buf type in AST file");
2890          return;
2891        }
2892        Context->setjmp_bufDecl(Tag->getDecl());
2893      }
2894    }
2895  }
2896
2897  if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_sigjmp_buf]) {
2898    QualType Sigjmp_bufType = GetType(Sigjmp_buf);
2899    if (Sigjmp_bufType.isNull()) {
2900      Error("sigjmp_buf type is NULL");
2901      return;
2902    }
2903
2904    if (!Context->sigjmp_bufDecl) {
2905      if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
2906        Context->setsigjmp_bufDecl(Typedef->getDecl());
2907      else {
2908        const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
2909        assert(Tag && "Invalid sigjmp_buf type in AST file");
2910        Context->setsigjmp_bufDecl(Tag->getDecl());
2911      }
2912    }
2913  }
2914
2915  if (unsigned ObjCIdRedef
2916        = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
2917    if (Context->ObjCIdRedefinitionType.isNull())
2918      Context->ObjCIdRedefinitionType = GetType(ObjCIdRedef);
2919  }
2920
2921  if (unsigned ObjCClassRedef
2922        = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
2923    if (Context->ObjCClassRedefinitionType.isNull())
2924      Context->ObjCClassRedefinitionType = GetType(ObjCClassRedef);
2925  }
2926
2927  if (unsigned ObjCSelRedef
2928        = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
2929    if (Context->ObjCSelRedefinitionType.isNull())
2930      Context->ObjCSelRedefinitionType = GetType(ObjCSelRedef);
2931  }
2932
2933  ReadPragmaDiagnosticMappings(Context->getDiagnostics());
2934
2935  // If there were any CUDA special declarations, deserialize them.
2936  if (!CUDASpecialDeclRefs.empty()) {
2937    assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
2938    Context->setcudaConfigureCallDecl(
2939                           cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
2940  }
2941}
2942
2943/// \brief Retrieve the name of the original source file name
2944/// directly from the AST file, without actually loading the AST
2945/// file.
2946std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
2947                                             FileManager &FileMgr,
2948                                             Diagnostic &Diags) {
2949  // Open the AST file.
2950  std::string ErrStr;
2951  llvm::OwningPtr<llvm::MemoryBuffer> Buffer;
2952  Buffer.reset(FileMgr.getBufferForFile(ASTFileName, &ErrStr));
2953  if (!Buffer) {
2954    Diags.Report(diag::err_fe_unable_to_read_pch_file) << ErrStr;
2955    return std::string();
2956  }
2957
2958  // Initialize the stream
2959  llvm::BitstreamReader StreamFile;
2960  llvm::BitstreamCursor Stream;
2961  StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
2962                  (const unsigned char *)Buffer->getBufferEnd());
2963  Stream.init(StreamFile);
2964
2965  // Sniff for the signature.
2966  if (Stream.Read(8) != 'C' ||
2967      Stream.Read(8) != 'P' ||
2968      Stream.Read(8) != 'C' ||
2969      Stream.Read(8) != 'H') {
2970    Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
2971    return std::string();
2972  }
2973
2974  RecordData Record;
2975  while (!Stream.AtEndOfStream()) {
2976    unsigned Code = Stream.ReadCode();
2977
2978    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
2979      unsigned BlockID = Stream.ReadSubBlockID();
2980
2981      // We only know the AST subblock ID.
2982      switch (BlockID) {
2983      case AST_BLOCK_ID:
2984        if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
2985          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
2986          return std::string();
2987        }
2988        break;
2989
2990      default:
2991        if (Stream.SkipBlock()) {
2992          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
2993          return std::string();
2994        }
2995        break;
2996      }
2997      continue;
2998    }
2999
3000    if (Code == llvm::bitc::END_BLOCK) {
3001      if (Stream.ReadBlockEnd()) {
3002        Diags.Report(diag::err_fe_pch_error_at_end_block) << ASTFileName;
3003        return std::string();
3004      }
3005      continue;
3006    }
3007
3008    if (Code == llvm::bitc::DEFINE_ABBREV) {
3009      Stream.ReadAbbrevRecord();
3010      continue;
3011    }
3012
3013    Record.clear();
3014    const char *BlobStart = 0;
3015    unsigned BlobLen = 0;
3016    if (Stream.ReadRecord(Code, Record, &BlobStart, &BlobLen)
3017          == ORIGINAL_FILE_NAME)
3018      return std::string(BlobStart, BlobLen);
3019  }
3020
3021  return std::string();
3022}
3023
3024/// \brief Parse the record that corresponds to a LangOptions data
3025/// structure.
3026///
3027/// This routine parses the language options from the AST file and then gives
3028/// them to the AST listener if one is set.
3029///
3030/// \returns true if the listener deems the file unacceptable, false otherwise.
3031bool ASTReader::ParseLanguageOptions(
3032                             const SmallVectorImpl<uint64_t> &Record) {
3033  if (Listener) {
3034    LangOptions LangOpts;
3035
3036  #define PARSE_LANGOPT(Option)                  \
3037      LangOpts.Option = Record[Idx];             \
3038      ++Idx
3039
3040    unsigned Idx = 0;
3041    PARSE_LANGOPT(Trigraphs);
3042    PARSE_LANGOPT(BCPLComment);
3043    PARSE_LANGOPT(DollarIdents);
3044    PARSE_LANGOPT(AsmPreprocessor);
3045    PARSE_LANGOPT(GNUMode);
3046    PARSE_LANGOPT(GNUKeywords);
3047    PARSE_LANGOPT(ImplicitInt);
3048    PARSE_LANGOPT(Digraphs);
3049    PARSE_LANGOPT(HexFloats);
3050    PARSE_LANGOPT(C99);
3051    PARSE_LANGOPT(C1X);
3052    PARSE_LANGOPT(Microsoft);
3053    PARSE_LANGOPT(CPlusPlus);
3054    PARSE_LANGOPT(CPlusPlus0x);
3055    PARSE_LANGOPT(CXXOperatorNames);
3056    PARSE_LANGOPT(ObjC1);
3057    PARSE_LANGOPT(ObjC2);
3058    PARSE_LANGOPT(ObjCNonFragileABI);
3059    PARSE_LANGOPT(ObjCNonFragileABI2);
3060    PARSE_LANGOPT(AppleKext);
3061    PARSE_LANGOPT(ObjCDefaultSynthProperties);
3062    PARSE_LANGOPT(ObjCInferRelatedResultType);
3063    PARSE_LANGOPT(NoConstantCFStrings);
3064    PARSE_LANGOPT(PascalStrings);
3065    PARSE_LANGOPT(WritableStrings);
3066    PARSE_LANGOPT(LaxVectorConversions);
3067    PARSE_LANGOPT(AltiVec);
3068    PARSE_LANGOPT(Exceptions);
3069    PARSE_LANGOPT(ObjCExceptions);
3070    PARSE_LANGOPT(CXXExceptions);
3071    PARSE_LANGOPT(SjLjExceptions);
3072    PARSE_LANGOPT(MSBitfields);
3073    PARSE_LANGOPT(NeXTRuntime);
3074    PARSE_LANGOPT(Freestanding);
3075    PARSE_LANGOPT(NoBuiltin);
3076    PARSE_LANGOPT(ThreadsafeStatics);
3077    PARSE_LANGOPT(POSIXThreads);
3078    PARSE_LANGOPT(Blocks);
3079    PARSE_LANGOPT(EmitAllDecls);
3080    PARSE_LANGOPT(MathErrno);
3081    LangOpts.setSignedOverflowBehavior((LangOptions::SignedOverflowBehaviorTy)
3082                                       Record[Idx++]);
3083    PARSE_LANGOPT(HeinousExtensions);
3084    PARSE_LANGOPT(Optimize);
3085    PARSE_LANGOPT(OptimizeSize);
3086    PARSE_LANGOPT(Static);
3087    PARSE_LANGOPT(PICLevel);
3088    PARSE_LANGOPT(GNUInline);
3089    PARSE_LANGOPT(NoInline);
3090    PARSE_LANGOPT(Deprecated);
3091    PARSE_LANGOPT(AccessControl);
3092    PARSE_LANGOPT(CharIsSigned);
3093    PARSE_LANGOPT(ShortWChar);
3094    PARSE_LANGOPT(ShortEnums);
3095    LangOpts.setGCMode((LangOptions::GCMode)Record[Idx++]);
3096    LangOpts.setVisibilityMode((Visibility)Record[Idx++]);
3097    LangOpts.setStackProtectorMode((LangOptions::StackProtectorMode)
3098                                   Record[Idx++]);
3099    PARSE_LANGOPT(InstantiationDepth);
3100    PARSE_LANGOPT(OpenCL);
3101    PARSE_LANGOPT(CUDA);
3102    PARSE_LANGOPT(CatchUndefined);
3103    PARSE_LANGOPT(DefaultFPContract);
3104    PARSE_LANGOPT(ElideConstructors);
3105    PARSE_LANGOPT(SpellChecking);
3106    PARSE_LANGOPT(MRTD);
3107    PARSE_LANGOPT(ObjCAutoRefCount);
3108  #undef PARSE_LANGOPT
3109
3110    return Listener->ReadLanguageOptions(LangOpts);
3111  }
3112
3113  return false;
3114}
3115
3116namespace {
3117  /// \brief Visitor used by ASTReader::ReadPreprocessedEntities() to load
3118  /// all of the preprocessed entities within a module.
3119  class ReadPreprocessedEntitiesVisitor {
3120    ASTReader &Reader;
3121
3122  public:
3123    explicit ReadPreprocessedEntitiesVisitor(ASTReader &Reader)
3124      : Reader(Reader) { }
3125
3126    static bool visit(Module &M, bool Preorder, void *UserData) {
3127      if (Preorder)
3128        return false;
3129
3130      ReadPreprocessedEntitiesVisitor *This
3131        = static_cast<ReadPreprocessedEntitiesVisitor *>(UserData);
3132
3133      if (!M.PreprocessorDetailCursor.getBitStreamReader())
3134        return false;
3135
3136      SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
3137      M.PreprocessorDetailCursor.JumpToBit(M.PreprocessorDetailStartOffset);
3138      while (This->Reader.LoadPreprocessedEntity(M)) { }
3139      return false;
3140    }
3141  };
3142}
3143
3144void ASTReader::ReadPreprocessedEntities() {
3145  ReadPreprocessedEntitiesVisitor Visitor(*this);
3146  ModuleMgr.visitDepthFirst(&ReadPreprocessedEntitiesVisitor::visit, &Visitor);
3147}
3148
3149PreprocessedEntity *ASTReader::ReadPreprocessedEntityAtOffset(uint64_t Offset) {
3150  RecordLocation Loc = getLocalBitOffset(Offset);
3151
3152  // Keep track of where we are in the stream, then jump back there
3153  // after reading this entity.
3154  SavedStreamPosition SavedPosition(Loc.F->PreprocessorDetailCursor);
3155  Loc.F->PreprocessorDetailCursor.JumpToBit(Loc.Offset);
3156  return LoadPreprocessedEntity(*Loc.F);
3157}
3158
3159namespace {
3160  /// \brief Visitor used to search for information about a header file.
3161  class HeaderFileInfoVisitor {
3162    ASTReader &Reader;
3163    const FileEntry *FE;
3164
3165    llvm::Optional<HeaderFileInfo> HFI;
3166
3167  public:
3168    HeaderFileInfoVisitor(ASTReader &Reader, const FileEntry *FE)
3169      : Reader(Reader), FE(FE) { }
3170
3171    static bool visit(Module &M, void *UserData) {
3172      HeaderFileInfoVisitor *This
3173        = static_cast<HeaderFileInfoVisitor *>(UserData);
3174
3175      HeaderFileInfoTrait Trait(This->Reader, M,
3176                                &This->Reader.getPreprocessor().getHeaderSearchInfo(),
3177                                M.HeaderFileFrameworkStrings,
3178                                This->FE->getName());
3179
3180      HeaderFileInfoLookupTable *Table
3181        = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
3182      if (!Table)
3183        return false;
3184
3185      // Look in the on-disk hash table for an entry for this file name.
3186      HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE->getName(),
3187                                                            &Trait);
3188      if (Pos == Table->end())
3189        return false;
3190
3191      This->HFI = *Pos;
3192      return true;
3193    }
3194
3195    llvm::Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
3196  };
3197}
3198
3199HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
3200  HeaderFileInfoVisitor Visitor(*this, FE);
3201  ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor);
3202  if (llvm::Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo()) {
3203    if (Listener)
3204      Listener->ReadHeaderFileInfo(*HFI, FE->getUID());
3205    return *HFI;
3206  }
3207
3208  return HeaderFileInfo();
3209}
3210
3211void ASTReader::ReadPragmaDiagnosticMappings(Diagnostic &Diag) {
3212  for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) {
3213    Module &F = *(*I);
3214    unsigned Idx = 0;
3215    while (Idx < F.PragmaDiagMappings.size()) {
3216      SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
3217      while (1) {
3218        assert(Idx < F.PragmaDiagMappings.size() &&
3219               "Invalid data, didn't find '-1' marking end of diag/map pairs");
3220        if (Idx >= F.PragmaDiagMappings.size()) {
3221          break; // Something is messed up but at least avoid infinite loop in
3222                 // release build.
3223        }
3224        unsigned DiagID = F.PragmaDiagMappings[Idx++];
3225        if (DiagID == (unsigned)-1) {
3226          break; // no more diag/map pairs for this location.
3227        }
3228        diag::Mapping Map = (diag::Mapping)F.PragmaDiagMappings[Idx++];
3229        Diag.setDiagnosticMapping(DiagID, Map, Loc);
3230      }
3231    }
3232  }
3233}
3234
3235/// \brief Get the correct cursor and offset for loading a type.
3236ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
3237  GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
3238  assert(I != GlobalTypeMap.end() && "Corrupted global type map");
3239  Module *M = I->second;
3240  return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
3241}
3242
3243/// \brief Read and return the type with the given index..
3244///
3245/// The index is the type ID, shifted and minus the number of predefs. This
3246/// routine actually reads the record corresponding to the type at the given
3247/// location. It is a helper routine for GetType, which deals with reading type
3248/// IDs.
3249QualType ASTReader::readTypeRecord(unsigned Index) {
3250  RecordLocation Loc = TypeCursorForIndex(Index);
3251  llvm::BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
3252
3253  // Keep track of where we are in the stream, then jump back there
3254  // after reading this type.
3255  SavedStreamPosition SavedPosition(DeclsCursor);
3256
3257  ReadingKindTracker ReadingKind(Read_Type, *this);
3258
3259  // Note that we are loading a type record.
3260  Deserializing AType(this);
3261
3262  unsigned Idx = 0;
3263  DeclsCursor.JumpToBit(Loc.Offset);
3264  RecordData Record;
3265  unsigned Code = DeclsCursor.ReadCode();
3266  switch ((TypeCode)DeclsCursor.ReadRecord(Code, Record)) {
3267  case TYPE_EXT_QUAL: {
3268    if (Record.size() != 2) {
3269      Error("Incorrect encoding of extended qualifier type");
3270      return QualType();
3271    }
3272    QualType Base = readType(*Loc.F, Record, Idx);
3273    Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
3274    return Context->getQualifiedType(Base, Quals);
3275  }
3276
3277  case TYPE_COMPLEX: {
3278    if (Record.size() != 1) {
3279      Error("Incorrect encoding of complex type");
3280      return QualType();
3281    }
3282    QualType ElemType = readType(*Loc.F, Record, Idx);
3283    return Context->getComplexType(ElemType);
3284  }
3285
3286  case TYPE_POINTER: {
3287    if (Record.size() != 1) {
3288      Error("Incorrect encoding of pointer type");
3289      return QualType();
3290    }
3291    QualType PointeeType = readType(*Loc.F, Record, Idx);
3292    return Context->getPointerType(PointeeType);
3293  }
3294
3295  case TYPE_BLOCK_POINTER: {
3296    if (Record.size() != 1) {
3297      Error("Incorrect encoding of block pointer type");
3298      return QualType();
3299    }
3300    QualType PointeeType = readType(*Loc.F, Record, Idx);
3301    return Context->getBlockPointerType(PointeeType);
3302  }
3303
3304  case TYPE_LVALUE_REFERENCE: {
3305    if (Record.size() != 2) {
3306      Error("Incorrect encoding of lvalue reference type");
3307      return QualType();
3308    }
3309    QualType PointeeType = readType(*Loc.F, Record, Idx);
3310    return Context->getLValueReferenceType(PointeeType, Record[1]);
3311  }
3312
3313  case TYPE_RVALUE_REFERENCE: {
3314    if (Record.size() != 1) {
3315      Error("Incorrect encoding of rvalue reference type");
3316      return QualType();
3317    }
3318    QualType PointeeType = readType(*Loc.F, Record, Idx);
3319    return Context->getRValueReferenceType(PointeeType);
3320  }
3321
3322  case TYPE_MEMBER_POINTER: {
3323    if (Record.size() != 2) {
3324      Error("Incorrect encoding of member pointer type");
3325      return QualType();
3326    }
3327    QualType PointeeType = readType(*Loc.F, Record, Idx);
3328    QualType ClassType = readType(*Loc.F, Record, Idx);
3329    if (PointeeType.isNull() || ClassType.isNull())
3330      return QualType();
3331
3332    return Context->getMemberPointerType(PointeeType, ClassType.getTypePtr());
3333  }
3334
3335  case TYPE_CONSTANT_ARRAY: {
3336    QualType ElementType = readType(*Loc.F, Record, Idx);
3337    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
3338    unsigned IndexTypeQuals = Record[2];
3339    unsigned Idx = 3;
3340    llvm::APInt Size = ReadAPInt(Record, Idx);
3341    return Context->getConstantArrayType(ElementType, Size,
3342                                         ASM, IndexTypeQuals);
3343  }
3344
3345  case TYPE_INCOMPLETE_ARRAY: {
3346    QualType ElementType = readType(*Loc.F, Record, Idx);
3347    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
3348    unsigned IndexTypeQuals = Record[2];
3349    return Context->getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
3350  }
3351
3352  case TYPE_VARIABLE_ARRAY: {
3353    QualType ElementType = readType(*Loc.F, Record, Idx);
3354    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
3355    unsigned IndexTypeQuals = Record[2];
3356    SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
3357    SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
3358    return Context->getVariableArrayType(ElementType, ReadExpr(*Loc.F),
3359                                         ASM, IndexTypeQuals,
3360                                         SourceRange(LBLoc, RBLoc));
3361  }
3362
3363  case TYPE_VECTOR: {
3364    if (Record.size() != 3) {
3365      Error("incorrect encoding of vector type in AST file");
3366      return QualType();
3367    }
3368
3369    QualType ElementType = readType(*Loc.F, Record, Idx);
3370    unsigned NumElements = Record[1];
3371    unsigned VecKind = Record[2];
3372    return Context->getVectorType(ElementType, NumElements,
3373                                  (VectorType::VectorKind)VecKind);
3374  }
3375
3376  case TYPE_EXT_VECTOR: {
3377    if (Record.size() != 3) {
3378      Error("incorrect encoding of extended vector type in AST file");
3379      return QualType();
3380    }
3381
3382    QualType ElementType = readType(*Loc.F, Record, Idx);
3383    unsigned NumElements = Record[1];
3384    return Context->getExtVectorType(ElementType, NumElements);
3385  }
3386
3387  case TYPE_FUNCTION_NO_PROTO: {
3388    if (Record.size() != 6) {
3389      Error("incorrect encoding of no-proto function type");
3390      return QualType();
3391    }
3392    QualType ResultType = readType(*Loc.F, Record, Idx);
3393    FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
3394                               (CallingConv)Record[4], Record[5]);
3395    return Context->getFunctionNoProtoType(ResultType, Info);
3396  }
3397
3398  case TYPE_FUNCTION_PROTO: {
3399    QualType ResultType = readType(*Loc.F, Record, Idx);
3400
3401    FunctionProtoType::ExtProtoInfo EPI;
3402    EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
3403                                        /*hasregparm*/ Record[2],
3404                                        /*regparm*/ Record[3],
3405                                        static_cast<CallingConv>(Record[4]),
3406                                        /*produces*/ Record[5]);
3407
3408    unsigned Idx = 6;
3409    unsigned NumParams = Record[Idx++];
3410    SmallVector<QualType, 16> ParamTypes;
3411    for (unsigned I = 0; I != NumParams; ++I)
3412      ParamTypes.push_back(readType(*Loc.F, Record, Idx));
3413
3414    EPI.Variadic = Record[Idx++];
3415    EPI.TypeQuals = Record[Idx++];
3416    EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
3417    ExceptionSpecificationType EST =
3418        static_cast<ExceptionSpecificationType>(Record[Idx++]);
3419    EPI.ExceptionSpecType = EST;
3420    if (EST == EST_Dynamic) {
3421      EPI.NumExceptions = Record[Idx++];
3422      SmallVector<QualType, 2> Exceptions;
3423      for (unsigned I = 0; I != EPI.NumExceptions; ++I)
3424        Exceptions.push_back(readType(*Loc.F, Record, Idx));
3425      EPI.Exceptions = Exceptions.data();
3426    } else if (EST == EST_ComputedNoexcept) {
3427      EPI.NoexceptExpr = ReadExpr(*Loc.F);
3428    }
3429    return Context->getFunctionType(ResultType, ParamTypes.data(), NumParams,
3430                                    EPI);
3431  }
3432
3433  case TYPE_UNRESOLVED_USING: {
3434    unsigned Idx = 0;
3435    return Context->getTypeDeclType(
3436                  ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
3437  }
3438
3439  case TYPE_TYPEDEF: {
3440    if (Record.size() != 2) {
3441      Error("incorrect encoding of typedef type");
3442      return QualType();
3443    }
3444    unsigned Idx = 0;
3445    TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
3446    QualType Canonical = readType(*Loc.F, Record, Idx);
3447    if (!Canonical.isNull())
3448      Canonical = Context->getCanonicalType(Canonical);
3449    return Context->getTypedefType(Decl, Canonical);
3450  }
3451
3452  case TYPE_TYPEOF_EXPR:
3453    return Context->getTypeOfExprType(ReadExpr(*Loc.F));
3454
3455  case TYPE_TYPEOF: {
3456    if (Record.size() != 1) {
3457      Error("incorrect encoding of typeof(type) in AST file");
3458      return QualType();
3459    }
3460    QualType UnderlyingType = readType(*Loc.F, Record, Idx);
3461    return Context->getTypeOfType(UnderlyingType);
3462  }
3463
3464  case TYPE_DECLTYPE:
3465    return Context->getDecltypeType(ReadExpr(*Loc.F));
3466
3467  case TYPE_UNARY_TRANSFORM: {
3468    QualType BaseType = readType(*Loc.F, Record, Idx);
3469    QualType UnderlyingType = readType(*Loc.F, Record, Idx);
3470    UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
3471    return Context->getUnaryTransformType(BaseType, UnderlyingType, UKind);
3472  }
3473
3474  case TYPE_AUTO:
3475    return Context->getAutoType(readType(*Loc.F, Record, Idx));
3476
3477  case TYPE_RECORD: {
3478    if (Record.size() != 2) {
3479      Error("incorrect encoding of record type");
3480      return QualType();
3481    }
3482    unsigned Idx = 0;
3483    bool IsDependent = Record[Idx++];
3484    QualType T
3485      = Context->getRecordType(ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx));
3486    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
3487    return T;
3488  }
3489
3490  case TYPE_ENUM: {
3491    if (Record.size() != 2) {
3492      Error("incorrect encoding of enum type");
3493      return QualType();
3494    }
3495    unsigned Idx = 0;
3496    bool IsDependent = Record[Idx++];
3497    QualType T
3498      = Context->getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
3499    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
3500    return T;
3501  }
3502
3503  case TYPE_ATTRIBUTED: {
3504    if (Record.size() != 3) {
3505      Error("incorrect encoding of attributed type");
3506      return QualType();
3507    }
3508    QualType modifiedType = readType(*Loc.F, Record, Idx);
3509    QualType equivalentType = readType(*Loc.F, Record, Idx);
3510    AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
3511    return Context->getAttributedType(kind, modifiedType, equivalentType);
3512  }
3513
3514  case TYPE_PAREN: {
3515    if (Record.size() != 1) {
3516      Error("incorrect encoding of paren type");
3517      return QualType();
3518    }
3519    QualType InnerType = readType(*Loc.F, Record, Idx);
3520    return Context->getParenType(InnerType);
3521  }
3522
3523  case TYPE_PACK_EXPANSION: {
3524    if (Record.size() != 2) {
3525      Error("incorrect encoding of pack expansion type");
3526      return QualType();
3527    }
3528    QualType Pattern = readType(*Loc.F, Record, Idx);
3529    if (Pattern.isNull())
3530      return QualType();
3531    llvm::Optional<unsigned> NumExpansions;
3532    if (Record[1])
3533      NumExpansions = Record[1] - 1;
3534    return Context->getPackExpansionType(Pattern, NumExpansions);
3535  }
3536
3537  case TYPE_ELABORATED: {
3538    unsigned Idx = 0;
3539    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
3540    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
3541    QualType NamedType = readType(*Loc.F, Record, Idx);
3542    return Context->getElaboratedType(Keyword, NNS, NamedType);
3543  }
3544
3545  case TYPE_OBJC_INTERFACE: {
3546    unsigned Idx = 0;
3547    ObjCInterfaceDecl *ItfD
3548      = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
3549    return Context->getObjCInterfaceType(ItfD);
3550  }
3551
3552  case TYPE_OBJC_OBJECT: {
3553    unsigned Idx = 0;
3554    QualType Base = readType(*Loc.F, Record, Idx);
3555    unsigned NumProtos = Record[Idx++];
3556    SmallVector<ObjCProtocolDecl*, 4> Protos;
3557    for (unsigned I = 0; I != NumProtos; ++I)
3558      Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
3559    return Context->getObjCObjectType(Base, Protos.data(), NumProtos);
3560  }
3561
3562  case TYPE_OBJC_OBJECT_POINTER: {
3563    unsigned Idx = 0;
3564    QualType Pointee = readType(*Loc.F, Record, Idx);
3565    return Context->getObjCObjectPointerType(Pointee);
3566  }
3567
3568  case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
3569    unsigned Idx = 0;
3570    QualType Parm = readType(*Loc.F, Record, Idx);
3571    QualType Replacement = readType(*Loc.F, Record, Idx);
3572    return
3573      Context->getSubstTemplateTypeParmType(cast<TemplateTypeParmType>(Parm),
3574                                            Replacement);
3575  }
3576
3577  case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
3578    unsigned Idx = 0;
3579    QualType Parm = readType(*Loc.F, Record, Idx);
3580    TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
3581    return Context->getSubstTemplateTypeParmPackType(
3582                                               cast<TemplateTypeParmType>(Parm),
3583                                                     ArgPack);
3584  }
3585
3586  case TYPE_INJECTED_CLASS_NAME: {
3587    CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
3588    QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
3589    // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
3590    // for AST reading, too much interdependencies.
3591    return
3592      QualType(new (*Context, TypeAlignment) InjectedClassNameType(D, TST), 0);
3593  }
3594
3595  case TYPE_TEMPLATE_TYPE_PARM: {
3596    unsigned Idx = 0;
3597    unsigned Depth = Record[Idx++];
3598    unsigned Index = Record[Idx++];
3599    bool Pack = Record[Idx++];
3600    TemplateTypeParmDecl *D
3601      = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
3602    return Context->getTemplateTypeParmType(Depth, Index, Pack, D);
3603  }
3604
3605  case TYPE_DEPENDENT_NAME: {
3606    unsigned Idx = 0;
3607    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
3608    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
3609    const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
3610    QualType Canon = readType(*Loc.F, Record, Idx);
3611    if (!Canon.isNull())
3612      Canon = Context->getCanonicalType(Canon);
3613    return Context->getDependentNameType(Keyword, NNS, Name, Canon);
3614  }
3615
3616  case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
3617    unsigned Idx = 0;
3618    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
3619    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
3620    const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
3621    unsigned NumArgs = Record[Idx++];
3622    SmallVector<TemplateArgument, 8> Args;
3623    Args.reserve(NumArgs);
3624    while (NumArgs--)
3625      Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
3626    return Context->getDependentTemplateSpecializationType(Keyword, NNS, Name,
3627                                                      Args.size(), Args.data());
3628  }
3629
3630  case TYPE_DEPENDENT_SIZED_ARRAY: {
3631    unsigned Idx = 0;
3632
3633    // ArrayType
3634    QualType ElementType = readType(*Loc.F, Record, Idx);
3635    ArrayType::ArraySizeModifier ASM
3636      = (ArrayType::ArraySizeModifier)Record[Idx++];
3637    unsigned IndexTypeQuals = Record[Idx++];
3638
3639    // DependentSizedArrayType
3640    Expr *NumElts = ReadExpr(*Loc.F);
3641    SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
3642
3643    return Context->getDependentSizedArrayType(ElementType, NumElts, ASM,
3644                                               IndexTypeQuals, Brackets);
3645  }
3646
3647  case TYPE_TEMPLATE_SPECIALIZATION: {
3648    unsigned Idx = 0;
3649    bool IsDependent = Record[Idx++];
3650    TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
3651    SmallVector<TemplateArgument, 8> Args;
3652    ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
3653    QualType Underlying = readType(*Loc.F, Record, Idx);
3654    QualType T;
3655    if (Underlying.isNull())
3656      T = Context->getCanonicalTemplateSpecializationType(Name, Args.data(),
3657                                                          Args.size());
3658    else
3659      T = Context->getTemplateSpecializationType(Name, Args.data(),
3660                                                 Args.size(), Underlying);
3661    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
3662    return T;
3663  }
3664  }
3665  // Suppress a GCC warning
3666  return QualType();
3667}
3668
3669class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
3670  ASTReader &Reader;
3671  Module &F;
3672  llvm::BitstreamCursor &DeclsCursor;
3673  const ASTReader::RecordData &Record;
3674  unsigned &Idx;
3675
3676  SourceLocation ReadSourceLocation(const ASTReader::RecordData &R,
3677                                    unsigned &I) {
3678    return Reader.ReadSourceLocation(F, R, I);
3679  }
3680
3681  template<typename T>
3682  T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) {
3683    return Reader.ReadDeclAs<T>(F, Record, Idx);
3684  }
3685
3686public:
3687  TypeLocReader(ASTReader &Reader, Module &F,
3688                const ASTReader::RecordData &Record, unsigned &Idx)
3689    : Reader(Reader), F(F), DeclsCursor(F.DeclsCursor), Record(Record), Idx(Idx)
3690  { }
3691
3692  // We want compile-time assurance that we've enumerated all of
3693  // these, so unfortunately we have to declare them first, then
3694  // define them out-of-line.
3695#define ABSTRACT_TYPELOC(CLASS, PARENT)
3696#define TYPELOC(CLASS, PARENT) \
3697  void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
3698#include "clang/AST/TypeLocNodes.def"
3699
3700  void VisitFunctionTypeLoc(FunctionTypeLoc);
3701  void VisitArrayTypeLoc(ArrayTypeLoc);
3702};
3703
3704void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
3705  // nothing to do
3706}
3707void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
3708  TL.setBuiltinLoc(ReadSourceLocation(Record, Idx));
3709  if (TL.needsExtraLocalData()) {
3710    TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
3711    TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
3712    TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
3713    TL.setModeAttr(Record[Idx++]);
3714  }
3715}
3716void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
3717  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3718}
3719void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
3720  TL.setStarLoc(ReadSourceLocation(Record, Idx));
3721}
3722void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
3723  TL.setCaretLoc(ReadSourceLocation(Record, Idx));
3724}
3725void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
3726  TL.setAmpLoc(ReadSourceLocation(Record, Idx));
3727}
3728void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
3729  TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx));
3730}
3731void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
3732  TL.setStarLoc(ReadSourceLocation(Record, Idx));
3733  TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
3734}
3735void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
3736  TL.setLBracketLoc(ReadSourceLocation(Record, Idx));
3737  TL.setRBracketLoc(ReadSourceLocation(Record, Idx));
3738  if (Record[Idx++])
3739    TL.setSizeExpr(Reader.ReadExpr(F));
3740  else
3741    TL.setSizeExpr(0);
3742}
3743void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
3744  VisitArrayTypeLoc(TL);
3745}
3746void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
3747  VisitArrayTypeLoc(TL);
3748}
3749void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
3750  VisitArrayTypeLoc(TL);
3751}
3752void TypeLocReader::VisitDependentSizedArrayTypeLoc(
3753                                            DependentSizedArrayTypeLoc TL) {
3754  VisitArrayTypeLoc(TL);
3755}
3756void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
3757                                        DependentSizedExtVectorTypeLoc TL) {
3758  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3759}
3760void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
3761  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3762}
3763void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
3764  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3765}
3766void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
3767  TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx));
3768  TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx));
3769  TL.setTrailingReturn(Record[Idx++]);
3770  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i) {
3771    TL.setArg(i, ReadDeclAs<ParmVarDecl>(Record, Idx));
3772  }
3773}
3774void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
3775  VisitFunctionTypeLoc(TL);
3776}
3777void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
3778  VisitFunctionTypeLoc(TL);
3779}
3780void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
3781  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3782}
3783void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
3784  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3785}
3786void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
3787  TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
3788  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
3789  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
3790}
3791void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
3792  TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
3793  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
3794  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
3795  TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
3796}
3797void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
3798  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3799}
3800void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
3801  TL.setKWLoc(ReadSourceLocation(Record, Idx));
3802  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
3803  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
3804  TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
3805}
3806void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
3807  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3808}
3809void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
3810  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3811}
3812void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
3813  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3814}
3815void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
3816  TL.setAttrNameLoc(ReadSourceLocation(Record, Idx));
3817  if (TL.hasAttrOperand()) {
3818    SourceRange range;
3819    range.setBegin(ReadSourceLocation(Record, Idx));
3820    range.setEnd(ReadSourceLocation(Record, Idx));
3821    TL.setAttrOperandParensRange(range);
3822  }
3823  if (TL.hasAttrExprOperand()) {
3824    if (Record[Idx++])
3825      TL.setAttrExprOperand(Reader.ReadExpr(F));
3826    else
3827      TL.setAttrExprOperand(0);
3828  } else if (TL.hasAttrEnumOperand())
3829    TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx));
3830}
3831void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
3832  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3833}
3834void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
3835                                            SubstTemplateTypeParmTypeLoc TL) {
3836  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3837}
3838void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
3839                                          SubstTemplateTypeParmPackTypeLoc TL) {
3840  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3841}
3842void TypeLocReader::VisitTemplateSpecializationTypeLoc(
3843                                           TemplateSpecializationTypeLoc TL) {
3844  TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
3845  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
3846  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
3847  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
3848    TL.setArgLocInfo(i,
3849        Reader.GetTemplateArgumentLocInfo(F,
3850                                          TL.getTypePtr()->getArg(i).getKind(),
3851                                          Record, Idx));
3852}
3853void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
3854  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
3855  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
3856}
3857void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
3858  TL.setKeywordLoc(ReadSourceLocation(Record, Idx));
3859  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
3860}
3861void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
3862  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3863}
3864void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
3865  TL.setKeywordLoc(ReadSourceLocation(Record, Idx));
3866  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
3867  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3868}
3869void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
3870       DependentTemplateSpecializationTypeLoc TL) {
3871  TL.setKeywordLoc(ReadSourceLocation(Record, Idx));
3872  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
3873  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3874  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
3875  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
3876  for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
3877    TL.setArgLocInfo(I,
3878        Reader.GetTemplateArgumentLocInfo(F,
3879                                          TL.getTypePtr()->getArg(I).getKind(),
3880                                          Record, Idx));
3881}
3882void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
3883  TL.setEllipsisLoc(ReadSourceLocation(Record, Idx));
3884}
3885void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
3886  TL.setNameLoc(ReadSourceLocation(Record, Idx));
3887}
3888void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
3889  TL.setHasBaseTypeAsWritten(Record[Idx++]);
3890  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
3891  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
3892  for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
3893    TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx));
3894}
3895void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
3896  TL.setStarLoc(ReadSourceLocation(Record, Idx));
3897}
3898
3899TypeSourceInfo *ASTReader::GetTypeSourceInfo(Module &F,
3900                                             const RecordData &Record,
3901                                             unsigned &Idx) {
3902  QualType InfoTy = readType(F, Record, Idx);
3903  if (InfoTy.isNull())
3904    return 0;
3905
3906  TypeSourceInfo *TInfo = getContext()->CreateTypeSourceInfo(InfoTy);
3907  TypeLocReader TLR(*this, F, Record, Idx);
3908  for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
3909    TLR.Visit(TL);
3910  return TInfo;
3911}
3912
3913QualType ASTReader::GetType(TypeID ID) {
3914  unsigned FastQuals = ID & Qualifiers::FastMask;
3915  unsigned Index = ID >> Qualifiers::FastWidth;
3916
3917  if (Index < NUM_PREDEF_TYPE_IDS) {
3918    QualType T;
3919    switch ((PredefinedTypeIDs)Index) {
3920    case PREDEF_TYPE_NULL_ID: return QualType();
3921    case PREDEF_TYPE_VOID_ID: T = Context->VoidTy; break;
3922    case PREDEF_TYPE_BOOL_ID: T = Context->BoolTy; break;
3923
3924    case PREDEF_TYPE_CHAR_U_ID:
3925    case PREDEF_TYPE_CHAR_S_ID:
3926      // FIXME: Check that the signedness of CharTy is correct!
3927      T = Context->CharTy;
3928      break;
3929
3930    case PREDEF_TYPE_UCHAR_ID:      T = Context->UnsignedCharTy;     break;
3931    case PREDEF_TYPE_USHORT_ID:     T = Context->UnsignedShortTy;    break;
3932    case PREDEF_TYPE_UINT_ID:       T = Context->UnsignedIntTy;      break;
3933    case PREDEF_TYPE_ULONG_ID:      T = Context->UnsignedLongTy;     break;
3934    case PREDEF_TYPE_ULONGLONG_ID:  T = Context->UnsignedLongLongTy; break;
3935    case PREDEF_TYPE_UINT128_ID:    T = Context->UnsignedInt128Ty;   break;
3936    case PREDEF_TYPE_SCHAR_ID:      T = Context->SignedCharTy;       break;
3937    case PREDEF_TYPE_WCHAR_ID:      T = Context->WCharTy;            break;
3938    case PREDEF_TYPE_SHORT_ID:      T = Context->ShortTy;            break;
3939    case PREDEF_TYPE_INT_ID:        T = Context->IntTy;              break;
3940    case PREDEF_TYPE_LONG_ID:       T = Context->LongTy;             break;
3941    case PREDEF_TYPE_LONGLONG_ID:   T = Context->LongLongTy;         break;
3942    case PREDEF_TYPE_INT128_ID:     T = Context->Int128Ty;           break;
3943    case PREDEF_TYPE_FLOAT_ID:      T = Context->FloatTy;            break;
3944    case PREDEF_TYPE_DOUBLE_ID:     T = Context->DoubleTy;           break;
3945    case PREDEF_TYPE_LONGDOUBLE_ID: T = Context->LongDoubleTy;       break;
3946    case PREDEF_TYPE_OVERLOAD_ID:   T = Context->OverloadTy;         break;
3947    case PREDEF_TYPE_BOUND_MEMBER:  T = Context->BoundMemberTy;      break;
3948    case PREDEF_TYPE_DEPENDENT_ID:  T = Context->DependentTy;        break;
3949    case PREDEF_TYPE_UNKNOWN_ANY:   T = Context->UnknownAnyTy;       break;
3950    case PREDEF_TYPE_NULLPTR_ID:    T = Context->NullPtrTy;          break;
3951    case PREDEF_TYPE_CHAR16_ID:     T = Context->Char16Ty;           break;
3952    case PREDEF_TYPE_CHAR32_ID:     T = Context->Char32Ty;           break;
3953    case PREDEF_TYPE_OBJC_ID:       T = Context->ObjCBuiltinIdTy;    break;
3954    case PREDEF_TYPE_OBJC_CLASS:    T = Context->ObjCBuiltinClassTy; break;
3955    case PREDEF_TYPE_OBJC_SEL:      T = Context->ObjCBuiltinSelTy;   break;
3956    case PREDEF_TYPE_AUTO_DEDUCT:   T = Context->getAutoDeductType(); break;
3957
3958    case PREDEF_TYPE_AUTO_RREF_DEDUCT:
3959      T = Context->getAutoRRefDeductType();
3960      break;
3961    }
3962
3963    assert(!T.isNull() && "Unknown predefined type");
3964    return T.withFastQualifiers(FastQuals);
3965  }
3966
3967  Index -= NUM_PREDEF_TYPE_IDS;
3968  assert(Index < TypesLoaded.size() && "Type index out-of-range");
3969  if (TypesLoaded[Index].isNull()) {
3970    TypesLoaded[Index] = readTypeRecord(Index);
3971    if (TypesLoaded[Index].isNull())
3972      return QualType();
3973
3974    TypesLoaded[Index]->setFromAST();
3975    if (DeserializationListener)
3976      DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
3977                                        TypesLoaded[Index]);
3978  }
3979
3980  return TypesLoaded[Index].withFastQualifiers(FastQuals);
3981}
3982
3983QualType ASTReader::getLocalType(Module &F, unsigned LocalID) {
3984  return GetType(getGlobalTypeID(F, LocalID));
3985}
3986
3987serialization::TypeID
3988ASTReader::getGlobalTypeID(Module &F, unsigned LocalID) const {
3989  unsigned FastQuals = LocalID & Qualifiers::FastMask;
3990  unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
3991
3992  if (LocalIndex < NUM_PREDEF_TYPE_IDS)
3993    return LocalID;
3994
3995  ContinuousRangeMap<uint32_t, int, 2>::iterator I
3996    = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
3997  assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
3998
3999  unsigned GlobalIndex = LocalIndex + I->second;
4000  return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
4001}
4002
4003TemplateArgumentLocInfo
4004ASTReader::GetTemplateArgumentLocInfo(Module &F,
4005                                      TemplateArgument::ArgKind Kind,
4006                                      const RecordData &Record,
4007                                      unsigned &Index) {
4008  switch (Kind) {
4009  case TemplateArgument::Expression:
4010    return ReadExpr(F);
4011  case TemplateArgument::Type:
4012    return GetTypeSourceInfo(F, Record, Index);
4013  case TemplateArgument::Template: {
4014    NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
4015                                                                     Index);
4016    SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
4017    return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
4018                                   SourceLocation());
4019  }
4020  case TemplateArgument::TemplateExpansion: {
4021    NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
4022                                                                     Index);
4023    SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
4024    SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
4025    return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
4026                                   EllipsisLoc);
4027  }
4028  case TemplateArgument::Null:
4029  case TemplateArgument::Integral:
4030  case TemplateArgument::Declaration:
4031  case TemplateArgument::Pack:
4032    return TemplateArgumentLocInfo();
4033  }
4034  llvm_unreachable("unexpected template argument loc");
4035  return TemplateArgumentLocInfo();
4036}
4037
4038TemplateArgumentLoc
4039ASTReader::ReadTemplateArgumentLoc(Module &F,
4040                                   const RecordData &Record, unsigned &Index) {
4041  TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
4042
4043  if (Arg.getKind() == TemplateArgument::Expression) {
4044    if (Record[Index++]) // bool InfoHasSameExpr.
4045      return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
4046  }
4047  return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
4048                                                             Record, Index));
4049}
4050
4051Decl *ASTReader::GetExternalDecl(uint32_t ID) {
4052  return GetDecl(ID);
4053}
4054
4055uint64_t ASTReader::readCXXBaseSpecifiers(Module &M, const RecordData &Record,
4056                                          unsigned &Idx){
4057  if (Idx >= Record.size())
4058    return 0;
4059
4060  unsigned LocalID = Record[Idx++];
4061  return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]);
4062}
4063
4064CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
4065  RecordLocation Loc = getLocalBitOffset(Offset);
4066  llvm::BitstreamCursor &Cursor = Loc.F->DeclsCursor;
4067  SavedStreamPosition SavedPosition(Cursor);
4068  Cursor.JumpToBit(Loc.Offset);
4069  ReadingKindTracker ReadingKind(Read_Decl, *this);
4070  RecordData Record;
4071  unsigned Code = Cursor.ReadCode();
4072  unsigned RecCode = Cursor.ReadRecord(Code, Record);
4073  if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
4074    Error("Malformed AST file: missing C++ base specifiers");
4075    return 0;
4076  }
4077
4078  unsigned Idx = 0;
4079  unsigned NumBases = Record[Idx++];
4080  void *Mem = Context->Allocate(sizeof(CXXBaseSpecifier) * NumBases);
4081  CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
4082  for (unsigned I = 0; I != NumBases; ++I)
4083    Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
4084  return Bases;
4085}
4086
4087serialization::DeclID
4088ASTReader::getGlobalDeclID(Module &F, unsigned LocalID) const {
4089  if (LocalID < NUM_PREDEF_DECL_IDS)
4090    return LocalID;
4091
4092  ContinuousRangeMap<uint32_t, int, 2>::iterator I
4093    = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
4094  assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
4095
4096  return LocalID + I->second;
4097}
4098
4099bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
4100                                   Module &M) const {
4101  GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID);
4102  assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
4103  return &M == I->second;
4104}
4105
4106Decl *ASTReader::GetDecl(DeclID ID) {
4107  if (ID < NUM_PREDEF_DECL_IDS) {
4108    switch ((PredefinedDeclIDs)ID) {
4109    case PREDEF_DECL_NULL_ID:
4110      return 0;
4111
4112    case PREDEF_DECL_TRANSLATION_UNIT_ID:
4113      assert(Context && "No context available?");
4114      return Context->getTranslationUnitDecl();
4115
4116    case PREDEF_DECL_OBJC_ID_ID:
4117      assert(Context && "No context available?");
4118      return Context->getObjCIdDecl();
4119
4120    case PREDEF_DECL_OBJC_SEL_ID:
4121      assert(Context && "No context available?");
4122      return Context->getObjCSelDecl();
4123
4124    case PREDEF_DECL_OBJC_CLASS_ID:
4125      assert(Context && "No context available?");
4126      return Context->getObjCClassDecl();
4127
4128    case PREDEF_DECL_INT_128_ID:
4129      assert(Context && "No context available?");
4130      return Context->getInt128Decl();
4131
4132    case PREDEF_DECL_UNSIGNED_INT_128_ID:
4133      assert(Context && "No context available?");
4134      return Context->getUInt128Decl();
4135
4136    case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
4137      assert(Context && "No context available?");
4138      return Context->getObjCInstanceTypeDecl();
4139    }
4140
4141    return 0;
4142  }
4143
4144  unsigned Index = ID - NUM_PREDEF_DECL_IDS;
4145
4146  if (Index > DeclsLoaded.size()) {
4147    Error("declaration ID out-of-range for AST file");
4148    return 0;
4149  }
4150
4151if (!DeclsLoaded[Index]) {
4152    ReadDeclRecord(ID);
4153    if (DeserializationListener)
4154      DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
4155  }
4156
4157  return DeclsLoaded[Index];
4158}
4159
4160serialization::DeclID ASTReader::ReadDeclID(Module &F,
4161                                            const RecordData &Record,
4162                                            unsigned &Idx) {
4163  if (Idx >= Record.size()) {
4164    Error("Corrupted AST file");
4165    return 0;
4166  }
4167
4168  return getGlobalDeclID(F, Record[Idx++]);
4169}
4170
4171/// \brief Resolve the offset of a statement into a statement.
4172///
4173/// This operation will read a new statement from the external
4174/// source each time it is called, and is meant to be used via a
4175/// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
4176Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
4177  // Switch case IDs are per Decl.
4178  ClearSwitchCaseIDs();
4179
4180  // Offset here is a global offset across the entire chain.
4181  RecordLocation Loc = getLocalBitOffset(Offset);
4182  Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
4183  return ReadStmtFromStream(*Loc.F);
4184}
4185
4186namespace {
4187  class FindExternalLexicalDeclsVisitor {
4188    ASTReader &Reader;
4189    const DeclContext *DC;
4190    bool (*isKindWeWant)(Decl::Kind);
4191
4192    SmallVectorImpl<Decl*> &Decls;
4193    bool PredefsVisited[NUM_PREDEF_DECL_IDS];
4194
4195  public:
4196    FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC,
4197                                    bool (*isKindWeWant)(Decl::Kind),
4198                                    SmallVectorImpl<Decl*> &Decls)
4199      : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls)
4200    {
4201      for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I)
4202        PredefsVisited[I] = false;
4203    }
4204
4205    static bool visit(Module &M, bool Preorder, void *UserData) {
4206      if (Preorder)
4207        return false;
4208
4209      FindExternalLexicalDeclsVisitor *This
4210        = static_cast<FindExternalLexicalDeclsVisitor *>(UserData);
4211
4212      Module::DeclContextInfosMap::iterator Info
4213        = M.DeclContextInfos.find(This->DC);
4214      if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls)
4215        return false;
4216
4217      // Load all of the declaration IDs
4218      for (const KindDeclIDPair *ID = Info->second.LexicalDecls,
4219                               *IDE = ID + Info->second.NumLexicalDecls;
4220           ID != IDE; ++ID) {
4221        if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first))
4222          continue;
4223
4224        // Don't add predefined declarations to the lexical context more
4225        // than once.
4226        if (ID->second < NUM_PREDEF_DECL_IDS) {
4227          if (This->PredefsVisited[ID->second])
4228            continue;
4229
4230          This->PredefsVisited[ID->second] = true;
4231        }
4232
4233        if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) {
4234          if (!This->DC->isDeclInLexicalTraversal(D))
4235            This->Decls.push_back(D);
4236        }
4237      }
4238
4239      return false;
4240    }
4241  };
4242}
4243
4244ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
4245                                         bool (*isKindWeWant)(Decl::Kind),
4246                                         SmallVectorImpl<Decl*> &Decls) {
4247  // There might be lexical decls in multiple modules, for the TU at
4248  // least. Walk all of the modules in the order they were loaded.
4249  FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls);
4250  ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor);
4251  ++NumLexicalDeclContextsRead;
4252  return ELR_Success;
4253}
4254
4255namespace {
4256  /// \brief Module visitor used to perform name lookup into a
4257  /// declaration context.
4258  class DeclContextNameLookupVisitor {
4259    ASTReader &Reader;
4260    const DeclContext *DC;
4261    DeclarationName Name;
4262    SmallVectorImpl<NamedDecl *> &Decls;
4263
4264  public:
4265    DeclContextNameLookupVisitor(ASTReader &Reader,
4266                                 const DeclContext *DC, DeclarationName Name,
4267                                 SmallVectorImpl<NamedDecl *> &Decls)
4268      : Reader(Reader), DC(DC), Name(Name), Decls(Decls) { }
4269
4270    static bool visit(Module &M, void *UserData) {
4271      DeclContextNameLookupVisitor *This
4272        = static_cast<DeclContextNameLookupVisitor *>(UserData);
4273
4274      // Check whether we have any visible declaration information for
4275      // this context in this module.
4276      Module::DeclContextInfosMap::iterator Info
4277        = M.DeclContextInfos.find(This->DC);
4278      if (Info == M.DeclContextInfos.end() || !Info->second.NameLookupTableData)
4279        return false;
4280
4281      // Look for this name within this module.
4282      ASTDeclContextNameLookupTable *LookupTable =
4283        (ASTDeclContextNameLookupTable*)Info->second.NameLookupTableData;
4284      ASTDeclContextNameLookupTable::iterator Pos
4285        = LookupTable->find(This->Name);
4286      if (Pos == LookupTable->end())
4287        return false;
4288
4289      bool FoundAnything = false;
4290      ASTDeclContextNameLookupTrait::data_type Data = *Pos;
4291      for (; Data.first != Data.second; ++Data.first) {
4292        NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first);
4293        if (!ND)
4294          continue;
4295
4296        if (ND->getDeclName() != This->Name) {
4297          assert(!This->Name.getCXXNameType().isNull() &&
4298                 "Name mismatch without a type");
4299          continue;
4300        }
4301
4302        // Record this declaration.
4303        FoundAnything = true;
4304        This->Decls.push_back(ND);
4305      }
4306
4307      return FoundAnything;
4308    }
4309  };
4310}
4311
4312DeclContext::lookup_result
4313ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
4314                                          DeclarationName Name) {
4315  assert(DC->hasExternalVisibleStorage() &&
4316         "DeclContext has no visible decls in storage");
4317  if (!Name)
4318    return DeclContext::lookup_result(DeclContext::lookup_iterator(0),
4319                                      DeclContext::lookup_iterator(0));
4320
4321  SmallVector<NamedDecl *, 64> Decls;
4322  DeclContextNameLookupVisitor Visitor(*this, DC, Name, Decls);
4323  ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor);
4324  ++NumVisibleDeclContextsRead;
4325  SetExternalVisibleDeclsForName(DC, Name, Decls);
4326  return const_cast<DeclContext*>(DC)->lookup(Name);
4327}
4328
4329void ASTReader::PassInterestingDeclsToConsumer() {
4330  assert(Consumer);
4331  while (!InterestingDecls.empty()) {
4332    DeclGroupRef DG(InterestingDecls.front());
4333    InterestingDecls.pop_front();
4334    Consumer->HandleInterestingDecl(DG);
4335  }
4336}
4337
4338void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
4339  this->Consumer = Consumer;
4340
4341  if (!Consumer)
4342    return;
4343
4344  for (unsigned I = 0, N = ExternalDefinitions.size(); I != N; ++I) {
4345    // Force deserialization of this decl, which will cause it to be queued for
4346    // passing to the consumer.
4347    GetDecl(ExternalDefinitions[I]);
4348  }
4349
4350  PassInterestingDeclsToConsumer();
4351}
4352
4353void ASTReader::PrintStats() {
4354  std::fprintf(stderr, "*** AST File Statistics:\n");
4355
4356  unsigned NumTypesLoaded
4357    = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
4358                                      QualType());
4359  unsigned NumDeclsLoaded
4360    = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
4361                                      (Decl *)0);
4362  unsigned NumIdentifiersLoaded
4363    = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
4364                                            IdentifiersLoaded.end(),
4365                                            (IdentifierInfo *)0);
4366  unsigned NumSelectorsLoaded
4367    = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
4368                                          SelectorsLoaded.end(),
4369                                          Selector());
4370
4371  std::fprintf(stderr, "  %u stat cache hits\n", NumStatHits);
4372  std::fprintf(stderr, "  %u stat cache misses\n", NumStatMisses);
4373  if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
4374    std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
4375                 NumSLocEntriesRead, TotalNumSLocEntries,
4376                 ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
4377  if (!TypesLoaded.empty())
4378    std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
4379                 NumTypesLoaded, (unsigned)TypesLoaded.size(),
4380                 ((float)NumTypesLoaded/TypesLoaded.size() * 100));
4381  if (!DeclsLoaded.empty())
4382    std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
4383                 NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
4384                 ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
4385  if (!IdentifiersLoaded.empty())
4386    std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
4387                 NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
4388                 ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
4389  if (!SelectorsLoaded.empty())
4390    std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
4391                 NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
4392                 ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
4393  if (TotalNumStatements)
4394    std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
4395                 NumStatementsRead, TotalNumStatements,
4396                 ((float)NumStatementsRead/TotalNumStatements * 100));
4397  if (TotalNumMacros)
4398    std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
4399                 NumMacrosRead, TotalNumMacros,
4400                 ((float)NumMacrosRead/TotalNumMacros * 100));
4401  if (TotalLexicalDeclContexts)
4402    std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
4403                 NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
4404                 ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
4405                  * 100));
4406  if (TotalVisibleDeclContexts)
4407    std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
4408                 NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
4409                 ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
4410                  * 100));
4411  if (TotalNumMethodPoolEntries) {
4412    std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
4413                 NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
4414                 ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
4415                  * 100));
4416    std::fprintf(stderr, "  %u method pool misses\n", NumMethodPoolMisses);
4417  }
4418  std::fprintf(stderr, "\n");
4419  dump();
4420  std::fprintf(stderr, "\n");
4421}
4422
4423template<typename Key, typename Module, unsigned InitialCapacity>
4424static void
4425dumpModuleIDMap(StringRef Name,
4426                const ContinuousRangeMap<Key, Module *,
4427                                         InitialCapacity> &Map) {
4428  if (Map.begin() == Map.end())
4429    return;
4430
4431  typedef ContinuousRangeMap<Key, Module *, InitialCapacity> MapType;
4432  llvm::errs() << Name << ":\n";
4433  for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
4434       I != IEnd; ++I) {
4435    llvm::errs() << "  " << I->first << " -> " << I->second->FileName
4436      << "\n";
4437  }
4438}
4439
4440void ASTReader::dump() {
4441  llvm::errs() << "*** PCH/Module Remappings:\n";
4442  dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
4443  dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
4444  dumpModuleIDMap("Global type map", GlobalTypeMap);
4445  dumpModuleIDMap("Global declaration map", GlobalDeclMap);
4446  dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
4447  dumpModuleIDMap("Global selector map", GlobalSelectorMap);
4448  dumpModuleIDMap("Global macro definition map", GlobalMacroDefinitionMap);
4449  dumpModuleIDMap("Global preprocessed entity map",
4450                  GlobalPreprocessedEntityMap);
4451
4452  llvm::errs() << "\n*** PCH/Modules Loaded:";
4453  for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(),
4454                                       MEnd = ModuleMgr.end();
4455       M != MEnd; ++M)
4456    (*M)->dump();
4457}
4458
4459/// Return the amount of memory used by memory buffers, breaking down
4460/// by heap-backed versus mmap'ed memory.
4461void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
4462  for (ModuleConstIterator I = ModuleMgr.begin(),
4463      E = ModuleMgr.end(); I != E; ++I) {
4464    if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) {
4465      size_t bytes = buf->getBufferSize();
4466      switch (buf->getBufferKind()) {
4467        case llvm::MemoryBuffer::MemoryBuffer_Malloc:
4468          sizes.malloc_bytes += bytes;
4469          break;
4470        case llvm::MemoryBuffer::MemoryBuffer_MMap:
4471          sizes.mmap_bytes += bytes;
4472          break;
4473      }
4474    }
4475  }
4476}
4477
4478void ASTReader::InitializeSema(Sema &S) {
4479  SemaObj = &S;
4480  S.ExternalSource = this;
4481
4482  // Makes sure any declarations that were deserialized "too early"
4483  // still get added to the identifier's declaration chains.
4484  for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) {
4485    if (SemaObj->TUScope)
4486      SemaObj->TUScope->AddDecl(PreloadedDecls[I]);
4487
4488    SemaObj->IdResolver.AddDecl(PreloadedDecls[I]);
4489  }
4490  PreloadedDecls.clear();
4491
4492  // Load the offsets of the declarations that Sema references.
4493  // They will be lazily deserialized when needed.
4494  if (!SemaDeclRefs.empty()) {
4495    assert(SemaDeclRefs.size() == 2 && "More decl refs than expected!");
4496    if (!SemaObj->StdNamespace)
4497      SemaObj->StdNamespace = SemaDeclRefs[0];
4498    if (!SemaObj->StdBadAlloc)
4499      SemaObj->StdBadAlloc = SemaDeclRefs[1];
4500  }
4501
4502  if (!FPPragmaOptions.empty()) {
4503    assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
4504    SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
4505  }
4506
4507  if (!OpenCLExtensions.empty()) {
4508    unsigned I = 0;
4509#define OPENCLEXT(nm)  SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++];
4510#include "clang/Basic/OpenCLExtensions.def"
4511
4512    assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS");
4513  }
4514}
4515
4516IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
4517  IdentifierLookupVisitor Visitor(StringRef(NameStart, NameEnd - NameStart));
4518  ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor);
4519  return Visitor.getIdentifierInfo();
4520}
4521
4522namespace clang {
4523  /// \brief An identifier-lookup iterator that enumerates all of the
4524  /// identifiers stored within a set of AST files.
4525  class ASTIdentifierIterator : public IdentifierIterator {
4526    /// \brief The AST reader whose identifiers are being enumerated.
4527    const ASTReader &Reader;
4528
4529    /// \brief The current index into the chain of AST files stored in
4530    /// the AST reader.
4531    unsigned Index;
4532
4533    /// \brief The current position within the identifier lookup table
4534    /// of the current AST file.
4535    ASTIdentifierLookupTable::key_iterator Current;
4536
4537    /// \brief The end position within the identifier lookup table of
4538    /// the current AST file.
4539    ASTIdentifierLookupTable::key_iterator End;
4540
4541  public:
4542    explicit ASTIdentifierIterator(const ASTReader &Reader);
4543
4544    virtual StringRef Next();
4545  };
4546}
4547
4548ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader)
4549  : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) {
4550  ASTIdentifierLookupTable *IdTable
4551    = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable;
4552  Current = IdTable->key_begin();
4553  End = IdTable->key_end();
4554}
4555
4556StringRef ASTIdentifierIterator::Next() {
4557  while (Current == End) {
4558    // If we have exhausted all of our AST files, we're done.
4559    if (Index == 0)
4560      return StringRef();
4561
4562    --Index;
4563    ASTIdentifierLookupTable *IdTable
4564      = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].
4565        IdentifierLookupTable;
4566    Current = IdTable->key_begin();
4567    End = IdTable->key_end();
4568  }
4569
4570  // We have any identifiers remaining in the current AST file; return
4571  // the next one.
4572  std::pair<const char*, unsigned> Key = *Current;
4573  ++Current;
4574  return StringRef(Key.first, Key.second);
4575}
4576
4577IdentifierIterator *ASTReader::getIdentifiers() const {
4578  return new ASTIdentifierIterator(*this);
4579}
4580
4581namespace clang { namespace serialization {
4582  class ReadMethodPoolVisitor {
4583    ASTReader &Reader;
4584    Selector Sel;
4585    llvm::SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
4586    llvm::SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
4587
4588    /// \brief Build an ObjCMethodList from a vector of Objective-C method
4589    /// declarations.
4590    ObjCMethodList
4591    buildObjCMethodList(const SmallVectorImpl<ObjCMethodDecl *> &Vec) const
4592    {
4593      ObjCMethodList List;
4594      ObjCMethodList *Prev = 0;
4595      for (unsigned I = 0, N = Vec.size(); I != N; ++I) {
4596        if (!List.Method) {
4597          // This is the first method, which is the easy case.
4598          List.Method = Vec[I];
4599          Prev = &List;
4600          continue;
4601        }
4602
4603        ObjCMethodList *Mem =
4604          Reader.getSema()->BumpAlloc.Allocate<ObjCMethodList>();
4605        Prev->Next = new (Mem) ObjCMethodList(Vec[I], 0);
4606        Prev = Prev->Next;
4607      }
4608
4609      return List;
4610    }
4611
4612  public:
4613    ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel)
4614      : Reader(Reader), Sel(Sel) { }
4615
4616    static bool visit(Module &M, void *UserData) {
4617      ReadMethodPoolVisitor *This
4618        = static_cast<ReadMethodPoolVisitor *>(UserData);
4619
4620      if (!M.SelectorLookupTable)
4621        return false;
4622
4623      ASTSelectorLookupTable *PoolTable
4624        = (ASTSelectorLookupTable*)M.SelectorLookupTable;
4625      ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel);
4626      if (Pos == PoolTable->end())
4627        return false;
4628
4629      ++This->Reader.NumSelectorsRead;
4630      // FIXME: Not quite happy with the statistics here. We probably should
4631      // disable this tracking when called via LoadSelector.
4632      // Also, should entries without methods count as misses?
4633      ++This->Reader.NumMethodPoolEntriesRead;
4634      ASTSelectorLookupTrait::data_type Data = *Pos;
4635      if (This->Reader.DeserializationListener)
4636        This->Reader.DeserializationListener->SelectorRead(Data.ID,
4637                                                           This->Sel);
4638
4639      This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
4640      This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
4641      return true;
4642    }
4643
4644    /// \brief Retrieve the instance methods found by this visitor.
4645    ObjCMethodList getInstanceMethods() const {
4646      return buildObjCMethodList(InstanceMethods);
4647    }
4648
4649    /// \brief Retrieve the instance methods found by this visitor.
4650    ObjCMethodList getFactoryMethods() const {
4651      return buildObjCMethodList(FactoryMethods);
4652    }
4653  };
4654} } // end namespace clang::serialization
4655
4656std::pair<ObjCMethodList, ObjCMethodList>
4657ASTReader::ReadMethodPool(Selector Sel) {
4658  ReadMethodPoolVisitor Visitor(*this, Sel);
4659  ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor);
4660  std::pair<ObjCMethodList, ObjCMethodList> Result;
4661  Result.first = Visitor.getInstanceMethods();
4662  Result.second = Visitor.getFactoryMethods();
4663
4664  if (!Result.first.Method && !Result.second.Method)
4665    ++NumMethodPoolMisses;
4666  return Result;
4667}
4668
4669void ASTReader::ReadKnownNamespaces(
4670                          SmallVectorImpl<NamespaceDecl *> &Namespaces) {
4671  Namespaces.clear();
4672
4673  for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
4674    if (NamespaceDecl *Namespace
4675                = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
4676      Namespaces.push_back(Namespace);
4677  }
4678}
4679
4680void ASTReader::ReadTentativeDefinitions(
4681                  SmallVectorImpl<VarDecl *> &TentativeDefs) {
4682  for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
4683    VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
4684    if (Var)
4685      TentativeDefs.push_back(Var);
4686  }
4687  TentativeDefinitions.clear();
4688}
4689
4690void ASTReader::ReadUnusedFileScopedDecls(
4691                               SmallVectorImpl<const DeclaratorDecl *> &Decls) {
4692  for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
4693    DeclaratorDecl *D
4694      = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
4695    if (D)
4696      Decls.push_back(D);
4697  }
4698  UnusedFileScopedDecls.clear();
4699}
4700
4701void ASTReader::ReadDelegatingConstructors(
4702                                 SmallVectorImpl<CXXConstructorDecl *> &Decls) {
4703  for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
4704    CXXConstructorDecl *D
4705      = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
4706    if (D)
4707      Decls.push_back(D);
4708  }
4709  DelegatingCtorDecls.clear();
4710}
4711
4712void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
4713  for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
4714    TypedefNameDecl *D
4715      = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
4716    if (D)
4717      Decls.push_back(D);
4718  }
4719  ExtVectorDecls.clear();
4720}
4721
4722void ASTReader::ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) {
4723  for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
4724    CXXRecordDecl *D
4725      = dyn_cast_or_null<CXXRecordDecl>(GetDecl(DynamicClasses[I]));
4726    if (D)
4727      Decls.push_back(D);
4728  }
4729  DynamicClasses.clear();
4730}
4731
4732void
4733ASTReader::ReadLocallyScopedExternalDecls(SmallVectorImpl<NamedDecl *> &Decls) {
4734  for (unsigned I = 0, N = LocallyScopedExternalDecls.size(); I != N; ++I) {
4735    NamedDecl *D
4736      = dyn_cast_or_null<NamedDecl>(GetDecl(LocallyScopedExternalDecls[I]));
4737    if (D)
4738      Decls.push_back(D);
4739  }
4740  LocallyScopedExternalDecls.clear();
4741}
4742
4743void ASTReader::ReadReferencedSelectors(
4744       SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
4745  if (ReferencedSelectorsData.empty())
4746    return;
4747
4748  // If there are @selector references added them to its pool. This is for
4749  // implementation of -Wselector.
4750  unsigned int DataSize = ReferencedSelectorsData.size()-1;
4751  unsigned I = 0;
4752  while (I < DataSize) {
4753    Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
4754    SourceLocation SelLoc
4755      = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
4756    Sels.push_back(std::make_pair(Sel, SelLoc));
4757  }
4758  ReferencedSelectorsData.clear();
4759}
4760
4761void ASTReader::ReadWeakUndeclaredIdentifiers(
4762       SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
4763  if (WeakUndeclaredIdentifiers.empty())
4764    return;
4765
4766  for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
4767    IdentifierInfo *WeakId
4768      = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
4769    IdentifierInfo *AliasId
4770      = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
4771    SourceLocation Loc
4772      = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
4773    bool Used = WeakUndeclaredIdentifiers[I++];
4774    WeakInfo WI(AliasId, Loc);
4775    WI.setUsed(Used);
4776    WeakIDs.push_back(std::make_pair(WeakId, WI));
4777  }
4778  WeakUndeclaredIdentifiers.clear();
4779}
4780
4781void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
4782  for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
4783    ExternalVTableUse VT;
4784    VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
4785    VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
4786    VT.DefinitionRequired = VTableUses[Idx++];
4787    VTables.push_back(VT);
4788  }
4789
4790  VTableUses.clear();
4791}
4792
4793void ASTReader::ReadPendingInstantiations(
4794       SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
4795  for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
4796    ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
4797    SourceLocation Loc
4798      = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
4799    Pending.push_back(std::make_pair(D, Loc));
4800  }
4801  PendingInstantiations.clear();
4802}
4803
4804void ASTReader::LoadSelector(Selector Sel) {
4805  // It would be complicated to avoid reading the methods anyway. So don't.
4806  ReadMethodPool(Sel);
4807}
4808
4809void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
4810  assert(ID && "Non-zero identifier ID required");
4811  assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
4812  IdentifiersLoaded[ID - 1] = II;
4813  if (DeserializationListener)
4814    DeserializationListener->IdentifierRead(ID, II);
4815}
4816
4817/// \brief Set the globally-visible declarations associated with the given
4818/// identifier.
4819///
4820/// If the AST reader is currently in a state where the given declaration IDs
4821/// cannot safely be resolved, they are queued until it is safe to resolve
4822/// them.
4823///
4824/// \param II an IdentifierInfo that refers to one or more globally-visible
4825/// declarations.
4826///
4827/// \param DeclIDs the set of declaration IDs with the name @p II that are
4828/// visible at global scope.
4829///
4830/// \param Nonrecursive should be true to indicate that the caller knows that
4831/// this call is non-recursive, and therefore the globally-visible declarations
4832/// will not be placed onto the pending queue.
4833void
4834ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
4835                              const SmallVectorImpl<uint32_t> &DeclIDs,
4836                                   bool Nonrecursive) {
4837  if (NumCurrentElementsDeserializing && !Nonrecursive) {
4838    PendingIdentifierInfos.push_back(PendingIdentifierInfo());
4839    PendingIdentifierInfo &PII = PendingIdentifierInfos.back();
4840    PII.II = II;
4841    PII.DeclIDs.append(DeclIDs.begin(), DeclIDs.end());
4842    return;
4843  }
4844
4845  for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
4846    NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
4847    if (SemaObj) {
4848      if (SemaObj->TUScope) {
4849        // Introduce this declaration into the translation-unit scope
4850        // and add it to the declaration chain for this identifier, so
4851        // that (unqualified) name lookup will find it.
4852        SemaObj->TUScope->AddDecl(D);
4853      }
4854      SemaObj->IdResolver.AddDeclToIdentifierChain(II, D);
4855    } else {
4856      // Queue this declaration so that it will be added to the
4857      // translation unit scope and identifier's declaration chain
4858      // once a Sema object is known.
4859      PreloadedDecls.push_back(D);
4860    }
4861  }
4862}
4863
4864IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
4865  if (ID == 0)
4866    return 0;
4867
4868  if (IdentifiersLoaded.empty()) {
4869    Error("no identifier table in AST file");
4870    return 0;
4871  }
4872
4873  assert(PP && "Forgot to set Preprocessor ?");
4874  ID -= 1;
4875  if (!IdentifiersLoaded[ID]) {
4876    GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
4877    assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
4878    Module *M = I->second;
4879    unsigned Index = ID - M->BaseIdentifierID;
4880    const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
4881
4882    // All of the strings in the AST file are preceded by a 16-bit length.
4883    // Extract that 16-bit length to avoid having to execute strlen().
4884    // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
4885    //  unsigned integers.  This is important to avoid integer overflow when
4886    //  we cast them to 'unsigned'.
4887    const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
4888    unsigned StrLen = (((unsigned) StrLenPtr[0])
4889                       | (((unsigned) StrLenPtr[1]) << 8)) - 1;
4890    IdentifiersLoaded[ID]
4891      = &PP->getIdentifierTable().get(StringRef(Str, StrLen));
4892    if (DeserializationListener)
4893      DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
4894  }
4895
4896  return IdentifiersLoaded[ID];
4897}
4898
4899IdentifierInfo *ASTReader::getLocalIdentifier(Module &M, unsigned LocalID) {
4900  return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
4901}
4902
4903IdentifierID ASTReader::getGlobalIdentifierID(Module &M, unsigned LocalID) {
4904  if (LocalID < NUM_PREDEF_IDENT_IDS)
4905    return LocalID;
4906
4907  ContinuousRangeMap<uint32_t, int, 2>::iterator I
4908    = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
4909  assert(I != M.IdentifierRemap.end()
4910         && "Invalid index into identifier index remap");
4911
4912  return LocalID + I->second;
4913}
4914
4915bool ASTReader::ReadSLocEntry(int ID) {
4916  return ReadSLocEntryRecord(ID) != Success;
4917}
4918
4919Selector ASTReader::getLocalSelector(Module &M, unsigned LocalID) {
4920  return DecodeSelector(getGlobalSelectorID(M, LocalID));
4921}
4922
4923Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
4924  if (ID == 0)
4925    return Selector();
4926
4927  if (ID > SelectorsLoaded.size()) {
4928    Error("selector ID out of range in AST file");
4929    return Selector();
4930  }
4931
4932  if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == 0) {
4933    // Load this selector from the selector table.
4934    GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
4935    assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
4936    Module &M = *I->second;
4937    ASTSelectorLookupTrait Trait(*this, M);
4938    unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
4939    SelectorsLoaded[ID - 1] =
4940      Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
4941    if (DeserializationListener)
4942      DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
4943  }
4944
4945  return SelectorsLoaded[ID - 1];
4946}
4947
4948Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
4949  return DecodeSelector(ID);
4950}
4951
4952uint32_t ASTReader::GetNumExternalSelectors() {
4953  // ID 0 (the null selector) is considered an external selector.
4954  return getTotalNumSelectors() + 1;
4955}
4956
4957serialization::SelectorID
4958ASTReader::getGlobalSelectorID(Module &M, unsigned LocalID) const {
4959  if (LocalID < NUM_PREDEF_SELECTOR_IDS)
4960    return LocalID;
4961
4962  ContinuousRangeMap<uint32_t, int, 2>::iterator I
4963    = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
4964  assert(I != M.SelectorRemap.end()
4965         && "Invalid index into identifier index remap");
4966
4967  return LocalID + I->second;
4968}
4969
4970DeclarationName
4971ASTReader::ReadDeclarationName(Module &F,
4972                               const RecordData &Record, unsigned &Idx) {
4973  DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
4974  switch (Kind) {
4975  case DeclarationName::Identifier:
4976    return DeclarationName(GetIdentifierInfo(F, Record, Idx));
4977
4978  case DeclarationName::ObjCZeroArgSelector:
4979  case DeclarationName::ObjCOneArgSelector:
4980  case DeclarationName::ObjCMultiArgSelector:
4981    return DeclarationName(ReadSelector(F, Record, Idx));
4982
4983  case DeclarationName::CXXConstructorName:
4984    return Context->DeclarationNames.getCXXConstructorName(
4985                          Context->getCanonicalType(readType(F, Record, Idx)));
4986
4987  case DeclarationName::CXXDestructorName:
4988    return Context->DeclarationNames.getCXXDestructorName(
4989                          Context->getCanonicalType(readType(F, Record, Idx)));
4990
4991  case DeclarationName::CXXConversionFunctionName:
4992    return Context->DeclarationNames.getCXXConversionFunctionName(
4993                          Context->getCanonicalType(readType(F, Record, Idx)));
4994
4995  case DeclarationName::CXXOperatorName:
4996    return Context->DeclarationNames.getCXXOperatorName(
4997                                       (OverloadedOperatorKind)Record[Idx++]);
4998
4999  case DeclarationName::CXXLiteralOperatorName:
5000    return Context->DeclarationNames.getCXXLiteralOperatorName(
5001                                       GetIdentifierInfo(F, Record, Idx));
5002
5003  case DeclarationName::CXXUsingDirective:
5004    return DeclarationName::getUsingDirectiveName();
5005  }
5006
5007  // Required to silence GCC warning
5008  return DeclarationName();
5009}
5010
5011void ASTReader::ReadDeclarationNameLoc(Module &F,
5012                                       DeclarationNameLoc &DNLoc,
5013                                       DeclarationName Name,
5014                                      const RecordData &Record, unsigned &Idx) {
5015  switch (Name.getNameKind()) {
5016  case DeclarationName::CXXConstructorName:
5017  case DeclarationName::CXXDestructorName:
5018  case DeclarationName::CXXConversionFunctionName:
5019    DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
5020    break;
5021
5022  case DeclarationName::CXXOperatorName:
5023    DNLoc.CXXOperatorName.BeginOpNameLoc
5024        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
5025    DNLoc.CXXOperatorName.EndOpNameLoc
5026        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
5027    break;
5028
5029  case DeclarationName::CXXLiteralOperatorName:
5030    DNLoc.CXXLiteralOperatorName.OpNameLoc
5031        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
5032    break;
5033
5034  case DeclarationName::Identifier:
5035  case DeclarationName::ObjCZeroArgSelector:
5036  case DeclarationName::ObjCOneArgSelector:
5037  case DeclarationName::ObjCMultiArgSelector:
5038  case DeclarationName::CXXUsingDirective:
5039    break;
5040  }
5041}
5042
5043void ASTReader::ReadDeclarationNameInfo(Module &F,
5044                                        DeclarationNameInfo &NameInfo,
5045                                      const RecordData &Record, unsigned &Idx) {
5046  NameInfo.setName(ReadDeclarationName(F, Record, Idx));
5047  NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
5048  DeclarationNameLoc DNLoc;
5049  ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
5050  NameInfo.setInfo(DNLoc);
5051}
5052
5053void ASTReader::ReadQualifierInfo(Module &F, QualifierInfo &Info,
5054                                  const RecordData &Record, unsigned &Idx) {
5055  Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
5056  unsigned NumTPLists = Record[Idx++];
5057  Info.NumTemplParamLists = NumTPLists;
5058  if (NumTPLists) {
5059    Info.TemplParamLists = new (*Context) TemplateParameterList*[NumTPLists];
5060    for (unsigned i=0; i != NumTPLists; ++i)
5061      Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
5062  }
5063}
5064
5065TemplateName
5066ASTReader::ReadTemplateName(Module &F, const RecordData &Record,
5067                            unsigned &Idx) {
5068  TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
5069  switch (Kind) {
5070  case TemplateName::Template:
5071      return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
5072
5073  case TemplateName::OverloadedTemplate: {
5074    unsigned size = Record[Idx++];
5075    UnresolvedSet<8> Decls;
5076    while (size--)
5077      Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
5078
5079    return Context->getOverloadedTemplateName(Decls.begin(), Decls.end());
5080  }
5081
5082  case TemplateName::QualifiedTemplate: {
5083    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
5084    bool hasTemplKeyword = Record[Idx++];
5085    TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
5086    return Context->getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
5087  }
5088
5089  case TemplateName::DependentTemplate: {
5090    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
5091    if (Record[Idx++])  // isIdentifier
5092      return Context->getDependentTemplateName(NNS,
5093                                               GetIdentifierInfo(F, Record,
5094                                                                 Idx));
5095    return Context->getDependentTemplateName(NNS,
5096                                         (OverloadedOperatorKind)Record[Idx++]);
5097  }
5098
5099  case TemplateName::SubstTemplateTemplateParm: {
5100    TemplateTemplateParmDecl *param
5101      = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
5102    if (!param) return TemplateName();
5103    TemplateName replacement = ReadTemplateName(F, Record, Idx);
5104    return Context->getSubstTemplateTemplateParm(param, replacement);
5105  }
5106
5107  case TemplateName::SubstTemplateTemplateParmPack: {
5108    TemplateTemplateParmDecl *Param
5109      = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
5110    if (!Param)
5111      return TemplateName();
5112
5113    TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
5114    if (ArgPack.getKind() != TemplateArgument::Pack)
5115      return TemplateName();
5116
5117    return Context->getSubstTemplateTemplateParmPack(Param, ArgPack);
5118  }
5119  }
5120
5121  assert(0 && "Unhandled template name kind!");
5122  return TemplateName();
5123}
5124
5125TemplateArgument
5126ASTReader::ReadTemplateArgument(Module &F,
5127                                const RecordData &Record, unsigned &Idx) {
5128  TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
5129  switch (Kind) {
5130  case TemplateArgument::Null:
5131    return TemplateArgument();
5132  case TemplateArgument::Type:
5133    return TemplateArgument(readType(F, Record, Idx));
5134  case TemplateArgument::Declaration:
5135    return TemplateArgument(ReadDecl(F, Record, Idx));
5136  case TemplateArgument::Integral: {
5137    llvm::APSInt Value = ReadAPSInt(Record, Idx);
5138    QualType T = readType(F, Record, Idx);
5139    return TemplateArgument(Value, T);
5140  }
5141  case TemplateArgument::Template:
5142    return TemplateArgument(ReadTemplateName(F, Record, Idx));
5143  case TemplateArgument::TemplateExpansion: {
5144    TemplateName Name = ReadTemplateName(F, Record, Idx);
5145    llvm::Optional<unsigned> NumTemplateExpansions;
5146    if (unsigned NumExpansions = Record[Idx++])
5147      NumTemplateExpansions = NumExpansions - 1;
5148    return TemplateArgument(Name, NumTemplateExpansions);
5149  }
5150  case TemplateArgument::Expression:
5151    return TemplateArgument(ReadExpr(F));
5152  case TemplateArgument::Pack: {
5153    unsigned NumArgs = Record[Idx++];
5154    TemplateArgument *Args = new (*Context) TemplateArgument[NumArgs];
5155    for (unsigned I = 0; I != NumArgs; ++I)
5156      Args[I] = ReadTemplateArgument(F, Record, Idx);
5157    return TemplateArgument(Args, NumArgs);
5158  }
5159  }
5160
5161  assert(0 && "Unhandled template argument kind!");
5162  return TemplateArgument();
5163}
5164
5165TemplateParameterList *
5166ASTReader::ReadTemplateParameterList(Module &F,
5167                                     const RecordData &Record, unsigned &Idx) {
5168  SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
5169  SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
5170  SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
5171
5172  unsigned NumParams = Record[Idx++];
5173  SmallVector<NamedDecl *, 16> Params;
5174  Params.reserve(NumParams);
5175  while (NumParams--)
5176    Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
5177
5178  TemplateParameterList* TemplateParams =
5179    TemplateParameterList::Create(*Context, TemplateLoc, LAngleLoc,
5180                                  Params.data(), Params.size(), RAngleLoc);
5181  return TemplateParams;
5182}
5183
5184void
5185ASTReader::
5186ReadTemplateArgumentList(SmallVector<TemplateArgument, 8> &TemplArgs,
5187                         Module &F, const RecordData &Record,
5188                         unsigned &Idx) {
5189  unsigned NumTemplateArgs = Record[Idx++];
5190  TemplArgs.reserve(NumTemplateArgs);
5191  while (NumTemplateArgs--)
5192    TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx));
5193}
5194
5195/// \brief Read a UnresolvedSet structure.
5196void ASTReader::ReadUnresolvedSet(Module &F, UnresolvedSetImpl &Set,
5197                                  const RecordData &Record, unsigned &Idx) {
5198  unsigned NumDecls = Record[Idx++];
5199  while (NumDecls--) {
5200    NamedDecl *D = ReadDeclAs<NamedDecl>(F, Record, Idx);
5201    AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
5202    Set.addDecl(D, AS);
5203  }
5204}
5205
5206CXXBaseSpecifier
5207ASTReader::ReadCXXBaseSpecifier(Module &F,
5208                                const RecordData &Record, unsigned &Idx) {
5209  bool isVirtual = static_cast<bool>(Record[Idx++]);
5210  bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
5211  AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
5212  bool inheritConstructors = static_cast<bool>(Record[Idx++]);
5213  TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
5214  SourceRange Range = ReadSourceRange(F, Record, Idx);
5215  SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
5216  CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
5217                          EllipsisLoc);
5218  Result.setInheritConstructors(inheritConstructors);
5219  return Result;
5220}
5221
5222std::pair<CXXCtorInitializer **, unsigned>
5223ASTReader::ReadCXXCtorInitializers(Module &F, const RecordData &Record,
5224                                   unsigned &Idx) {
5225  CXXCtorInitializer **CtorInitializers = 0;
5226  unsigned NumInitializers = Record[Idx++];
5227  if (NumInitializers) {
5228    ASTContext &C = *getContext();
5229
5230    CtorInitializers
5231        = new (C) CXXCtorInitializer*[NumInitializers];
5232    for (unsigned i=0; i != NumInitializers; ++i) {
5233      TypeSourceInfo *BaseClassInfo = 0;
5234      bool IsBaseVirtual = false;
5235      FieldDecl *Member = 0;
5236      IndirectFieldDecl *IndirectMember = 0;
5237      CXXConstructorDecl *Target = 0;
5238
5239      CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
5240      switch (Type) {
5241       case CTOR_INITIALIZER_BASE:
5242        BaseClassInfo = GetTypeSourceInfo(F, Record, Idx);
5243        IsBaseVirtual = Record[Idx++];
5244        break;
5245
5246       case CTOR_INITIALIZER_DELEGATING:
5247        Target = ReadDeclAs<CXXConstructorDecl>(F, Record, Idx);
5248        break;
5249
5250       case CTOR_INITIALIZER_MEMBER:
5251        Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
5252        break;
5253
5254       case CTOR_INITIALIZER_INDIRECT_MEMBER:
5255        IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
5256        break;
5257      }
5258
5259      SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
5260      Expr *Init = ReadExpr(F);
5261      SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
5262      SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
5263      bool IsWritten = Record[Idx++];
5264      unsigned SourceOrderOrNumArrayIndices;
5265      SmallVector<VarDecl *, 8> Indices;
5266      if (IsWritten) {
5267        SourceOrderOrNumArrayIndices = Record[Idx++];
5268      } else {
5269        SourceOrderOrNumArrayIndices = Record[Idx++];
5270        Indices.reserve(SourceOrderOrNumArrayIndices);
5271        for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
5272          Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx));
5273      }
5274
5275      CXXCtorInitializer *BOMInit;
5276      if (Type == CTOR_INITIALIZER_BASE) {
5277        BOMInit = new (C) CXXCtorInitializer(C, BaseClassInfo, IsBaseVirtual,
5278                                             LParenLoc, Init, RParenLoc,
5279                                             MemberOrEllipsisLoc);
5280      } else if (Type == CTOR_INITIALIZER_DELEGATING) {
5281        BOMInit = new (C) CXXCtorInitializer(C, MemberOrEllipsisLoc, LParenLoc,
5282                                             Target, Init, RParenLoc);
5283      } else if (IsWritten) {
5284        if (Member)
5285          BOMInit = new (C) CXXCtorInitializer(C, Member, MemberOrEllipsisLoc,
5286                                               LParenLoc, Init, RParenLoc);
5287        else
5288          BOMInit = new (C) CXXCtorInitializer(C, IndirectMember,
5289                                               MemberOrEllipsisLoc, LParenLoc,
5290                                               Init, RParenLoc);
5291      } else {
5292        BOMInit = CXXCtorInitializer::Create(C, Member, MemberOrEllipsisLoc,
5293                                             LParenLoc, Init, RParenLoc,
5294                                             Indices.data(), Indices.size());
5295      }
5296
5297      if (IsWritten)
5298        BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
5299      CtorInitializers[i] = BOMInit;
5300    }
5301  }
5302
5303  return std::make_pair(CtorInitializers, NumInitializers);
5304}
5305
5306NestedNameSpecifier *
5307ASTReader::ReadNestedNameSpecifier(Module &F,
5308                                   const RecordData &Record, unsigned &Idx) {
5309  unsigned N = Record[Idx++];
5310  NestedNameSpecifier *NNS = 0, *Prev = 0;
5311  for (unsigned I = 0; I != N; ++I) {
5312    NestedNameSpecifier::SpecifierKind Kind
5313      = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
5314    switch (Kind) {
5315    case NestedNameSpecifier::Identifier: {
5316      IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
5317      NNS = NestedNameSpecifier::Create(*Context, Prev, II);
5318      break;
5319    }
5320
5321    case NestedNameSpecifier::Namespace: {
5322      NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
5323      NNS = NestedNameSpecifier::Create(*Context, Prev, NS);
5324      break;
5325    }
5326
5327    case NestedNameSpecifier::NamespaceAlias: {
5328      NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
5329      NNS = NestedNameSpecifier::Create(*Context, Prev, Alias);
5330      break;
5331    }
5332
5333    case NestedNameSpecifier::TypeSpec:
5334    case NestedNameSpecifier::TypeSpecWithTemplate: {
5335      const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
5336      if (!T)
5337        return 0;
5338
5339      bool Template = Record[Idx++];
5340      NNS = NestedNameSpecifier::Create(*Context, Prev, Template, T);
5341      break;
5342    }
5343
5344    case NestedNameSpecifier::Global: {
5345      NNS = NestedNameSpecifier::GlobalSpecifier(*Context);
5346      // No associated value, and there can't be a prefix.
5347      break;
5348    }
5349    }
5350    Prev = NNS;
5351  }
5352  return NNS;
5353}
5354
5355NestedNameSpecifierLoc
5356ASTReader::ReadNestedNameSpecifierLoc(Module &F, const RecordData &Record,
5357                                      unsigned &Idx) {
5358  unsigned N = Record[Idx++];
5359  NestedNameSpecifierLocBuilder Builder;
5360  for (unsigned I = 0; I != N; ++I) {
5361    NestedNameSpecifier::SpecifierKind Kind
5362      = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
5363    switch (Kind) {
5364    case NestedNameSpecifier::Identifier: {
5365      IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
5366      SourceRange Range = ReadSourceRange(F, Record, Idx);
5367      Builder.Extend(*Context, II, Range.getBegin(), Range.getEnd());
5368      break;
5369    }
5370
5371    case NestedNameSpecifier::Namespace: {
5372      NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
5373      SourceRange Range = ReadSourceRange(F, Record, Idx);
5374      Builder.Extend(*Context, NS, Range.getBegin(), Range.getEnd());
5375      break;
5376    }
5377
5378    case NestedNameSpecifier::NamespaceAlias: {
5379      NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
5380      SourceRange Range = ReadSourceRange(F, Record, Idx);
5381      Builder.Extend(*Context, Alias, Range.getBegin(), Range.getEnd());
5382      break;
5383    }
5384
5385    case NestedNameSpecifier::TypeSpec:
5386    case NestedNameSpecifier::TypeSpecWithTemplate: {
5387      bool Template = Record[Idx++];
5388      TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
5389      if (!T)
5390        return NestedNameSpecifierLoc();
5391      SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
5392
5393      // FIXME: 'template' keyword location not saved anywhere, so we fake it.
5394      Builder.Extend(*Context,
5395                     Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
5396                     T->getTypeLoc(), ColonColonLoc);
5397      break;
5398    }
5399
5400    case NestedNameSpecifier::Global: {
5401      SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
5402      Builder.MakeGlobal(*Context, ColonColonLoc);
5403      break;
5404    }
5405    }
5406  }
5407
5408  return Builder.getWithLocInContext(*Context);
5409}
5410
5411SourceRange
5412ASTReader::ReadSourceRange(Module &F, const RecordData &Record,
5413                           unsigned &Idx) {
5414  SourceLocation beg = ReadSourceLocation(F, Record, Idx);
5415  SourceLocation end = ReadSourceLocation(F, Record, Idx);
5416  return SourceRange(beg, end);
5417}
5418
5419/// \brief Read an integral value
5420llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
5421  unsigned BitWidth = Record[Idx++];
5422  unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
5423  llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
5424  Idx += NumWords;
5425  return Result;
5426}
5427
5428/// \brief Read a signed integral value
5429llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
5430  bool isUnsigned = Record[Idx++];
5431  return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
5432}
5433
5434/// \brief Read a floating-point value
5435llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record, unsigned &Idx) {
5436  return llvm::APFloat(ReadAPInt(Record, Idx));
5437}
5438
5439// \brief Read a string
5440std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
5441  unsigned Len = Record[Idx++];
5442  std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
5443  Idx += Len;
5444  return Result;
5445}
5446
5447VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
5448                                         unsigned &Idx) {
5449  unsigned Major = Record[Idx++];
5450  unsigned Minor = Record[Idx++];
5451  unsigned Subminor = Record[Idx++];
5452  if (Minor == 0)
5453    return VersionTuple(Major);
5454  if (Subminor == 0)
5455    return VersionTuple(Major, Minor - 1);
5456  return VersionTuple(Major, Minor - 1, Subminor - 1);
5457}
5458
5459CXXTemporary *ASTReader::ReadCXXTemporary(Module &F,
5460                                          const RecordData &Record,
5461                                          unsigned &Idx) {
5462  CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
5463  return CXXTemporary::Create(*Context, Decl);
5464}
5465
5466DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
5467  return Diag(SourceLocation(), DiagID);
5468}
5469
5470DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
5471  return Diags.Report(Loc, DiagID);
5472}
5473
5474/// \brief Retrieve the identifier table associated with the
5475/// preprocessor.
5476IdentifierTable &ASTReader::getIdentifierTable() {
5477  assert(PP && "Forgot to set Preprocessor ?");
5478  return PP->getIdentifierTable();
5479}
5480
5481/// \brief Record that the given ID maps to the given switch-case
5482/// statement.
5483void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
5484  assert(SwitchCaseStmts[ID] == 0 && "Already have a SwitchCase with this ID");
5485  SwitchCaseStmts[ID] = SC;
5486}
5487
5488/// \brief Retrieve the switch-case statement with the given ID.
5489SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
5490  assert(SwitchCaseStmts[ID] != 0 && "No SwitchCase with this ID");
5491  return SwitchCaseStmts[ID];
5492}
5493
5494void ASTReader::ClearSwitchCaseIDs() {
5495  SwitchCaseStmts.clear();
5496}
5497
5498void ASTReader::FinishedDeserializing() {
5499  assert(NumCurrentElementsDeserializing &&
5500         "FinishedDeserializing not paired with StartedDeserializing");
5501  if (NumCurrentElementsDeserializing == 1) {
5502    // If any identifiers with corresponding top-level declarations have
5503    // been loaded, load those declarations now.
5504    while (!PendingIdentifierInfos.empty()) {
5505      SetGloballyVisibleDecls(PendingIdentifierInfos.front().II,
5506                              PendingIdentifierInfos.front().DeclIDs, true);
5507      PendingIdentifierInfos.pop_front();
5508    }
5509
5510    // Ready to load previous declarations of Decls that were delayed.
5511    while (!PendingPreviousDecls.empty()) {
5512      loadAndAttachPreviousDecl(PendingPreviousDecls.front().first,
5513                                PendingPreviousDecls.front().second);
5514      PendingPreviousDecls.pop_front();
5515    }
5516
5517    // We are not in recursive loading, so it's safe to pass the "interesting"
5518    // decls to the consumer.
5519    if (Consumer)
5520      PassInterestingDeclsToConsumer();
5521
5522    assert(PendingForwardRefs.size() == 0 &&
5523           "Some forward refs did not get linked to the definition!");
5524  }
5525  --NumCurrentElementsDeserializing;
5526}
5527
5528ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context,
5529                     StringRef isysroot, bool DisableValidation,
5530                     bool DisableStatCache)
5531  : Listener(new PCHValidator(PP, *this)), DeserializationListener(0),
5532    SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
5533    Diags(PP.getDiagnostics()), SemaObj(0), PP(&PP), Context(&Context),
5534    Consumer(0), ModuleMgr(FileMgr.getFileSystemOptions()),
5535    RelocatablePCH(false), isysroot(isysroot),
5536    DisableValidation(DisableValidation),
5537    DisableStatCache(DisableStatCache), NumStatHits(0), NumStatMisses(0),
5538    NumSLocEntriesRead(0), TotalNumSLocEntries(0),
5539    NumStatementsRead(0), TotalNumStatements(0), NumMacrosRead(0),
5540    TotalNumMacros(0), NumSelectorsRead(0), NumMethodPoolEntriesRead(0),
5541    NumMethodPoolMisses(0), TotalNumMethodPoolEntries(0),
5542    NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0),
5543    NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0),
5544    TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0),
5545    NumCXXBaseSpecifiersLoaded(0)
5546{
5547  SourceMgr.setExternalSLocEntrySource(this);
5548}
5549
5550ASTReader::~ASTReader() {
5551  for (DeclContextVisibleUpdatesPending::iterator
5552           I = PendingVisibleUpdates.begin(),
5553           E = PendingVisibleUpdates.end();
5554       I != E; ++I) {
5555    for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
5556                                             F = I->second.end();
5557         J != F; ++J)
5558      delete static_cast<ASTDeclContextNameLookupTable*>(J->first);
5559  }
5560}
5561