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