ASTReader.cpp revision 297c706f219701b4c9464cccf527f3fe833afc95
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 "ASTCommon.h"
17#include "clang/Frontend/FrontendDiagnostic.h"
18#include "clang/Frontend/Utils.h"
19#include "clang/Sema/Sema.h"
20#include "clang/Sema/Scope.h"
21#include "clang/AST/ASTConsumer.h"
22#include "clang/AST/ASTContext.h"
23#include "clang/AST/DeclTemplate.h"
24#include "clang/AST/Expr.h"
25#include "clang/AST/ExprCXX.h"
26#include "clang/AST/Type.h"
27#include "clang/AST/TypeLocVisitor.h"
28#include "clang/Lex/MacroInfo.h"
29#include "clang/Lex/PreprocessingRecord.h"
30#include "clang/Lex/Preprocessor.h"
31#include "clang/Lex/HeaderSearch.h"
32#include "clang/Basic/OnDiskHashTable.h"
33#include "clang/Basic/SourceManager.h"
34#include "clang/Basic/SourceManagerInternals.h"
35#include "clang/Basic/FileManager.h"
36#include "clang/Basic/TargetInfo.h"
37#include "clang/Basic/Version.h"
38#include "llvm/ADT/StringExtras.h"
39#include "llvm/Bitcode/BitstreamReader.h"
40#include "llvm/Support/MemoryBuffer.h"
41#include "llvm/Support/ErrorHandling.h"
42#include "llvm/System/Path.h"
43#include <algorithm>
44#include <iterator>
45#include <cstdio>
46#include <sys/stat.h>
47using namespace clang;
48using namespace clang::serialization;
49
50//===----------------------------------------------------------------------===//
51// PCH validator implementation
52//===----------------------------------------------------------------------===//
53
54ASTReaderListener::~ASTReaderListener() {}
55
56bool
57PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
58  const LangOptions &PPLangOpts = PP.getLangOptions();
59#define PARSE_LANGOPT_BENIGN(Option)
60#define PARSE_LANGOPT_IMPORTANT(Option, DiagID)                    \
61  if (PPLangOpts.Option != LangOpts.Option) {                      \
62    Reader.Diag(DiagID) << LangOpts.Option << PPLangOpts.Option;   \
63    return true;                                                   \
64  }
65
66  PARSE_LANGOPT_BENIGN(Trigraphs);
67  PARSE_LANGOPT_BENIGN(BCPLComment);
68  PARSE_LANGOPT_BENIGN(DollarIdents);
69  PARSE_LANGOPT_BENIGN(AsmPreprocessor);
70  PARSE_LANGOPT_IMPORTANT(GNUMode, diag::warn_pch_gnu_extensions);
71  PARSE_LANGOPT_IMPORTANT(GNUKeywords, diag::warn_pch_gnu_keywords);
72  PARSE_LANGOPT_BENIGN(ImplicitInt);
73  PARSE_LANGOPT_BENIGN(Digraphs);
74  PARSE_LANGOPT_BENIGN(HexFloats);
75  PARSE_LANGOPT_IMPORTANT(C99, diag::warn_pch_c99);
76  PARSE_LANGOPT_IMPORTANT(Microsoft, diag::warn_pch_microsoft_extensions);
77  PARSE_LANGOPT_IMPORTANT(CPlusPlus, diag::warn_pch_cplusplus);
78  PARSE_LANGOPT_IMPORTANT(CPlusPlus0x, diag::warn_pch_cplusplus0x);
79  PARSE_LANGOPT_BENIGN(CXXOperatorName);
80  PARSE_LANGOPT_IMPORTANT(ObjC1, diag::warn_pch_objective_c);
81  PARSE_LANGOPT_IMPORTANT(ObjC2, diag::warn_pch_objective_c2);
82  PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI, diag::warn_pch_nonfragile_abi);
83  PARSE_LANGOPT_IMPORTANT(ObjCNonFragileABI2, diag::warn_pch_nonfragile_abi2);
84  PARSE_LANGOPT_IMPORTANT(NoConstantCFStrings,
85                          diag::warn_pch_no_constant_cfstrings);
86  PARSE_LANGOPT_BENIGN(PascalStrings);
87  PARSE_LANGOPT_BENIGN(WritableStrings);
88  PARSE_LANGOPT_IMPORTANT(LaxVectorConversions,
89                          diag::warn_pch_lax_vector_conversions);
90  PARSE_LANGOPT_IMPORTANT(AltiVec, diag::warn_pch_altivec);
91  PARSE_LANGOPT_IMPORTANT(Exceptions, diag::warn_pch_exceptions);
92  PARSE_LANGOPT_IMPORTANT(SjLjExceptions, diag::warn_pch_sjlj_exceptions);
93  PARSE_LANGOPT_IMPORTANT(NeXTRuntime, diag::warn_pch_objc_runtime);
94  PARSE_LANGOPT_IMPORTANT(Freestanding, diag::warn_pch_freestanding);
95  PARSE_LANGOPT_IMPORTANT(NoBuiltin, diag::warn_pch_builtins);
96  PARSE_LANGOPT_IMPORTANT(ThreadsafeStatics,
97                          diag::warn_pch_thread_safe_statics);
98  PARSE_LANGOPT_IMPORTANT(POSIXThreads, diag::warn_pch_posix_threads);
99  PARSE_LANGOPT_IMPORTANT(Blocks, diag::warn_pch_blocks);
100  PARSE_LANGOPT_BENIGN(EmitAllDecls);
101  PARSE_LANGOPT_IMPORTANT(MathErrno, diag::warn_pch_math_errno);
102  PARSE_LANGOPT_BENIGN(getSignedOverflowBehavior());
103  PARSE_LANGOPT_IMPORTANT(HeinousExtensions,
104                          diag::warn_pch_heinous_extensions);
105  // FIXME: Most of the options below are benign if the macro wasn't
106  // used. Unfortunately, this means that a PCH compiled without
107  // optimization can't be used with optimization turned on, even
108  // though the only thing that changes is whether __OPTIMIZE__ was
109  // defined... but if __OPTIMIZE__ never showed up in the header, it
110  // doesn't matter. We could consider making this some special kind
111  // of check.
112  PARSE_LANGOPT_IMPORTANT(Optimize, diag::warn_pch_optimize);
113  PARSE_LANGOPT_IMPORTANT(OptimizeSize, diag::warn_pch_optimize_size);
114  PARSE_LANGOPT_IMPORTANT(Static, diag::warn_pch_static);
115  PARSE_LANGOPT_IMPORTANT(PICLevel, diag::warn_pch_pic_level);
116  PARSE_LANGOPT_IMPORTANT(GNUInline, diag::warn_pch_gnu_inline);
117  PARSE_LANGOPT_IMPORTANT(NoInline, diag::warn_pch_no_inline);
118  PARSE_LANGOPT_IMPORTANT(AccessControl, diag::warn_pch_access_control);
119  PARSE_LANGOPT_IMPORTANT(CharIsSigned, diag::warn_pch_char_signed);
120  PARSE_LANGOPT_IMPORTANT(ShortWChar, diag::warn_pch_short_wchar);
121  if ((PPLangOpts.getGCMode() != 0) != (LangOpts.getGCMode() != 0)) {
122    Reader.Diag(diag::warn_pch_gc_mode)
123      << LangOpts.getGCMode() << PPLangOpts.getGCMode();
124    return true;
125  }
126  PARSE_LANGOPT_BENIGN(getVisibilityMode());
127  PARSE_LANGOPT_IMPORTANT(getStackProtectorMode(),
128                          diag::warn_pch_stack_protector);
129  PARSE_LANGOPT_BENIGN(InstantiationDepth);
130  PARSE_LANGOPT_IMPORTANT(OpenCL, diag::warn_pch_opencl);
131  PARSE_LANGOPT_BENIGN(CatchUndefined);
132  PARSE_LANGOPT_IMPORTANT(ElideConstructors, diag::warn_pch_elide_constructors);
133  PARSE_LANGOPT_BENIGN(SpellChecking);
134#undef PARSE_LANGOPT_IMPORTANT
135#undef PARSE_LANGOPT_BENIGN
136
137  return false;
138}
139
140bool PCHValidator::ReadTargetTriple(llvm::StringRef Triple) {
141  if (Triple == PP.getTargetInfo().getTriple().str())
142    return false;
143
144  Reader.Diag(diag::warn_pch_target_triple)
145    << Triple << PP.getTargetInfo().getTriple().str();
146  return true;
147}
148
149struct EmptyStringRef {
150  bool operator ()(llvm::StringRef r) const { return r.empty(); }
151};
152struct EmptyBlock {
153  bool operator ()(const PCHPredefinesBlock &r) const { return r.Data.empty(); }
154};
155
156static bool EqualConcatenations(llvm::SmallVector<llvm::StringRef, 2> L,
157                                PCHPredefinesBlocks R) {
158  // First, sum up the lengths.
159  unsigned LL = 0, RL = 0;
160  for (unsigned I = 0, N = L.size(); I != N; ++I) {
161    LL += L[I].size();
162  }
163  for (unsigned I = 0, N = R.size(); I != N; ++I) {
164    RL += R[I].Data.size();
165  }
166  if (LL != RL)
167    return false;
168  if (LL == 0 && RL == 0)
169    return true;
170
171  // Kick out empty parts, they confuse the algorithm below.
172  L.erase(std::remove_if(L.begin(), L.end(), EmptyStringRef()), L.end());
173  R.erase(std::remove_if(R.begin(), R.end(), EmptyBlock()), R.end());
174
175  // Do it the hard way. At this point, both vectors must be non-empty.
176  llvm::StringRef LR = L[0], RR = R[0].Data;
177  unsigned LI = 0, RI = 0, LN = L.size(), RN = R.size();
178  (void) RN;
179  for (;;) {
180    // Compare the current pieces.
181    if (LR.size() == RR.size()) {
182      // If they're the same length, it's pretty easy.
183      if (LR != RR)
184        return false;
185      // Both pieces are done, advance.
186      ++LI;
187      ++RI;
188      // If either string is done, they're both done, since they're the same
189      // length.
190      if (LI == LN) {
191        assert(RI == RN && "Strings not the same length after all?");
192        return true;
193      }
194      LR = L[LI];
195      RR = R[RI].Data;
196    } else if (LR.size() < RR.size()) {
197      // Right piece is longer.
198      if (!RR.startswith(LR))
199        return false;
200      ++LI;
201      assert(LI != LN && "Strings not the same length after all?");
202      RR = RR.substr(LR.size());
203      LR = L[LI];
204    } else {
205      // Left piece is longer.
206      if (!LR.startswith(RR))
207        return false;
208      ++RI;
209      assert(RI != RN && "Strings not the same length after all?");
210      LR = LR.substr(RR.size());
211      RR = R[RI].Data;
212    }
213  }
214}
215
216static std::pair<FileID, llvm::StringRef::size_type>
217FindMacro(const PCHPredefinesBlocks &Buffers, llvm::StringRef MacroDef) {
218  std::pair<FileID, llvm::StringRef::size_type> Res;
219  for (unsigned I = 0, N = Buffers.size(); I != N; ++I) {
220    Res.second = Buffers[I].Data.find(MacroDef);
221    if (Res.second != llvm::StringRef::npos) {
222      Res.first = Buffers[I].BufferID;
223      break;
224    }
225  }
226  return Res;
227}
228
229bool PCHValidator::ReadPredefinesBuffer(const PCHPredefinesBlocks &Buffers,
230                                        llvm::StringRef OriginalFileName,
231                                        std::string &SuggestedPredefines) {
232  // We are in the context of an implicit include, so the predefines buffer will
233  // have a #include entry for the PCH file itself (as normalized by the
234  // preprocessor initialization). Find it and skip over it in the checking
235  // below.
236  llvm::SmallString<256> PCHInclude;
237  PCHInclude += "#include \"";
238  PCHInclude += NormalizeDashIncludePath(OriginalFileName);
239  PCHInclude += "\"\n";
240  std::pair<llvm::StringRef,llvm::StringRef> Split =
241    llvm::StringRef(PP.getPredefines()).split(PCHInclude.str());
242  llvm::StringRef Left =  Split.first, Right = Split.second;
243  if (Left == PP.getPredefines()) {
244    Error("Missing PCH include entry!");
245    return true;
246  }
247
248  // If the concatenation of all the PCH buffers is equal to the adjusted
249  // command line, we're done.
250  llvm::SmallVector<llvm::StringRef, 2> CommandLine;
251  CommandLine.push_back(Left);
252  CommandLine.push_back(Right);
253  if (EqualConcatenations(CommandLine, Buffers))
254    return false;
255
256  SourceManager &SourceMgr = PP.getSourceManager();
257
258  // The predefines buffers are different. Determine what the differences are,
259  // and whether they require us to reject the PCH file.
260  llvm::SmallVector<llvm::StringRef, 8> PCHLines;
261  for (unsigned I = 0, N = Buffers.size(); I != N; ++I)
262    Buffers[I].Data.split(PCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
263
264  llvm::SmallVector<llvm::StringRef, 8> CmdLineLines;
265  Left.split(CmdLineLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
266
267  // Pick out implicit #includes after the PCH and don't consider them for
268  // validation; we will insert them into SuggestedPredefines so that the
269  // preprocessor includes them.
270  std::string IncludesAfterPCH;
271  llvm::SmallVector<llvm::StringRef, 8> AfterPCHLines;
272  Right.split(AfterPCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
273  for (unsigned i = 0, e = AfterPCHLines.size(); i != e; ++i) {
274    if (AfterPCHLines[i].startswith("#include ")) {
275      IncludesAfterPCH += AfterPCHLines[i];
276      IncludesAfterPCH += '\n';
277    } else {
278      CmdLineLines.push_back(AfterPCHLines[i]);
279    }
280  }
281
282  // Make sure we add the includes last into SuggestedPredefines before we
283  // exit this function.
284  struct AddIncludesRAII {
285    std::string &SuggestedPredefines;
286    std::string &IncludesAfterPCH;
287
288    AddIncludesRAII(std::string &SuggestedPredefines,
289                    std::string &IncludesAfterPCH)
290      : SuggestedPredefines(SuggestedPredefines),
291        IncludesAfterPCH(IncludesAfterPCH) { }
292    ~AddIncludesRAII() {
293      SuggestedPredefines += IncludesAfterPCH;
294    }
295  } AddIncludes(SuggestedPredefines, IncludesAfterPCH);
296
297  // Sort both sets of predefined buffer lines, since we allow some extra
298  // definitions and they may appear at any point in the output.
299  std::sort(CmdLineLines.begin(), CmdLineLines.end());
300  std::sort(PCHLines.begin(), PCHLines.end());
301
302  // Determine which predefines that were used to build the PCH file are missing
303  // from the command line.
304  std::vector<llvm::StringRef> MissingPredefines;
305  std::set_difference(PCHLines.begin(), PCHLines.end(),
306                      CmdLineLines.begin(), CmdLineLines.end(),
307                      std::back_inserter(MissingPredefines));
308
309  bool MissingDefines = false;
310  bool ConflictingDefines = false;
311  for (unsigned I = 0, N = MissingPredefines.size(); I != N; ++I) {
312    llvm::StringRef Missing = MissingPredefines[I];
313    if (Missing.startswith("#include ")) {
314      // An -include was specified when generating the PCH; it is included in
315      // the PCH, just ignore it.
316      continue;
317    }
318    if (!Missing.startswith("#define ")) {
319      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
320      return true;
321    }
322
323    // This is a macro definition. Determine the name of the macro we're
324    // defining.
325    std::string::size_type StartOfMacroName = strlen("#define ");
326    std::string::size_type EndOfMacroName
327      = Missing.find_first_of("( \n\r", StartOfMacroName);
328    assert(EndOfMacroName != std::string::npos &&
329           "Couldn't find the end of the macro name");
330    llvm::StringRef MacroName = Missing.slice(StartOfMacroName, EndOfMacroName);
331
332    // Determine whether this macro was given a different definition on the
333    // command line.
334    std::string MacroDefStart = "#define " + MacroName.str();
335    std::string::size_type MacroDefLen = MacroDefStart.size();
336    llvm::SmallVector<llvm::StringRef, 8>::iterator ConflictPos
337      = std::lower_bound(CmdLineLines.begin(), CmdLineLines.end(),
338                         MacroDefStart);
339    for (; ConflictPos != CmdLineLines.end(); ++ConflictPos) {
340      if (!ConflictPos->startswith(MacroDefStart)) {
341        // Different macro; we're done.
342        ConflictPos = CmdLineLines.end();
343        break;
344      }
345
346      assert(ConflictPos->size() > MacroDefLen &&
347             "Invalid #define in predefines buffer?");
348      if ((*ConflictPos)[MacroDefLen] != ' ' &&
349          (*ConflictPos)[MacroDefLen] != '(')
350        continue; // Longer macro name; keep trying.
351
352      // We found a conflicting macro definition.
353      break;
354    }
355
356    if (ConflictPos != CmdLineLines.end()) {
357      Reader.Diag(diag::warn_cmdline_conflicting_macro_def)
358          << MacroName;
359
360      // Show the definition of this macro within the PCH file.
361      std::pair<FileID, llvm::StringRef::size_type> MacroLoc =
362          FindMacro(Buffers, Missing);
363      assert(MacroLoc.second!=llvm::StringRef::npos && "Unable to find macro!");
364      SourceLocation PCHMissingLoc =
365          SourceMgr.getLocForStartOfFile(MacroLoc.first)
366            .getFileLocWithOffset(MacroLoc.second);
367      Reader.Diag(PCHMissingLoc, diag::note_pch_macro_defined_as) << MacroName;
368
369      ConflictingDefines = true;
370      continue;
371    }
372
373    // If the macro doesn't conflict, then we'll just pick up the macro
374    // definition from the PCH file. Warn the user that they made a mistake.
375    if (ConflictingDefines)
376      continue; // Don't complain if there are already conflicting defs
377
378    if (!MissingDefines) {
379      Reader.Diag(diag::warn_cmdline_missing_macro_defs);
380      MissingDefines = true;
381    }
382
383    // Show the definition of this macro within the PCH file.
384    std::pair<FileID, llvm::StringRef::size_type> MacroLoc =
385        FindMacro(Buffers, Missing);
386    assert(MacroLoc.second!=llvm::StringRef::npos && "Unable to find macro!");
387    SourceLocation PCHMissingLoc =
388        SourceMgr.getLocForStartOfFile(MacroLoc.first)
389          .getFileLocWithOffset(MacroLoc.second);
390    Reader.Diag(PCHMissingLoc, diag::note_using_macro_def_from_pch);
391  }
392
393  if (ConflictingDefines)
394    return true;
395
396  // Determine what predefines were introduced based on command-line
397  // parameters that were not present when building the PCH
398  // file. Extra #defines are okay, so long as the identifiers being
399  // defined were not used within the precompiled header.
400  std::vector<llvm::StringRef> ExtraPredefines;
401  std::set_difference(CmdLineLines.begin(), CmdLineLines.end(),
402                      PCHLines.begin(), PCHLines.end(),
403                      std::back_inserter(ExtraPredefines));
404  for (unsigned I = 0, N = ExtraPredefines.size(); I != N; ++I) {
405    llvm::StringRef &Extra = ExtraPredefines[I];
406    if (!Extra.startswith("#define ")) {
407      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
408      return true;
409    }
410
411    // This is an extra macro definition. Determine the name of the
412    // macro we're defining.
413    std::string::size_type StartOfMacroName = strlen("#define ");
414    std::string::size_type EndOfMacroName
415      = Extra.find_first_of("( \n\r", StartOfMacroName);
416    assert(EndOfMacroName != std::string::npos &&
417           "Couldn't find the end of the macro name");
418    llvm::StringRef MacroName = Extra.slice(StartOfMacroName, EndOfMacroName);
419
420    // Check whether this name was used somewhere in the PCH file. If
421    // so, defining it as a macro could change behavior, so we reject
422    // the PCH file.
423    if (IdentifierInfo *II = Reader.get(MacroName)) {
424      Reader.Diag(diag::warn_macro_name_used_in_pch) << II;
425      return true;
426    }
427
428    // Add this definition to the suggested predefines buffer.
429    SuggestedPredefines += Extra;
430    SuggestedPredefines += '\n';
431  }
432
433  // If we get here, it's because the predefines buffer had compatible
434  // contents. Accept the PCH file.
435  return false;
436}
437
438void PCHValidator::ReadHeaderFileInfo(const HeaderFileInfo &HFI,
439                                      unsigned ID) {
440  PP.getHeaderSearchInfo().setHeaderFileInfoForUID(HFI, ID);
441  ++NumHeaderInfos;
442}
443
444void PCHValidator::ReadCounter(unsigned Value) {
445  PP.setCounterValue(Value);
446}
447
448//===----------------------------------------------------------------------===//
449// AST reader implementation
450//===----------------------------------------------------------------------===//
451
452void
453ASTReader::setDeserializationListener(ASTDeserializationListener *Listener) {
454  DeserializationListener = Listener;
455  if (DeserializationListener)
456    DeserializationListener->SetReader(this);
457}
458
459
460namespace {
461class ASTSelectorLookupTrait {
462  ASTReader &Reader;
463
464public:
465  struct data_type {
466    SelectorID ID;
467    ObjCMethodList Instance, Factory;
468  };
469
470  typedef Selector external_key_type;
471  typedef external_key_type internal_key_type;
472
473  explicit ASTSelectorLookupTrait(ASTReader &Reader) : Reader(Reader) { }
474
475  static bool EqualKey(const internal_key_type& a,
476                       const internal_key_type& b) {
477    return a == b;
478  }
479
480  static unsigned ComputeHash(Selector Sel) {
481    return serialization::ComputeHash(Sel);
482  }
483
484  // This hopefully will just get inlined and removed by the optimizer.
485  static const internal_key_type&
486  GetInternalKey(const external_key_type& x) { return x; }
487
488  static std::pair<unsigned, unsigned>
489  ReadKeyDataLength(const unsigned char*& d) {
490    using namespace clang::io;
491    unsigned KeyLen = ReadUnalignedLE16(d);
492    unsigned DataLen = ReadUnalignedLE16(d);
493    return std::make_pair(KeyLen, DataLen);
494  }
495
496  internal_key_type ReadKey(const unsigned char* d, unsigned) {
497    using namespace clang::io;
498    SelectorTable &SelTable = Reader.getContext()->Selectors;
499    unsigned N = ReadUnalignedLE16(d);
500    IdentifierInfo *FirstII
501      = Reader.DecodeIdentifierInfo(ReadUnalignedLE32(d));
502    if (N == 0)
503      return SelTable.getNullarySelector(FirstII);
504    else if (N == 1)
505      return SelTable.getUnarySelector(FirstII);
506
507    llvm::SmallVector<IdentifierInfo *, 16> Args;
508    Args.push_back(FirstII);
509    for (unsigned I = 1; I != N; ++I)
510      Args.push_back(Reader.DecodeIdentifierInfo(ReadUnalignedLE32(d)));
511
512    return SelTable.getSelector(N, Args.data());
513  }
514
515  data_type ReadData(Selector, const unsigned char* d, unsigned DataLen) {
516    using namespace clang::io;
517
518    data_type Result;
519
520    Result.ID = ReadUnalignedLE32(d);
521    unsigned NumInstanceMethods = ReadUnalignedLE16(d);
522    unsigned NumFactoryMethods = ReadUnalignedLE16(d);
523
524    // Load instance methods
525    ObjCMethodList *Prev = 0;
526    for (unsigned I = 0; I != NumInstanceMethods; ++I) {
527      ObjCMethodDecl *Method
528        = cast<ObjCMethodDecl>(Reader.GetDecl(ReadUnalignedLE32(d)));
529      if (!Result.Instance.Method) {
530        // This is the first method, which is the easy case.
531        Result.Instance.Method = Method;
532        Prev = &Result.Instance;
533        continue;
534      }
535
536      ObjCMethodList *Mem =
537        Reader.getSema()->BumpAlloc.Allocate<ObjCMethodList>();
538      Prev->Next = new (Mem) ObjCMethodList(Method, 0);
539      Prev = Prev->Next;
540    }
541
542    // Load factory methods
543    Prev = 0;
544    for (unsigned I = 0; I != NumFactoryMethods; ++I) {
545      ObjCMethodDecl *Method
546        = cast<ObjCMethodDecl>(Reader.GetDecl(ReadUnalignedLE32(d)));
547      if (!Result.Factory.Method) {
548        // This is the first method, which is the easy case.
549        Result.Factory.Method = Method;
550        Prev = &Result.Factory;
551        continue;
552      }
553
554      ObjCMethodList *Mem =
555        Reader.getSema()->BumpAlloc.Allocate<ObjCMethodList>();
556      Prev->Next = new (Mem) ObjCMethodList(Method, 0);
557      Prev = Prev->Next;
558    }
559
560    return Result;
561  }
562};
563
564} // end anonymous namespace
565
566/// \brief The on-disk hash table used for the global method pool.
567typedef OnDiskChainedHashTable<ASTSelectorLookupTrait>
568  ASTSelectorLookupTable;
569
570namespace {
571class ASTIdentifierLookupTrait {
572  ASTReader &Reader;
573  llvm::BitstreamCursor &Stream;
574
575  // If we know the IdentifierInfo in advance, it is here and we will
576  // not build a new one. Used when deserializing information about an
577  // identifier that was constructed before the AST file was read.
578  IdentifierInfo *KnownII;
579
580public:
581  typedef IdentifierInfo * data_type;
582
583  typedef const std::pair<const char*, unsigned> external_key_type;
584
585  typedef external_key_type internal_key_type;
586
587  ASTIdentifierLookupTrait(ASTReader &Reader, llvm::BitstreamCursor &Stream,
588                           IdentifierInfo *II = 0)
589    : Reader(Reader), Stream(Stream), KnownII(II) { }
590
591  static bool EqualKey(const internal_key_type& a,
592                       const internal_key_type& b) {
593    return (a.second == b.second) ? memcmp(a.first, b.first, a.second) == 0
594                                  : false;
595  }
596
597  static unsigned ComputeHash(const internal_key_type& a) {
598    return llvm::HashString(llvm::StringRef(a.first, a.second));
599  }
600
601  // This hopefully will just get inlined and removed by the optimizer.
602  static const internal_key_type&
603  GetInternalKey(const external_key_type& x) { return x; }
604
605  static std::pair<unsigned, unsigned>
606  ReadKeyDataLength(const unsigned char*& d) {
607    using namespace clang::io;
608    unsigned DataLen = ReadUnalignedLE16(d);
609    unsigned KeyLen = ReadUnalignedLE16(d);
610    return std::make_pair(KeyLen, DataLen);
611  }
612
613  static std::pair<const char*, unsigned>
614  ReadKey(const unsigned char* d, unsigned n) {
615    assert(n >= 2 && d[n-1] == '\0');
616    return std::make_pair((const char*) d, n-1);
617  }
618
619  IdentifierInfo *ReadData(const internal_key_type& k,
620                           const unsigned char* d,
621                           unsigned DataLen) {
622    using namespace clang::io;
623    IdentID ID = ReadUnalignedLE32(d);
624    bool IsInteresting = ID & 0x01;
625
626    // Wipe out the "is interesting" bit.
627    ID = ID >> 1;
628
629    if (!IsInteresting) {
630      // For uninteresting identifiers, just build the IdentifierInfo
631      // and associate it with the persistent ID.
632      IdentifierInfo *II = KnownII;
633      if (!II)
634        II = &Reader.getIdentifierTable().getOwn(k.first, k.first + k.second);
635      Reader.SetIdentifierInfo(ID, II);
636      II->setIsFromAST();
637      return II;
638    }
639
640    unsigned Bits = ReadUnalignedLE16(d);
641    bool CPlusPlusOperatorKeyword = Bits & 0x01;
642    Bits >>= 1;
643    bool HasRevertedTokenIDToIdentifier = Bits & 0x01;
644    Bits >>= 1;
645    bool Poisoned = Bits & 0x01;
646    Bits >>= 1;
647    bool ExtensionToken = Bits & 0x01;
648    Bits >>= 1;
649    bool hasMacroDefinition = Bits & 0x01;
650    Bits >>= 1;
651    unsigned ObjCOrBuiltinID = Bits & 0x3FF;
652    Bits >>= 10;
653
654    assert(Bits == 0 && "Extra bits in the identifier?");
655    DataLen -= 6;
656
657    // Build the IdentifierInfo itself and link the identifier ID with
658    // the new IdentifierInfo.
659    IdentifierInfo *II = KnownII;
660    if (!II)
661      II = &Reader.getIdentifierTable().getOwn(k.first, k.first + k.second);
662    Reader.SetIdentifierInfo(ID, II);
663
664    // Set or check the various bits in the IdentifierInfo structure.
665    // Token IDs are read-only.
666    if (HasRevertedTokenIDToIdentifier)
667      II->RevertTokenIDToIdentifier();
668    II->setObjCOrBuiltinID(ObjCOrBuiltinID);
669    assert(II->isExtensionToken() == ExtensionToken &&
670           "Incorrect extension token flag");
671    (void)ExtensionToken;
672    II->setIsPoisoned(Poisoned);
673    assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
674           "Incorrect C++ operator keyword flag");
675    (void)CPlusPlusOperatorKeyword;
676
677    // If this identifier is a macro, deserialize the macro
678    // definition.
679    if (hasMacroDefinition) {
680      uint32_t Offset = ReadUnalignedLE32(d);
681      Reader.ReadMacroRecord(Stream, Offset);
682      DataLen -= 4;
683    }
684
685    // Read all of the declarations visible at global scope with this
686    // name.
687    if (Reader.getContext() == 0) return II;
688    if (DataLen > 0) {
689      llvm::SmallVector<uint32_t, 4> DeclIDs;
690      for (; DataLen > 0; DataLen -= 4)
691        DeclIDs.push_back(ReadUnalignedLE32(d));
692      Reader.SetGloballyVisibleDecls(II, DeclIDs);
693    }
694
695    II->setIsFromAST();
696    return II;
697  }
698};
699
700} // end anonymous namespace
701
702/// \brief The on-disk hash table used to contain information about
703/// all of the identifiers in the program.
704typedef OnDiskChainedHashTable<ASTIdentifierLookupTrait>
705  ASTIdentifierLookupTable;
706
707namespace {
708class ASTDeclContextNameLookupTrait {
709  ASTReader &Reader;
710
711public:
712  /// \brief Pair of begin/end iterators for DeclIDs.
713  typedef std::pair<DeclID *, DeclID *> data_type;
714
715  /// \brief Special internal key for declaration names.
716  /// The hash table creates keys for comparison; we do not create
717  /// a DeclarationName for the internal key to avoid deserializing types.
718  struct DeclNameKey {
719    DeclarationName::NameKind Kind;
720    uint64_t Data;
721    DeclNameKey() : Kind((DeclarationName::NameKind)0), Data(0) { }
722  };
723
724  typedef DeclarationName external_key_type;
725  typedef DeclNameKey internal_key_type;
726
727  explicit ASTDeclContextNameLookupTrait(ASTReader &Reader) : Reader(Reader) { }
728
729  static bool EqualKey(const internal_key_type& a,
730                       const internal_key_type& b) {
731    return a.Kind == b.Kind && a.Data == b.Data;
732  }
733
734  unsigned ComputeHash(const DeclNameKey &Key) const {
735    llvm::FoldingSetNodeID ID;
736    ID.AddInteger(Key.Kind);
737
738    switch (Key.Kind) {
739    case DeclarationName::Identifier:
740    case DeclarationName::CXXLiteralOperatorName:
741      ID.AddString(((IdentifierInfo*)Key.Data)->getName());
742      break;
743    case DeclarationName::ObjCZeroArgSelector:
744    case DeclarationName::ObjCOneArgSelector:
745    case DeclarationName::ObjCMultiArgSelector:
746      ID.AddInteger(serialization::ComputeHash(Selector(Key.Data)));
747      break;
748    case DeclarationName::CXXConstructorName:
749    case DeclarationName::CXXDestructorName:
750    case DeclarationName::CXXConversionFunctionName:
751      ID.AddInteger((TypeID)Key.Data);
752      break;
753    case DeclarationName::CXXOperatorName:
754      ID.AddInteger((OverloadedOperatorKind)Key.Data);
755      break;
756    case DeclarationName::CXXUsingDirective:
757      break;
758    }
759
760    return ID.ComputeHash();
761  }
762
763  internal_key_type GetInternalKey(const external_key_type& Name) const {
764    DeclNameKey Key;
765    Key.Kind = Name.getNameKind();
766    switch (Name.getNameKind()) {
767    case DeclarationName::Identifier:
768      Key.Data = (uint64_t)Name.getAsIdentifierInfo();
769      break;
770    case DeclarationName::ObjCZeroArgSelector:
771    case DeclarationName::ObjCOneArgSelector:
772    case DeclarationName::ObjCMultiArgSelector:
773      Key.Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
774      break;
775    case DeclarationName::CXXConstructorName:
776    case DeclarationName::CXXDestructorName:
777    case DeclarationName::CXXConversionFunctionName:
778      Key.Data = Reader.GetTypeID(Name.getCXXNameType());
779      break;
780    case DeclarationName::CXXOperatorName:
781      Key.Data = Name.getCXXOverloadedOperator();
782      break;
783    case DeclarationName::CXXLiteralOperatorName:
784      Key.Data = (uint64_t)Name.getCXXLiteralIdentifier();
785      break;
786    case DeclarationName::CXXUsingDirective:
787      break;
788    }
789
790    return Key;
791  }
792
793  external_key_type GetExternalKey(const internal_key_type& Key) const {
794    ASTContext *Context = Reader.getContext();
795    switch (Key.Kind) {
796    case DeclarationName::Identifier:
797      return DeclarationName((IdentifierInfo*)Key.Data);
798
799    case DeclarationName::ObjCZeroArgSelector:
800    case DeclarationName::ObjCOneArgSelector:
801    case DeclarationName::ObjCMultiArgSelector:
802      return DeclarationName(Selector(Key.Data));
803
804    case DeclarationName::CXXConstructorName:
805      return Context->DeclarationNames.getCXXConstructorName(
806                           Context->getCanonicalType(Reader.GetType(Key.Data)));
807
808    case DeclarationName::CXXDestructorName:
809      return Context->DeclarationNames.getCXXDestructorName(
810                           Context->getCanonicalType(Reader.GetType(Key.Data)));
811
812    case DeclarationName::CXXConversionFunctionName:
813      return Context->DeclarationNames.getCXXConversionFunctionName(
814                           Context->getCanonicalType(Reader.GetType(Key.Data)));
815
816    case DeclarationName::CXXOperatorName:
817      return Context->DeclarationNames.getCXXOperatorName(
818                                         (OverloadedOperatorKind)Key.Data);
819
820    case DeclarationName::CXXLiteralOperatorName:
821      return Context->DeclarationNames.getCXXLiteralOperatorName(
822                                                     (IdentifierInfo*)Key.Data);
823
824    case DeclarationName::CXXUsingDirective:
825      return DeclarationName::getUsingDirectiveName();
826    }
827
828    llvm_unreachable("Invalid Name Kind ?");
829  }
830
831  static std::pair<unsigned, unsigned>
832  ReadKeyDataLength(const unsigned char*& d) {
833    using namespace clang::io;
834    unsigned KeyLen = ReadUnalignedLE16(d);
835    unsigned DataLen = ReadUnalignedLE16(d);
836    return std::make_pair(KeyLen, DataLen);
837  }
838
839  internal_key_type ReadKey(const unsigned char* d, unsigned) {
840    using namespace clang::io;
841
842    DeclNameKey Key;
843    Key.Kind = (DeclarationName::NameKind)*d++;
844    switch (Key.Kind) {
845    case DeclarationName::Identifier:
846      Key.Data = (uint64_t)Reader.DecodeIdentifierInfo(ReadUnalignedLE32(d));
847      break;
848    case DeclarationName::ObjCZeroArgSelector:
849    case DeclarationName::ObjCOneArgSelector:
850    case DeclarationName::ObjCMultiArgSelector:
851      Key.Data =
852         (uint64_t)Reader.DecodeSelector(ReadUnalignedLE32(d)).getAsOpaquePtr();
853      break;
854    case DeclarationName::CXXConstructorName:
855    case DeclarationName::CXXDestructorName:
856    case DeclarationName::CXXConversionFunctionName:
857      Key.Data = ReadUnalignedLE32(d); // TypeID
858      break;
859    case DeclarationName::CXXOperatorName:
860      Key.Data = *d++; // OverloadedOperatorKind
861      break;
862    case DeclarationName::CXXLiteralOperatorName:
863      Key.Data = (uint64_t)Reader.DecodeIdentifierInfo(ReadUnalignedLE32(d));
864      break;
865    case DeclarationName::CXXUsingDirective:
866      break;
867    }
868
869    return Key;
870  }
871
872  data_type ReadData(internal_key_type, const unsigned char* d,
873                     unsigned DataLen) {
874    using namespace clang::io;
875    unsigned NumDecls = ReadUnalignedLE16(d);
876    DeclID *Start = (DeclID *)d;
877    return std::make_pair(Start, Start + NumDecls);
878  }
879};
880
881} // end anonymous namespace
882
883/// \brief The on-disk hash table used for the DeclContext's Name lookup table.
884typedef OnDiskChainedHashTable<ASTDeclContextNameLookupTrait>
885  ASTDeclContextNameLookupTable;
886
887bool ASTReader::ReadDeclContextStorage(llvm::BitstreamCursor &Cursor,
888                                   const std::pair<uint64_t, uint64_t> &Offsets,
889                                       DeclContextInfo &Info) {
890  SavedStreamPosition SavedPosition(Cursor);
891  // First the lexical decls.
892  if (Offsets.first != 0) {
893    Cursor.JumpToBit(Offsets.first);
894
895    RecordData Record;
896    const char *Blob;
897    unsigned BlobLen;
898    unsigned Code = Cursor.ReadCode();
899    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
900    if (RecCode != DECL_CONTEXT_LEXICAL) {
901      Error("Expected lexical block");
902      return true;
903    }
904
905    Info.LexicalDecls = reinterpret_cast<const DeclID*>(Blob);
906    Info.NumLexicalDecls = BlobLen / sizeof(DeclID);
907  } else {
908    Info.LexicalDecls = 0;
909    Info.NumLexicalDecls = 0;
910  }
911
912  // Now the lookup table.
913  if (Offsets.second != 0) {
914    Cursor.JumpToBit(Offsets.second);
915
916    RecordData Record;
917    const char *Blob;
918    unsigned BlobLen;
919    unsigned Code = Cursor.ReadCode();
920    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
921    if (RecCode != DECL_CONTEXT_VISIBLE) {
922      Error("Expected visible lookup table block");
923      return true;
924    }
925    Info.NameLookupTableData
926      = ASTDeclContextNameLookupTable::Create(
927                    (const unsigned char *)Blob + Record[0],
928                    (const unsigned char *)Blob,
929                    ASTDeclContextNameLookupTrait(*this));
930  } else {
931    Info.NameLookupTableData = 0;
932  }
933
934  return false;
935}
936
937void ASTReader::Error(const char *Msg) {
938  Diag(diag::err_fe_pch_malformed) << Msg;
939}
940
941/// \brief Tell the AST listener about the predefines buffers in the chain.
942bool ASTReader::CheckPredefinesBuffers() {
943  if (Listener)
944    return Listener->ReadPredefinesBuffer(PCHPredefinesBuffers,
945                                          ActualOriginalFileName,
946                                          SuggestedPredefines);
947  return false;
948}
949
950//===----------------------------------------------------------------------===//
951// Source Manager Deserialization
952//===----------------------------------------------------------------------===//
953
954/// \brief Read the line table in the source manager block.
955/// \returns true if ther was an error.
956bool ASTReader::ParseLineTable(llvm::SmallVectorImpl<uint64_t> &Record) {
957  unsigned Idx = 0;
958  LineTableInfo &LineTable = SourceMgr.getLineTable();
959
960  // Parse the file names
961  std::map<int, int> FileIDs;
962  for (int I = 0, N = Record[Idx++]; I != N; ++I) {
963    // Extract the file name
964    unsigned FilenameLen = Record[Idx++];
965    std::string Filename(&Record[Idx], &Record[Idx] + FilenameLen);
966    Idx += FilenameLen;
967    MaybeAddSystemRootToFilename(Filename);
968    FileIDs[I] = LineTable.getLineTableFilenameID(Filename.c_str(),
969                                                  Filename.size());
970  }
971
972  // Parse the line entries
973  std::vector<LineEntry> Entries;
974  while (Idx < Record.size()) {
975    int FID = Record[Idx++];
976
977    // Extract the line entries
978    unsigned NumEntries = Record[Idx++];
979    assert(NumEntries && "Numentries is 00000");
980    Entries.clear();
981    Entries.reserve(NumEntries);
982    for (unsigned I = 0; I != NumEntries; ++I) {
983      unsigned FileOffset = Record[Idx++];
984      unsigned LineNo = Record[Idx++];
985      int FilenameID = FileIDs[Record[Idx++]];
986      SrcMgr::CharacteristicKind FileKind
987        = (SrcMgr::CharacteristicKind)Record[Idx++];
988      unsigned IncludeOffset = Record[Idx++];
989      Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
990                                       FileKind, IncludeOffset));
991    }
992    LineTable.AddEntry(FID, Entries);
993  }
994
995  return false;
996}
997
998namespace {
999
1000class ASTStatData {
1001public:
1002  const bool hasStat;
1003  const ino_t ino;
1004  const dev_t dev;
1005  const mode_t mode;
1006  const time_t mtime;
1007  const off_t size;
1008
1009  ASTStatData(ino_t i, dev_t d, mode_t mo, time_t m, off_t s)
1010  : hasStat(true), ino(i), dev(d), mode(mo), mtime(m), size(s) {}
1011
1012  ASTStatData()
1013    : hasStat(false), ino(0), dev(0), mode(0), mtime(0), size(0) {}
1014};
1015
1016class ASTStatLookupTrait {
1017 public:
1018  typedef const char *external_key_type;
1019  typedef const char *internal_key_type;
1020
1021  typedef ASTStatData data_type;
1022
1023  static unsigned ComputeHash(const char *path) {
1024    return llvm::HashString(path);
1025  }
1026
1027  static internal_key_type GetInternalKey(const char *path) { return path; }
1028
1029  static bool EqualKey(internal_key_type a, internal_key_type b) {
1030    return strcmp(a, b) == 0;
1031  }
1032
1033  static std::pair<unsigned, unsigned>
1034  ReadKeyDataLength(const unsigned char*& d) {
1035    unsigned KeyLen = (unsigned) clang::io::ReadUnalignedLE16(d);
1036    unsigned DataLen = (unsigned) *d++;
1037    return std::make_pair(KeyLen + 1, DataLen);
1038  }
1039
1040  static internal_key_type ReadKey(const unsigned char *d, unsigned) {
1041    return (const char *)d;
1042  }
1043
1044  static data_type ReadData(const internal_key_type, const unsigned char *d,
1045                            unsigned /*DataLen*/) {
1046    using namespace clang::io;
1047
1048    if (*d++ == 1)
1049      return data_type();
1050
1051    ino_t ino = (ino_t) ReadUnalignedLE32(d);
1052    dev_t dev = (dev_t) ReadUnalignedLE32(d);
1053    mode_t mode = (mode_t) ReadUnalignedLE16(d);
1054    time_t mtime = (time_t) ReadUnalignedLE64(d);
1055    off_t size = (off_t) ReadUnalignedLE64(d);
1056    return data_type(ino, dev, mode, mtime, size);
1057  }
1058};
1059
1060/// \brief stat() cache for precompiled headers.
1061///
1062/// This cache is very similar to the stat cache used by pretokenized
1063/// headers.
1064class ASTStatCache : public StatSysCallCache {
1065  typedef OnDiskChainedHashTable<ASTStatLookupTrait> CacheTy;
1066  CacheTy *Cache;
1067
1068  unsigned &NumStatHits, &NumStatMisses;
1069public:
1070  ASTStatCache(const unsigned char *Buckets,
1071               const unsigned char *Base,
1072               unsigned &NumStatHits,
1073               unsigned &NumStatMisses)
1074    : Cache(0), NumStatHits(NumStatHits), NumStatMisses(NumStatMisses) {
1075    Cache = CacheTy::Create(Buckets, Base);
1076  }
1077
1078  ~ASTStatCache() { delete Cache; }
1079
1080  int stat(const char *path, struct stat *buf) {
1081    // Do the lookup for the file's data in the AST file.
1082    CacheTy::iterator I = Cache->find(path);
1083
1084    // If we don't get a hit in the AST file just forward to 'stat'.
1085    if (I == Cache->end()) {
1086      ++NumStatMisses;
1087      return StatSysCallCache::stat(path, buf);
1088    }
1089
1090    ++NumStatHits;
1091    ASTStatData Data = *I;
1092
1093    if (!Data.hasStat)
1094      return 1;
1095
1096    buf->st_ino = Data.ino;
1097    buf->st_dev = Data.dev;
1098    buf->st_mtime = Data.mtime;
1099    buf->st_mode = Data.mode;
1100    buf->st_size = Data.size;
1101    return 0;
1102  }
1103};
1104} // end anonymous namespace
1105
1106
1107/// \brief Read a source manager block
1108ASTReader::ASTReadResult ASTReader::ReadSourceManagerBlock(PerFileData &F) {
1109  using namespace SrcMgr;
1110
1111  llvm::BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1112
1113  // Set the source-location entry cursor to the current position in
1114  // the stream. This cursor will be used to read the contents of the
1115  // source manager block initially, and then lazily read
1116  // source-location entries as needed.
1117  SLocEntryCursor = F.Stream;
1118
1119  // The stream itself is going to skip over the source manager block.
1120  if (F.Stream.SkipBlock()) {
1121    Error("malformed block record in AST file");
1122    return Failure;
1123  }
1124
1125  // Enter the source manager block.
1126  if (SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1127    Error("malformed source manager block record in AST file");
1128    return Failure;
1129  }
1130
1131  RecordData Record;
1132  while (true) {
1133    unsigned Code = SLocEntryCursor.ReadCode();
1134    if (Code == llvm::bitc::END_BLOCK) {
1135      if (SLocEntryCursor.ReadBlockEnd()) {
1136        Error("error at end of Source Manager block in AST file");
1137        return Failure;
1138      }
1139      return Success;
1140    }
1141
1142    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1143      // No known subblocks, always skip them.
1144      SLocEntryCursor.ReadSubBlockID();
1145      if (SLocEntryCursor.SkipBlock()) {
1146        Error("malformed block record in AST file");
1147        return Failure;
1148      }
1149      continue;
1150    }
1151
1152    if (Code == llvm::bitc::DEFINE_ABBREV) {
1153      SLocEntryCursor.ReadAbbrevRecord();
1154      continue;
1155    }
1156
1157    // Read a record.
1158    const char *BlobStart;
1159    unsigned BlobLen;
1160    Record.clear();
1161    switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1162    default:  // Default behavior: ignore.
1163      break;
1164
1165    case SM_LINE_TABLE:
1166      if (ParseLineTable(Record))
1167        return Failure;
1168      break;
1169
1170    case SM_SLOC_FILE_ENTRY:
1171    case SM_SLOC_BUFFER_ENTRY:
1172    case SM_SLOC_INSTANTIATION_ENTRY:
1173      // Once we hit one of the source location entries, we're done.
1174      return Success;
1175    }
1176  }
1177}
1178
1179/// \brief Get a cursor that's correctly positioned for reading the source
1180/// location entry with the given ID.
1181llvm::BitstreamCursor &ASTReader::SLocCursorForID(unsigned ID) {
1182  assert(ID != 0 && ID <= TotalNumSLocEntries &&
1183         "SLocCursorForID should only be called for real IDs.");
1184
1185  ID -= 1;
1186  PerFileData *F = 0;
1187  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
1188    F = Chain[N - I - 1];
1189    if (ID < F->LocalNumSLocEntries)
1190      break;
1191    ID -= F->LocalNumSLocEntries;
1192  }
1193  assert(F && F->LocalNumSLocEntries > ID && "Chain corrupted");
1194
1195  F->SLocEntryCursor.JumpToBit(F->SLocOffsets[ID]);
1196  return F->SLocEntryCursor;
1197}
1198
1199/// \brief Read in the source location entry with the given ID.
1200ASTReader::ASTReadResult ASTReader::ReadSLocEntryRecord(unsigned ID) {
1201  if (ID == 0)
1202    return Success;
1203
1204  if (ID > TotalNumSLocEntries) {
1205    Error("source location entry ID out-of-range for AST file");
1206    return Failure;
1207  }
1208
1209  llvm::BitstreamCursor &SLocEntryCursor = SLocCursorForID(ID);
1210
1211  ++NumSLocEntriesRead;
1212  unsigned Code = SLocEntryCursor.ReadCode();
1213  if (Code == llvm::bitc::END_BLOCK ||
1214      Code == llvm::bitc::ENTER_SUBBLOCK ||
1215      Code == llvm::bitc::DEFINE_ABBREV) {
1216    Error("incorrectly-formatted source location entry in AST file");
1217    return Failure;
1218  }
1219
1220  RecordData Record;
1221  const char *BlobStart;
1222  unsigned BlobLen;
1223  switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1224  default:
1225    Error("incorrectly-formatted source location entry in AST file");
1226    return Failure;
1227
1228  case SM_SLOC_FILE_ENTRY: {
1229    std::string Filename(BlobStart, BlobStart + BlobLen);
1230    MaybeAddSystemRootToFilename(Filename);
1231    const FileEntry *File = FileMgr.getFile(Filename);
1232    if (File == 0) {
1233      std::string ErrorStr = "could not find file '";
1234      ErrorStr += Filename;
1235      ErrorStr += "' referenced by AST file";
1236      Error(ErrorStr.c_str());
1237      return Failure;
1238    }
1239
1240    if (Record.size() < 10) {
1241      Error("source location entry is incorrect");
1242      return Failure;
1243    }
1244
1245    if (!DisableValidation &&
1246        ((off_t)Record[4] != File->getSize()
1247#if !defined(LLVM_ON_WIN32)
1248        // In our regression testing, the Windows file system seems to
1249        // have inconsistent modification times that sometimes
1250        // erroneously trigger this error-handling path.
1251         || (time_t)Record[5] != File->getModificationTime()
1252#endif
1253        )) {
1254      Diag(diag::err_fe_pch_file_modified)
1255        << Filename;
1256      return Failure;
1257    }
1258
1259    FileID FID = SourceMgr.createFileID(File,
1260                                SourceLocation::getFromRawEncoding(Record[1]),
1261                                       (SrcMgr::CharacteristicKind)Record[2],
1262                                        ID, Record[0]);
1263    if (Record[3])
1264      const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile())
1265        .setHasLineDirectives();
1266
1267    // Reconstruct header-search information for this file.
1268    HeaderFileInfo HFI;
1269    HFI.isImport = Record[6];
1270    HFI.DirInfo = Record[7];
1271    HFI.NumIncludes = Record[8];
1272    HFI.ControllingMacroID = Record[9];
1273    if (Listener)
1274      Listener->ReadHeaderFileInfo(HFI, File->getUID());
1275    break;
1276  }
1277
1278  case SM_SLOC_BUFFER_ENTRY: {
1279    const char *Name = BlobStart;
1280    unsigned Offset = Record[0];
1281    unsigned Code = SLocEntryCursor.ReadCode();
1282    Record.clear();
1283    unsigned RecCode
1284      = SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen);
1285
1286    if (RecCode != SM_SLOC_BUFFER_BLOB) {
1287      Error("AST record has invalid code");
1288      return Failure;
1289    }
1290
1291    llvm::MemoryBuffer *Buffer
1292    = llvm::MemoryBuffer::getMemBuffer(llvm::StringRef(BlobStart, BlobLen - 1),
1293                                       Name);
1294    FileID BufferID = SourceMgr.createFileIDForMemBuffer(Buffer, ID, Offset);
1295
1296    if (strcmp(Name, "<built-in>") == 0) {
1297      PCHPredefinesBlock Block = {
1298        BufferID,
1299        llvm::StringRef(BlobStart, BlobLen - 1)
1300      };
1301      PCHPredefinesBuffers.push_back(Block);
1302    }
1303
1304    break;
1305  }
1306
1307  case SM_SLOC_INSTANTIATION_ENTRY: {
1308    SourceLocation SpellingLoc
1309      = SourceLocation::getFromRawEncoding(Record[1]);
1310    SourceMgr.createInstantiationLoc(SpellingLoc,
1311                              SourceLocation::getFromRawEncoding(Record[2]),
1312                              SourceLocation::getFromRawEncoding(Record[3]),
1313                                     Record[4],
1314                                     ID,
1315                                     Record[0]);
1316    break;
1317  }
1318  }
1319
1320  return Success;
1321}
1322
1323/// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
1324/// specified cursor.  Read the abbreviations that are at the top of the block
1325/// and then leave the cursor pointing into the block.
1326bool ASTReader::ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor,
1327                                 unsigned BlockID) {
1328  if (Cursor.EnterSubBlock(BlockID)) {
1329    Error("malformed block record in AST file");
1330    return Failure;
1331  }
1332
1333  while (true) {
1334    unsigned Code = Cursor.ReadCode();
1335
1336    // We expect all abbrevs to be at the start of the block.
1337    if (Code != llvm::bitc::DEFINE_ABBREV)
1338      return false;
1339    Cursor.ReadAbbrevRecord();
1340  }
1341}
1342
1343void ASTReader::ReadMacroRecord(llvm::BitstreamCursor &Stream, uint64_t Offset){
1344  assert(PP && "Forgot to set Preprocessor ?");
1345
1346  // Keep track of where we are in the stream, then jump back there
1347  // after reading this macro.
1348  SavedStreamPosition SavedPosition(Stream);
1349
1350  Stream.JumpToBit(Offset);
1351  RecordData Record;
1352  llvm::SmallVector<IdentifierInfo*, 16> MacroArgs;
1353  MacroInfo *Macro = 0;
1354
1355  while (true) {
1356    unsigned Code = Stream.ReadCode();
1357    switch (Code) {
1358    case llvm::bitc::END_BLOCK:
1359      return;
1360
1361    case llvm::bitc::ENTER_SUBBLOCK:
1362      // No known subblocks, always skip them.
1363      Stream.ReadSubBlockID();
1364      if (Stream.SkipBlock()) {
1365        Error("malformed block record in AST file");
1366        return;
1367      }
1368      continue;
1369
1370    case llvm::bitc::DEFINE_ABBREV:
1371      Stream.ReadAbbrevRecord();
1372      continue;
1373    default: break;
1374    }
1375
1376    // Read a record.
1377    Record.clear();
1378    PreprocessorRecordTypes RecType =
1379      (PreprocessorRecordTypes)Stream.ReadRecord(Code, Record);
1380    switch (RecType) {
1381    case PP_MACRO_OBJECT_LIKE:
1382    case PP_MACRO_FUNCTION_LIKE: {
1383      // If we already have a macro, that means that we've hit the end
1384      // of the definition of the macro we were looking for. We're
1385      // done.
1386      if (Macro)
1387        return;
1388
1389      IdentifierInfo *II = DecodeIdentifierInfo(Record[0]);
1390      if (II == 0) {
1391        Error("macro must have a name in AST file");
1392        return;
1393      }
1394      SourceLocation Loc = SourceLocation::getFromRawEncoding(Record[1]);
1395      bool isUsed = Record[2];
1396
1397      MacroInfo *MI = PP->AllocateMacroInfo(Loc);
1398      MI->setIsUsed(isUsed);
1399      MI->setIsFromAST();
1400
1401      unsigned NextIndex = 3;
1402      if (RecType == PP_MACRO_FUNCTION_LIKE) {
1403        // Decode function-like macro info.
1404        bool isC99VarArgs = Record[3];
1405        bool isGNUVarArgs = Record[4];
1406        MacroArgs.clear();
1407        unsigned NumArgs = Record[5];
1408        NextIndex = 6 + NumArgs;
1409        for (unsigned i = 0; i != NumArgs; ++i)
1410          MacroArgs.push_back(DecodeIdentifierInfo(Record[6+i]));
1411
1412        // Install function-like macro info.
1413        MI->setIsFunctionLike();
1414        if (isC99VarArgs) MI->setIsC99Varargs();
1415        if (isGNUVarArgs) MI->setIsGNUVarargs();
1416        MI->setArgumentList(MacroArgs.data(), MacroArgs.size(),
1417                            PP->getPreprocessorAllocator());
1418      }
1419
1420      // Finally, install the macro.
1421      PP->setMacroInfo(II, MI);
1422
1423      // Remember that we saw this macro last so that we add the tokens that
1424      // form its body to it.
1425      Macro = MI;
1426
1427      if (NextIndex + 1 == Record.size() && PP->getPreprocessingRecord()) {
1428        // We have a macro definition. Load it now.
1429        PP->getPreprocessingRecord()->RegisterMacroDefinition(Macro,
1430                                        getMacroDefinition(Record[NextIndex]));
1431      }
1432
1433      ++NumMacrosRead;
1434      break;
1435    }
1436
1437    case PP_TOKEN: {
1438      // If we see a TOKEN before a PP_MACRO_*, then the file is
1439      // erroneous, just pretend we didn't see this.
1440      if (Macro == 0) break;
1441
1442      Token Tok;
1443      Tok.startToken();
1444      Tok.setLocation(SourceLocation::getFromRawEncoding(Record[0]));
1445      Tok.setLength(Record[1]);
1446      if (IdentifierInfo *II = DecodeIdentifierInfo(Record[2]))
1447        Tok.setIdentifierInfo(II);
1448      Tok.setKind((tok::TokenKind)Record[3]);
1449      Tok.setFlag((Token::TokenFlags)Record[4]);
1450      Macro->AddTokenToBody(Tok);
1451      break;
1452    }
1453
1454    case PP_MACRO_INSTANTIATION: {
1455      // If we already have a macro, that means that we've hit the end
1456      // of the definition of the macro we were looking for. We're
1457      // done.
1458      if (Macro)
1459        return;
1460
1461      if (!PP->getPreprocessingRecord()) {
1462        Error("missing preprocessing record in AST file");
1463        return;
1464      }
1465
1466      PreprocessingRecord &PPRec = *PP->getPreprocessingRecord();
1467      if (PPRec.getPreprocessedEntity(Record[0]))
1468        return;
1469
1470      MacroInstantiation *MI
1471        = new (PPRec) MacroInstantiation(DecodeIdentifierInfo(Record[3]),
1472                               SourceRange(
1473                                 SourceLocation::getFromRawEncoding(Record[1]),
1474                                 SourceLocation::getFromRawEncoding(Record[2])),
1475                                         getMacroDefinition(Record[4]));
1476      PPRec.SetPreallocatedEntity(Record[0], MI);
1477      return;
1478    }
1479
1480    case PP_MACRO_DEFINITION: {
1481      // If we already have a macro, that means that we've hit the end
1482      // of the definition of the macro we were looking for. We're
1483      // done.
1484      if (Macro)
1485        return;
1486
1487      if (!PP->getPreprocessingRecord()) {
1488        Error("missing preprocessing record in AST file");
1489        return;
1490      }
1491
1492      PreprocessingRecord &PPRec = *PP->getPreprocessingRecord();
1493      if (PPRec.getPreprocessedEntity(Record[0]))
1494        return;
1495
1496      if (Record[1] >= MacroDefinitionsLoaded.size()) {
1497        Error("out-of-bounds macro definition record");
1498        return;
1499      }
1500
1501      MacroDefinition *MD
1502        = new (PPRec) MacroDefinition(DecodeIdentifierInfo(Record[4]),
1503                                SourceLocation::getFromRawEncoding(Record[5]),
1504                              SourceRange(
1505                                SourceLocation::getFromRawEncoding(Record[2]),
1506                                SourceLocation::getFromRawEncoding(Record[3])));
1507      PPRec.SetPreallocatedEntity(Record[0], MD);
1508      MacroDefinitionsLoaded[Record[1]] = MD;
1509      return;
1510    }
1511    }
1512  }
1513}
1514
1515void ASTReader::ReadDefinedMacros() {
1516  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
1517    llvm::BitstreamCursor &MacroCursor = Chain[N - I - 1]->MacroCursor;
1518
1519    // If there was no preprocessor block, skip this file.
1520    if (!MacroCursor.getBitStreamReader())
1521      continue;
1522
1523    llvm::BitstreamCursor Cursor = MacroCursor;
1524    if (Cursor.EnterSubBlock(PREPROCESSOR_BLOCK_ID)) {
1525      Error("malformed preprocessor block record in AST file");
1526      return;
1527    }
1528
1529    RecordData Record;
1530    while (true) {
1531      uint64_t Offset = Cursor.GetCurrentBitNo();
1532      unsigned Code = Cursor.ReadCode();
1533      if (Code == llvm::bitc::END_BLOCK) {
1534        if (Cursor.ReadBlockEnd()) {
1535          Error("error at end of preprocessor block in AST file");
1536          return;
1537        }
1538        break;
1539      }
1540
1541      if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1542        // No known subblocks, always skip them.
1543        Cursor.ReadSubBlockID();
1544        if (Cursor.SkipBlock()) {
1545          Error("malformed block record in AST file");
1546          return;
1547        }
1548        continue;
1549      }
1550
1551      if (Code == llvm::bitc::DEFINE_ABBREV) {
1552        Cursor.ReadAbbrevRecord();
1553        continue;
1554      }
1555
1556      // Read a record.
1557      const char *BlobStart;
1558      unsigned BlobLen;
1559      Record.clear();
1560      switch (Cursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1561      default:  // Default behavior: ignore.
1562        break;
1563
1564      case PP_MACRO_OBJECT_LIKE:
1565      case PP_MACRO_FUNCTION_LIKE:
1566        DecodeIdentifierInfo(Record[0]);
1567        break;
1568
1569      case PP_TOKEN:
1570        // Ignore tokens.
1571        break;
1572
1573      case PP_MACRO_INSTANTIATION:
1574      case PP_MACRO_DEFINITION:
1575        // Read the macro record.
1576        // FIXME: That's a stupid way to do this. We should reuse this cursor.
1577        ReadMacroRecord(Chain[N - I - 1]->Stream, Offset);
1578        break;
1579      }
1580    }
1581  }
1582}
1583
1584MacroDefinition *ASTReader::getMacroDefinition(MacroID ID) {
1585  if (ID == 0 || ID >= MacroDefinitionsLoaded.size())
1586    return 0;
1587
1588  if (!MacroDefinitionsLoaded[ID]) {
1589    unsigned Index = ID;
1590    for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
1591      PerFileData &F = *Chain[N - I - 1];
1592      if (Index < F.LocalNumMacroDefinitions) {
1593        ReadMacroRecord(F.Stream, F.MacroDefinitionOffsets[Index]);
1594        break;
1595      }
1596      Index -= F.LocalNumMacroDefinitions;
1597    }
1598    assert(MacroDefinitionsLoaded[ID] && "Broken chain");
1599  }
1600
1601  return MacroDefinitionsLoaded[ID];
1602}
1603
1604/// \brief If we are loading a relocatable PCH file, and the filename is
1605/// not an absolute path, add the system root to the beginning of the file
1606/// name.
1607void ASTReader::MaybeAddSystemRootToFilename(std::string &Filename) {
1608  // If this is not a relocatable PCH file, there's nothing to do.
1609  if (!RelocatablePCH)
1610    return;
1611
1612  if (Filename.empty() || llvm::sys::Path(Filename).isAbsolute())
1613    return;
1614
1615  if (isysroot == 0) {
1616    // If no system root was given, default to '/'
1617    Filename.insert(Filename.begin(), '/');
1618    return;
1619  }
1620
1621  unsigned Length = strlen(isysroot);
1622  if (isysroot[Length - 1] != '/')
1623    Filename.insert(Filename.begin(), '/');
1624
1625  Filename.insert(Filename.begin(), isysroot, isysroot + Length);
1626}
1627
1628ASTReader::ASTReadResult
1629ASTReader::ReadASTBlock(PerFileData &F) {
1630  llvm::BitstreamCursor &Stream = F.Stream;
1631
1632  if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
1633    Error("malformed block record in AST file");
1634    return Failure;
1635  }
1636
1637  // Read all of the records and blocks for the ASt file.
1638  RecordData Record;
1639  bool First = true;
1640  while (!Stream.AtEndOfStream()) {
1641    unsigned Code = Stream.ReadCode();
1642    if (Code == llvm::bitc::END_BLOCK) {
1643      if (Stream.ReadBlockEnd()) {
1644        Error("error at end of module block in AST file");
1645        return Failure;
1646      }
1647
1648      return Success;
1649    }
1650
1651    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1652      switch (Stream.ReadSubBlockID()) {
1653      case DECLTYPES_BLOCK_ID:
1654        // We lazily load the decls block, but we want to set up the
1655        // DeclsCursor cursor to point into it.  Clone our current bitcode
1656        // cursor to it, enter the block and read the abbrevs in that block.
1657        // With the main cursor, we just skip over it.
1658        F.DeclsCursor = Stream;
1659        if (Stream.SkipBlock() ||  // Skip with the main cursor.
1660            // Read the abbrevs.
1661            ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
1662          Error("malformed block record in AST file");
1663          return Failure;
1664        }
1665        break;
1666
1667      case PREPROCESSOR_BLOCK_ID:
1668        F.MacroCursor = Stream;
1669        if (PP)
1670          PP->setExternalSource(this);
1671
1672        if (Stream.SkipBlock()) {
1673          Error("malformed block record in AST file");
1674          return Failure;
1675        }
1676        break;
1677
1678      case SOURCE_MANAGER_BLOCK_ID:
1679        switch (ReadSourceManagerBlock(F)) {
1680        case Success:
1681          break;
1682
1683        case Failure:
1684          Error("malformed source manager block in AST file");
1685          return Failure;
1686
1687        case IgnorePCH:
1688          return IgnorePCH;
1689        }
1690        break;
1691      }
1692      First = false;
1693      continue;
1694    }
1695
1696    if (Code == llvm::bitc::DEFINE_ABBREV) {
1697      Stream.ReadAbbrevRecord();
1698      continue;
1699    }
1700
1701    // Read and process a record.
1702    Record.clear();
1703    const char *BlobStart = 0;
1704    unsigned BlobLen = 0;
1705    switch ((ASTRecordTypes)Stream.ReadRecord(Code, Record,
1706                                                   &BlobStart, &BlobLen)) {
1707    default:  // Default behavior: ignore.
1708      break;
1709
1710    case METADATA: {
1711      if (Record[0] != VERSION_MAJOR && !DisableValidation) {
1712        Diag(Record[0] < VERSION_MAJOR? diag::warn_pch_version_too_old
1713                                           : diag::warn_pch_version_too_new);
1714        return IgnorePCH;
1715      }
1716
1717      RelocatablePCH = Record[4];
1718      if (Listener) {
1719        std::string TargetTriple(BlobStart, BlobLen);
1720        if (Listener->ReadTargetTriple(TargetTriple))
1721          return IgnorePCH;
1722      }
1723      break;
1724    }
1725
1726    case CHAINED_METADATA: {
1727      if (!First) {
1728        Error("CHAINED_METADATA is not first record in block");
1729        return Failure;
1730      }
1731      if (Record[0] != VERSION_MAJOR && !DisableValidation) {
1732        Diag(Record[0] < VERSION_MAJOR? diag::warn_pch_version_too_old
1733                                           : diag::warn_pch_version_too_new);
1734        return IgnorePCH;
1735      }
1736
1737      // Load the chained file.
1738      switch(ReadASTCore(llvm::StringRef(BlobStart, BlobLen))) {
1739      case Failure: return Failure;
1740        // If we have to ignore the dependency, we'll have to ignore this too.
1741      case IgnorePCH: return IgnorePCH;
1742      case Success: break;
1743      }
1744      break;
1745    }
1746
1747    case TYPE_OFFSET:
1748      if (F.LocalNumTypes != 0) {
1749        Error("duplicate TYPE_OFFSET record in AST file");
1750        return Failure;
1751      }
1752      F.TypeOffsets = (const uint32_t *)BlobStart;
1753      F.LocalNumTypes = Record[0];
1754      break;
1755
1756    case DECL_OFFSET:
1757      if (F.LocalNumDecls != 0) {
1758        Error("duplicate DECL_OFFSET record in AST file");
1759        return Failure;
1760      }
1761      F.DeclOffsets = (const uint32_t *)BlobStart;
1762      F.LocalNumDecls = Record[0];
1763      break;
1764
1765    case TU_UPDATE_LEXICAL: {
1766      DeclContextInfo Info = {
1767        /* No visible information */ 0,
1768        reinterpret_cast<const DeclID *>(BlobStart),
1769        BlobLen / sizeof(DeclID)
1770      };
1771      DeclContextOffsets[Context->getTranslationUnitDecl()].push_back(Info);
1772      break;
1773    }
1774
1775    case UPDATE_VISIBLE: {
1776      serialization::DeclID ID = Record[0];
1777      void *Table = ASTDeclContextNameLookupTable::Create(
1778                        (const unsigned char *)BlobStart + Record[1],
1779                        (const unsigned char *)BlobStart,
1780                        ASTDeclContextNameLookupTrait(*this));
1781      if (ID == 1) { // Is it the TU?
1782        DeclContextInfo Info = {
1783          Table, /* No lexical inforamtion */ 0, 0
1784        };
1785        DeclContextOffsets[Context->getTranslationUnitDecl()].push_back(Info);
1786      } else
1787        PendingVisibleUpdates[ID].push_back(Table);
1788      break;
1789    }
1790
1791    case REDECLS_UPDATE_LATEST: {
1792      assert(Record.size() % 2 == 0 && "Expected pairs of DeclIDs");
1793      for (unsigned i = 0, e = Record.size(); i < e; i += 2) {
1794        DeclID First = Record[i], Latest = Record[i+1];
1795        assert((FirstLatestDeclIDs.find(First) == FirstLatestDeclIDs.end() ||
1796                Latest > FirstLatestDeclIDs[First]) &&
1797               "The new latest is supposed to come after the previous latest");
1798        FirstLatestDeclIDs[First] = Latest;
1799      }
1800      break;
1801    }
1802
1803    case LANGUAGE_OPTIONS:
1804      if (ParseLanguageOptions(Record) && !DisableValidation)
1805        return IgnorePCH;
1806      break;
1807
1808    case IDENTIFIER_TABLE:
1809      F.IdentifierTableData = BlobStart;
1810      if (Record[0]) {
1811        F.IdentifierLookupTable
1812          = ASTIdentifierLookupTable::Create(
1813                       (const unsigned char *)F.IdentifierTableData + Record[0],
1814                       (const unsigned char *)F.IdentifierTableData,
1815                       ASTIdentifierLookupTrait(*this, F.Stream));
1816        if (PP)
1817          PP->getIdentifierTable().setExternalIdentifierLookup(this);
1818      }
1819      break;
1820
1821    case IDENTIFIER_OFFSET:
1822      if (F.LocalNumIdentifiers != 0) {
1823        Error("duplicate IDENTIFIER_OFFSET record in AST file");
1824        return Failure;
1825      }
1826      F.IdentifierOffsets = (const uint32_t *)BlobStart;
1827      F.LocalNumIdentifiers = Record[0];
1828      break;
1829
1830    case EXTERNAL_DEFINITIONS:
1831      // Optimization for the first block.
1832      if (ExternalDefinitions.empty())
1833        ExternalDefinitions.swap(Record);
1834      else
1835        ExternalDefinitions.insert(ExternalDefinitions.end(),
1836                                   Record.begin(), Record.end());
1837      break;
1838
1839    case SPECIAL_TYPES:
1840      // Optimization for the first block
1841      if (SpecialTypes.empty())
1842        SpecialTypes.swap(Record);
1843      else
1844        SpecialTypes.insert(SpecialTypes.end(), Record.begin(), Record.end());
1845      break;
1846
1847    case STATISTICS:
1848      TotalNumStatements += Record[0];
1849      TotalNumMacros += Record[1];
1850      TotalLexicalDeclContexts += Record[2];
1851      TotalVisibleDeclContexts += Record[3];
1852      break;
1853
1854    case TENTATIVE_DEFINITIONS:
1855      // Optimization for the first block.
1856      if (TentativeDefinitions.empty())
1857        TentativeDefinitions.swap(Record);
1858      else
1859        TentativeDefinitions.insert(TentativeDefinitions.end(),
1860                                    Record.begin(), Record.end());
1861      break;
1862
1863    case UNUSED_FILESCOPED_DECLS:
1864      // Optimization for the first block.
1865      if (UnusedFileScopedDecls.empty())
1866        UnusedFileScopedDecls.swap(Record);
1867      else
1868        UnusedFileScopedDecls.insert(UnusedFileScopedDecls.end(),
1869                                     Record.begin(), Record.end());
1870      break;
1871
1872    case WEAK_UNDECLARED_IDENTIFIERS:
1873      // Later blocks overwrite earlier ones.
1874      WeakUndeclaredIdentifiers.swap(Record);
1875      break;
1876
1877    case LOCALLY_SCOPED_EXTERNAL_DECLS:
1878      // Optimization for the first block.
1879      if (LocallyScopedExternalDecls.empty())
1880        LocallyScopedExternalDecls.swap(Record);
1881      else
1882        LocallyScopedExternalDecls.insert(LocallyScopedExternalDecls.end(),
1883                                          Record.begin(), Record.end());
1884      break;
1885
1886    case SELECTOR_OFFSETS:
1887      F.SelectorOffsets = (const uint32_t *)BlobStart;
1888      F.LocalNumSelectors = Record[0];
1889      break;
1890
1891    case METHOD_POOL:
1892      F.SelectorLookupTableData = (const unsigned char *)BlobStart;
1893      if (Record[0])
1894        F.SelectorLookupTable
1895          = ASTSelectorLookupTable::Create(
1896                        F.SelectorLookupTableData + Record[0],
1897                        F.SelectorLookupTableData,
1898                        ASTSelectorLookupTrait(*this));
1899      TotalNumMethodPoolEntries += Record[1];
1900      break;
1901
1902    case REFERENCED_SELECTOR_POOL:
1903      if (ReferencedSelectorsData.empty())
1904        ReferencedSelectorsData.swap(Record);
1905      else
1906        ReferencedSelectorsData.insert(ReferencedSelectorsData.end(),
1907            Record.begin(), Record.end());
1908      break;
1909
1910    case PP_COUNTER_VALUE:
1911      if (!Record.empty() && Listener)
1912        Listener->ReadCounter(Record[0]);
1913      break;
1914
1915    case SOURCE_LOCATION_OFFSETS:
1916      F.SLocOffsets = (const uint32_t *)BlobStart;
1917      F.LocalNumSLocEntries = Record[0];
1918      F.LocalSLocSize = Record[1];
1919      break;
1920
1921    case SOURCE_LOCATION_PRELOADS:
1922      if (PreloadSLocEntries.empty())
1923        PreloadSLocEntries.swap(Record);
1924      else
1925        PreloadSLocEntries.insert(PreloadSLocEntries.end(),
1926            Record.begin(), Record.end());
1927      break;
1928
1929    case STAT_CACHE: {
1930      ASTStatCache *MyStatCache =
1931        new ASTStatCache((const unsigned char *)BlobStart + Record[0],
1932                         (const unsigned char *)BlobStart,
1933                         NumStatHits, NumStatMisses);
1934      FileMgr.addStatCache(MyStatCache);
1935      F.StatCache = MyStatCache;
1936      break;
1937    }
1938
1939    case EXT_VECTOR_DECLS:
1940      // Optimization for the first block.
1941      if (ExtVectorDecls.empty())
1942        ExtVectorDecls.swap(Record);
1943      else
1944        ExtVectorDecls.insert(ExtVectorDecls.end(),
1945                              Record.begin(), Record.end());
1946      break;
1947
1948    case VTABLE_USES:
1949      // Later tables overwrite earlier ones.
1950      VTableUses.swap(Record);
1951      break;
1952
1953    case DYNAMIC_CLASSES:
1954      // Optimization for the first block.
1955      if (DynamicClasses.empty())
1956        DynamicClasses.swap(Record);
1957      else
1958        DynamicClasses.insert(DynamicClasses.end(),
1959                              Record.begin(), Record.end());
1960      break;
1961
1962    case PENDING_IMPLICIT_INSTANTIATIONS:
1963      // Optimization for the first block.
1964      if (PendingInstantiations.empty())
1965        PendingInstantiations.swap(Record);
1966      else
1967        PendingInstantiations.insert(PendingInstantiations.end(),
1968                                     Record.begin(), Record.end());
1969      break;
1970
1971    case SEMA_DECL_REFS:
1972      // Later tables overwrite earlier ones.
1973      SemaDeclRefs.swap(Record);
1974      break;
1975
1976    case ORIGINAL_FILE_NAME:
1977      // The primary AST will be the last to get here, so it will be the one
1978      // that's used.
1979      ActualOriginalFileName.assign(BlobStart, BlobLen);
1980      OriginalFileName = ActualOriginalFileName;
1981      MaybeAddSystemRootToFilename(OriginalFileName);
1982      break;
1983
1984    case VERSION_CONTROL_BRANCH_REVISION: {
1985      const std::string &CurBranch = getClangFullRepositoryVersion();
1986      llvm::StringRef ASTBranch(BlobStart, BlobLen);
1987      if (llvm::StringRef(CurBranch) != ASTBranch && !DisableValidation) {
1988        Diag(diag::warn_pch_different_branch) << ASTBranch << CurBranch;
1989        return IgnorePCH;
1990      }
1991      break;
1992    }
1993
1994    case MACRO_DEFINITION_OFFSETS:
1995      F.MacroDefinitionOffsets = (const uint32_t *)BlobStart;
1996      F.NumPreallocatedPreprocessingEntities = Record[0];
1997      F.LocalNumMacroDefinitions = Record[1];
1998      break;
1999
2000    case DECL_REPLACEMENTS: {
2001      if (Record.size() % 2 != 0) {
2002        Error("invalid DECL_REPLACEMENTS block in AST file");
2003        return Failure;
2004      }
2005      for (unsigned I = 0, N = Record.size(); I != N; I += 2)
2006        ReplacedDecls[static_cast<DeclID>(Record[I])] =
2007            std::make_pair(&F, Record[I+1]);
2008      break;
2009    }
2010
2011    case ADDITIONAL_TEMPLATE_SPECIALIZATIONS: {
2012      AdditionalTemplateSpecializations &ATS =
2013          AdditionalTemplateSpecializationsPending[Record[0]];
2014      ATS.insert(ATS.end(), Record.begin()+1, Record.end());
2015      break;
2016    }
2017    }
2018    First = false;
2019  }
2020  Error("premature end of bitstream in AST file");
2021  return Failure;
2022}
2023
2024ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName) {
2025  switch(ReadASTCore(FileName)) {
2026  case Failure: return Failure;
2027  case IgnorePCH: return IgnorePCH;
2028  case Success: break;
2029  }
2030
2031  // Here comes stuff that we only do once the entire chain is loaded.
2032
2033  // Allocate space for loaded slocentries, identifiers, decls and types.
2034  unsigned TotalNumIdentifiers = 0, TotalNumTypes = 0, TotalNumDecls = 0,
2035           TotalNumPreallocatedPreprocessingEntities = 0, TotalNumMacroDefs = 0,
2036           TotalNumSelectors = 0;
2037  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
2038    TotalNumSLocEntries += Chain[I]->LocalNumSLocEntries;
2039    NextSLocOffset += Chain[I]->LocalSLocSize;
2040    TotalNumIdentifiers += Chain[I]->LocalNumIdentifiers;
2041    TotalNumTypes += Chain[I]->LocalNumTypes;
2042    TotalNumDecls += Chain[I]->LocalNumDecls;
2043    TotalNumPreallocatedPreprocessingEntities +=
2044        Chain[I]->NumPreallocatedPreprocessingEntities;
2045    TotalNumMacroDefs += Chain[I]->LocalNumMacroDefinitions;
2046    TotalNumSelectors += Chain[I]->LocalNumSelectors;
2047  }
2048  SourceMgr.PreallocateSLocEntries(this, TotalNumSLocEntries, NextSLocOffset);
2049  IdentifiersLoaded.resize(TotalNumIdentifiers);
2050  TypesLoaded.resize(TotalNumTypes);
2051  DeclsLoaded.resize(TotalNumDecls);
2052  MacroDefinitionsLoaded.resize(TotalNumMacroDefs);
2053  if (PP) {
2054    if (TotalNumIdentifiers > 0)
2055      PP->getHeaderSearchInfo().SetExternalLookup(this);
2056    if (TotalNumPreallocatedPreprocessingEntities > 0) {
2057      if (!PP->getPreprocessingRecord())
2058        PP->createPreprocessingRecord();
2059      PP->getPreprocessingRecord()->SetExternalSource(*this,
2060                                     TotalNumPreallocatedPreprocessingEntities);
2061    }
2062  }
2063  SelectorsLoaded.resize(TotalNumSelectors);
2064  // Preload SLocEntries.
2065  for (unsigned I = 0, N = PreloadSLocEntries.size(); I != N; ++I) {
2066    ASTReadResult Result = ReadSLocEntryRecord(PreloadSLocEntries[I]);
2067    if (Result != Success)
2068      return Result;
2069  }
2070
2071  // Check the predefines buffers.
2072  if (!DisableValidation && CheckPredefinesBuffers())
2073    return IgnorePCH;
2074
2075  if (PP) {
2076    // Initialization of keywords and pragmas occurs before the
2077    // AST file is read, so there may be some identifiers that were
2078    // loaded into the IdentifierTable before we intercepted the
2079    // creation of identifiers. Iterate through the list of known
2080    // identifiers and determine whether we have to establish
2081    // preprocessor definitions or top-level identifier declaration
2082    // chains for those identifiers.
2083    //
2084    // We copy the IdentifierInfo pointers to a small vector first,
2085    // since de-serializing declarations or macro definitions can add
2086    // new entries into the identifier table, invalidating the
2087    // iterators.
2088    llvm::SmallVector<IdentifierInfo *, 128> Identifiers;
2089    for (IdentifierTable::iterator Id = PP->getIdentifierTable().begin(),
2090                                IdEnd = PP->getIdentifierTable().end();
2091         Id != IdEnd; ++Id)
2092      Identifiers.push_back(Id->second);
2093    // We need to search the tables in all files.
2094    for (unsigned J = 0, M = Chain.size(); J != M; ++J) {
2095      ASTIdentifierLookupTable *IdTable
2096        = (ASTIdentifierLookupTable *)Chain[J]->IdentifierLookupTable;
2097      // Not all AST files necessarily have identifier tables, only the useful
2098      // ones.
2099      if (!IdTable)
2100        continue;
2101      for (unsigned I = 0, N = Identifiers.size(); I != N; ++I) {
2102        IdentifierInfo *II = Identifiers[I];
2103        // Look in the on-disk hash tables for an entry for this identifier
2104        ASTIdentifierLookupTrait Info(*this, Chain[J]->Stream, II);
2105        std::pair<const char*,unsigned> Key(II->getNameStart(),II->getLength());
2106        ASTIdentifierLookupTable::iterator Pos = IdTable->find(Key, &Info);
2107        if (Pos == IdTable->end())
2108          continue;
2109
2110        // Dereferencing the iterator has the effect of populating the
2111        // IdentifierInfo node with the various declarations it needs.
2112        (void)*Pos;
2113      }
2114    }
2115  }
2116
2117  if (Context)
2118    InitializeContext(*Context);
2119
2120  return Success;
2121}
2122
2123ASTReader::ASTReadResult ASTReader::ReadASTCore(llvm::StringRef FileName) {
2124  Chain.push_back(new PerFileData());
2125  PerFileData &F = *Chain.back();
2126
2127  // Set the AST file name.
2128  F.FileName = FileName;
2129
2130  // Open the AST file.
2131  //
2132  // FIXME: This shouldn't be here, we should just take a raw_ostream.
2133  std::string ErrStr;
2134  F.Buffer.reset(llvm::MemoryBuffer::getFileOrSTDIN(FileName, &ErrStr));
2135  if (!F.Buffer) {
2136    Error(ErrStr.c_str());
2137    return IgnorePCH;
2138  }
2139
2140  // Initialize the stream
2141  F.StreamFile.init((const unsigned char *)F.Buffer->getBufferStart(),
2142                    (const unsigned char *)F.Buffer->getBufferEnd());
2143  llvm::BitstreamCursor &Stream = F.Stream;
2144  Stream.init(F.StreamFile);
2145  F.SizeInBits = F.Buffer->getBufferSize() * 8;
2146
2147  // Sniff for the signature.
2148  if (Stream.Read(8) != 'C' ||
2149      Stream.Read(8) != 'P' ||
2150      Stream.Read(8) != 'C' ||
2151      Stream.Read(8) != 'H') {
2152    Diag(diag::err_not_a_pch_file) << FileName;
2153    return Failure;
2154  }
2155
2156  while (!Stream.AtEndOfStream()) {
2157    unsigned Code = Stream.ReadCode();
2158
2159    if (Code != llvm::bitc::ENTER_SUBBLOCK) {
2160      Error("invalid record at top-level of AST file");
2161      return Failure;
2162    }
2163
2164    unsigned BlockID = Stream.ReadSubBlockID();
2165
2166    // We only know the AST subblock ID.
2167    switch (BlockID) {
2168    case llvm::bitc::BLOCKINFO_BLOCK_ID:
2169      if (Stream.ReadBlockInfoBlock()) {
2170        Error("malformed BlockInfoBlock in AST file");
2171        return Failure;
2172      }
2173      break;
2174    case AST_BLOCK_ID:
2175      switch (ReadASTBlock(F)) {
2176      case Success:
2177        break;
2178
2179      case Failure:
2180        return Failure;
2181
2182      case IgnorePCH:
2183        // FIXME: We could consider reading through to the end of this
2184        // AST block, skipping subblocks, to see if there are other
2185        // AST blocks elsewhere.
2186
2187        // Clear out any preallocated source location entries, so that
2188        // the source manager does not try to resolve them later.
2189        SourceMgr.ClearPreallocatedSLocEntries();
2190
2191        // Remove the stat cache.
2192        if (F.StatCache)
2193          FileMgr.removeStatCache((ASTStatCache*)F.StatCache);
2194
2195        return IgnorePCH;
2196      }
2197      break;
2198    default:
2199      if (Stream.SkipBlock()) {
2200        Error("malformed block record in AST file");
2201        return Failure;
2202      }
2203      break;
2204    }
2205  }
2206
2207  return Success;
2208}
2209
2210void ASTReader::setPreprocessor(Preprocessor &pp) {
2211  PP = &pp;
2212
2213  unsigned TotalNum = 0;
2214  for (unsigned I = 0, N = Chain.size(); I != N; ++I)
2215    TotalNum += Chain[I]->NumPreallocatedPreprocessingEntities;
2216  if (TotalNum) {
2217    if (!PP->getPreprocessingRecord())
2218      PP->createPreprocessingRecord();
2219    PP->getPreprocessingRecord()->SetExternalSource(*this, TotalNum);
2220  }
2221}
2222
2223void ASTReader::InitializeContext(ASTContext &Ctx) {
2224  Context = &Ctx;
2225  assert(Context && "Passed null context!");
2226
2227  assert(PP && "Forgot to set Preprocessor ?");
2228  PP->getIdentifierTable().setExternalIdentifierLookup(this);
2229  PP->getHeaderSearchInfo().SetExternalLookup(this);
2230  PP->setExternalSource(this);
2231
2232  // Load the translation unit declaration
2233  GetTranslationUnitDecl();
2234
2235  // Load the special types.
2236  Context->setBuiltinVaListType(
2237    GetType(SpecialTypes[SPECIAL_TYPE_BUILTIN_VA_LIST]));
2238  if (unsigned Id = SpecialTypes[SPECIAL_TYPE_OBJC_ID])
2239    Context->setObjCIdType(GetType(Id));
2240  if (unsigned Sel = SpecialTypes[SPECIAL_TYPE_OBJC_SELECTOR])
2241    Context->setObjCSelType(GetType(Sel));
2242  if (unsigned Proto = SpecialTypes[SPECIAL_TYPE_OBJC_PROTOCOL])
2243    Context->setObjCProtoType(GetType(Proto));
2244  if (unsigned Class = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS])
2245    Context->setObjCClassType(GetType(Class));
2246
2247  if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING])
2248    Context->setCFConstantStringType(GetType(String));
2249  if (unsigned FastEnum
2250        = SpecialTypes[SPECIAL_TYPE_OBJC_FAST_ENUMERATION_STATE])
2251    Context->setObjCFastEnumerationStateType(GetType(FastEnum));
2252  if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
2253    QualType FileType = GetType(File);
2254    if (FileType.isNull()) {
2255      Error("FILE type is NULL");
2256      return;
2257    }
2258    if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
2259      Context->setFILEDecl(Typedef->getDecl());
2260    else {
2261      const TagType *Tag = FileType->getAs<TagType>();
2262      if (!Tag) {
2263        Error("Invalid FILE type in AST file");
2264        return;
2265      }
2266      Context->setFILEDecl(Tag->getDecl());
2267    }
2268  }
2269  if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_jmp_buf]) {
2270    QualType Jmp_bufType = GetType(Jmp_buf);
2271    if (Jmp_bufType.isNull()) {
2272      Error("jmp_bug type is NULL");
2273      return;
2274    }
2275    if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
2276      Context->setjmp_bufDecl(Typedef->getDecl());
2277    else {
2278      const TagType *Tag = Jmp_bufType->getAs<TagType>();
2279      if (!Tag) {
2280        Error("Invalid jmp_buf type in AST file");
2281        return;
2282      }
2283      Context->setjmp_bufDecl(Tag->getDecl());
2284    }
2285  }
2286  if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_sigjmp_buf]) {
2287    QualType Sigjmp_bufType = GetType(Sigjmp_buf);
2288    if (Sigjmp_bufType.isNull()) {
2289      Error("sigjmp_buf type is NULL");
2290      return;
2291    }
2292    if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
2293      Context->setsigjmp_bufDecl(Typedef->getDecl());
2294    else {
2295      const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
2296      assert(Tag && "Invalid sigjmp_buf type in AST file");
2297      Context->setsigjmp_bufDecl(Tag->getDecl());
2298    }
2299  }
2300  if (unsigned ObjCIdRedef
2301        = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION])
2302    Context->ObjCIdRedefinitionType = GetType(ObjCIdRedef);
2303  if (unsigned ObjCClassRedef
2304      = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION])
2305    Context->ObjCClassRedefinitionType = GetType(ObjCClassRedef);
2306  if (unsigned String = SpecialTypes[SPECIAL_TYPE_BLOCK_DESCRIPTOR])
2307    Context->setBlockDescriptorType(GetType(String));
2308  if (unsigned String
2309      = SpecialTypes[SPECIAL_TYPE_BLOCK_EXTENDED_DESCRIPTOR])
2310    Context->setBlockDescriptorExtendedType(GetType(String));
2311  if (unsigned ObjCSelRedef
2312      = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION])
2313    Context->ObjCSelRedefinitionType = GetType(ObjCSelRedef);
2314  if (unsigned String = SpecialTypes[SPECIAL_TYPE_NS_CONSTANT_STRING])
2315    Context->setNSConstantStringType(GetType(String));
2316
2317  if (SpecialTypes[SPECIAL_TYPE_INT128_INSTALLED])
2318    Context->setInt128Installed();
2319}
2320
2321/// \brief Retrieve the name of the original source file name
2322/// directly from the AST file, without actually loading the AST
2323/// file.
2324std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
2325                                             Diagnostic &Diags) {
2326  // Open the AST file.
2327  std::string ErrStr;
2328  llvm::OwningPtr<llvm::MemoryBuffer> Buffer;
2329  Buffer.reset(llvm::MemoryBuffer::getFile(ASTFileName.c_str(), &ErrStr));
2330  if (!Buffer) {
2331    Diags.Report(diag::err_fe_unable_to_read_pch_file) << ErrStr;
2332    return std::string();
2333  }
2334
2335  // Initialize the stream
2336  llvm::BitstreamReader StreamFile;
2337  llvm::BitstreamCursor Stream;
2338  StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
2339                  (const unsigned char *)Buffer->getBufferEnd());
2340  Stream.init(StreamFile);
2341
2342  // Sniff for the signature.
2343  if (Stream.Read(8) != 'C' ||
2344      Stream.Read(8) != 'P' ||
2345      Stream.Read(8) != 'C' ||
2346      Stream.Read(8) != 'H') {
2347    Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
2348    return std::string();
2349  }
2350
2351  RecordData Record;
2352  while (!Stream.AtEndOfStream()) {
2353    unsigned Code = Stream.ReadCode();
2354
2355    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
2356      unsigned BlockID = Stream.ReadSubBlockID();
2357
2358      // We only know the AST subblock ID.
2359      switch (BlockID) {
2360      case AST_BLOCK_ID:
2361        if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
2362          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
2363          return std::string();
2364        }
2365        break;
2366
2367      default:
2368        if (Stream.SkipBlock()) {
2369          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
2370          return std::string();
2371        }
2372        break;
2373      }
2374      continue;
2375    }
2376
2377    if (Code == llvm::bitc::END_BLOCK) {
2378      if (Stream.ReadBlockEnd()) {
2379        Diags.Report(diag::err_fe_pch_error_at_end_block) << ASTFileName;
2380        return std::string();
2381      }
2382      continue;
2383    }
2384
2385    if (Code == llvm::bitc::DEFINE_ABBREV) {
2386      Stream.ReadAbbrevRecord();
2387      continue;
2388    }
2389
2390    Record.clear();
2391    const char *BlobStart = 0;
2392    unsigned BlobLen = 0;
2393    if (Stream.ReadRecord(Code, Record, &BlobStart, &BlobLen)
2394          == ORIGINAL_FILE_NAME)
2395      return std::string(BlobStart, BlobLen);
2396  }
2397
2398  return std::string();
2399}
2400
2401/// \brief Parse the record that corresponds to a LangOptions data
2402/// structure.
2403///
2404/// This routine parses the language options from the AST file and then gives
2405/// them to the AST listener if one is set.
2406///
2407/// \returns true if the listener deems the file unacceptable, false otherwise.
2408bool ASTReader::ParseLanguageOptions(
2409                             const llvm::SmallVectorImpl<uint64_t> &Record) {
2410  if (Listener) {
2411    LangOptions LangOpts;
2412
2413  #define PARSE_LANGOPT(Option)                  \
2414      LangOpts.Option = Record[Idx];             \
2415      ++Idx
2416
2417    unsigned Idx = 0;
2418    PARSE_LANGOPT(Trigraphs);
2419    PARSE_LANGOPT(BCPLComment);
2420    PARSE_LANGOPT(DollarIdents);
2421    PARSE_LANGOPT(AsmPreprocessor);
2422    PARSE_LANGOPT(GNUMode);
2423    PARSE_LANGOPT(GNUKeywords);
2424    PARSE_LANGOPT(ImplicitInt);
2425    PARSE_LANGOPT(Digraphs);
2426    PARSE_LANGOPT(HexFloats);
2427    PARSE_LANGOPT(C99);
2428    PARSE_LANGOPT(Microsoft);
2429    PARSE_LANGOPT(CPlusPlus);
2430    PARSE_LANGOPT(CPlusPlus0x);
2431    PARSE_LANGOPT(CXXOperatorNames);
2432    PARSE_LANGOPT(ObjC1);
2433    PARSE_LANGOPT(ObjC2);
2434    PARSE_LANGOPT(ObjCNonFragileABI);
2435    PARSE_LANGOPT(ObjCNonFragileABI2);
2436    PARSE_LANGOPT(NoConstantCFStrings);
2437    PARSE_LANGOPT(PascalStrings);
2438    PARSE_LANGOPT(WritableStrings);
2439    PARSE_LANGOPT(LaxVectorConversions);
2440    PARSE_LANGOPT(AltiVec);
2441    PARSE_LANGOPT(Exceptions);
2442    PARSE_LANGOPT(SjLjExceptions);
2443    PARSE_LANGOPT(NeXTRuntime);
2444    PARSE_LANGOPT(Freestanding);
2445    PARSE_LANGOPT(NoBuiltin);
2446    PARSE_LANGOPT(ThreadsafeStatics);
2447    PARSE_LANGOPT(POSIXThreads);
2448    PARSE_LANGOPT(Blocks);
2449    PARSE_LANGOPT(EmitAllDecls);
2450    PARSE_LANGOPT(MathErrno);
2451    LangOpts.setSignedOverflowBehavior((LangOptions::SignedOverflowBehaviorTy)
2452                                       Record[Idx++]);
2453    PARSE_LANGOPT(HeinousExtensions);
2454    PARSE_LANGOPT(Optimize);
2455    PARSE_LANGOPT(OptimizeSize);
2456    PARSE_LANGOPT(Static);
2457    PARSE_LANGOPT(PICLevel);
2458    PARSE_LANGOPT(GNUInline);
2459    PARSE_LANGOPT(NoInline);
2460    PARSE_LANGOPT(AccessControl);
2461    PARSE_LANGOPT(CharIsSigned);
2462    PARSE_LANGOPT(ShortWChar);
2463    LangOpts.setGCMode((LangOptions::GCMode)Record[Idx++]);
2464    LangOpts.setVisibilityMode((LangOptions::VisibilityMode)Record[Idx++]);
2465    LangOpts.setStackProtectorMode((LangOptions::StackProtectorMode)
2466                                   Record[Idx++]);
2467    PARSE_LANGOPT(InstantiationDepth);
2468    PARSE_LANGOPT(OpenCL);
2469    PARSE_LANGOPT(CatchUndefined);
2470    // FIXME: Missing ElideConstructors?!
2471  #undef PARSE_LANGOPT
2472
2473    return Listener->ReadLanguageOptions(LangOpts);
2474  }
2475
2476  return false;
2477}
2478
2479void ASTReader::ReadPreprocessedEntities() {
2480  ReadDefinedMacros();
2481}
2482
2483/// \brief Get the correct cursor and offset for loading a type.
2484ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
2485  PerFileData *F = 0;
2486  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
2487    F = Chain[N - I - 1];
2488    if (Index < F->LocalNumTypes)
2489      break;
2490    Index -= F->LocalNumTypes;
2491  }
2492  assert(F && F->LocalNumTypes > Index && "Broken chain");
2493  return RecordLocation(&F->DeclsCursor, F->TypeOffsets[Index]);
2494}
2495
2496/// \brief Read and return the type with the given index..
2497///
2498/// The index is the type ID, shifted and minus the number of predefs. This
2499/// routine actually reads the record corresponding to the type at the given
2500/// location. It is a helper routine for GetType, which deals with reading type
2501/// IDs.
2502QualType ASTReader::ReadTypeRecord(unsigned Index) {
2503  RecordLocation Loc = TypeCursorForIndex(Index);
2504  llvm::BitstreamCursor &DeclsCursor = *Loc.first;
2505
2506  // Keep track of where we are in the stream, then jump back there
2507  // after reading this type.
2508  SavedStreamPosition SavedPosition(DeclsCursor);
2509
2510  ReadingKindTracker ReadingKind(Read_Type, *this);
2511
2512  // Note that we are loading a type record.
2513  Deserializing AType(this);
2514
2515  DeclsCursor.JumpToBit(Loc.second);
2516  RecordData Record;
2517  unsigned Code = DeclsCursor.ReadCode();
2518  switch ((TypeCode)DeclsCursor.ReadRecord(Code, Record)) {
2519  case TYPE_EXT_QUAL: {
2520    if (Record.size() != 2) {
2521      Error("Incorrect encoding of extended qualifier type");
2522      return QualType();
2523    }
2524    QualType Base = GetType(Record[0]);
2525    Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[1]);
2526    return Context->getQualifiedType(Base, Quals);
2527  }
2528
2529  case TYPE_COMPLEX: {
2530    if (Record.size() != 1) {
2531      Error("Incorrect encoding of complex type");
2532      return QualType();
2533    }
2534    QualType ElemType = GetType(Record[0]);
2535    return Context->getComplexType(ElemType);
2536  }
2537
2538  case TYPE_POINTER: {
2539    if (Record.size() != 1) {
2540      Error("Incorrect encoding of pointer type");
2541      return QualType();
2542    }
2543    QualType PointeeType = GetType(Record[0]);
2544    return Context->getPointerType(PointeeType);
2545  }
2546
2547  case TYPE_BLOCK_POINTER: {
2548    if (Record.size() != 1) {
2549      Error("Incorrect encoding of block pointer type");
2550      return QualType();
2551    }
2552    QualType PointeeType = GetType(Record[0]);
2553    return Context->getBlockPointerType(PointeeType);
2554  }
2555
2556  case TYPE_LVALUE_REFERENCE: {
2557    if (Record.size() != 1) {
2558      Error("Incorrect encoding of lvalue reference type");
2559      return QualType();
2560    }
2561    QualType PointeeType = GetType(Record[0]);
2562    return Context->getLValueReferenceType(PointeeType);
2563  }
2564
2565  case TYPE_RVALUE_REFERENCE: {
2566    if (Record.size() != 1) {
2567      Error("Incorrect encoding of rvalue reference type");
2568      return QualType();
2569    }
2570    QualType PointeeType = GetType(Record[0]);
2571    return Context->getRValueReferenceType(PointeeType);
2572  }
2573
2574  case TYPE_MEMBER_POINTER: {
2575    if (Record.size() != 2) {
2576      Error("Incorrect encoding of member pointer type");
2577      return QualType();
2578    }
2579    QualType PointeeType = GetType(Record[0]);
2580    QualType ClassType = GetType(Record[1]);
2581    return Context->getMemberPointerType(PointeeType, ClassType.getTypePtr());
2582  }
2583
2584  case TYPE_CONSTANT_ARRAY: {
2585    QualType ElementType = GetType(Record[0]);
2586    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
2587    unsigned IndexTypeQuals = Record[2];
2588    unsigned Idx = 3;
2589    llvm::APInt Size = ReadAPInt(Record, Idx);
2590    return Context->getConstantArrayType(ElementType, Size,
2591                                         ASM, IndexTypeQuals);
2592  }
2593
2594  case TYPE_INCOMPLETE_ARRAY: {
2595    QualType ElementType = GetType(Record[0]);
2596    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
2597    unsigned IndexTypeQuals = Record[2];
2598    return Context->getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
2599  }
2600
2601  case TYPE_VARIABLE_ARRAY: {
2602    QualType ElementType = GetType(Record[0]);
2603    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
2604    unsigned IndexTypeQuals = Record[2];
2605    SourceLocation LBLoc = SourceLocation::getFromRawEncoding(Record[3]);
2606    SourceLocation RBLoc = SourceLocation::getFromRawEncoding(Record[4]);
2607    return Context->getVariableArrayType(ElementType, ReadExpr(DeclsCursor),
2608                                         ASM, IndexTypeQuals,
2609                                         SourceRange(LBLoc, RBLoc));
2610  }
2611
2612  case TYPE_VECTOR: {
2613    if (Record.size() != 3) {
2614      Error("incorrect encoding of vector type in AST file");
2615      return QualType();
2616    }
2617
2618    QualType ElementType = GetType(Record[0]);
2619    unsigned NumElements = Record[1];
2620    unsigned AltiVecSpec = Record[2];
2621    return Context->getVectorType(ElementType, NumElements,
2622                                  (VectorType::AltiVecSpecific)AltiVecSpec);
2623  }
2624
2625  case TYPE_EXT_VECTOR: {
2626    if (Record.size() != 3) {
2627      Error("incorrect encoding of extended vector type in AST file");
2628      return QualType();
2629    }
2630
2631    QualType ElementType = GetType(Record[0]);
2632    unsigned NumElements = Record[1];
2633    return Context->getExtVectorType(ElementType, NumElements);
2634  }
2635
2636  case TYPE_FUNCTION_NO_PROTO: {
2637    if (Record.size() != 4) {
2638      Error("incorrect encoding of no-proto function type");
2639      return QualType();
2640    }
2641    QualType ResultType = GetType(Record[0]);
2642    FunctionType::ExtInfo Info(Record[1], Record[2], (CallingConv)Record[3]);
2643    return Context->getFunctionNoProtoType(ResultType, Info);
2644  }
2645
2646  case TYPE_FUNCTION_PROTO: {
2647    QualType ResultType = GetType(Record[0]);
2648    bool NoReturn = Record[1];
2649    unsigned RegParm = Record[2];
2650    CallingConv CallConv = (CallingConv)Record[3];
2651    unsigned Idx = 4;
2652    unsigned NumParams = Record[Idx++];
2653    llvm::SmallVector<QualType, 16> ParamTypes;
2654    for (unsigned I = 0; I != NumParams; ++I)
2655      ParamTypes.push_back(GetType(Record[Idx++]));
2656    bool isVariadic = Record[Idx++];
2657    unsigned Quals = Record[Idx++];
2658    bool hasExceptionSpec = Record[Idx++];
2659    bool hasAnyExceptionSpec = Record[Idx++];
2660    unsigned NumExceptions = Record[Idx++];
2661    llvm::SmallVector<QualType, 2> Exceptions;
2662    for (unsigned I = 0; I != NumExceptions; ++I)
2663      Exceptions.push_back(GetType(Record[Idx++]));
2664    return Context->getFunctionType(ResultType, ParamTypes.data(), NumParams,
2665                                    isVariadic, Quals, hasExceptionSpec,
2666                                    hasAnyExceptionSpec, NumExceptions,
2667                                    Exceptions.data(),
2668                                    FunctionType::ExtInfo(NoReturn, RegParm,
2669                                                          CallConv));
2670  }
2671
2672  case TYPE_UNRESOLVED_USING:
2673    return Context->getTypeDeclType(
2674             cast<UnresolvedUsingTypenameDecl>(GetDecl(Record[0])));
2675
2676  case TYPE_TYPEDEF: {
2677    if (Record.size() != 2) {
2678      Error("incorrect encoding of typedef type");
2679      return QualType();
2680    }
2681    TypedefDecl *Decl = cast<TypedefDecl>(GetDecl(Record[0]));
2682    QualType Canonical = GetType(Record[1]);
2683    return Context->getTypedefType(Decl, Canonical);
2684  }
2685
2686  case TYPE_TYPEOF_EXPR:
2687    return Context->getTypeOfExprType(ReadExpr(DeclsCursor));
2688
2689  case TYPE_TYPEOF: {
2690    if (Record.size() != 1) {
2691      Error("incorrect encoding of typeof(type) in AST file");
2692      return QualType();
2693    }
2694    QualType UnderlyingType = GetType(Record[0]);
2695    return Context->getTypeOfType(UnderlyingType);
2696  }
2697
2698  case TYPE_DECLTYPE:
2699    return Context->getDecltypeType(ReadExpr(DeclsCursor));
2700
2701  case TYPE_RECORD: {
2702    if (Record.size() != 2) {
2703      Error("incorrect encoding of record type");
2704      return QualType();
2705    }
2706    bool IsDependent = Record[0];
2707    QualType T = Context->getRecordType(cast<RecordDecl>(GetDecl(Record[1])));
2708    T->Dependent = IsDependent;
2709    return T;
2710  }
2711
2712  case TYPE_ENUM: {
2713    if (Record.size() != 2) {
2714      Error("incorrect encoding of enum type");
2715      return QualType();
2716    }
2717    bool IsDependent = Record[0];
2718    QualType T = Context->getEnumType(cast<EnumDecl>(GetDecl(Record[1])));
2719    T->Dependent = IsDependent;
2720    return T;
2721  }
2722
2723  case TYPE_ELABORATED: {
2724    unsigned Idx = 0;
2725    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
2726    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(Record, Idx);
2727    QualType NamedType = GetType(Record[Idx++]);
2728    return Context->getElaboratedType(Keyword, NNS, NamedType);
2729  }
2730
2731  case TYPE_OBJC_INTERFACE: {
2732    unsigned Idx = 0;
2733    ObjCInterfaceDecl *ItfD = cast<ObjCInterfaceDecl>(GetDecl(Record[Idx++]));
2734    return Context->getObjCInterfaceType(ItfD);
2735  }
2736
2737  case TYPE_OBJC_OBJECT: {
2738    unsigned Idx = 0;
2739    QualType Base = GetType(Record[Idx++]);
2740    unsigned NumProtos = Record[Idx++];
2741    llvm::SmallVector<ObjCProtocolDecl*, 4> Protos;
2742    for (unsigned I = 0; I != NumProtos; ++I)
2743      Protos.push_back(cast<ObjCProtocolDecl>(GetDecl(Record[Idx++])));
2744    return Context->getObjCObjectType(Base, Protos.data(), NumProtos);
2745  }
2746
2747  case TYPE_OBJC_OBJECT_POINTER: {
2748    unsigned Idx = 0;
2749    QualType Pointee = GetType(Record[Idx++]);
2750    return Context->getObjCObjectPointerType(Pointee);
2751  }
2752
2753  case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
2754    unsigned Idx = 0;
2755    QualType Parm = GetType(Record[Idx++]);
2756    QualType Replacement = GetType(Record[Idx++]);
2757    return
2758      Context->getSubstTemplateTypeParmType(cast<TemplateTypeParmType>(Parm),
2759                                            Replacement);
2760  }
2761
2762  case TYPE_INJECTED_CLASS_NAME: {
2763    CXXRecordDecl *D = cast<CXXRecordDecl>(GetDecl(Record[0]));
2764    QualType TST = GetType(Record[1]); // probably derivable
2765    // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
2766    // for AST reading, too much interdependencies.
2767    return
2768      QualType(new (*Context, TypeAlignment) InjectedClassNameType(D, TST), 0);
2769  }
2770
2771  case TYPE_TEMPLATE_TYPE_PARM: {
2772    unsigned Idx = 0;
2773    unsigned Depth = Record[Idx++];
2774    unsigned Index = Record[Idx++];
2775    bool Pack = Record[Idx++];
2776    IdentifierInfo *Name = GetIdentifierInfo(Record, Idx);
2777    return Context->getTemplateTypeParmType(Depth, Index, Pack, Name);
2778  }
2779
2780  case TYPE_DEPENDENT_NAME: {
2781    unsigned Idx = 0;
2782    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
2783    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(Record, Idx);
2784    const IdentifierInfo *Name = this->GetIdentifierInfo(Record, Idx);
2785    QualType Canon = GetType(Record[Idx++]);
2786    return Context->getDependentNameType(Keyword, NNS, Name, Canon);
2787  }
2788
2789  case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
2790    unsigned Idx = 0;
2791    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
2792    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(Record, Idx);
2793    const IdentifierInfo *Name = this->GetIdentifierInfo(Record, Idx);
2794    unsigned NumArgs = Record[Idx++];
2795    llvm::SmallVector<TemplateArgument, 8> Args;
2796    Args.reserve(NumArgs);
2797    while (NumArgs--)
2798      Args.push_back(ReadTemplateArgument(DeclsCursor, Record, Idx));
2799    return Context->getDependentTemplateSpecializationType(Keyword, NNS, Name,
2800                                                      Args.size(), Args.data());
2801  }
2802
2803  case TYPE_DEPENDENT_SIZED_ARRAY: {
2804    unsigned Idx = 0;
2805
2806    // ArrayType
2807    QualType ElementType = GetType(Record[Idx++]);
2808    ArrayType::ArraySizeModifier ASM
2809      = (ArrayType::ArraySizeModifier)Record[Idx++];
2810    unsigned IndexTypeQuals = Record[Idx++];
2811
2812    // DependentSizedArrayType
2813    Expr *NumElts = ReadExpr(DeclsCursor);
2814    SourceRange Brackets = ReadSourceRange(Record, Idx);
2815
2816    return Context->getDependentSizedArrayType(ElementType, NumElts, ASM,
2817                                               IndexTypeQuals, Brackets);
2818  }
2819
2820  case TYPE_TEMPLATE_SPECIALIZATION: {
2821    unsigned Idx = 0;
2822    bool IsDependent = Record[Idx++];
2823    TemplateName Name = ReadTemplateName(Record, Idx);
2824    llvm::SmallVector<TemplateArgument, 8> Args;
2825    ReadTemplateArgumentList(Args, DeclsCursor, Record, Idx);
2826    QualType Canon = GetType(Record[Idx++]);
2827    QualType T;
2828    if (Canon.isNull())
2829      T = Context->getCanonicalTemplateSpecializationType(Name, Args.data(),
2830                                                          Args.size());
2831    else
2832      T = Context->getTemplateSpecializationType(Name, Args.data(),
2833                                                 Args.size(), Canon);
2834    T->Dependent = IsDependent;
2835    return T;
2836  }
2837  }
2838  // Suppress a GCC warning
2839  return QualType();
2840}
2841
2842namespace {
2843
2844class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
2845  ASTReader &Reader;
2846  llvm::BitstreamCursor &DeclsCursor;
2847  const ASTReader::RecordData &Record;
2848  unsigned &Idx;
2849
2850public:
2851  TypeLocReader(ASTReader &Reader, llvm::BitstreamCursor &Cursor,
2852                const ASTReader::RecordData &Record, unsigned &Idx)
2853    : Reader(Reader), DeclsCursor(Cursor), Record(Record), Idx(Idx) { }
2854
2855  // We want compile-time assurance that we've enumerated all of
2856  // these, so unfortunately we have to declare them first, then
2857  // define them out-of-line.
2858#define ABSTRACT_TYPELOC(CLASS, PARENT)
2859#define TYPELOC(CLASS, PARENT) \
2860  void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
2861#include "clang/AST/TypeLocNodes.def"
2862
2863  void VisitFunctionTypeLoc(FunctionTypeLoc);
2864  void VisitArrayTypeLoc(ArrayTypeLoc);
2865};
2866
2867}
2868
2869void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
2870  // nothing to do
2871}
2872void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
2873  TL.setBuiltinLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2874  if (TL.needsExtraLocalData()) {
2875    TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
2876    TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
2877    TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
2878    TL.setModeAttr(Record[Idx++]);
2879  }
2880}
2881void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
2882  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2883}
2884void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
2885  TL.setStarLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2886}
2887void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
2888  TL.setCaretLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2889}
2890void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
2891  TL.setAmpLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2892}
2893void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
2894  TL.setAmpAmpLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2895}
2896void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
2897  TL.setStarLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2898}
2899void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
2900  TL.setLBracketLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2901  TL.setRBracketLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2902  if (Record[Idx++])
2903    TL.setSizeExpr(Reader.ReadExpr(DeclsCursor));
2904  else
2905    TL.setSizeExpr(0);
2906}
2907void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
2908  VisitArrayTypeLoc(TL);
2909}
2910void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
2911  VisitArrayTypeLoc(TL);
2912}
2913void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
2914  VisitArrayTypeLoc(TL);
2915}
2916void TypeLocReader::VisitDependentSizedArrayTypeLoc(
2917                                            DependentSizedArrayTypeLoc TL) {
2918  VisitArrayTypeLoc(TL);
2919}
2920void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
2921                                        DependentSizedExtVectorTypeLoc TL) {
2922  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2923}
2924void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
2925  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2926}
2927void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
2928  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2929}
2930void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
2931  TL.setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2932  TL.setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2933  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i) {
2934    TL.setArg(i, cast_or_null<ParmVarDecl>(Reader.GetDecl(Record[Idx++])));
2935  }
2936}
2937void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
2938  VisitFunctionTypeLoc(TL);
2939}
2940void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
2941  VisitFunctionTypeLoc(TL);
2942}
2943void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
2944  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2945}
2946void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
2947  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2948}
2949void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
2950  TL.setTypeofLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2951  TL.setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2952  TL.setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2953}
2954void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
2955  TL.setTypeofLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2956  TL.setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2957  TL.setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2958  TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx));
2959}
2960void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
2961  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2962}
2963void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
2964  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2965}
2966void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
2967  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2968}
2969void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
2970  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2971}
2972void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
2973                                            SubstTemplateTypeParmTypeLoc TL) {
2974  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2975}
2976void TypeLocReader::VisitTemplateSpecializationTypeLoc(
2977                                           TemplateSpecializationTypeLoc TL) {
2978  TL.setTemplateNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2979  TL.setLAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2980  TL.setRAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2981  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
2982    TL.setArgLocInfo(i,
2983        Reader.GetTemplateArgumentLocInfo(TL.getTypePtr()->getArg(i).getKind(),
2984                                          DeclsCursor, Record, Idx));
2985}
2986void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
2987  TL.setKeywordLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2988  TL.setQualifierRange(Reader.ReadSourceRange(Record, Idx));
2989}
2990void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
2991  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2992}
2993void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
2994  TL.setKeywordLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2995  TL.setQualifierRange(Reader.ReadSourceRange(Record, Idx));
2996  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
2997}
2998void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
2999       DependentTemplateSpecializationTypeLoc TL) {
3000  TL.setKeywordLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3001  TL.setQualifierRange(Reader.ReadSourceRange(Record, Idx));
3002  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3003  TL.setLAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3004  TL.setRAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3005  for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
3006    TL.setArgLocInfo(I,
3007        Reader.GetTemplateArgumentLocInfo(TL.getTypePtr()->getArg(I).getKind(),
3008                                          DeclsCursor, Record, Idx));
3009}
3010void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
3011  TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3012}
3013void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
3014  TL.setHasBaseTypeAsWritten(Record[Idx++]);
3015  TL.setLAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3016  TL.setRAngleLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3017  for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
3018    TL.setProtocolLoc(i, SourceLocation::getFromRawEncoding(Record[Idx++]));
3019}
3020void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
3021  TL.setStarLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
3022}
3023
3024TypeSourceInfo *ASTReader::GetTypeSourceInfo(llvm::BitstreamCursor &DeclsCursor,
3025                                             const RecordData &Record,
3026                                             unsigned &Idx) {
3027  QualType InfoTy = GetType(Record[Idx++]);
3028  if (InfoTy.isNull())
3029    return 0;
3030
3031  TypeSourceInfo *TInfo = getContext()->CreateTypeSourceInfo(InfoTy);
3032  TypeLocReader TLR(*this, DeclsCursor, Record, Idx);
3033  for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
3034    TLR.Visit(TL);
3035  return TInfo;
3036}
3037
3038QualType ASTReader::GetType(TypeID ID) {
3039  unsigned FastQuals = ID & Qualifiers::FastMask;
3040  unsigned Index = ID >> Qualifiers::FastWidth;
3041
3042  if (Index < NUM_PREDEF_TYPE_IDS) {
3043    QualType T;
3044    switch ((PredefinedTypeIDs)Index) {
3045    case PREDEF_TYPE_NULL_ID: return QualType();
3046    case PREDEF_TYPE_VOID_ID: T = Context->VoidTy; break;
3047    case PREDEF_TYPE_BOOL_ID: T = Context->BoolTy; break;
3048
3049    case PREDEF_TYPE_CHAR_U_ID:
3050    case PREDEF_TYPE_CHAR_S_ID:
3051      // FIXME: Check that the signedness of CharTy is correct!
3052      T = Context->CharTy;
3053      break;
3054
3055    case PREDEF_TYPE_UCHAR_ID:      T = Context->UnsignedCharTy;     break;
3056    case PREDEF_TYPE_USHORT_ID:     T = Context->UnsignedShortTy;    break;
3057    case PREDEF_TYPE_UINT_ID:       T = Context->UnsignedIntTy;      break;
3058    case PREDEF_TYPE_ULONG_ID:      T = Context->UnsignedLongTy;     break;
3059    case PREDEF_TYPE_ULONGLONG_ID:  T = Context->UnsignedLongLongTy; break;
3060    case PREDEF_TYPE_UINT128_ID:    T = Context->UnsignedInt128Ty;   break;
3061    case PREDEF_TYPE_SCHAR_ID:      T = Context->SignedCharTy;       break;
3062    case PREDEF_TYPE_WCHAR_ID:      T = Context->WCharTy;            break;
3063    case PREDEF_TYPE_SHORT_ID:      T = Context->ShortTy;            break;
3064    case PREDEF_TYPE_INT_ID:        T = Context->IntTy;              break;
3065    case PREDEF_TYPE_LONG_ID:       T = Context->LongTy;             break;
3066    case PREDEF_TYPE_LONGLONG_ID:   T = Context->LongLongTy;         break;
3067    case PREDEF_TYPE_INT128_ID:     T = Context->Int128Ty;           break;
3068    case PREDEF_TYPE_FLOAT_ID:      T = Context->FloatTy;            break;
3069    case PREDEF_TYPE_DOUBLE_ID:     T = Context->DoubleTy;           break;
3070    case PREDEF_TYPE_LONGDOUBLE_ID: T = Context->LongDoubleTy;       break;
3071    case PREDEF_TYPE_OVERLOAD_ID:   T = Context->OverloadTy;         break;
3072    case PREDEF_TYPE_DEPENDENT_ID:  T = Context->DependentTy;        break;
3073    case PREDEF_TYPE_NULLPTR_ID:    T = Context->NullPtrTy;          break;
3074    case PREDEF_TYPE_CHAR16_ID:     T = Context->Char16Ty;           break;
3075    case PREDEF_TYPE_CHAR32_ID:     T = Context->Char32Ty;           break;
3076    case PREDEF_TYPE_OBJC_ID:       T = Context->ObjCBuiltinIdTy;    break;
3077    case PREDEF_TYPE_OBJC_CLASS:    T = Context->ObjCBuiltinClassTy; break;
3078    case PREDEF_TYPE_OBJC_SEL:      T = Context->ObjCBuiltinSelTy;   break;
3079    }
3080
3081    assert(!T.isNull() && "Unknown predefined type");
3082    return T.withFastQualifiers(FastQuals);
3083  }
3084
3085  Index -= NUM_PREDEF_TYPE_IDS;
3086  assert(Index < TypesLoaded.size() && "Type index out-of-range");
3087  if (TypesLoaded[Index].isNull()) {
3088    TypesLoaded[Index] = ReadTypeRecord(Index);
3089    TypesLoaded[Index]->setFromAST();
3090    TypeIdxs[TypesLoaded[Index]] = TypeIdx::fromTypeID(ID);
3091    if (DeserializationListener)
3092      DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
3093                                        TypesLoaded[Index]);
3094  }
3095
3096  return TypesLoaded[Index].withFastQualifiers(FastQuals);
3097}
3098
3099TypeID ASTReader::GetTypeID(QualType T) const {
3100  return MakeTypeID(T,
3101              std::bind1st(std::mem_fun(&ASTReader::GetTypeIdx), this));
3102}
3103
3104TypeIdx ASTReader::GetTypeIdx(QualType T) const {
3105  if (T.isNull())
3106    return TypeIdx();
3107  assert(!T.getLocalFastQualifiers());
3108
3109  TypeIdxMap::const_iterator I = TypeIdxs.find(T);
3110  // GetTypeIdx is mostly used for computing the hash of DeclarationNames and
3111  // comparing keys of ASTDeclContextNameLookupTable.
3112  // If the type didn't come from the AST file use a specially marked index
3113  // so that any hash/key comparison fail since no such index is stored
3114  // in a AST file.
3115  if (I == TypeIdxs.end())
3116    return TypeIdx(-1);
3117  return I->second;
3118}
3119
3120TemplateArgumentLocInfo
3121ASTReader::GetTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind,
3122                                      llvm::BitstreamCursor &DeclsCursor,
3123                                      const RecordData &Record,
3124                                      unsigned &Index) {
3125  switch (Kind) {
3126  case TemplateArgument::Expression:
3127    return ReadExpr(DeclsCursor);
3128  case TemplateArgument::Type:
3129    return GetTypeSourceInfo(DeclsCursor, Record, Index);
3130  case TemplateArgument::Template: {
3131    SourceRange QualifierRange = ReadSourceRange(Record, Index);
3132    SourceLocation TemplateNameLoc = ReadSourceLocation(Record, Index);
3133    return TemplateArgumentLocInfo(QualifierRange, TemplateNameLoc);
3134  }
3135  case TemplateArgument::Null:
3136  case TemplateArgument::Integral:
3137  case TemplateArgument::Declaration:
3138  case TemplateArgument::Pack:
3139    return TemplateArgumentLocInfo();
3140  }
3141  llvm_unreachable("unexpected template argument loc");
3142  return TemplateArgumentLocInfo();
3143}
3144
3145TemplateArgumentLoc
3146ASTReader::ReadTemplateArgumentLoc(llvm::BitstreamCursor &DeclsCursor,
3147                                   const RecordData &Record, unsigned &Index) {
3148  TemplateArgument Arg = ReadTemplateArgument(DeclsCursor, Record, Index);
3149
3150  if (Arg.getKind() == TemplateArgument::Expression) {
3151    if (Record[Index++]) // bool InfoHasSameExpr.
3152      return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
3153  }
3154  return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(Arg.getKind(),
3155                                                             DeclsCursor,
3156                                                             Record, Index));
3157}
3158
3159Decl *ASTReader::GetExternalDecl(uint32_t ID) {
3160  return GetDecl(ID);
3161}
3162
3163TranslationUnitDecl *ASTReader::GetTranslationUnitDecl() {
3164  if (!DeclsLoaded[0]) {
3165    ReadDeclRecord(0, 1);
3166    if (DeserializationListener)
3167      DeserializationListener->DeclRead(1, DeclsLoaded[0]);
3168  }
3169
3170  return cast<TranslationUnitDecl>(DeclsLoaded[0]);
3171}
3172
3173Decl *ASTReader::GetDecl(DeclID ID) {
3174  if (ID == 0)
3175    return 0;
3176
3177  if (ID > DeclsLoaded.size()) {
3178    Error("declaration ID out-of-range for AST file");
3179    return 0;
3180  }
3181
3182  unsigned Index = ID - 1;
3183  if (!DeclsLoaded[Index]) {
3184    ReadDeclRecord(Index, ID);
3185    if (DeserializationListener)
3186      DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
3187  }
3188
3189  return DeclsLoaded[Index];
3190}
3191
3192/// \brief Resolve the offset of a statement into a statement.
3193///
3194/// This operation will read a new statement from the external
3195/// source each time it is called, and is meant to be used via a
3196/// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
3197Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
3198  // Offset here is a global offset across the entire chain.
3199  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
3200    PerFileData &F = *Chain[N - I - 1];
3201    if (Offset < F.SizeInBits) {
3202      // Since we know that this statement is part of a decl, make sure to use
3203      // the decl cursor to read it.
3204      F.DeclsCursor.JumpToBit(Offset);
3205      return ReadStmtFromStream(F.DeclsCursor);
3206    }
3207    Offset -= F.SizeInBits;
3208  }
3209  llvm_unreachable("Broken chain");
3210}
3211
3212bool ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
3213                                         llvm::SmallVectorImpl<Decl*> &Decls) {
3214  assert(DC->hasExternalLexicalStorage() &&
3215         "DeclContext has no lexical decls in storage");
3216
3217  // There might be lexical decls in multiple parts of the chain, for the TU
3218  // at least.
3219  // DeclContextOffsets might reallocate as we load additional decls below,
3220  // so make a copy of the vector.
3221  DeclContextInfos Infos = DeclContextOffsets[DC];
3222  for (DeclContextInfos::iterator I = Infos.begin(), E = Infos.end();
3223       I != E; ++I) {
3224    // IDs can be 0 if this context doesn't contain declarations.
3225    if (!I->LexicalDecls)
3226      continue;
3227
3228    // Load all of the declaration IDs
3229    for (const DeclID *ID = I->LexicalDecls, *IDE = ID + I->NumLexicalDecls;
3230         ID != IDE; ++ID) {
3231      Decl *D = GetDecl(*ID);
3232      assert(D && "Null decl in lexical decls");
3233      Decls.push_back(D);
3234    }
3235  }
3236
3237  ++NumLexicalDeclContextsRead;
3238  return false;
3239}
3240
3241DeclContext::lookup_result
3242ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
3243                                          DeclarationName Name) {
3244  assert(DC->hasExternalVisibleStorage() &&
3245         "DeclContext has no visible decls in storage");
3246  if (!Name)
3247    return DeclContext::lookup_result(DeclContext::lookup_iterator(0),
3248                                      DeclContext::lookup_iterator(0));
3249
3250  llvm::SmallVector<NamedDecl *, 64> Decls;
3251  // There might be visible decls in multiple parts of the chain, for the TU
3252  // and namespaces. For any given name, the last available results replace
3253  // all earlier ones. For this reason, we walk in reverse.
3254  DeclContextInfos &Infos = DeclContextOffsets[DC];
3255  for (DeclContextInfos::reverse_iterator I = Infos.rbegin(), E = Infos.rend();
3256       I != E; ++I) {
3257    if (!I->NameLookupTableData)
3258      continue;
3259
3260    ASTDeclContextNameLookupTable *LookupTable =
3261        (ASTDeclContextNameLookupTable*)I->NameLookupTableData;
3262    ASTDeclContextNameLookupTable::iterator Pos = LookupTable->find(Name);
3263    if (Pos == LookupTable->end())
3264      continue;
3265
3266    ASTDeclContextNameLookupTrait::data_type Data = *Pos;
3267    for (; Data.first != Data.second; ++Data.first)
3268      Decls.push_back(cast<NamedDecl>(GetDecl(*Data.first)));
3269    break;
3270  }
3271
3272  ++NumVisibleDeclContextsRead;
3273
3274  SetExternalVisibleDeclsForName(DC, Name, Decls);
3275  return const_cast<DeclContext*>(DC)->lookup(Name);
3276}
3277
3278void ASTReader::MaterializeVisibleDecls(const DeclContext *DC) {
3279  assert(DC->hasExternalVisibleStorage() &&
3280         "DeclContext has no visible decls in storage");
3281
3282  llvm::SmallVector<NamedDecl *, 64> Decls;
3283  // There might be visible decls in multiple parts of the chain, for the TU
3284  // and namespaces.
3285  DeclContextInfos &Infos = DeclContextOffsets[DC];
3286  for (DeclContextInfos::iterator I = Infos.begin(), E = Infos.end();
3287       I != E; ++I) {
3288    if (!I->NameLookupTableData)
3289      continue;
3290
3291    ASTDeclContextNameLookupTable *LookupTable =
3292        (ASTDeclContextNameLookupTable*)I->NameLookupTableData;
3293    for (ASTDeclContextNameLookupTable::item_iterator
3294           ItemI = LookupTable->item_begin(),
3295           ItemEnd = LookupTable->item_end() ; ItemI != ItemEnd; ++ItemI) {
3296      ASTDeclContextNameLookupTable::item_iterator::value_type Val
3297          = *ItemI;
3298      ASTDeclContextNameLookupTrait::data_type Data = Val.second;
3299      Decls.clear();
3300      for (; Data.first != Data.second; ++Data.first)
3301        Decls.push_back(cast<NamedDecl>(GetDecl(*Data.first)));
3302      MaterializeVisibleDeclsForName(DC, Val.first, Decls);
3303    }
3304  }
3305}
3306
3307void ASTReader::PassInterestingDeclsToConsumer() {
3308  assert(Consumer);
3309  while (!InterestingDecls.empty()) {
3310    DeclGroupRef DG(InterestingDecls.front());
3311    InterestingDecls.pop_front();
3312    Consumer->HandleInterestingDecl(DG);
3313  }
3314}
3315
3316void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
3317  this->Consumer = Consumer;
3318
3319  if (!Consumer)
3320    return;
3321
3322  for (unsigned I = 0, N = ExternalDefinitions.size(); I != N; ++I) {
3323    // Force deserialization of this decl, which will cause it to be queued for
3324    // passing to the consumer.
3325    GetDecl(ExternalDefinitions[I]);
3326  }
3327
3328  PassInterestingDeclsToConsumer();
3329}
3330
3331void ASTReader::PrintStats() {
3332  std::fprintf(stderr, "*** AST File Statistics:\n");
3333
3334  unsigned NumTypesLoaded
3335    = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
3336                                      QualType());
3337  unsigned NumDeclsLoaded
3338    = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
3339                                      (Decl *)0);
3340  unsigned NumIdentifiersLoaded
3341    = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
3342                                            IdentifiersLoaded.end(),
3343                                            (IdentifierInfo *)0);
3344  unsigned NumSelectorsLoaded
3345    = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
3346                                          SelectorsLoaded.end(),
3347                                          Selector());
3348
3349  std::fprintf(stderr, "  %u stat cache hits\n", NumStatHits);
3350  std::fprintf(stderr, "  %u stat cache misses\n", NumStatMisses);
3351  if (TotalNumSLocEntries)
3352    std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
3353                 NumSLocEntriesRead, TotalNumSLocEntries,
3354                 ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
3355  if (!TypesLoaded.empty())
3356    std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
3357                 NumTypesLoaded, (unsigned)TypesLoaded.size(),
3358                 ((float)NumTypesLoaded/TypesLoaded.size() * 100));
3359  if (!DeclsLoaded.empty())
3360    std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
3361                 NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
3362                 ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
3363  if (!IdentifiersLoaded.empty())
3364    std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
3365                 NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
3366                 ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
3367  if (!SelectorsLoaded.empty())
3368    std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
3369                 NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
3370                 ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
3371  if (TotalNumStatements)
3372    std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
3373                 NumStatementsRead, TotalNumStatements,
3374                 ((float)NumStatementsRead/TotalNumStatements * 100));
3375  if (TotalNumMacros)
3376    std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
3377                 NumMacrosRead, TotalNumMacros,
3378                 ((float)NumMacrosRead/TotalNumMacros * 100));
3379  if (TotalLexicalDeclContexts)
3380    std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
3381                 NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
3382                 ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
3383                  * 100));
3384  if (TotalVisibleDeclContexts)
3385    std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
3386                 NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
3387                 ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
3388                  * 100));
3389  if (TotalNumMethodPoolEntries) {
3390    std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
3391                 NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
3392                 ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
3393                  * 100));
3394    std::fprintf(stderr, "  %u method pool misses\n", NumMethodPoolMisses);
3395  }
3396  std::fprintf(stderr, "\n");
3397}
3398
3399void ASTReader::InitializeSema(Sema &S) {
3400  SemaObj = &S;
3401  S.ExternalSource = this;
3402
3403  // Makes sure any declarations that were deserialized "too early"
3404  // still get added to the identifier's declaration chains.
3405  for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) {
3406    if (SemaObj->TUScope)
3407      SemaObj->TUScope->AddDecl(PreloadedDecls[I]);
3408
3409    SemaObj->IdResolver.AddDecl(PreloadedDecls[I]);
3410  }
3411  PreloadedDecls.clear();
3412
3413  // If there were any tentative definitions, deserialize them and add
3414  // them to Sema's list of tentative definitions.
3415  for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
3416    VarDecl *Var = cast<VarDecl>(GetDecl(TentativeDefinitions[I]));
3417    SemaObj->TentativeDefinitions.push_back(Var);
3418  }
3419
3420  // If there were any unused file scoped decls, deserialize them and add to
3421  // Sema's list of unused file scoped decls.
3422  for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
3423    DeclaratorDecl *D = cast<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
3424    SemaObj->UnusedFileScopedDecls.push_back(D);
3425  }
3426
3427  // If there were any weak undeclared identifiers, deserialize them and add to
3428  // Sema's list of weak undeclared identifiers.
3429  if (!WeakUndeclaredIdentifiers.empty()) {
3430    unsigned Idx = 0;
3431    for (unsigned I = 0, N = WeakUndeclaredIdentifiers[Idx++]; I != N; ++I) {
3432      IdentifierInfo *WeakId = GetIdentifierInfo(WeakUndeclaredIdentifiers,Idx);
3433      IdentifierInfo *AliasId=GetIdentifierInfo(WeakUndeclaredIdentifiers,Idx);
3434      SourceLocation Loc = ReadSourceLocation(WeakUndeclaredIdentifiers, Idx);
3435      bool Used = WeakUndeclaredIdentifiers[Idx++];
3436      Sema::WeakInfo WI(AliasId, Loc);
3437      WI.setUsed(Used);
3438      SemaObj->WeakUndeclaredIdentifiers.insert(std::make_pair(WeakId, WI));
3439    }
3440  }
3441
3442  // If there were any locally-scoped external declarations,
3443  // deserialize them and add them to Sema's table of locally-scoped
3444  // external declarations.
3445  for (unsigned I = 0, N = LocallyScopedExternalDecls.size(); I != N; ++I) {
3446    NamedDecl *D = cast<NamedDecl>(GetDecl(LocallyScopedExternalDecls[I]));
3447    SemaObj->LocallyScopedExternalDecls[D->getDeclName()] = D;
3448  }
3449
3450  // If there were any ext_vector type declarations, deserialize them
3451  // and add them to Sema's vector of such declarations.
3452  for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I)
3453    SemaObj->ExtVectorDecls.push_back(
3454                               cast<TypedefDecl>(GetDecl(ExtVectorDecls[I])));
3455
3456  // FIXME: Do VTable uses and dynamic classes deserialize too much ?
3457  // Can we cut them down before writing them ?
3458
3459  // If there were any VTable uses, deserialize the information and add it
3460  // to Sema's vector and map of VTable uses.
3461  if (!VTableUses.empty()) {
3462    unsigned Idx = 0;
3463    for (unsigned I = 0, N = VTableUses[Idx++]; I != N; ++I) {
3464      CXXRecordDecl *Class = cast<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
3465      SourceLocation Loc = ReadSourceLocation(VTableUses, Idx);
3466      bool DefinitionRequired = VTableUses[Idx++];
3467      SemaObj->VTableUses.push_back(std::make_pair(Class, Loc));
3468      SemaObj->VTablesUsed[Class] = DefinitionRequired;
3469    }
3470  }
3471
3472  // If there were any dynamic classes declarations, deserialize them
3473  // and add them to Sema's vector of such declarations.
3474  for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I)
3475    SemaObj->DynamicClasses.push_back(
3476                               cast<CXXRecordDecl>(GetDecl(DynamicClasses[I])));
3477
3478  // If there were any pending implicit instantiations, deserialize them
3479  // and add them to Sema's queue of such instantiations.
3480  assert(PendingInstantiations.size() % 2 == 0 && "Expected pairs of entries");
3481  for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
3482    ValueDecl *D=cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
3483    SourceLocation Loc = ReadSourceLocation(PendingInstantiations, Idx);
3484    SemaObj->PendingInstantiations.push_back(std::make_pair(D, Loc));
3485  }
3486
3487  // Load the offsets of the declarations that Sema references.
3488  // They will be lazily deserialized when needed.
3489  if (!SemaDeclRefs.empty()) {
3490    assert(SemaDeclRefs.size() == 2 && "More decl refs than expected!");
3491    SemaObj->StdNamespace = SemaDeclRefs[0];
3492    SemaObj->StdBadAlloc = SemaDeclRefs[1];
3493  }
3494
3495  // If there are @selector references added them to its pool. This is for
3496  // implementation of -Wselector.
3497  if (!ReferencedSelectorsData.empty()) {
3498    unsigned int DataSize = ReferencedSelectorsData.size()-1;
3499    unsigned I = 0;
3500    while (I < DataSize) {
3501      Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
3502      SourceLocation SelLoc =
3503        SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
3504      SemaObj->ReferencedSelectors.insert(std::make_pair(Sel, SelLoc));
3505    }
3506  }
3507}
3508
3509IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
3510  // Try to find this name within our on-disk hash tables. We start with the
3511  // most recent one, since that one contains the most up-to-date info.
3512  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
3513    ASTIdentifierLookupTable *IdTable
3514        = (ASTIdentifierLookupTable *)Chain[I]->IdentifierLookupTable;
3515    if (!IdTable)
3516      continue;
3517    std::pair<const char*, unsigned> Key(NameStart, NameEnd - NameStart);
3518    ASTIdentifierLookupTable::iterator Pos = IdTable->find(Key);
3519    if (Pos == IdTable->end())
3520      continue;
3521
3522    // Dereferencing the iterator has the effect of building the
3523    // IdentifierInfo node and populating it with the various
3524    // declarations it needs.
3525    return *Pos;
3526  }
3527  return 0;
3528}
3529
3530std::pair<ObjCMethodList, ObjCMethodList>
3531ASTReader::ReadMethodPool(Selector Sel) {
3532  // Find this selector in a hash table. We want to find the most recent entry.
3533  for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
3534    PerFileData &F = *Chain[I];
3535    if (!F.SelectorLookupTable)
3536      continue;
3537
3538    ASTSelectorLookupTable *PoolTable
3539      = (ASTSelectorLookupTable*)F.SelectorLookupTable;
3540    ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
3541    if (Pos != PoolTable->end()) {
3542      ++NumSelectorsRead;
3543      // FIXME: Not quite happy with the statistics here. We probably should
3544      // disable this tracking when called via LoadSelector.
3545      // Also, should entries without methods count as misses?
3546      ++NumMethodPoolEntriesRead;
3547      ASTSelectorLookupTrait::data_type Data = *Pos;
3548      if (DeserializationListener)
3549        DeserializationListener->SelectorRead(Data.ID, Sel);
3550      return std::make_pair(Data.Instance, Data.Factory);
3551    }
3552  }
3553
3554  ++NumMethodPoolMisses;
3555  return std::pair<ObjCMethodList, ObjCMethodList>();
3556}
3557
3558void ASTReader::LoadSelector(Selector Sel) {
3559  // It would be complicated to avoid reading the methods anyway. So don't.
3560  ReadMethodPool(Sel);
3561}
3562
3563void ASTReader::SetIdentifierInfo(unsigned ID, IdentifierInfo *II) {
3564  assert(ID && "Non-zero identifier ID required");
3565  assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
3566  IdentifiersLoaded[ID - 1] = II;
3567  if (DeserializationListener)
3568    DeserializationListener->IdentifierRead(ID, II);
3569}
3570
3571/// \brief Set the globally-visible declarations associated with the given
3572/// identifier.
3573///
3574/// If the AST reader is currently in a state where the given declaration IDs
3575/// cannot safely be resolved, they are queued until it is safe to resolve
3576/// them.
3577///
3578/// \param II an IdentifierInfo that refers to one or more globally-visible
3579/// declarations.
3580///
3581/// \param DeclIDs the set of declaration IDs with the name @p II that are
3582/// visible at global scope.
3583///
3584/// \param Nonrecursive should be true to indicate that the caller knows that
3585/// this call is non-recursive, and therefore the globally-visible declarations
3586/// will not be placed onto the pending queue.
3587void
3588ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
3589                              const llvm::SmallVectorImpl<uint32_t> &DeclIDs,
3590                                   bool Nonrecursive) {
3591  if (NumCurrentElementsDeserializing && !Nonrecursive) {
3592    PendingIdentifierInfos.push_back(PendingIdentifierInfo());
3593    PendingIdentifierInfo &PII = PendingIdentifierInfos.back();
3594    PII.II = II;
3595    PII.DeclIDs.append(DeclIDs.begin(), DeclIDs.end());
3596    return;
3597  }
3598
3599  for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
3600    NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
3601    if (SemaObj) {
3602      if (SemaObj->TUScope) {
3603        // Introduce this declaration into the translation-unit scope
3604        // and add it to the declaration chain for this identifier, so
3605        // that (unqualified) name lookup will find it.
3606        SemaObj->TUScope->AddDecl(D);
3607      }
3608      SemaObj->IdResolver.AddDeclToIdentifierChain(II, D);
3609    } else {
3610      // Queue this declaration so that it will be added to the
3611      // translation unit scope and identifier's declaration chain
3612      // once a Sema object is known.
3613      PreloadedDecls.push_back(D);
3614    }
3615  }
3616}
3617
3618IdentifierInfo *ASTReader::DecodeIdentifierInfo(unsigned ID) {
3619  if (ID == 0)
3620    return 0;
3621
3622  if (IdentifiersLoaded.empty()) {
3623    Error("no identifier table in AST file");
3624    return 0;
3625  }
3626
3627  assert(PP && "Forgot to set Preprocessor ?");
3628  ID -= 1;
3629  if (!IdentifiersLoaded[ID]) {
3630    unsigned Index = ID;
3631    const char *Str = 0;
3632    for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
3633      PerFileData *F = Chain[N - I - 1];
3634      if (Index < F->LocalNumIdentifiers) {
3635         uint32_t Offset = F->IdentifierOffsets[Index];
3636         Str = F->IdentifierTableData + Offset;
3637         break;
3638      }
3639      Index -= F->LocalNumIdentifiers;
3640    }
3641    assert(Str && "Broken Chain");
3642
3643    // All of the strings in the AST file are preceded by a 16-bit length.
3644    // Extract that 16-bit length to avoid having to execute strlen().
3645    // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
3646    //  unsigned integers.  This is important to avoid integer overflow when
3647    //  we cast them to 'unsigned'.
3648    const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
3649    unsigned StrLen = (((unsigned) StrLenPtr[0])
3650                       | (((unsigned) StrLenPtr[1]) << 8)) - 1;
3651    IdentifiersLoaded[ID]
3652      = &PP->getIdentifierTable().get(Str, StrLen);
3653    if (DeserializationListener)
3654      DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
3655  }
3656
3657  return IdentifiersLoaded[ID];
3658}
3659
3660void ASTReader::ReadSLocEntry(unsigned ID) {
3661  ReadSLocEntryRecord(ID);
3662}
3663
3664Selector ASTReader::DecodeSelector(unsigned ID) {
3665  if (ID == 0)
3666    return Selector();
3667
3668  if (ID > SelectorsLoaded.size()) {
3669    Error("selector ID out of range in AST file");
3670    return Selector();
3671  }
3672
3673  if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == 0) {
3674    // Load this selector from the selector table.
3675    unsigned Idx = ID - 1;
3676    for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
3677      PerFileData &F = *Chain[N - I - 1];
3678      if (Idx < F.LocalNumSelectors) {
3679        ASTSelectorLookupTrait Trait(*this);
3680        SelectorsLoaded[ID - 1] =
3681           Trait.ReadKey(F.SelectorLookupTableData + F.SelectorOffsets[Idx], 0);
3682        if (DeserializationListener)
3683          DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
3684        break;
3685      }
3686      Idx -= F.LocalNumSelectors;
3687    }
3688  }
3689
3690  return SelectorsLoaded[ID - 1];
3691}
3692
3693Selector ASTReader::GetExternalSelector(uint32_t ID) {
3694  return DecodeSelector(ID);
3695}
3696
3697uint32_t ASTReader::GetNumExternalSelectors() {
3698  // ID 0 (the null selector) is considered an external selector.
3699  return getTotalNumSelectors() + 1;
3700}
3701
3702DeclarationName
3703ASTReader::ReadDeclarationName(const RecordData &Record, unsigned &Idx) {
3704  DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
3705  switch (Kind) {
3706  case DeclarationName::Identifier:
3707    return DeclarationName(GetIdentifierInfo(Record, Idx));
3708
3709  case DeclarationName::ObjCZeroArgSelector:
3710  case DeclarationName::ObjCOneArgSelector:
3711  case DeclarationName::ObjCMultiArgSelector:
3712    return DeclarationName(GetSelector(Record, Idx));
3713
3714  case DeclarationName::CXXConstructorName:
3715    return Context->DeclarationNames.getCXXConstructorName(
3716                          Context->getCanonicalType(GetType(Record[Idx++])));
3717
3718  case DeclarationName::CXXDestructorName:
3719    return Context->DeclarationNames.getCXXDestructorName(
3720                          Context->getCanonicalType(GetType(Record[Idx++])));
3721
3722  case DeclarationName::CXXConversionFunctionName:
3723    return Context->DeclarationNames.getCXXConversionFunctionName(
3724                          Context->getCanonicalType(GetType(Record[Idx++])));
3725
3726  case DeclarationName::CXXOperatorName:
3727    return Context->DeclarationNames.getCXXOperatorName(
3728                                       (OverloadedOperatorKind)Record[Idx++]);
3729
3730  case DeclarationName::CXXLiteralOperatorName:
3731    return Context->DeclarationNames.getCXXLiteralOperatorName(
3732                                       GetIdentifierInfo(Record, Idx));
3733
3734  case DeclarationName::CXXUsingDirective:
3735    return DeclarationName::getUsingDirectiveName();
3736  }
3737
3738  // Required to silence GCC warning
3739  return DeclarationName();
3740}
3741
3742TemplateName
3743ASTReader::ReadTemplateName(const RecordData &Record, unsigned &Idx) {
3744  TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
3745  switch (Kind) {
3746  case TemplateName::Template:
3747    return TemplateName(cast_or_null<TemplateDecl>(GetDecl(Record[Idx++])));
3748
3749  case TemplateName::OverloadedTemplate: {
3750    unsigned size = Record[Idx++];
3751    UnresolvedSet<8> Decls;
3752    while (size--)
3753      Decls.addDecl(cast<NamedDecl>(GetDecl(Record[Idx++])));
3754
3755    return Context->getOverloadedTemplateName(Decls.begin(), Decls.end());
3756  }
3757
3758  case TemplateName::QualifiedTemplate: {
3759    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(Record, Idx);
3760    bool hasTemplKeyword = Record[Idx++];
3761    TemplateDecl *Template = cast<TemplateDecl>(GetDecl(Record[Idx++]));
3762    return Context->getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
3763  }
3764
3765  case TemplateName::DependentTemplate: {
3766    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(Record, Idx);
3767    if (Record[Idx++])  // isIdentifier
3768      return Context->getDependentTemplateName(NNS,
3769                                               GetIdentifierInfo(Record, Idx));
3770    return Context->getDependentTemplateName(NNS,
3771                                         (OverloadedOperatorKind)Record[Idx++]);
3772  }
3773  }
3774
3775  assert(0 && "Unhandled template name kind!");
3776  return TemplateName();
3777}
3778
3779TemplateArgument
3780ASTReader::ReadTemplateArgument(llvm::BitstreamCursor &DeclsCursor,
3781                                const RecordData &Record, unsigned &Idx) {
3782  switch ((TemplateArgument::ArgKind)Record[Idx++]) {
3783  case TemplateArgument::Null:
3784    return TemplateArgument();
3785  case TemplateArgument::Type:
3786    return TemplateArgument(GetType(Record[Idx++]));
3787  case TemplateArgument::Declaration:
3788    return TemplateArgument(GetDecl(Record[Idx++]));
3789  case TemplateArgument::Integral: {
3790    llvm::APSInt Value = ReadAPSInt(Record, Idx);
3791    QualType T = GetType(Record[Idx++]);
3792    return TemplateArgument(Value, T);
3793  }
3794  case TemplateArgument::Template:
3795    return TemplateArgument(ReadTemplateName(Record, Idx));
3796  case TemplateArgument::Expression:
3797    return TemplateArgument(ReadExpr(DeclsCursor));
3798  case TemplateArgument::Pack: {
3799    unsigned NumArgs = Record[Idx++];
3800    llvm::SmallVector<TemplateArgument, 8> Args;
3801    Args.reserve(NumArgs);
3802    while (NumArgs--)
3803      Args.push_back(ReadTemplateArgument(DeclsCursor, Record, Idx));
3804    TemplateArgument TemplArg;
3805    TemplArg.setArgumentPack(Args.data(), Args.size(), /*CopyArgs=*/true);
3806    return TemplArg;
3807  }
3808  }
3809
3810  assert(0 && "Unhandled template argument kind!");
3811  return TemplateArgument();
3812}
3813
3814TemplateParameterList *
3815ASTReader::ReadTemplateParameterList(const RecordData &Record, unsigned &Idx) {
3816  SourceLocation TemplateLoc = ReadSourceLocation(Record, Idx);
3817  SourceLocation LAngleLoc = ReadSourceLocation(Record, Idx);
3818  SourceLocation RAngleLoc = ReadSourceLocation(Record, Idx);
3819
3820  unsigned NumParams = Record[Idx++];
3821  llvm::SmallVector<NamedDecl *, 16> Params;
3822  Params.reserve(NumParams);
3823  while (NumParams--)
3824    Params.push_back(cast<NamedDecl>(GetDecl(Record[Idx++])));
3825
3826  TemplateParameterList* TemplateParams =
3827    TemplateParameterList::Create(*Context, TemplateLoc, LAngleLoc,
3828                                  Params.data(), Params.size(), RAngleLoc);
3829  return TemplateParams;
3830}
3831
3832void
3833ASTReader::
3834ReadTemplateArgumentList(llvm::SmallVector<TemplateArgument, 8> &TemplArgs,
3835                         llvm::BitstreamCursor &DeclsCursor,
3836                         const RecordData &Record, unsigned &Idx) {
3837  unsigned NumTemplateArgs = Record[Idx++];
3838  TemplArgs.reserve(NumTemplateArgs);
3839  while (NumTemplateArgs--)
3840    TemplArgs.push_back(ReadTemplateArgument(DeclsCursor, Record, Idx));
3841}
3842
3843/// \brief Read a UnresolvedSet structure.
3844void ASTReader::ReadUnresolvedSet(UnresolvedSetImpl &Set,
3845                                  const RecordData &Record, unsigned &Idx) {
3846  unsigned NumDecls = Record[Idx++];
3847  while (NumDecls--) {
3848    NamedDecl *D = cast<NamedDecl>(GetDecl(Record[Idx++]));
3849    AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
3850    Set.addDecl(D, AS);
3851  }
3852}
3853
3854CXXBaseSpecifier
3855ASTReader::ReadCXXBaseSpecifier(llvm::BitstreamCursor &DeclsCursor,
3856                                const RecordData &Record, unsigned &Idx) {
3857  bool isVirtual = static_cast<bool>(Record[Idx++]);
3858  bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
3859  AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
3860  TypeSourceInfo *TInfo = GetTypeSourceInfo(DeclsCursor, Record, Idx);
3861  SourceRange Range = ReadSourceRange(Record, Idx);
3862  return CXXBaseSpecifier(Range, isVirtual, isBaseOfClass, AS, TInfo);
3863}
3864
3865std::pair<CXXBaseOrMemberInitializer **, unsigned>
3866ASTReader::ReadCXXBaseOrMemberInitializers(llvm::BitstreamCursor &Cursor,
3867                                           const RecordData &Record,
3868                                           unsigned &Idx) {
3869  CXXBaseOrMemberInitializer **BaseOrMemberInitializers = 0;
3870  unsigned NumInitializers = Record[Idx++];
3871  if (NumInitializers) {
3872    ASTContext &C = *getContext();
3873
3874    BaseOrMemberInitializers
3875        = new (C) CXXBaseOrMemberInitializer*[NumInitializers];
3876    for (unsigned i=0; i != NumInitializers; ++i) {
3877      TypeSourceInfo *BaseClassInfo = 0;
3878      bool IsBaseVirtual = false;
3879      FieldDecl *Member = 0;
3880
3881      bool IsBaseInitializer = Record[Idx++];
3882      if (IsBaseInitializer) {
3883        BaseClassInfo = GetTypeSourceInfo(Cursor, Record, Idx);
3884        IsBaseVirtual = Record[Idx++];
3885      } else {
3886        Member = cast<FieldDecl>(GetDecl(Record[Idx++]));
3887      }
3888      SourceLocation MemberLoc = ReadSourceLocation(Record, Idx);
3889      Expr *Init = ReadExpr(Cursor);
3890      FieldDecl *AnonUnionMember
3891          = cast_or_null<FieldDecl>(GetDecl(Record[Idx++]));
3892      SourceLocation LParenLoc = ReadSourceLocation(Record, Idx);
3893      SourceLocation RParenLoc = ReadSourceLocation(Record, Idx);
3894      bool IsWritten = Record[Idx++];
3895      unsigned SourceOrderOrNumArrayIndices;
3896      llvm::SmallVector<VarDecl *, 8> Indices;
3897      if (IsWritten) {
3898        SourceOrderOrNumArrayIndices = Record[Idx++];
3899      } else {
3900        SourceOrderOrNumArrayIndices = Record[Idx++];
3901        Indices.reserve(SourceOrderOrNumArrayIndices);
3902        for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
3903          Indices.push_back(cast<VarDecl>(GetDecl(Record[Idx++])));
3904      }
3905
3906      CXXBaseOrMemberInitializer *BOMInit;
3907      if (IsBaseInitializer) {
3908        BOMInit = new (C) CXXBaseOrMemberInitializer(C, BaseClassInfo,
3909                                                     IsBaseVirtual, LParenLoc,
3910                                                     Init, RParenLoc);
3911      } else if (IsWritten) {
3912        BOMInit = new (C) CXXBaseOrMemberInitializer(C, Member, MemberLoc,
3913                                                     LParenLoc, Init, RParenLoc);
3914      } else {
3915        BOMInit = CXXBaseOrMemberInitializer::Create(C, Member, MemberLoc,
3916                                                     LParenLoc, Init, RParenLoc,
3917                                                     Indices.data(),
3918                                                     Indices.size());
3919      }
3920
3921      if (IsWritten)
3922        BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
3923      BOMInit->setAnonUnionMember(AnonUnionMember);
3924      BaseOrMemberInitializers[i] = BOMInit;
3925    }
3926  }
3927
3928  return std::make_pair(BaseOrMemberInitializers, NumInitializers);
3929}
3930
3931NestedNameSpecifier *
3932ASTReader::ReadNestedNameSpecifier(const RecordData &Record, unsigned &Idx) {
3933  unsigned N = Record[Idx++];
3934  NestedNameSpecifier *NNS = 0, *Prev = 0;
3935  for (unsigned I = 0; I != N; ++I) {
3936    NestedNameSpecifier::SpecifierKind Kind
3937      = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
3938    switch (Kind) {
3939    case NestedNameSpecifier::Identifier: {
3940      IdentifierInfo *II = GetIdentifierInfo(Record, Idx);
3941      NNS = NestedNameSpecifier::Create(*Context, Prev, II);
3942      break;
3943    }
3944
3945    case NestedNameSpecifier::Namespace: {
3946      NamespaceDecl *NS = cast<NamespaceDecl>(GetDecl(Record[Idx++]));
3947      NNS = NestedNameSpecifier::Create(*Context, Prev, NS);
3948      break;
3949    }
3950
3951    case NestedNameSpecifier::TypeSpec:
3952    case NestedNameSpecifier::TypeSpecWithTemplate: {
3953      Type *T = GetType(Record[Idx++]).getTypePtr();
3954      bool Template = Record[Idx++];
3955      NNS = NestedNameSpecifier::Create(*Context, Prev, Template, T);
3956      break;
3957    }
3958
3959    case NestedNameSpecifier::Global: {
3960      NNS = NestedNameSpecifier::GlobalSpecifier(*Context);
3961      // No associated value, and there can't be a prefix.
3962      break;
3963    }
3964    }
3965    Prev = NNS;
3966  }
3967  return NNS;
3968}
3969
3970SourceRange
3971ASTReader::ReadSourceRange(const RecordData &Record, unsigned &Idx) {
3972  SourceLocation beg = SourceLocation::getFromRawEncoding(Record[Idx++]);
3973  SourceLocation end = SourceLocation::getFromRawEncoding(Record[Idx++]);
3974  return SourceRange(beg, end);
3975}
3976
3977/// \brief Read an integral value
3978llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
3979  unsigned BitWidth = Record[Idx++];
3980  unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
3981  llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
3982  Idx += NumWords;
3983  return Result;
3984}
3985
3986/// \brief Read a signed integral value
3987llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
3988  bool isUnsigned = Record[Idx++];
3989  return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
3990}
3991
3992/// \brief Read a floating-point value
3993llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record, unsigned &Idx) {
3994  return llvm::APFloat(ReadAPInt(Record, Idx));
3995}
3996
3997// \brief Read a string
3998std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
3999  unsigned Len = Record[Idx++];
4000  std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
4001  Idx += Len;
4002  return Result;
4003}
4004
4005CXXTemporary *ASTReader::ReadCXXTemporary(const RecordData &Record,
4006                                          unsigned &Idx) {
4007  CXXDestructorDecl *Decl = cast<CXXDestructorDecl>(GetDecl(Record[Idx++]));
4008  return CXXTemporary::Create(*Context, Decl);
4009}
4010
4011DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
4012  return Diag(SourceLocation(), DiagID);
4013}
4014
4015DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
4016  return Diags.Report(FullSourceLoc(Loc, SourceMgr), DiagID);
4017}
4018
4019/// \brief Retrieve the identifier table associated with the
4020/// preprocessor.
4021IdentifierTable &ASTReader::getIdentifierTable() {
4022  assert(PP && "Forgot to set Preprocessor ?");
4023  return PP->getIdentifierTable();
4024}
4025
4026/// \brief Record that the given ID maps to the given switch-case
4027/// statement.
4028void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
4029  assert(SwitchCaseStmts[ID] == 0 && "Already have a SwitchCase with this ID");
4030  SwitchCaseStmts[ID] = SC;
4031}
4032
4033/// \brief Retrieve the switch-case statement with the given ID.
4034SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
4035  assert(SwitchCaseStmts[ID] != 0 && "No SwitchCase with this ID");
4036  return SwitchCaseStmts[ID];
4037}
4038
4039/// \brief Record that the given label statement has been
4040/// deserialized and has the given ID.
4041void ASTReader::RecordLabelStmt(LabelStmt *S, unsigned ID) {
4042  assert(LabelStmts.find(ID) == LabelStmts.end() &&
4043         "Deserialized label twice");
4044  LabelStmts[ID] = S;
4045
4046  // If we've already seen any goto statements that point to this
4047  // label, resolve them now.
4048  typedef std::multimap<unsigned, GotoStmt *>::iterator GotoIter;
4049  std::pair<GotoIter, GotoIter> Gotos = UnresolvedGotoStmts.equal_range(ID);
4050  for (GotoIter Goto = Gotos.first; Goto != Gotos.second; ++Goto)
4051    Goto->second->setLabel(S);
4052  UnresolvedGotoStmts.erase(Gotos.first, Gotos.second);
4053
4054  // If we've already seen any address-label statements that point to
4055  // this label, resolve them now.
4056  typedef std::multimap<unsigned, AddrLabelExpr *>::iterator AddrLabelIter;
4057  std::pair<AddrLabelIter, AddrLabelIter> AddrLabels
4058    = UnresolvedAddrLabelExprs.equal_range(ID);
4059  for (AddrLabelIter AddrLabel = AddrLabels.first;
4060       AddrLabel != AddrLabels.second; ++AddrLabel)
4061    AddrLabel->second->setLabel(S);
4062  UnresolvedAddrLabelExprs.erase(AddrLabels.first, AddrLabels.second);
4063}
4064
4065/// \brief Set the label of the given statement to the label
4066/// identified by ID.
4067///
4068/// Depending on the order in which the label and other statements
4069/// referencing that label occur, this operation may complete
4070/// immediately (updating the statement) or it may queue the
4071/// statement to be back-patched later.
4072void ASTReader::SetLabelOf(GotoStmt *S, unsigned ID) {
4073  std::map<unsigned, LabelStmt *>::iterator Label = LabelStmts.find(ID);
4074  if (Label != LabelStmts.end()) {
4075    // We've already seen this label, so set the label of the goto and
4076    // we're done.
4077    S->setLabel(Label->second);
4078  } else {
4079    // We haven't seen this label yet, so add this goto to the set of
4080    // unresolved goto statements.
4081    UnresolvedGotoStmts.insert(std::make_pair(ID, S));
4082  }
4083}
4084
4085/// \brief Set the label of the given expression to the label
4086/// identified by ID.
4087///
4088/// Depending on the order in which the label and other statements
4089/// referencing that label occur, this operation may complete
4090/// immediately (updating the statement) or it may queue the
4091/// statement to be back-patched later.
4092void ASTReader::SetLabelOf(AddrLabelExpr *S, unsigned ID) {
4093  std::map<unsigned, LabelStmt *>::iterator Label = LabelStmts.find(ID);
4094  if (Label != LabelStmts.end()) {
4095    // We've already seen this label, so set the label of the
4096    // label-address expression and we're done.
4097    S->setLabel(Label->second);
4098  } else {
4099    // We haven't seen this label yet, so add this label-address
4100    // expression to the set of unresolved label-address expressions.
4101    UnresolvedAddrLabelExprs.insert(std::make_pair(ID, S));
4102  }
4103}
4104
4105void ASTReader::FinishedDeserializing() {
4106  assert(NumCurrentElementsDeserializing &&
4107         "FinishedDeserializing not paired with StartedDeserializing");
4108  if (NumCurrentElementsDeserializing == 1) {
4109    // If any identifiers with corresponding top-level declarations have
4110    // been loaded, load those declarations now.
4111    while (!PendingIdentifierInfos.empty()) {
4112      SetGloballyVisibleDecls(PendingIdentifierInfos.front().II,
4113                              PendingIdentifierInfos.front().DeclIDs, true);
4114      PendingIdentifierInfos.pop_front();
4115    }
4116
4117    // We are not in recursive loading, so it's safe to pass the "interesting"
4118    // decls to the consumer.
4119    if (Consumer)
4120      PassInterestingDeclsToConsumer();
4121  }
4122  --NumCurrentElementsDeserializing;
4123}
4124
4125ASTReader::ASTReader(Preprocessor &PP, ASTContext *Context,
4126                     const char *isysroot, bool DisableValidation)
4127  : Listener(new PCHValidator(PP, *this)), DeserializationListener(0),
4128    SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
4129    Diags(PP.getDiagnostics()), SemaObj(0), PP(&PP), Context(Context),
4130    Consumer(0), isysroot(isysroot), DisableValidation(DisableValidation),
4131    NumStatHits(0), NumStatMisses(0), NumSLocEntriesRead(0),
4132    TotalNumSLocEntries(0), NextSLocOffset(0), NumStatementsRead(0),
4133    TotalNumStatements(0), NumMacrosRead(0), TotalNumMacros(0),
4134    NumSelectorsRead(0), NumMethodPoolEntriesRead(0), NumMethodPoolMisses(0),
4135    TotalNumMethodPoolEntries(0), NumLexicalDeclContextsRead(0),
4136    TotalLexicalDeclContexts(0), NumVisibleDeclContextsRead(0),
4137    TotalVisibleDeclContexts(0), NumCurrentElementsDeserializing(0) {
4138  RelocatablePCH = false;
4139}
4140
4141ASTReader::ASTReader(SourceManager &SourceMgr, FileManager &FileMgr,
4142                     Diagnostic &Diags, const char *isysroot,
4143                     bool DisableValidation)
4144  : DeserializationListener(0), SourceMgr(SourceMgr), FileMgr(FileMgr),
4145    Diags(Diags), SemaObj(0), PP(0), Context(0), Consumer(0),
4146    isysroot(isysroot), DisableValidation(DisableValidation), NumStatHits(0),
4147    NumStatMisses(0), NumSLocEntriesRead(0), TotalNumSLocEntries(0),
4148    NextSLocOffset(0), NumStatementsRead(0), TotalNumStatements(0),
4149    NumMacrosRead(0), TotalNumMacros(0), NumSelectorsRead(0),
4150    NumMethodPoolEntriesRead(0), NumMethodPoolMisses(0),
4151    TotalNumMethodPoolEntries(0), NumLexicalDeclContextsRead(0),
4152    TotalLexicalDeclContexts(0), NumVisibleDeclContextsRead(0),
4153    TotalVisibleDeclContexts(0), NumCurrentElementsDeserializing(0) {
4154  RelocatablePCH = false;
4155}
4156
4157ASTReader::~ASTReader() {
4158  for (unsigned i = 0, e = Chain.size(); i != e; ++i)
4159    delete Chain[e - i - 1];
4160  // Delete all visible decl lookup tables
4161  for (DeclContextOffsetsMap::iterator I = DeclContextOffsets.begin(),
4162                                       E = DeclContextOffsets.end();
4163       I != E; ++I) {
4164    for (DeclContextInfos::iterator J = I->second.begin(), F = I->second.end();
4165         J != F; ++J) {
4166      if (J->NameLookupTableData)
4167        delete static_cast<ASTDeclContextNameLookupTable*>(
4168            J->NameLookupTableData);
4169    }
4170  }
4171  for (DeclContextVisibleUpdatesPending::iterator
4172           I = PendingVisibleUpdates.begin(),
4173           E = PendingVisibleUpdates.end();
4174       I != E; ++I) {
4175    for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
4176                                             F = I->second.end();
4177         J != F; ++J)
4178      delete static_cast<ASTDeclContextNameLookupTable*>(*J);
4179  }
4180}
4181
4182ASTReader::PerFileData::PerFileData()
4183  : SizeInBits(0), LocalNumSLocEntries(0), SLocOffsets(0), LocalSLocSize(0),
4184    LocalNumIdentifiers(0), IdentifierOffsets(0), IdentifierTableData(0),
4185    IdentifierLookupTable(0), LocalNumMacroDefinitions(0),
4186    MacroDefinitionOffsets(0), LocalNumSelectors(0), SelectorOffsets(0),
4187    SelectorLookupTableData(0), SelectorLookupTable(0), LocalNumDecls(0),
4188    DeclOffsets(0), LocalNumTypes(0), TypeOffsets(0), StatCache(0),
4189    NumPreallocatedPreprocessingEntities(0)
4190{}
4191
4192ASTReader::PerFileData::~PerFileData() {
4193  delete static_cast<ASTIdentifierLookupTable *>(IdentifierLookupTable);
4194  delete static_cast<ASTSelectorLookupTable *>(SelectorLookupTable);
4195}
4196
4197