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