ASTReader.cpp revision 4825fd7fbb3fe87cdf8da9bccc1361fac45bdf2d
1//===--- ASTReader.cpp - AST File Reader ------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file defines the ASTReader class, which reads AST files.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Serialization/ASTReader.h"
15#include "clang/Serialization/ASTDeserializationListener.h"
16#include "clang/Serialization/ModuleManager.h"
17#include "clang/Serialization/SerializationDiagnostic.h"
18#include "ASTCommon.h"
19#include "ASTReaderInternals.h"
20#include "clang/Sema/Sema.h"
21#include "clang/Sema/Scope.h"
22#include "clang/AST/ASTConsumer.h"
23#include "clang/AST/ASTContext.h"
24#include "clang/AST/DeclTemplate.h"
25#include "clang/AST/Expr.h"
26#include "clang/AST/ExprCXX.h"
27#include "clang/AST/NestedNameSpecifier.h"
28#include "clang/AST/Type.h"
29#include "clang/AST/TypeLocVisitor.h"
30#include "clang/Lex/MacroInfo.h"
31#include "clang/Lex/PreprocessingRecord.h"
32#include "clang/Lex/Preprocessor.h"
33#include "clang/Lex/HeaderSearch.h"
34#include "clang/Basic/OnDiskHashTable.h"
35#include "clang/Basic/SourceManager.h"
36#include "clang/Basic/SourceManagerInternals.h"
37#include "clang/Basic/FileManager.h"
38#include "clang/Basic/FileSystemStatCache.h"
39#include "clang/Basic/TargetInfo.h"
40#include "clang/Basic/TargetOptions.h"
41#include "clang/Basic/Version.h"
42#include "clang/Basic/VersionTuple.h"
43#include "llvm/ADT/StringExtras.h"
44#include "llvm/Bitcode/BitstreamReader.h"
45#include "llvm/Support/MemoryBuffer.h"
46#include "llvm/Support/ErrorHandling.h"
47#include "llvm/Support/FileSystem.h"
48#include "llvm/Support/Path.h"
49#include "llvm/Support/SaveAndRestore.h"
50#include "llvm/Support/system_error.h"
51#include <algorithm>
52#include <iterator>
53#include <cstdio>
54#include <sys/stat.h>
55
56using namespace clang;
57using namespace clang::serialization;
58using namespace clang::serialization::reader;
59
60//===----------------------------------------------------------------------===//
61// PCH validator implementation
62//===----------------------------------------------------------------------===//
63
64ASTReaderListener::~ASTReaderListener() {}
65
66bool
67PCHValidator::ReadLanguageOptions(const ModuleFile &M,
68                                  const LangOptions &LangOpts) {
69  const LangOptions &PPLangOpts = PP.getLangOpts();
70
71#define LANGOPT(Name, Bits, Default, Description)         \
72  if (PPLangOpts.Name != LangOpts.Name) {                 \
73    Reader.Diag(diag::err_pch_langopt_mismatch)           \
74      << Description << LangOpts.Name << PPLangOpts.Name; \
75    return true;                                          \
76  }
77
78#define VALUE_LANGOPT(Name, Bits, Default, Description) \
79  if (PPLangOpts.Name != LangOpts.Name) {               \
80    Reader.Diag(diag::err_pch_langopt_value_mismatch)   \
81      << Description;                                   \
82  return true;                                          \
83}
84
85#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
86  if (PPLangOpts.get##Name() != LangOpts.get##Name()) {      \
87    Reader.Diag(diag::err_pch_langopt_value_mismatch)        \
88      << Description;                                        \
89    return true;                                             \
90  }
91
92#define BENIGN_LANGOPT(Name, Bits, Default, Description)
93#define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
94#include "clang/Basic/LangOptions.def"
95
96  if (PPLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
97    Reader.Diag(diag::err_pch_langopt_value_mismatch)
98      << "target Objective-C runtime";
99    return true;
100  }
101
102  return false;
103}
104
105bool PCHValidator::ReadTargetOptions(const ModuleFile &M,
106                                     const TargetOptions &TargetOpts) {
107  const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
108
109#define CHECK_TARGET_OPT(Field, Name)                           \
110  if (TargetOpts.Field != ExistingTargetOpts.Field) {           \
111    Reader.Diag(diag::err_pch_targetopt_mismatch)               \
112      << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
113    return true;                                                \
114  }
115
116  CHECK_TARGET_OPT(Triple, "target");
117  CHECK_TARGET_OPT(CPU, "target CPU");
118  CHECK_TARGET_OPT(ABI, "target ABI");
119  CHECK_TARGET_OPT(CXXABI, "target C++ ABI");
120  CHECK_TARGET_OPT(LinkerVersion, "target linker version");
121#undef CHECK_TARGET_OPT
122
123  // Compare feature sets.
124  SmallVector<StringRef, 4> ExistingFeatures(
125                              ExistingTargetOpts.FeaturesAsWritten.begin(),
126                              ExistingTargetOpts.FeaturesAsWritten.end());
127  SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
128                                         TargetOpts.FeaturesAsWritten.end());
129  std::sort(ExistingFeatures.begin(), ExistingFeatures.end());
130  std::sort(ReadFeatures.begin(), ReadFeatures.end());
131
132  unsigned ExistingIdx = 0, ExistingN = ExistingFeatures.size();
133  unsigned ReadIdx = 0, ReadN = ReadFeatures.size();
134  while (ExistingIdx < ExistingN && ReadIdx < ReadN) {
135    if (ExistingFeatures[ExistingIdx] == ReadFeatures[ReadIdx]) {
136      ++ExistingIdx;
137      ++ReadIdx;
138      continue;
139    }
140
141    if (ReadFeatures[ReadIdx] < ExistingFeatures[ExistingIdx]) {
142      Reader.Diag(diag::err_pch_targetopt_feature_mismatch)
143        << false << ReadFeatures[ReadIdx];
144      return true;
145    }
146
147    Reader.Diag(diag::err_pch_targetopt_feature_mismatch)
148      << true << ExistingFeatures[ExistingIdx];
149    return true;
150  }
151
152  if (ExistingIdx < ExistingN) {
153    Reader.Diag(diag::err_pch_targetopt_feature_mismatch)
154      << true << ExistingFeatures[ExistingIdx];
155    return true;
156  }
157
158  if (ReadIdx < ReadN) {
159    Reader.Diag(diag::err_pch_targetopt_feature_mismatch)
160      << false << ReadFeatures[ReadIdx];
161    return true;
162  }
163
164  return false;
165}
166
167namespace {
168  struct EmptyStringRef {
169    bool operator ()(StringRef r) const { return r.empty(); }
170  };
171  struct EmptyBlock {
172    bool operator ()(const PCHPredefinesBlock &r) const {return r.Data.empty();}
173  };
174}
175
176static bool EqualConcatenations(SmallVector<StringRef, 2> L,
177                                PCHPredefinesBlocks R) {
178  // First, sum up the lengths.
179  unsigned LL = 0, RL = 0;
180  for (unsigned I = 0, N = L.size(); I != N; ++I) {
181    LL += L[I].size();
182  }
183  for (unsigned I = 0, N = R.size(); I != N; ++I) {
184    RL += R[I].Data.size();
185  }
186  if (LL != RL)
187    return false;
188  if (LL == 0 && RL == 0)
189    return true;
190
191  // Kick out empty parts, they confuse the algorithm below.
192  L.erase(std::remove_if(L.begin(), L.end(), EmptyStringRef()), L.end());
193  R.erase(std::remove_if(R.begin(), R.end(), EmptyBlock()), R.end());
194
195  // Do it the hard way. At this point, both vectors must be non-empty.
196  StringRef LR = L[0], RR = R[0].Data;
197  unsigned LI = 0, RI = 0, LN = L.size(), RN = R.size();
198  (void) RN;
199  for (;;) {
200    // Compare the current pieces.
201    if (LR.size() == RR.size()) {
202      // If they're the same length, it's pretty easy.
203      if (LR != RR)
204        return false;
205      // Both pieces are done, advance.
206      ++LI;
207      ++RI;
208      // If either string is done, they're both done, since they're the same
209      // length.
210      if (LI == LN) {
211        assert(RI == RN && "Strings not the same length after all?");
212        return true;
213      }
214      LR = L[LI];
215      RR = R[RI].Data;
216    } else if (LR.size() < RR.size()) {
217      // Right piece is longer.
218      if (!RR.startswith(LR))
219        return false;
220      ++LI;
221      assert(LI != LN && "Strings not the same length after all?");
222      RR = RR.substr(LR.size());
223      LR = L[LI];
224    } else {
225      // Left piece is longer.
226      if (!LR.startswith(RR))
227        return false;
228      ++RI;
229      assert(RI != RN && "Strings not the same length after all?");
230      LR = LR.substr(RR.size());
231      RR = R[RI].Data;
232    }
233  }
234}
235
236static std::pair<FileID, StringRef::size_type>
237FindMacro(const PCHPredefinesBlocks &Buffers, StringRef MacroDef) {
238  std::pair<FileID, StringRef::size_type> Res;
239  for (unsigned I = 0, N = Buffers.size(); I != N; ++I) {
240    Res.second = Buffers[I].Data.find(MacroDef);
241    if (Res.second != StringRef::npos) {
242      Res.first = Buffers[I].BufferID;
243      break;
244    }
245  }
246  return Res;
247}
248
249bool PCHValidator::ReadPredefinesBuffer(const PCHPredefinesBlocks &Buffers,
250                                        StringRef OriginalFileName,
251                                        std::string &SuggestedPredefines,
252                                        FileManager &FileMgr) {
253  // We are in the context of an implicit include, so the predefines buffer will
254  // have a #include entry for the PCH file itself (as normalized by the
255  // preprocessor initialization). Find it and skip over it in the checking
256  // below.
257  SmallString<256> PCHInclude;
258  PCHInclude += "#include \"";
259  PCHInclude += HeaderSearch::NormalizeDashIncludePath(OriginalFileName,
260                                                       FileMgr);
261  PCHInclude += "\"\n";
262  std::pair<StringRef,StringRef> Split =
263    StringRef(PP.getPredefines()).split(PCHInclude.str());
264  StringRef Left =  Split.first, Right = Split.second;
265  if (Left == PP.getPredefines()) {
266    Error("Missing PCH include entry!");
267    return true;
268  }
269
270  // If the concatenation of all the PCH buffers is equal to the adjusted
271  // command line, we're done.
272  SmallVector<StringRef, 2> CommandLine;
273  CommandLine.push_back(Left);
274  CommandLine.push_back(Right);
275  if (EqualConcatenations(CommandLine, Buffers))
276    return false;
277
278  SourceManager &SourceMgr = PP.getSourceManager();
279
280  // The predefines buffers are different. Determine what the differences are,
281  // and whether they require us to reject the PCH file.
282  SmallVector<StringRef, 8> PCHLines;
283  for (unsigned I = 0, N = Buffers.size(); I != N; ++I)
284    Buffers[I].Data.split(PCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
285
286  SmallVector<StringRef, 8> CmdLineLines;
287  Left.split(CmdLineLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
288
289  // Pick out implicit #includes after the PCH and don't consider them for
290  // validation; we will insert them into SuggestedPredefines so that the
291  // preprocessor includes them.
292  std::string IncludesAfterPCH;
293  SmallVector<StringRef, 8> AfterPCHLines;
294  Right.split(AfterPCHLines, "\n", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
295  for (unsigned i = 0, e = AfterPCHLines.size(); i != e; ++i) {
296    if (AfterPCHLines[i].startswith("#include ")) {
297      IncludesAfterPCH += AfterPCHLines[i];
298      IncludesAfterPCH += '\n';
299    } else {
300      CmdLineLines.push_back(AfterPCHLines[i]);
301    }
302  }
303
304  // Make sure we add the includes last into SuggestedPredefines before we
305  // exit this function.
306  struct AddIncludesRAII {
307    std::string &SuggestedPredefines;
308    std::string &IncludesAfterPCH;
309
310    AddIncludesRAII(std::string &SuggestedPredefines,
311                    std::string &IncludesAfterPCH)
312      : SuggestedPredefines(SuggestedPredefines),
313        IncludesAfterPCH(IncludesAfterPCH) { }
314    ~AddIncludesRAII() {
315      SuggestedPredefines += IncludesAfterPCH;
316    }
317  } AddIncludes(SuggestedPredefines, IncludesAfterPCH);
318
319  // Sort both sets of predefined buffer lines, since we allow some extra
320  // definitions and they may appear at any point in the output.
321  std::sort(CmdLineLines.begin(), CmdLineLines.end());
322  std::sort(PCHLines.begin(), PCHLines.end());
323
324  // Determine which predefines that were used to build the PCH file are missing
325  // from the command line.
326  std::vector<StringRef> MissingPredefines;
327  std::set_difference(PCHLines.begin(), PCHLines.end(),
328                      CmdLineLines.begin(), CmdLineLines.end(),
329                      std::back_inserter(MissingPredefines));
330
331  bool MissingDefines = false;
332  bool ConflictingDefines = false;
333  for (unsigned I = 0, N = MissingPredefines.size(); I != N; ++I) {
334    StringRef Missing = MissingPredefines[I];
335    if (Missing.startswith("#include ")) {
336      // An -include was specified when generating the PCH; it is included in
337      // the PCH, just ignore it.
338      continue;
339    }
340    if (!Missing.startswith("#define ")) {
341      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
342      return true;
343    }
344
345    // This is a macro definition. Determine the name of the macro we're
346    // defining.
347    std::string::size_type StartOfMacroName = strlen("#define ");
348    std::string::size_type EndOfMacroName
349      = Missing.find_first_of("( \n\r", StartOfMacroName);
350    assert(EndOfMacroName != std::string::npos &&
351           "Couldn't find the end of the macro name");
352    StringRef MacroName = Missing.slice(StartOfMacroName, EndOfMacroName);
353
354    // Determine whether this macro was given a different definition on the
355    // command line.
356    std::string MacroDefStart = "#define " + MacroName.str();
357    std::string::size_type MacroDefLen = MacroDefStart.size();
358    SmallVector<StringRef, 8>::iterator ConflictPos
359      = std::lower_bound(CmdLineLines.begin(), CmdLineLines.end(),
360                         MacroDefStart);
361    for (; ConflictPos != CmdLineLines.end(); ++ConflictPos) {
362      if (!ConflictPos->startswith(MacroDefStart)) {
363        // Different macro; we're done.
364        ConflictPos = CmdLineLines.end();
365        break;
366      }
367
368      assert(ConflictPos->size() > MacroDefLen &&
369             "Invalid #define in predefines buffer?");
370      if ((*ConflictPos)[MacroDefLen] != ' ' &&
371          (*ConflictPos)[MacroDefLen] != '(')
372        continue; // Longer macro name; keep trying.
373
374      // We found a conflicting macro definition.
375      break;
376    }
377
378    if (ConflictPos != CmdLineLines.end()) {
379      Reader.Diag(diag::warn_cmdline_conflicting_macro_def)
380          << MacroName;
381
382      // Show the definition of this macro within the PCH file.
383      std::pair<FileID, StringRef::size_type> MacroLoc =
384          FindMacro(Buffers, Missing);
385      assert(MacroLoc.second!=StringRef::npos && "Unable to find macro!");
386      SourceLocation PCHMissingLoc =
387          SourceMgr.getLocForStartOfFile(MacroLoc.first)
388            .getLocWithOffset(MacroLoc.second);
389      Reader.Diag(PCHMissingLoc, diag::note_pch_macro_defined_as) << MacroName;
390
391      ConflictingDefines = true;
392      continue;
393    }
394
395    // If the macro doesn't conflict, then we'll just pick up the macro
396    // definition from the PCH file. Warn the user that they made a mistake.
397    if (ConflictingDefines)
398      continue; // Don't complain if there are already conflicting defs
399
400    if (!MissingDefines) {
401      Reader.Diag(diag::warn_cmdline_missing_macro_defs);
402      MissingDefines = true;
403    }
404
405    // Show the definition of this macro within the PCH file.
406    std::pair<FileID, StringRef::size_type> MacroLoc =
407        FindMacro(Buffers, Missing);
408    assert(MacroLoc.second!=StringRef::npos && "Unable to find macro!");
409    SourceLocation PCHMissingLoc =
410        SourceMgr.getLocForStartOfFile(MacroLoc.first)
411          .getLocWithOffset(MacroLoc.second);
412    Reader.Diag(PCHMissingLoc, diag::note_using_macro_def_from_pch);
413  }
414
415  if (ConflictingDefines)
416    return true;
417
418  // Determine what predefines were introduced based on command-line
419  // parameters that were not present when building the PCH
420  // file. Extra #defines are okay, so long as the identifiers being
421  // defined were not used within the precompiled header.
422  std::vector<StringRef> ExtraPredefines;
423  std::set_difference(CmdLineLines.begin(), CmdLineLines.end(),
424                      PCHLines.begin(), PCHLines.end(),
425                      std::back_inserter(ExtraPredefines));
426  for (unsigned I = 0, N = ExtraPredefines.size(); I != N; ++I) {
427    StringRef &Extra = ExtraPredefines[I];
428    if (!Extra.startswith("#define ")) {
429      Reader.Diag(diag::warn_pch_compiler_options_mismatch);
430      return true;
431    }
432
433    // This is an extra macro definition. Determine the name of the
434    // macro we're defining.
435    std::string::size_type StartOfMacroName = strlen("#define ");
436    std::string::size_type EndOfMacroName
437      = Extra.find_first_of("( \n\r", StartOfMacroName);
438    assert(EndOfMacroName != std::string::npos &&
439           "Couldn't find the end of the macro name");
440    StringRef MacroName = Extra.slice(StartOfMacroName, EndOfMacroName);
441
442    // Check whether this name was used somewhere in the PCH file. If
443    // so, defining it as a macro could change behavior, so we reject
444    // the PCH file.
445    if (IdentifierInfo *II = Reader.get(MacroName)) {
446      Reader.Diag(diag::warn_macro_name_used_in_pch) << II;
447      return true;
448    }
449
450    // Add this definition to the suggested predefines buffer.
451    SuggestedPredefines += Extra;
452    SuggestedPredefines += '\n';
453  }
454
455  // If we get here, it's because the predefines buffer had compatible
456  // contents. Accept the PCH file.
457  return false;
458}
459
460void PCHValidator::ReadHeaderFileInfo(const HeaderFileInfo &HFI,
461                                      unsigned ID) {
462  PP.getHeaderSearchInfo().setHeaderFileInfoForUID(HFI, ID);
463  ++NumHeaderInfos;
464}
465
466void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
467  PP.setCounterValue(Value);
468}
469
470//===----------------------------------------------------------------------===//
471// AST reader implementation
472//===----------------------------------------------------------------------===//
473
474void
475ASTReader::setDeserializationListener(ASTDeserializationListener *Listener) {
476  DeserializationListener = Listener;
477}
478
479
480
481unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
482  return serialization::ComputeHash(Sel);
483}
484
485
486std::pair<unsigned, unsigned>
487ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
488  using namespace clang::io;
489  unsigned KeyLen = ReadUnalignedLE16(d);
490  unsigned DataLen = ReadUnalignedLE16(d);
491  return std::make_pair(KeyLen, DataLen);
492}
493
494ASTSelectorLookupTrait::internal_key_type
495ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
496  using namespace clang::io;
497  SelectorTable &SelTable = Reader.getContext().Selectors;
498  unsigned N = ReadUnalignedLE16(d);
499  IdentifierInfo *FirstII
500    = Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
501  if (N == 0)
502    return SelTable.getNullarySelector(FirstII);
503  else if (N == 1)
504    return SelTable.getUnarySelector(FirstII);
505
506  SmallVector<IdentifierInfo *, 16> Args;
507  Args.push_back(FirstII);
508  for (unsigned I = 1; I != N; ++I)
509    Args.push_back(Reader.getLocalIdentifier(F, ReadUnalignedLE32(d)));
510
511  return SelTable.getSelector(N, Args.data());
512}
513
514ASTSelectorLookupTrait::data_type
515ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
516                                 unsigned DataLen) {
517  using namespace clang::io;
518
519  data_type Result;
520
521  Result.ID = Reader.getGlobalSelectorID(F, ReadUnalignedLE32(d));
522  unsigned NumInstanceMethods = ReadUnalignedLE16(d);
523  unsigned NumFactoryMethods = ReadUnalignedLE16(d);
524
525  // Load instance methods
526  for (unsigned I = 0; I != NumInstanceMethods; ++I) {
527    if (ObjCMethodDecl *Method
528          = Reader.GetLocalDeclAs<ObjCMethodDecl>(F, ReadUnalignedLE32(d)))
529      Result.Instance.push_back(Method);
530  }
531
532  // Load factory methods
533  for (unsigned I = 0; I != NumFactoryMethods; ++I) {
534    if (ObjCMethodDecl *Method
535          = Reader.GetLocalDeclAs<ObjCMethodDecl>(F, ReadUnalignedLE32(d)))
536      Result.Factory.push_back(Method);
537  }
538
539  return Result;
540}
541
542unsigned ASTIdentifierLookupTrait::ComputeHash(const internal_key_type& a) {
543  return llvm::HashString(StringRef(a.first, a.second));
544}
545
546std::pair<unsigned, unsigned>
547ASTIdentifierLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
548  using namespace clang::io;
549  unsigned DataLen = ReadUnalignedLE16(d);
550  unsigned KeyLen = ReadUnalignedLE16(d);
551  return std::make_pair(KeyLen, DataLen);
552}
553
554std::pair<const char*, unsigned>
555ASTIdentifierLookupTrait::ReadKey(const unsigned char* d, unsigned n) {
556  assert(n >= 2 && d[n-1] == '\0');
557  return std::make_pair((const char*) d, n-1);
558}
559
560IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
561                                                   const unsigned char* d,
562                                                   unsigned DataLen) {
563  using namespace clang::io;
564  unsigned RawID = ReadUnalignedLE32(d);
565  bool IsInteresting = RawID & 0x01;
566
567  // Wipe out the "is interesting" bit.
568  RawID = RawID >> 1;
569
570  IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
571  if (!IsInteresting) {
572    // For uninteresting identifiers, just build the IdentifierInfo
573    // and associate it with the persistent ID.
574    IdentifierInfo *II = KnownII;
575    if (!II) {
576      II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second));
577      KnownII = II;
578    }
579    Reader.SetIdentifierInfo(ID, II);
580    II->setIsFromAST();
581    Reader.markIdentifierUpToDate(II);
582    return II;
583  }
584
585  unsigned ObjCOrBuiltinID = ReadUnalignedLE16(d);
586  unsigned Bits = ReadUnalignedLE16(d);
587  bool CPlusPlusOperatorKeyword = Bits & 0x01;
588  Bits >>= 1;
589  bool HasRevertedTokenIDToIdentifier = Bits & 0x01;
590  Bits >>= 1;
591  bool Poisoned = Bits & 0x01;
592  Bits >>= 1;
593  bool ExtensionToken = Bits & 0x01;
594  Bits >>= 1;
595  bool hadMacroDefinition = Bits & 0x01;
596  Bits >>= 1;
597
598  assert(Bits == 0 && "Extra bits in the identifier?");
599  DataLen -= 8;
600
601  // Build the IdentifierInfo itself and link the identifier ID with
602  // the new IdentifierInfo.
603  IdentifierInfo *II = KnownII;
604  if (!II) {
605    II = &Reader.getIdentifierTable().getOwn(StringRef(k.first, k.second));
606    KnownII = II;
607  }
608  Reader.markIdentifierUpToDate(II);
609  II->setIsFromAST();
610
611  // Set or check the various bits in the IdentifierInfo structure.
612  // Token IDs are read-only.
613  if (HasRevertedTokenIDToIdentifier)
614    II->RevertTokenIDToIdentifier();
615  II->setObjCOrBuiltinID(ObjCOrBuiltinID);
616  assert(II->isExtensionToken() == ExtensionToken &&
617         "Incorrect extension token flag");
618  (void)ExtensionToken;
619  if (Poisoned)
620    II->setIsPoisoned(true);
621  assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
622         "Incorrect C++ operator keyword flag");
623  (void)CPlusPlusOperatorKeyword;
624
625  // If this identifier is a macro, deserialize the macro
626  // definition.
627  if (hadMacroDefinition) {
628    SmallVector<MacroID, 4> MacroIDs;
629    while (uint32_t LocalID = ReadUnalignedLE32(d)) {
630      MacroIDs.push_back(Reader.getGlobalMacroID(F, LocalID));
631      DataLen -= 4;
632    }
633    DataLen -= 4;
634    Reader.setIdentifierIsMacro(II, MacroIDs);
635  }
636
637  Reader.SetIdentifierInfo(ID, II);
638
639  // Read all of the declarations visible at global scope with this
640  // name.
641  if (DataLen > 0) {
642    SmallVector<uint32_t, 4> DeclIDs;
643    for (; DataLen > 0; DataLen -= 4)
644      DeclIDs.push_back(Reader.getGlobalDeclID(F, ReadUnalignedLE32(d)));
645    Reader.SetGloballyVisibleDecls(II, DeclIDs);
646  }
647
648  return II;
649}
650
651unsigned
652ASTDeclContextNameLookupTrait::ComputeHash(const DeclNameKey &Key) const {
653  llvm::FoldingSetNodeID ID;
654  ID.AddInteger(Key.Kind);
655
656  switch (Key.Kind) {
657  case DeclarationName::Identifier:
658  case DeclarationName::CXXLiteralOperatorName:
659    ID.AddString(((IdentifierInfo*)Key.Data)->getName());
660    break;
661  case DeclarationName::ObjCZeroArgSelector:
662  case DeclarationName::ObjCOneArgSelector:
663  case DeclarationName::ObjCMultiArgSelector:
664    ID.AddInteger(serialization::ComputeHash(Selector(Key.Data)));
665    break;
666  case DeclarationName::CXXOperatorName:
667    ID.AddInteger((OverloadedOperatorKind)Key.Data);
668    break;
669  case DeclarationName::CXXConstructorName:
670  case DeclarationName::CXXDestructorName:
671  case DeclarationName::CXXConversionFunctionName:
672  case DeclarationName::CXXUsingDirective:
673    break;
674  }
675
676  return ID.ComputeHash();
677}
678
679ASTDeclContextNameLookupTrait::internal_key_type
680ASTDeclContextNameLookupTrait::GetInternalKey(
681                                          const external_key_type& Name) const {
682  DeclNameKey Key;
683  Key.Kind = Name.getNameKind();
684  switch (Name.getNameKind()) {
685  case DeclarationName::Identifier:
686    Key.Data = (uint64_t)Name.getAsIdentifierInfo();
687    break;
688  case DeclarationName::ObjCZeroArgSelector:
689  case DeclarationName::ObjCOneArgSelector:
690  case DeclarationName::ObjCMultiArgSelector:
691    Key.Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
692    break;
693  case DeclarationName::CXXOperatorName:
694    Key.Data = Name.getCXXOverloadedOperator();
695    break;
696  case DeclarationName::CXXLiteralOperatorName:
697    Key.Data = (uint64_t)Name.getCXXLiteralIdentifier();
698    break;
699  case DeclarationName::CXXConstructorName:
700  case DeclarationName::CXXDestructorName:
701  case DeclarationName::CXXConversionFunctionName:
702  case DeclarationName::CXXUsingDirective:
703    Key.Data = 0;
704    break;
705  }
706
707  return Key;
708}
709
710std::pair<unsigned, unsigned>
711ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
712  using namespace clang::io;
713  unsigned KeyLen = ReadUnalignedLE16(d);
714  unsigned DataLen = ReadUnalignedLE16(d);
715  return std::make_pair(KeyLen, DataLen);
716}
717
718ASTDeclContextNameLookupTrait::internal_key_type
719ASTDeclContextNameLookupTrait::ReadKey(const unsigned char* d, unsigned) {
720  using namespace clang::io;
721
722  DeclNameKey Key;
723  Key.Kind = (DeclarationName::NameKind)*d++;
724  switch (Key.Kind) {
725  case DeclarationName::Identifier:
726    Key.Data = (uint64_t)Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
727    break;
728  case DeclarationName::ObjCZeroArgSelector:
729  case DeclarationName::ObjCOneArgSelector:
730  case DeclarationName::ObjCMultiArgSelector:
731    Key.Data =
732       (uint64_t)Reader.getLocalSelector(F, ReadUnalignedLE32(d))
733                   .getAsOpaquePtr();
734    break;
735  case DeclarationName::CXXOperatorName:
736    Key.Data = *d++; // OverloadedOperatorKind
737    break;
738  case DeclarationName::CXXLiteralOperatorName:
739    Key.Data = (uint64_t)Reader.getLocalIdentifier(F, ReadUnalignedLE32(d));
740    break;
741  case DeclarationName::CXXConstructorName:
742  case DeclarationName::CXXDestructorName:
743  case DeclarationName::CXXConversionFunctionName:
744  case DeclarationName::CXXUsingDirective:
745    Key.Data = 0;
746    break;
747  }
748
749  return Key;
750}
751
752ASTDeclContextNameLookupTrait::data_type
753ASTDeclContextNameLookupTrait::ReadData(internal_key_type,
754                                        const unsigned char* d,
755                                        unsigned DataLen) {
756  using namespace clang::io;
757  unsigned NumDecls = ReadUnalignedLE16(d);
758  LE32DeclID *Start = (LE32DeclID *)d;
759  return std::make_pair(Start, Start + NumDecls);
760}
761
762bool ASTReader::ReadDeclContextStorage(ModuleFile &M,
763                                       llvm::BitstreamCursor &Cursor,
764                                   const std::pair<uint64_t, uint64_t> &Offsets,
765                                       DeclContextInfo &Info) {
766  SavedStreamPosition SavedPosition(Cursor);
767  // First the lexical decls.
768  if (Offsets.first != 0) {
769    Cursor.JumpToBit(Offsets.first);
770
771    RecordData Record;
772    const char *Blob;
773    unsigned BlobLen;
774    unsigned Code = Cursor.ReadCode();
775    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
776    if (RecCode != DECL_CONTEXT_LEXICAL) {
777      Error("Expected lexical block");
778      return true;
779    }
780
781    Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair*>(Blob);
782    Info.NumLexicalDecls = BlobLen / sizeof(KindDeclIDPair);
783  }
784
785  // Now the lookup table.
786  if (Offsets.second != 0) {
787    Cursor.JumpToBit(Offsets.second);
788
789    RecordData Record;
790    const char *Blob;
791    unsigned BlobLen;
792    unsigned Code = Cursor.ReadCode();
793    unsigned RecCode = Cursor.ReadRecord(Code, Record, &Blob, &BlobLen);
794    if (RecCode != DECL_CONTEXT_VISIBLE) {
795      Error("Expected visible lookup table block");
796      return true;
797    }
798    Info.NameLookupTableData
799      = ASTDeclContextNameLookupTable::Create(
800                    (const unsigned char *)Blob + Record[0],
801                    (const unsigned char *)Blob,
802                    ASTDeclContextNameLookupTrait(*this, M));
803  }
804
805  return false;
806}
807
808void ASTReader::Error(StringRef Msg) {
809  Error(diag::err_fe_pch_malformed, Msg);
810}
811
812void ASTReader::Error(unsigned DiagID,
813                      StringRef Arg1, StringRef Arg2) {
814  if (Diags.isDiagnosticInFlight())
815    Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2);
816  else
817    Diag(DiagID) << Arg1 << Arg2;
818}
819
820/// \brief Tell the AST listener about the predefines buffers in the chain.
821bool ASTReader::CheckPredefinesBuffers() {
822  if (Listener) {
823    // We only care about the primary module.
824    ModuleFile &M = ModuleMgr.getPrimaryModule();
825    return Listener->ReadPredefinesBuffer(PCHPredefinesBuffers,
826                                          M.ActualOriginalSourceFileName,
827                                          SuggestedPredefines,
828                                          FileMgr);
829  }
830  return false;
831}
832
833//===----------------------------------------------------------------------===//
834// Source Manager Deserialization
835//===----------------------------------------------------------------------===//
836
837/// \brief Read the line table in the source manager block.
838/// \returns true if there was an error.
839bool ASTReader::ParseLineTable(ModuleFile &F,
840                               SmallVectorImpl<uint64_t> &Record) {
841  unsigned Idx = 0;
842  LineTableInfo &LineTable = SourceMgr.getLineTable();
843
844  // Parse the file names
845  std::map<int, int> FileIDs;
846  for (int I = 0, N = Record[Idx++]; I != N; ++I) {
847    // Extract the file name
848    unsigned FilenameLen = Record[Idx++];
849    std::string Filename(&Record[Idx], &Record[Idx] + FilenameLen);
850    Idx += FilenameLen;
851    MaybeAddSystemRootToFilename(F, Filename);
852    FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
853  }
854
855  // Parse the line entries
856  std::vector<LineEntry> Entries;
857  while (Idx < Record.size()) {
858    int FID = Record[Idx++];
859    assert(FID >= 0 && "Serialized line entries for non-local file.");
860    // Remap FileID from 1-based old view.
861    FID += F.SLocEntryBaseID - 1;
862
863    // Extract the line entries
864    unsigned NumEntries = Record[Idx++];
865    assert(NumEntries && "Numentries is 00000");
866    Entries.clear();
867    Entries.reserve(NumEntries);
868    for (unsigned I = 0; I != NumEntries; ++I) {
869      unsigned FileOffset = Record[Idx++];
870      unsigned LineNo = Record[Idx++];
871      int FilenameID = FileIDs[Record[Idx++]];
872      SrcMgr::CharacteristicKind FileKind
873        = (SrcMgr::CharacteristicKind)Record[Idx++];
874      unsigned IncludeOffset = Record[Idx++];
875      Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
876                                       FileKind, IncludeOffset));
877    }
878    LineTable.AddEntry(FileID::get(FID), Entries);
879  }
880
881  return false;
882}
883
884namespace {
885
886class ASTStatData {
887public:
888  const ino_t ino;
889  const dev_t dev;
890  const mode_t mode;
891  const time_t mtime;
892  const off_t size;
893
894  ASTStatData(ino_t i, dev_t d, mode_t mo, time_t m, off_t s)
895    : ino(i), dev(d), mode(mo), mtime(m), size(s) {}
896};
897
898class ASTStatLookupTrait {
899 public:
900  typedef const char *external_key_type;
901  typedef const char *internal_key_type;
902
903  typedef ASTStatData data_type;
904
905  static unsigned ComputeHash(const char *path) {
906    return llvm::HashString(path);
907  }
908
909  static internal_key_type GetInternalKey(const char *path) { return path; }
910
911  static bool EqualKey(internal_key_type a, internal_key_type b) {
912    return strcmp(a, b) == 0;
913  }
914
915  static std::pair<unsigned, unsigned>
916  ReadKeyDataLength(const unsigned char*& d) {
917    unsigned KeyLen = (unsigned) clang::io::ReadUnalignedLE16(d);
918    unsigned DataLen = (unsigned) *d++;
919    return std::make_pair(KeyLen + 1, DataLen);
920  }
921
922  static internal_key_type ReadKey(const unsigned char *d, unsigned) {
923    return (const char *)d;
924  }
925
926  static data_type ReadData(const internal_key_type, const unsigned char *d,
927                            unsigned /*DataLen*/) {
928    using namespace clang::io;
929
930    ino_t ino = (ino_t) ReadUnalignedLE32(d);
931    dev_t dev = (dev_t) ReadUnalignedLE32(d);
932    mode_t mode = (mode_t) ReadUnalignedLE16(d);
933    time_t mtime = (time_t) ReadUnalignedLE64(d);
934    off_t size = (off_t) ReadUnalignedLE64(d);
935    return data_type(ino, dev, mode, mtime, size);
936  }
937};
938
939/// \brief stat() cache for precompiled headers.
940///
941/// This cache is very similar to the stat cache used by pretokenized
942/// headers.
943class ASTStatCache : public FileSystemStatCache {
944  typedef OnDiskChainedHashTable<ASTStatLookupTrait> CacheTy;
945  CacheTy *Cache;
946
947  unsigned &NumStatHits, &NumStatMisses;
948public:
949  ASTStatCache(const unsigned char *Buckets, const unsigned char *Base,
950               unsigned &NumStatHits, unsigned &NumStatMisses)
951    : Cache(0), NumStatHits(NumStatHits), NumStatMisses(NumStatMisses) {
952    Cache = CacheTy::Create(Buckets, Base);
953  }
954
955  ~ASTStatCache() { delete Cache; }
956
957  LookupResult getStat(const char *Path, struct stat &StatBuf,
958                       int *FileDescriptor) {
959    // Do the lookup for the file's data in the AST file.
960    CacheTy::iterator I = Cache->find(Path);
961
962    // If we don't get a hit in the AST file just forward to 'stat'.
963    if (I == Cache->end()) {
964      ++NumStatMisses;
965      return statChained(Path, StatBuf, FileDescriptor);
966    }
967
968    ++NumStatHits;
969    ASTStatData Data = *I;
970
971    StatBuf.st_ino = Data.ino;
972    StatBuf.st_dev = Data.dev;
973    StatBuf.st_mtime = Data.mtime;
974    StatBuf.st_mode = Data.mode;
975    StatBuf.st_size = Data.size;
976    return CacheExists;
977  }
978};
979} // end anonymous namespace
980
981
982/// \brief Read a source manager block
983bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
984  using namespace SrcMgr;
985
986  llvm::BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
987
988  // Set the source-location entry cursor to the current position in
989  // the stream. This cursor will be used to read the contents of the
990  // source manager block initially, and then lazily read
991  // source-location entries as needed.
992  SLocEntryCursor = F.Stream;
993
994  // The stream itself is going to skip over the source manager block.
995  if (F.Stream.SkipBlock()) {
996    Error("malformed block record in AST file");
997    return true;
998  }
999
1000  // Enter the source manager block.
1001  if (SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1002    Error("malformed source manager block record in AST file");
1003    return true;
1004  }
1005
1006  RecordData Record;
1007  while (true) {
1008    unsigned Code = SLocEntryCursor.ReadCode();
1009    if (Code == llvm::bitc::END_BLOCK) {
1010      if (SLocEntryCursor.ReadBlockEnd()) {
1011        Error("error at end of Source Manager block in AST file");
1012        return true;
1013      }
1014      return false;
1015    }
1016
1017    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1018      // No known subblocks, always skip them.
1019      SLocEntryCursor.ReadSubBlockID();
1020      if (SLocEntryCursor.SkipBlock()) {
1021        Error("malformed block record in AST file");
1022        return true;
1023      }
1024      continue;
1025    }
1026
1027    if (Code == llvm::bitc::DEFINE_ABBREV) {
1028      SLocEntryCursor.ReadAbbrevRecord();
1029      continue;
1030    }
1031
1032    // Read a record.
1033    const char *BlobStart;
1034    unsigned BlobLen;
1035    Record.clear();
1036    switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1037    default:  // Default behavior: ignore.
1038      break;
1039
1040    case SM_SLOC_FILE_ENTRY:
1041    case SM_SLOC_BUFFER_ENTRY:
1042    case SM_SLOC_EXPANSION_ENTRY:
1043      // Once we hit one of the source location entries, we're done.
1044      return false;
1045    }
1046  }
1047}
1048
1049/// \brief If a header file is not found at the path that we expect it to be
1050/// and the PCH file was moved from its original location, try to resolve the
1051/// file by assuming that header+PCH were moved together and the header is in
1052/// the same place relative to the PCH.
1053static std::string
1054resolveFileRelativeToOriginalDir(const std::string &Filename,
1055                                 const std::string &OriginalDir,
1056                                 const std::string &CurrDir) {
1057  assert(OriginalDir != CurrDir &&
1058         "No point trying to resolve the file if the PCH dir didn't change");
1059  using namespace llvm::sys;
1060  SmallString<128> filePath(Filename);
1061  fs::make_absolute(filePath);
1062  assert(path::is_absolute(OriginalDir));
1063  SmallString<128> currPCHPath(CurrDir);
1064
1065  path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1066                       fileDirE = path::end(path::parent_path(filePath));
1067  path::const_iterator origDirI = path::begin(OriginalDir),
1068                       origDirE = path::end(OriginalDir);
1069  // Skip the common path components from filePath and OriginalDir.
1070  while (fileDirI != fileDirE && origDirI != origDirE &&
1071         *fileDirI == *origDirI) {
1072    ++fileDirI;
1073    ++origDirI;
1074  }
1075  for (; origDirI != origDirE; ++origDirI)
1076    path::append(currPCHPath, "..");
1077  path::append(currPCHPath, fileDirI, fileDirE);
1078  path::append(currPCHPath, path::filename(Filename));
1079  return currPCHPath.str();
1080}
1081
1082/// \brief Read in the source location entry with the given ID.
1083bool ASTReader::ReadSLocEntryRecord(int ID) {
1084  if (ID == 0)
1085    return false;
1086
1087  if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1088    Error("source location entry ID out-of-range for AST file");
1089    return true;
1090  }
1091
1092  ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1093  F->SLocEntryCursor.JumpToBit(F->SLocEntryOffsets[ID - F->SLocEntryBaseID]);
1094  llvm::BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1095  unsigned BaseOffset = F->SLocEntryBaseOffset;
1096
1097  ++NumSLocEntriesRead;
1098  unsigned Code = SLocEntryCursor.ReadCode();
1099  if (Code == llvm::bitc::END_BLOCK ||
1100      Code == llvm::bitc::ENTER_SUBBLOCK ||
1101      Code == llvm::bitc::DEFINE_ABBREV) {
1102    Error("incorrectly-formatted source location entry in AST file");
1103    return true;
1104  }
1105
1106  RecordData Record;
1107  const char *BlobStart;
1108  unsigned BlobLen;
1109  switch (SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1110  default:
1111    Error("incorrectly-formatted source location entry in AST file");
1112    return true;
1113
1114  case SM_SLOC_FILE_ENTRY: {
1115    // We will detect whether a file changed and return 'Failure' for it, but
1116    // we will also try to fail gracefully by setting up the SLocEntry.
1117    unsigned InputID = Record[4];
1118    InputFile IF = getInputFile(*F, InputID);
1119    const FileEntry *File = IF.getPointer();
1120    bool OverriddenBuffer = IF.getInt();
1121
1122    if (!IF.getPointer())
1123      return true;
1124
1125    SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1126    if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1127      // This is the module's main file.
1128      IncludeLoc = getImportLocation(F);
1129    }
1130    SrcMgr::CharacteristicKind
1131      FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1132    FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1133                                        ID, BaseOffset + Record[0]);
1134    SrcMgr::FileInfo &FileInfo =
1135          const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1136    FileInfo.NumCreatedFIDs = Record[5];
1137    if (Record[3])
1138      FileInfo.setHasLineDirectives();
1139
1140    const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1141    unsigned NumFileDecls = Record[7];
1142    if (NumFileDecls) {
1143      assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1144      FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1145                                                             NumFileDecls));
1146    }
1147
1148    const SrcMgr::ContentCache *ContentCache
1149      = SourceMgr.getOrCreateContentCache(File,
1150                              /*isSystemFile=*/FileCharacter != SrcMgr::C_User);
1151    if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1152        ContentCache->ContentsEntry == ContentCache->OrigEntry) {
1153      unsigned Code = SLocEntryCursor.ReadCode();
1154      Record.clear();
1155      unsigned RecCode
1156        = SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen);
1157
1158      if (RecCode != SM_SLOC_BUFFER_BLOB) {
1159        Error("AST record has invalid code");
1160        return true;
1161      }
1162
1163      llvm::MemoryBuffer *Buffer
1164        = llvm::MemoryBuffer::getMemBuffer(StringRef(BlobStart, BlobLen - 1),
1165                                           File->getName());
1166      SourceMgr.overrideFileContents(File, Buffer);
1167    }
1168
1169    break;
1170  }
1171
1172  case SM_SLOC_BUFFER_ENTRY: {
1173    const char *Name = BlobStart;
1174    unsigned Offset = Record[0];
1175    unsigned Code = SLocEntryCursor.ReadCode();
1176    Record.clear();
1177    unsigned RecCode
1178      = SLocEntryCursor.ReadRecord(Code, Record, &BlobStart, &BlobLen);
1179
1180    if (RecCode != SM_SLOC_BUFFER_BLOB) {
1181      Error("AST record has invalid code");
1182      return true;
1183    }
1184
1185    llvm::MemoryBuffer *Buffer
1186      = llvm::MemoryBuffer::getMemBuffer(StringRef(BlobStart, BlobLen - 1),
1187                                         Name);
1188    FileID BufferID = SourceMgr.createFileIDForMemBuffer(Buffer, ID,
1189                                                         BaseOffset + Offset);
1190
1191    if (strcmp(Name, "<built-in>") == 0 && F->Kind == MK_PCH) {
1192      PCHPredefinesBlock Block = {
1193        BufferID,
1194        StringRef(BlobStart, BlobLen - 1)
1195      };
1196      PCHPredefinesBuffers.push_back(Block);
1197    }
1198
1199    break;
1200  }
1201
1202  case SM_SLOC_EXPANSION_ENTRY: {
1203    SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1204    SourceMgr.createExpansionLoc(SpellingLoc,
1205                                     ReadSourceLocation(*F, Record[2]),
1206                                     ReadSourceLocation(*F, Record[3]),
1207                                     Record[4],
1208                                     ID,
1209                                     BaseOffset + Record[0]);
1210    break;
1211  }
1212  }
1213
1214  return false;
1215}
1216
1217/// \brief Find the location where the module F is imported.
1218SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1219  if (F->ImportLoc.isValid())
1220    return F->ImportLoc;
1221
1222  // Otherwise we have a PCH. It's considered to be "imported" at the first
1223  // location of its includer.
1224  if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1225    // Main file is the importer. We assume that it is the first entry in the
1226    // entry table. We can't ask the manager, because at the time of PCH loading
1227    // the main file entry doesn't exist yet.
1228    // The very first entry is the invalid instantiation loc, which takes up
1229    // offsets 0 and 1.
1230    return SourceLocation::getFromRawEncoding(2U);
1231  }
1232  //return F->Loaders[0]->FirstLoc;
1233  return F->ImportedBy[0]->FirstLoc;
1234}
1235
1236/// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
1237/// specified cursor.  Read the abbreviations that are at the top of the block
1238/// and then leave the cursor pointing into the block.
1239bool ASTReader::ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor,
1240                                 unsigned BlockID) {
1241  if (Cursor.EnterSubBlock(BlockID)) {
1242    Error("malformed block record in AST file");
1243    return Failure;
1244  }
1245
1246  while (true) {
1247    uint64_t Offset = Cursor.GetCurrentBitNo();
1248    unsigned Code = Cursor.ReadCode();
1249
1250    // We expect all abbrevs to be at the start of the block.
1251    if (Code != llvm::bitc::DEFINE_ABBREV) {
1252      Cursor.JumpToBit(Offset);
1253      return false;
1254    }
1255    Cursor.ReadAbbrevRecord();
1256  }
1257}
1258
1259void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset,
1260                                MacroInfo *Hint) {
1261  llvm::BitstreamCursor &Stream = F.MacroCursor;
1262
1263  // Keep track of where we are in the stream, then jump back there
1264  // after reading this macro.
1265  SavedStreamPosition SavedPosition(Stream);
1266
1267  Stream.JumpToBit(Offset);
1268  RecordData Record;
1269  SmallVector<IdentifierInfo*, 16> MacroArgs;
1270  MacroInfo *Macro = 0;
1271
1272  // RAII object to add the loaded macro information once we're done
1273  // adding tokens.
1274  struct AddLoadedMacroInfoRAII {
1275    Preprocessor &PP;
1276    MacroInfo *Hint;
1277    MacroInfo *MI;
1278    IdentifierInfo *II;
1279
1280    AddLoadedMacroInfoRAII(Preprocessor &PP, MacroInfo *Hint)
1281      : PP(PP), Hint(Hint), MI(), II() { }
1282    ~AddLoadedMacroInfoRAII( ) {
1283      if (MI) {
1284        // Finally, install the macro.
1285        PP.addLoadedMacroInfo(II, MI, Hint);
1286      }
1287    }
1288  } AddLoadedMacroInfo(PP, Hint);
1289
1290  while (true) {
1291    unsigned Code = Stream.ReadCode();
1292    switch (Code) {
1293    case llvm::bitc::END_BLOCK:
1294      return;
1295
1296    case llvm::bitc::ENTER_SUBBLOCK:
1297      // No known subblocks, always skip them.
1298      Stream.ReadSubBlockID();
1299      if (Stream.SkipBlock()) {
1300        Error("malformed block record in AST file");
1301        return;
1302      }
1303      continue;
1304
1305    case llvm::bitc::DEFINE_ABBREV:
1306      Stream.ReadAbbrevRecord();
1307      continue;
1308    default: break;
1309    }
1310
1311    // Read a record.
1312    const char *BlobStart = 0;
1313    unsigned BlobLen = 0;
1314    Record.clear();
1315    PreprocessorRecordTypes RecType =
1316      (PreprocessorRecordTypes)Stream.ReadRecord(Code, Record, BlobStart,
1317                                                 BlobLen);
1318    switch (RecType) {
1319    case PP_MACRO_OBJECT_LIKE:
1320    case PP_MACRO_FUNCTION_LIKE: {
1321      // If we already have a macro, that means that we've hit the end
1322      // of the definition of the macro we were looking for. We're
1323      // done.
1324      if (Macro)
1325        return;
1326
1327      IdentifierInfo *II = getLocalIdentifier(F, Record[0]);
1328      if (II == 0) {
1329        Error("macro must have a name in AST file");
1330        return;
1331      }
1332
1333      unsigned GlobalID = getGlobalMacroID(F, Record[1]);
1334
1335      // If this macro has already been loaded, don't do so again.
1336      if (MacrosLoaded[GlobalID - NUM_PREDEF_MACRO_IDS])
1337        return;
1338
1339      SubmoduleID GlobalSubmoduleID = getGlobalSubmoduleID(F, Record[2]);
1340      unsigned NextIndex = 3;
1341      SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1342      MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1343
1344      // Record this macro.
1345      MacrosLoaded[GlobalID - NUM_PREDEF_MACRO_IDS] = MI;
1346
1347      SourceLocation UndefLoc = ReadSourceLocation(F, Record, NextIndex);
1348      if (UndefLoc.isValid())
1349        MI->setUndefLoc(UndefLoc);
1350
1351      MI->setIsUsed(Record[NextIndex++]);
1352      MI->setIsFromAST();
1353
1354      bool IsPublic = Record[NextIndex++];
1355      MI->setVisibility(IsPublic, ReadSourceLocation(F, Record, NextIndex));
1356
1357      if (RecType == PP_MACRO_FUNCTION_LIKE) {
1358        // Decode function-like macro info.
1359        bool isC99VarArgs = Record[NextIndex++];
1360        bool isGNUVarArgs = Record[NextIndex++];
1361        MacroArgs.clear();
1362        unsigned NumArgs = Record[NextIndex++];
1363        for (unsigned i = 0; i != NumArgs; ++i)
1364          MacroArgs.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1365
1366        // Install function-like macro info.
1367        MI->setIsFunctionLike();
1368        if (isC99VarArgs) MI->setIsC99Varargs();
1369        if (isGNUVarArgs) MI->setIsGNUVarargs();
1370        MI->setArgumentList(MacroArgs.data(), MacroArgs.size(),
1371                            PP.getPreprocessorAllocator());
1372      }
1373
1374      if (DeserializationListener)
1375        DeserializationListener->MacroRead(GlobalID, MI);
1376
1377      // If an update record marked this as undefined, do so now.
1378      // FIXME: Only if the submodule this update came from is visible?
1379      MacroUpdatesMap::iterator Update = MacroUpdates.find(GlobalID);
1380      if (Update != MacroUpdates.end()) {
1381        if (MI->getUndefLoc().isInvalid()) {
1382          for (unsigned I = 0, N = Update->second.size(); I != N; ++I) {
1383            bool Hidden = false;
1384            if (unsigned SubmoduleID = Update->second[I].first) {
1385              if (Module *Owner = getSubmodule(SubmoduleID)) {
1386                if (Owner->NameVisibility == Module::Hidden) {
1387                  // Note that this #undef is hidden.
1388                  Hidden = true;
1389
1390                  // Record this hiding for later.
1391                  HiddenNamesMap[Owner].push_back(
1392                    HiddenName(II, MI, Update->second[I].second.UndefLoc));
1393                }
1394              }
1395            }
1396
1397            if (!Hidden) {
1398              MI->setUndefLoc(Update->second[I].second.UndefLoc);
1399              if (PPMutationListener *Listener = PP.getPPMutationListener())
1400                Listener->UndefinedMacro(MI);
1401              break;
1402            }
1403          }
1404        }
1405        MacroUpdates.erase(Update);
1406      }
1407
1408      // Determine whether this macro definition is visible.
1409      bool Hidden = !MI->isPublic();
1410      if (!Hidden && GlobalSubmoduleID) {
1411        if (Module *Owner = getSubmodule(GlobalSubmoduleID)) {
1412          if (Owner->NameVisibility == Module::Hidden) {
1413            // The owning module is not visible, and this macro definition
1414            // should not be, either.
1415            Hidden = true;
1416
1417            // Note that this macro definition was hidden because its owning
1418            // module is not yet visible.
1419            HiddenNamesMap[Owner].push_back(HiddenName(II, MI));
1420          }
1421        }
1422      }
1423      MI->setHidden(Hidden);
1424
1425      // Make sure we install the macro once we're done.
1426      AddLoadedMacroInfo.MI = MI;
1427      AddLoadedMacroInfo.II = II;
1428
1429      // Remember that we saw this macro last so that we add the tokens that
1430      // form its body to it.
1431      Macro = MI;
1432
1433      if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1434          Record[NextIndex]) {
1435        // We have a macro definition. Register the association
1436        PreprocessedEntityID
1437            GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1438        PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1439        PPRec.RegisterMacroDefinition(Macro,
1440                            PPRec.getPPEntityID(GlobalID-1, /*isLoaded=*/true));
1441      }
1442
1443      ++NumMacrosRead;
1444      break;
1445    }
1446
1447    case PP_TOKEN: {
1448      // If we see a TOKEN before a PP_MACRO_*, then the file is
1449      // erroneous, just pretend we didn't see this.
1450      if (Macro == 0) break;
1451
1452      Token Tok;
1453      Tok.startToken();
1454      Tok.setLocation(ReadSourceLocation(F, Record[0]));
1455      Tok.setLength(Record[1]);
1456      if (IdentifierInfo *II = getLocalIdentifier(F, Record[2]))
1457        Tok.setIdentifierInfo(II);
1458      Tok.setKind((tok::TokenKind)Record[3]);
1459      Tok.setFlag((Token::TokenFlags)Record[4]);
1460      Macro->AddTokenToBody(Tok);
1461      break;
1462    }
1463    }
1464  }
1465}
1466
1467PreprocessedEntityID
1468ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const {
1469  ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1470    I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1471  assert(I != M.PreprocessedEntityRemap.end()
1472         && "Invalid index into preprocessed entity index remap");
1473
1474  return LocalID + I->second;
1475}
1476
1477unsigned HeaderFileInfoTrait::ComputeHash(const char *path) {
1478  return llvm::HashString(llvm::sys::path::filename(path));
1479}
1480
1481HeaderFileInfoTrait::internal_key_type
1482HeaderFileInfoTrait::GetInternalKey(const char *path) { return path; }
1483
1484bool HeaderFileInfoTrait::EqualKey(internal_key_type a, internal_key_type b) {
1485  if (strcmp(a, b) == 0)
1486    return true;
1487
1488  if (llvm::sys::path::filename(a) != llvm::sys::path::filename(b))
1489    return false;
1490
1491  // Determine whether the actual files are equivalent.
1492  bool Result = false;
1493  if (llvm::sys::fs::equivalent(a, b, Result))
1494    return false;
1495
1496  return Result;
1497}
1498
1499std::pair<unsigned, unsigned>
1500HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1501  unsigned KeyLen = (unsigned) clang::io::ReadUnalignedLE16(d);
1502  unsigned DataLen = (unsigned) *d++;
1503  return std::make_pair(KeyLen + 1, DataLen);
1504}
1505
1506HeaderFileInfoTrait::data_type
1507HeaderFileInfoTrait::ReadData(const internal_key_type, const unsigned char *d,
1508                              unsigned DataLen) {
1509  const unsigned char *End = d + DataLen;
1510  using namespace clang::io;
1511  HeaderFileInfo HFI;
1512  unsigned Flags = *d++;
1513  HFI.isImport = (Flags >> 5) & 0x01;
1514  HFI.isPragmaOnce = (Flags >> 4) & 0x01;
1515  HFI.DirInfo = (Flags >> 2) & 0x03;
1516  HFI.Resolved = (Flags >> 1) & 0x01;
1517  HFI.IndexHeaderMapHeader = Flags & 0x01;
1518  HFI.NumIncludes = ReadUnalignedLE16(d);
1519  HFI.ControllingMacroID = Reader.getGlobalIdentifierID(M,
1520                                                        ReadUnalignedLE32(d));
1521  if (unsigned FrameworkOffset = ReadUnalignedLE32(d)) {
1522    // The framework offset is 1 greater than the actual offset,
1523    // since 0 is used as an indicator for "no framework name".
1524    StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1525    HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1526  }
1527
1528  assert(End == d && "Wrong data length in HeaderFileInfo deserialization");
1529  (void)End;
1530
1531  // This HeaderFileInfo was externally loaded.
1532  HFI.External = true;
1533  return HFI;
1534}
1535
1536void ASTReader::setIdentifierIsMacro(IdentifierInfo *II, ArrayRef<MacroID> IDs){
1537  II->setHadMacroDefinition(true);
1538  assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1539  PendingMacroIDs[II].append(IDs.begin(), IDs.end());
1540}
1541
1542void ASTReader::ReadDefinedMacros() {
1543  // Note that we are loading defined macros.
1544  Deserializing Macros(this);
1545
1546  for (ModuleReverseIterator I = ModuleMgr.rbegin(),
1547      E = ModuleMgr.rend(); I != E; ++I) {
1548    llvm::BitstreamCursor &MacroCursor = (*I)->MacroCursor;
1549
1550    // If there was no preprocessor block, skip this file.
1551    if (!MacroCursor.getBitStreamReader())
1552      continue;
1553
1554    llvm::BitstreamCursor Cursor = MacroCursor;
1555    Cursor.JumpToBit((*I)->MacroStartOffset);
1556
1557    RecordData Record;
1558    while (true) {
1559      unsigned Code = Cursor.ReadCode();
1560      if (Code == llvm::bitc::END_BLOCK)
1561        break;
1562
1563      if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1564        // No known subblocks, always skip them.
1565        Cursor.ReadSubBlockID();
1566        if (Cursor.SkipBlock()) {
1567          Error("malformed block record in AST file");
1568          return;
1569        }
1570        continue;
1571      }
1572
1573      if (Code == llvm::bitc::DEFINE_ABBREV) {
1574        Cursor.ReadAbbrevRecord();
1575        continue;
1576      }
1577
1578      // Read a record.
1579      const char *BlobStart;
1580      unsigned BlobLen;
1581      Record.clear();
1582      switch (Cursor.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
1583      default:  // Default behavior: ignore.
1584        break;
1585
1586      case PP_MACRO_OBJECT_LIKE:
1587      case PP_MACRO_FUNCTION_LIKE:
1588        getLocalIdentifier(**I, Record[0]);
1589        break;
1590
1591      case PP_TOKEN:
1592        // Ignore tokens.
1593        break;
1594      }
1595    }
1596  }
1597}
1598
1599namespace {
1600  /// \brief Visitor class used to look up identifirs in an AST file.
1601  class IdentifierLookupVisitor {
1602    StringRef Name;
1603    unsigned PriorGeneration;
1604    IdentifierInfo *Found;
1605  public:
1606    IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration)
1607      : Name(Name), PriorGeneration(PriorGeneration), Found() { }
1608
1609    static bool visit(ModuleFile &M, void *UserData) {
1610      IdentifierLookupVisitor *This
1611        = static_cast<IdentifierLookupVisitor *>(UserData);
1612
1613      // If we've already searched this module file, skip it now.
1614      if (M.Generation <= This->PriorGeneration)
1615        return true;
1616
1617      ASTIdentifierLookupTable *IdTable
1618        = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
1619      if (!IdTable)
1620        return false;
1621
1622      ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(),
1623                                     M, This->Found);
1624
1625      std::pair<const char*, unsigned> Key(This->Name.begin(),
1626                                           This->Name.size());
1627      ASTIdentifierLookupTable::iterator Pos = IdTable->find(Key, &Trait);
1628      if (Pos == IdTable->end())
1629        return false;
1630
1631      // Dereferencing the iterator has the effect of building the
1632      // IdentifierInfo node and populating it with the various
1633      // declarations it needs.
1634      This->Found = *Pos;
1635      return true;
1636    }
1637
1638    // \brief Retrieve the identifier info found within the module
1639    // files.
1640    IdentifierInfo *getIdentifierInfo() const { return Found; }
1641  };
1642}
1643
1644void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
1645  // Note that we are loading an identifier.
1646  Deserializing AnIdentifier(this);
1647
1648  unsigned PriorGeneration = 0;
1649  if (getContext().getLangOpts().Modules)
1650    PriorGeneration = IdentifierGeneration[&II];
1651
1652  IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration);
1653  ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor);
1654  markIdentifierUpToDate(&II);
1655}
1656
1657void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
1658  if (!II)
1659    return;
1660
1661  II->setOutOfDate(false);
1662
1663  // Update the generation for this identifier.
1664  if (getContext().getLangOpts().Modules)
1665    IdentifierGeneration[II] = CurrentGeneration;
1666}
1667
1668llvm::PointerIntPair<const FileEntry *, 1, bool>
1669ASTReader::getInputFile(ModuleFile &F, unsigned ID) {
1670  // If this ID is bogus, just return an empty input file.
1671  if (ID == 0 || ID > F.InputFilesLoaded.size())
1672    return InputFile();
1673
1674  // If we've already loaded this input file, return it.
1675  if (F.InputFilesLoaded[ID-1].getPointer())
1676    return F.InputFilesLoaded[ID-1];
1677
1678  // Go find this input file.
1679  llvm::BitstreamCursor &Cursor = F.InputFilesCursor;
1680  SavedStreamPosition SavedPosition(Cursor);
1681  Cursor.JumpToBit(F.InputFileOffsets[ID-1]);
1682
1683  unsigned Code = Cursor.ReadCode();
1684  RecordData Record;
1685  const char *BlobStart = 0;
1686  unsigned BlobLen = 0;
1687  switch ((InputFileRecordTypes)Cursor.ReadRecord(Code, Record,
1688                                                  &BlobStart, &BlobLen)) {
1689  case INPUT_FILE: {
1690    unsigned StoredID = Record[0];
1691    assert(ID == StoredID && "Bogus stored ID or offset");
1692    (void)StoredID;
1693    off_t StoredSize = (off_t)Record[1];
1694    time_t StoredTime = (time_t)Record[2];
1695    bool Overridden = (bool)Record[3];
1696
1697    // Get the file entry for this input file.
1698    StringRef OrigFilename(BlobStart, BlobLen);
1699    std::string Filename = OrigFilename;
1700    MaybeAddSystemRootToFilename(F, Filename);
1701    const FileEntry *File
1702      = Overridden? FileMgr.getVirtualFile(Filename, StoredSize, StoredTime)
1703                  : FileMgr.getFile(Filename, /*OpenFile=*/false);
1704
1705    // If we didn't find the file, resolve it relative to the
1706    // original directory from which this AST file was created.
1707    if (File == 0 && !F.OriginalDir.empty() && !CurrentDir.empty() &&
1708        F.OriginalDir != CurrentDir) {
1709      std::string Resolved = resolveFileRelativeToOriginalDir(Filename,
1710                                                              F.OriginalDir,
1711                                                              CurrentDir);
1712      if (!Resolved.empty())
1713        File = FileMgr.getFile(Resolved);
1714    }
1715
1716    // For an overridden file, create a virtual file with the stored
1717    // size/timestamp.
1718    if (Overridden && File == 0) {
1719      File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
1720    }
1721
1722    if (File == 0) {
1723      std::string ErrorStr = "could not find file '";
1724      ErrorStr += Filename;
1725      ErrorStr += "' referenced by AST file";
1726      Error(ErrorStr.c_str());
1727      return InputFile();
1728    }
1729
1730    // Note that we've loaded this input file.
1731    F.InputFilesLoaded[ID-1] = InputFile(File, Overridden);
1732
1733    // Check if there was a request to override the contents of the file
1734    // that was part of the precompiled header. Overridding such a file
1735    // can lead to problems when lexing using the source locations from the
1736    // PCH.
1737    SourceManager &SM = getSourceManager();
1738    if (!Overridden && SM.isFileOverridden(File)) {
1739      Error(diag::err_fe_pch_file_overridden, Filename);
1740      // After emitting the diagnostic, recover by disabling the override so
1741      // that the original file will be used.
1742      SM.disableFileContentsOverride(File);
1743      // The FileEntry is a virtual file entry with the size of the contents
1744      // that would override the original contents. Set it to the original's
1745      // size/time.
1746      FileMgr.modifyFileEntry(const_cast<FileEntry*>(File),
1747                              StoredSize, StoredTime);
1748    }
1749
1750    // For an overridden file, there is nothing to validate.
1751    if (Overridden)
1752      return InputFile(File, Overridden);
1753
1754    // The stat info from the FileEntry came from the cached stat
1755    // info of the PCH, so we cannot trust it.
1756    struct stat StatBuf;
1757    if (::stat(File->getName(), &StatBuf) != 0) {
1758      StatBuf.st_size = File->getSize();
1759      StatBuf.st_mtime = File->getModificationTime();
1760    }
1761
1762    if ((StoredSize != StatBuf.st_size
1763#if !defined(LLVM_ON_WIN32)
1764         // In our regression testing, the Windows file system seems to
1765         // have inconsistent modification times that sometimes
1766         // erroneously trigger this error-handling path.
1767         || StoredTime != StatBuf.st_mtime
1768#endif
1769         )) {
1770      Error(diag::err_fe_pch_file_modified, Filename);
1771      return InputFile();
1772    }
1773
1774    return InputFile(File, Overridden);
1775  }
1776  }
1777
1778  return InputFile();
1779}
1780
1781const FileEntry *ASTReader::getFileEntry(StringRef filenameStrRef) {
1782  ModuleFile &M = ModuleMgr.getPrimaryModule();
1783  std::string Filename = filenameStrRef;
1784  MaybeAddSystemRootToFilename(M, Filename);
1785  const FileEntry *File = FileMgr.getFile(Filename);
1786  if (File == 0 && !M.OriginalDir.empty() && !CurrentDir.empty() &&
1787      M.OriginalDir != CurrentDir) {
1788    std::string resolved = resolveFileRelativeToOriginalDir(Filename,
1789                                                            M.OriginalDir,
1790                                                            CurrentDir);
1791    if (!resolved.empty())
1792      File = FileMgr.getFile(resolved);
1793  }
1794
1795  return File;
1796}
1797
1798/// \brief If we are loading a relocatable PCH file, and the filename is
1799/// not an absolute path, add the system root to the beginning of the file
1800/// name.
1801StringRef ASTReader::MaybeAddSystemRootToFilename(ModuleFile &M,
1802                                                  std::string &Filename) {
1803  // If this is not a relocatable PCH file, there's nothing to do.
1804  if (!M.RelocatablePCH)
1805    return Filename;
1806
1807  if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
1808    return Filename;
1809
1810  if (isysroot.empty()) {
1811    // If no system root was given, default to '/'
1812    Filename.insert(Filename.begin(), '/');
1813    return Filename;
1814  }
1815
1816  unsigned Length = isysroot.size();
1817  if (isysroot[Length - 1] != '/')
1818    Filename.insert(Filename.begin(), '/');
1819
1820  Filename.insert(Filename.begin(), isysroot.begin(), isysroot.end());
1821  return Filename;
1822}
1823
1824ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F,
1825                           llvm::SmallVectorImpl<ModuleFile *> &Loaded) {
1826  llvm::BitstreamCursor &Stream = F.Stream;
1827
1828  if (Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
1829    Error("malformed block record in AST file");
1830    return Failure;
1831  }
1832
1833  // Read all of the records and blocks in the control block.
1834  RecordData Record;
1835  while (!Stream.AtEndOfStream()) {
1836    unsigned Code = Stream.ReadCode();
1837    if (Code == llvm::bitc::END_BLOCK) {
1838      if (Stream.ReadBlockEnd()) {
1839        Error("error at end of control block in AST file");
1840        return Failure;
1841      }
1842
1843      // Validate all of the input files.
1844      if (!DisableValidation) {
1845        for (unsigned I = 0, N = Record[0]; I < N; ++I)
1846          if (!getInputFile(F, I+1).getPointer())
1847            return OutOfDate;
1848      }
1849
1850      return Success;
1851    }
1852
1853    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
1854      switch (Stream.ReadSubBlockID()) {
1855      case INPUT_FILES_BLOCK_ID:
1856        F.InputFilesCursor = Stream;
1857        if (Stream.SkipBlock() || // Skip with the main cursor
1858            // Read the abbreviations
1859            ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
1860          Error("malformed block record in AST file");
1861          return Failure;
1862        }
1863        continue;
1864
1865      default:
1866        if (!Stream.SkipBlock())
1867          continue;
1868        break;
1869      }
1870
1871      Error("malformed block record in AST file");
1872      return Failure;
1873    }
1874
1875    if (Code == llvm::bitc::DEFINE_ABBREV) {
1876      Stream.ReadAbbrevRecord();
1877      continue;
1878    }
1879
1880    // Read and process a record.
1881    Record.clear();
1882    const char *BlobStart = 0;
1883    unsigned BlobLen = 0;
1884    switch ((ControlRecordTypes)Stream.ReadRecord(Code, Record,
1885                                                  &BlobStart, &BlobLen)) {
1886    case METADATA: {
1887      if (Record[0] != VERSION_MAJOR && !DisableValidation) {
1888        Diag(Record[0] < VERSION_MAJOR? diag::warn_pch_version_too_old
1889                                      : diag::warn_pch_version_too_new);
1890        return VersionMismatch;
1891      }
1892
1893      bool hasErrors = Record[5];
1894      if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
1895        Diag(diag::err_pch_with_compiler_errors);
1896        return HadErrors;
1897      }
1898
1899      F.RelocatablePCH = Record[4];
1900
1901      const std::string &CurBranch = getClangFullRepositoryVersion();
1902      StringRef ASTBranch(BlobStart, BlobLen);
1903      if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
1904        Diag(diag::warn_pch_different_branch) << ASTBranch << CurBranch;
1905        return VersionMismatch;
1906      }
1907      break;
1908    }
1909
1910    case IMPORTS: {
1911      // Load each of the imported PCH files.
1912      unsigned Idx = 0, N = Record.size();
1913      while (Idx < N) {
1914        // Read information about the AST file.
1915        ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
1916        unsigned Length = Record[Idx++];
1917        SmallString<128> ImportedFile(Record.begin() + Idx,
1918                                      Record.begin() + Idx + Length);
1919        Idx += Length;
1920
1921        // Load the AST file.
1922        switch(ReadASTCore(ImportedFile, ImportedKind, &F, Loaded)) {
1923        case Failure: return Failure;
1924          // If we have to ignore the dependency, we'll have to ignore this too.
1925        case OutOfDate: return OutOfDate;
1926        case VersionMismatch: return VersionMismatch;
1927        case ConfigurationMismatch: return ConfigurationMismatch;
1928        case HadErrors: return HadErrors;
1929        case Success: break;
1930        }
1931      }
1932      break;
1933    }
1934
1935    case LANGUAGE_OPTIONS:
1936      if (Listener && &F == *ModuleMgr.begin() &&
1937          ParseLanguageOptions(F, Record) && !DisableValidation)
1938        return ConfigurationMismatch;
1939      break;
1940
1941    case TARGET_OPTIONS: {
1942      if (Listener && &F == *ModuleMgr.begin()) {
1943        unsigned Idx = 0;
1944        TargetOptions TargetOpts;
1945        TargetOpts.Triple = ReadString(Record, Idx);
1946        TargetOpts.CPU = ReadString(Record, Idx);
1947        TargetOpts.ABI = ReadString(Record, Idx);
1948        TargetOpts.CXXABI = ReadString(Record, Idx);
1949        TargetOpts.LinkerVersion = ReadString(Record, Idx);
1950        for (unsigned N = Record[Idx++]; N; --N) {
1951          TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
1952        }
1953        for (unsigned N = Record[Idx++]; N; --N) {
1954          TargetOpts.Features.push_back(ReadString(Record, Idx));
1955        }
1956
1957        if (Listener->ReadTargetOptions(F, TargetOpts) && !DisableValidation)
1958          return ConfigurationMismatch;
1959      }
1960      break;
1961    }
1962
1963    case ORIGINAL_FILE:
1964      F.OriginalSourceFileID = FileID::get(Record[0]);
1965      F.ActualOriginalSourceFileName.assign(BlobStart, BlobLen);
1966      F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
1967      MaybeAddSystemRootToFilename(F, F.OriginalSourceFileName);
1968      break;
1969
1970    case ORIGINAL_PCH_DIR:
1971      F.OriginalDir.assign(BlobStart, BlobLen);
1972      break;
1973
1974    case INPUT_FILE_OFFSETS:
1975      F.InputFileOffsets = (const uint32_t *)BlobStart;
1976      F.InputFilesLoaded.resize(Record[0]);
1977      break;
1978    }
1979  }
1980
1981  Error("premature end of bitstream in AST file");
1982  return Failure;
1983}
1984
1985bool ASTReader::ReadASTBlock(ModuleFile &F) {
1986  llvm::BitstreamCursor &Stream = F.Stream;
1987
1988  if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
1989    Error("malformed block record in AST file");
1990    return true;
1991  }
1992
1993  // Read all of the records and blocks for the AST file.
1994  RecordData Record;
1995  while (!Stream.AtEndOfStream()) {
1996    unsigned Code = Stream.ReadCode();
1997    if (Code == llvm::bitc::END_BLOCK) {
1998      if (Stream.ReadBlockEnd()) {
1999        Error("error at end of module block in AST file");
2000        return true;
2001      }
2002
2003      DeclContext *DC = Context.getTranslationUnitDecl();
2004      if (!DC->hasExternalVisibleStorage() && DC->hasExternalLexicalStorage())
2005        DC->setMustBuildLookupTable();
2006
2007      return false;
2008    }
2009
2010    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
2011      switch (Stream.ReadSubBlockID()) {
2012      case DECLTYPES_BLOCK_ID:
2013        // We lazily load the decls block, but we want to set up the
2014        // DeclsCursor cursor to point into it.  Clone our current bitcode
2015        // cursor to it, enter the block and read the abbrevs in that block.
2016        // With the main cursor, we just skip over it.
2017        F.DeclsCursor = Stream;
2018        if (Stream.SkipBlock() ||  // Skip with the main cursor.
2019            // Read the abbrevs.
2020            ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
2021          Error("malformed block record in AST file");
2022          return true;
2023        }
2024        break;
2025
2026      case DECL_UPDATES_BLOCK_ID:
2027        if (Stream.SkipBlock()) {
2028          Error("malformed block record in AST file");
2029          return true;
2030        }
2031        break;
2032
2033      case PREPROCESSOR_BLOCK_ID:
2034        F.MacroCursor = Stream;
2035        if (!PP.getExternalSource())
2036          PP.setExternalSource(this);
2037
2038        if (Stream.SkipBlock() ||
2039            ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2040          Error("malformed block record in AST file");
2041          return true;
2042        }
2043        F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
2044        break;
2045
2046      case PREPROCESSOR_DETAIL_BLOCK_ID:
2047        F.PreprocessorDetailCursor = Stream;
2048        if (Stream.SkipBlock() ||
2049            ReadBlockAbbrevs(F.PreprocessorDetailCursor,
2050                             PREPROCESSOR_DETAIL_BLOCK_ID)) {
2051          Error("malformed preprocessor detail record in AST file");
2052          return true;
2053        }
2054        F.PreprocessorDetailStartOffset
2055          = F.PreprocessorDetailCursor.GetCurrentBitNo();
2056
2057        if (!PP.getPreprocessingRecord())
2058          PP.createPreprocessingRecord(/*RecordConditionalDirectives=*/false);
2059        if (!PP.getPreprocessingRecord()->getExternalSource())
2060          PP.getPreprocessingRecord()->SetExternalSource(*this);
2061        break;
2062
2063      case SOURCE_MANAGER_BLOCK_ID:
2064        if (ReadSourceManagerBlock(F))
2065          return true;
2066        break;
2067
2068      case SUBMODULE_BLOCK_ID:
2069        if (ReadSubmoduleBlock(F))
2070          return true;
2071        break;
2072
2073      case COMMENTS_BLOCK_ID: {
2074        llvm::BitstreamCursor C = Stream;
2075        if (Stream.SkipBlock() ||
2076            ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
2077          Error("malformed comments block in AST file");
2078          return true;
2079        }
2080        CommentsCursors.push_back(std::make_pair(C, &F));
2081        break;
2082      }
2083
2084      default:
2085        if (!Stream.SkipBlock())
2086          break;
2087        Error("malformed block record in AST file");
2088        return true;
2089      }
2090      continue;
2091    }
2092
2093    if (Code == llvm::bitc::DEFINE_ABBREV) {
2094      Stream.ReadAbbrevRecord();
2095      continue;
2096    }
2097
2098    // Read and process a record.
2099    Record.clear();
2100    const char *BlobStart = 0;
2101    unsigned BlobLen = 0;
2102    switch ((ASTRecordTypes)Stream.ReadRecord(Code, Record,
2103                                              &BlobStart, &BlobLen)) {
2104    default:  // Default behavior: ignore.
2105      break;
2106
2107    case TYPE_OFFSET: {
2108      if (F.LocalNumTypes != 0) {
2109        Error("duplicate TYPE_OFFSET record in AST file");
2110        return true;
2111      }
2112      F.TypeOffsets = (const uint32_t *)BlobStart;
2113      F.LocalNumTypes = Record[0];
2114      unsigned LocalBaseTypeIndex = Record[1];
2115      F.BaseTypeIndex = getTotalNumTypes();
2116
2117      if (F.LocalNumTypes > 0) {
2118        // Introduce the global -> local mapping for types within this module.
2119        GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
2120
2121        // Introduce the local -> global mapping for types within this module.
2122        F.TypeRemap.insertOrReplace(
2123          std::make_pair(LocalBaseTypeIndex,
2124                         F.BaseTypeIndex - LocalBaseTypeIndex));
2125
2126        TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
2127      }
2128      break;
2129    }
2130
2131    case DECL_OFFSET: {
2132      if (F.LocalNumDecls != 0) {
2133        Error("duplicate DECL_OFFSET record in AST file");
2134        return true;
2135      }
2136      F.DeclOffsets = (const DeclOffset *)BlobStart;
2137      F.LocalNumDecls = Record[0];
2138      unsigned LocalBaseDeclID = Record[1];
2139      F.BaseDeclID = getTotalNumDecls();
2140
2141      if (F.LocalNumDecls > 0) {
2142        // Introduce the global -> local mapping for declarations within this
2143        // module.
2144        GlobalDeclMap.insert(
2145          std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
2146
2147        // Introduce the local -> global mapping for declarations within this
2148        // module.
2149        F.DeclRemap.insertOrReplace(
2150          std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
2151
2152        // Introduce the global -> local mapping for declarations within this
2153        // module.
2154        F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
2155
2156        DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
2157      }
2158      break;
2159    }
2160
2161    case TU_UPDATE_LEXICAL: {
2162      DeclContext *TU = Context.getTranslationUnitDecl();
2163      DeclContextInfo &Info = F.DeclContextInfos[TU];
2164      Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair *>(BlobStart);
2165      Info.NumLexicalDecls
2166        = static_cast<unsigned int>(BlobLen / sizeof(KindDeclIDPair));
2167      TU->setHasExternalLexicalStorage(true);
2168      break;
2169    }
2170
2171    case UPDATE_VISIBLE: {
2172      unsigned Idx = 0;
2173      serialization::DeclID ID = ReadDeclID(F, Record, Idx);
2174      ASTDeclContextNameLookupTable *Table =
2175        ASTDeclContextNameLookupTable::Create(
2176                        (const unsigned char *)BlobStart + Record[Idx++],
2177                        (const unsigned char *)BlobStart,
2178                        ASTDeclContextNameLookupTrait(*this, F));
2179      if (ID == PREDEF_DECL_TRANSLATION_UNIT_ID) { // Is it the TU?
2180        DeclContext *TU = Context.getTranslationUnitDecl();
2181        F.DeclContextInfos[TU].NameLookupTableData = Table;
2182        TU->setHasExternalVisibleStorage(true);
2183      } else
2184        PendingVisibleUpdates[ID].push_back(std::make_pair(Table, &F));
2185      break;
2186    }
2187
2188    case IDENTIFIER_TABLE:
2189      F.IdentifierTableData = BlobStart;
2190      if (Record[0]) {
2191        F.IdentifierLookupTable
2192          = ASTIdentifierLookupTable::Create(
2193                       (const unsigned char *)F.IdentifierTableData + Record[0],
2194                       (const unsigned char *)F.IdentifierTableData,
2195                       ASTIdentifierLookupTrait(*this, F));
2196
2197        PP.getIdentifierTable().setExternalIdentifierLookup(this);
2198      }
2199      break;
2200
2201    case IDENTIFIER_OFFSET: {
2202      if (F.LocalNumIdentifiers != 0) {
2203        Error("duplicate IDENTIFIER_OFFSET record in AST file");
2204        return true;
2205      }
2206      F.IdentifierOffsets = (const uint32_t *)BlobStart;
2207      F.LocalNumIdentifiers = Record[0];
2208      unsigned LocalBaseIdentifierID = Record[1];
2209      F.BaseIdentifierID = getTotalNumIdentifiers();
2210
2211      if (F.LocalNumIdentifiers > 0) {
2212        // Introduce the global -> local mapping for identifiers within this
2213        // module.
2214        GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
2215                                                  &F));
2216
2217        // Introduce the local -> global mapping for identifiers within this
2218        // module.
2219        F.IdentifierRemap.insertOrReplace(
2220          std::make_pair(LocalBaseIdentifierID,
2221                         F.BaseIdentifierID - LocalBaseIdentifierID));
2222
2223        IdentifiersLoaded.resize(IdentifiersLoaded.size()
2224                                 + F.LocalNumIdentifiers);
2225      }
2226      break;
2227    }
2228
2229    case EXTERNAL_DEFINITIONS:
2230      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2231        ExternalDefinitions.push_back(getGlobalDeclID(F, Record[I]));
2232      break;
2233
2234    case SPECIAL_TYPES:
2235      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2236        SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
2237      break;
2238
2239    case STATISTICS:
2240      TotalNumStatements += Record[0];
2241      TotalNumMacros += Record[1];
2242      TotalLexicalDeclContexts += Record[2];
2243      TotalVisibleDeclContexts += Record[3];
2244      break;
2245
2246    case UNUSED_FILESCOPED_DECLS:
2247      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2248        UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
2249      break;
2250
2251    case DELEGATING_CTORS:
2252      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2253        DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
2254      break;
2255
2256    case WEAK_UNDECLARED_IDENTIFIERS:
2257      if (Record.size() % 4 != 0) {
2258        Error("invalid weak identifiers record");
2259        return true;
2260      }
2261
2262      // FIXME: Ignore weak undeclared identifiers from non-original PCH
2263      // files. This isn't the way to do it :)
2264      WeakUndeclaredIdentifiers.clear();
2265
2266      // Translate the weak, undeclared identifiers into global IDs.
2267      for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
2268        WeakUndeclaredIdentifiers.push_back(
2269          getGlobalIdentifierID(F, Record[I++]));
2270        WeakUndeclaredIdentifiers.push_back(
2271          getGlobalIdentifierID(F, Record[I++]));
2272        WeakUndeclaredIdentifiers.push_back(
2273          ReadSourceLocation(F, Record, I).getRawEncoding());
2274        WeakUndeclaredIdentifiers.push_back(Record[I++]);
2275      }
2276      break;
2277
2278    case LOCALLY_SCOPED_EXTERNAL_DECLS:
2279      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2280        LocallyScopedExternalDecls.push_back(getGlobalDeclID(F, Record[I]));
2281      break;
2282
2283    case SELECTOR_OFFSETS: {
2284      F.SelectorOffsets = (const uint32_t *)BlobStart;
2285      F.LocalNumSelectors = Record[0];
2286      unsigned LocalBaseSelectorID = Record[1];
2287      F.BaseSelectorID = getTotalNumSelectors();
2288
2289      if (F.LocalNumSelectors > 0) {
2290        // Introduce the global -> local mapping for selectors within this
2291        // module.
2292        GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
2293
2294        // Introduce the local -> global mapping for selectors within this
2295        // module.
2296        F.SelectorRemap.insertOrReplace(
2297          std::make_pair(LocalBaseSelectorID,
2298                         F.BaseSelectorID - LocalBaseSelectorID));
2299
2300        SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
2301      }
2302      break;
2303    }
2304
2305    case METHOD_POOL:
2306      F.SelectorLookupTableData = (const unsigned char *)BlobStart;
2307      if (Record[0])
2308        F.SelectorLookupTable
2309          = ASTSelectorLookupTable::Create(
2310                        F.SelectorLookupTableData + Record[0],
2311                        F.SelectorLookupTableData,
2312                        ASTSelectorLookupTrait(*this, F));
2313      TotalNumMethodPoolEntries += Record[1];
2314      break;
2315
2316    case REFERENCED_SELECTOR_POOL:
2317      if (!Record.empty()) {
2318        for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
2319          ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
2320                                                                Record[Idx++]));
2321          ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
2322                                              getRawEncoding());
2323        }
2324      }
2325      break;
2326
2327    case PP_COUNTER_VALUE:
2328      if (!Record.empty() && Listener)
2329        Listener->ReadCounter(F, Record[0]);
2330      break;
2331
2332    case FILE_SORTED_DECLS:
2333      F.FileSortedDecls = (const DeclID *)BlobStart;
2334      F.NumFileSortedDecls = Record[0];
2335      break;
2336
2337    case SOURCE_LOCATION_OFFSETS: {
2338      F.SLocEntryOffsets = (const uint32_t *)BlobStart;
2339      F.LocalNumSLocEntries = Record[0];
2340      unsigned SLocSpaceSize = Record[1];
2341      llvm::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
2342          SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
2343                                              SLocSpaceSize);
2344      // Make our entry in the range map. BaseID is negative and growing, so
2345      // we invert it. Because we invert it, though, we need the other end of
2346      // the range.
2347      unsigned RangeStart =
2348          unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
2349      GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
2350      F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
2351
2352      // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
2353      assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
2354      GlobalSLocOffsetMap.insert(
2355          std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
2356                           - SLocSpaceSize,&F));
2357
2358      // Initialize the remapping table.
2359      // Invalid stays invalid.
2360      F.SLocRemap.insert(std::make_pair(0U, 0));
2361      // This module. Base was 2 when being compiled.
2362      F.SLocRemap.insert(std::make_pair(2U,
2363                                  static_cast<int>(F.SLocEntryBaseOffset - 2)));
2364
2365      TotalNumSLocEntries += F.LocalNumSLocEntries;
2366      break;
2367    }
2368
2369    case MODULE_OFFSET_MAP: {
2370      // Additional remapping information.
2371      const unsigned char *Data = (const unsigned char*)BlobStart;
2372      const unsigned char *DataEnd = Data + BlobLen;
2373
2374      // Continuous range maps we may be updating in our module.
2375      ContinuousRangeMap<uint32_t, int, 2>::Builder SLocRemap(F.SLocRemap);
2376      ContinuousRangeMap<uint32_t, int, 2>::Builder
2377        IdentifierRemap(F.IdentifierRemap);
2378      ContinuousRangeMap<uint32_t, int, 2>::Builder
2379        MacroRemap(F.MacroRemap);
2380      ContinuousRangeMap<uint32_t, int, 2>::Builder
2381        PreprocessedEntityRemap(F.PreprocessedEntityRemap);
2382      ContinuousRangeMap<uint32_t, int, 2>::Builder
2383        SubmoduleRemap(F.SubmoduleRemap);
2384      ContinuousRangeMap<uint32_t, int, 2>::Builder
2385        SelectorRemap(F.SelectorRemap);
2386      ContinuousRangeMap<uint32_t, int, 2>::Builder DeclRemap(F.DeclRemap);
2387      ContinuousRangeMap<uint32_t, int, 2>::Builder TypeRemap(F.TypeRemap);
2388
2389      while(Data < DataEnd) {
2390        uint16_t Len = io::ReadUnalignedLE16(Data);
2391        StringRef Name = StringRef((const char*)Data, Len);
2392        Data += Len;
2393        ModuleFile *OM = ModuleMgr.lookup(Name);
2394        if (!OM) {
2395          Error("SourceLocation remap refers to unknown module");
2396          return true;
2397        }
2398
2399        uint32_t SLocOffset = io::ReadUnalignedLE32(Data);
2400        uint32_t IdentifierIDOffset = io::ReadUnalignedLE32(Data);
2401        uint32_t MacroIDOffset = io::ReadUnalignedLE32(Data);
2402        uint32_t PreprocessedEntityIDOffset = io::ReadUnalignedLE32(Data);
2403        uint32_t SubmoduleIDOffset = io::ReadUnalignedLE32(Data);
2404        uint32_t SelectorIDOffset = io::ReadUnalignedLE32(Data);
2405        uint32_t DeclIDOffset = io::ReadUnalignedLE32(Data);
2406        uint32_t TypeIndexOffset = io::ReadUnalignedLE32(Data);
2407
2408        // Source location offset is mapped to OM->SLocEntryBaseOffset.
2409        SLocRemap.insert(std::make_pair(SLocOffset,
2410          static_cast<int>(OM->SLocEntryBaseOffset - SLocOffset)));
2411        IdentifierRemap.insert(
2412          std::make_pair(IdentifierIDOffset,
2413                         OM->BaseIdentifierID - IdentifierIDOffset));
2414        MacroRemap.insert(std::make_pair(MacroIDOffset,
2415                                         OM->BaseMacroID - MacroIDOffset));
2416        PreprocessedEntityRemap.insert(
2417          std::make_pair(PreprocessedEntityIDOffset,
2418            OM->BasePreprocessedEntityID - PreprocessedEntityIDOffset));
2419        SubmoduleRemap.insert(std::make_pair(SubmoduleIDOffset,
2420                                      OM->BaseSubmoduleID - SubmoduleIDOffset));
2421        SelectorRemap.insert(std::make_pair(SelectorIDOffset,
2422                               OM->BaseSelectorID - SelectorIDOffset));
2423        DeclRemap.insert(std::make_pair(DeclIDOffset,
2424                                        OM->BaseDeclID - DeclIDOffset));
2425
2426        TypeRemap.insert(std::make_pair(TypeIndexOffset,
2427                                    OM->BaseTypeIndex - TypeIndexOffset));
2428
2429        // Global -> local mappings.
2430        F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
2431      }
2432      break;
2433    }
2434
2435    case SOURCE_MANAGER_LINE_TABLE:
2436      if (ParseLineTable(F, Record))
2437        return true;
2438      break;
2439
2440    case SOURCE_LOCATION_PRELOADS: {
2441      // Need to transform from the local view (1-based IDs) to the global view,
2442      // which is based off F.SLocEntryBaseID.
2443      if (!F.PreloadSLocEntries.empty()) {
2444        Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
2445        return true;
2446      }
2447
2448      F.PreloadSLocEntries.swap(Record);
2449      break;
2450    }
2451
2452    case STAT_CACHE: {
2453      if (!DisableStatCache) {
2454        ASTStatCache *MyStatCache =
2455          new ASTStatCache((const unsigned char *)BlobStart + Record[0],
2456                           (const unsigned char *)BlobStart,
2457                           NumStatHits, NumStatMisses);
2458        FileMgr.addStatCache(MyStatCache);
2459        F.StatCache = MyStatCache;
2460      }
2461      break;
2462    }
2463
2464    case EXT_VECTOR_DECLS:
2465      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2466        ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
2467      break;
2468
2469    case VTABLE_USES:
2470      if (Record.size() % 3 != 0) {
2471        Error("Invalid VTABLE_USES record");
2472        return true;
2473      }
2474
2475      // Later tables overwrite earlier ones.
2476      // FIXME: Modules will have some trouble with this. This is clearly not
2477      // the right way to do this.
2478      VTableUses.clear();
2479
2480      for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
2481        VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
2482        VTableUses.push_back(
2483          ReadSourceLocation(F, Record, Idx).getRawEncoding());
2484        VTableUses.push_back(Record[Idx++]);
2485      }
2486      break;
2487
2488    case DYNAMIC_CLASSES:
2489      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2490        DynamicClasses.push_back(getGlobalDeclID(F, Record[I]));
2491      break;
2492
2493    case PENDING_IMPLICIT_INSTANTIATIONS:
2494      if (PendingInstantiations.size() % 2 != 0) {
2495        Error("Invalid existing PendingInstantiations");
2496        return true;
2497      }
2498
2499      if (Record.size() % 2 != 0) {
2500        Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
2501        return true;
2502      }
2503
2504      for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
2505        PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
2506        PendingInstantiations.push_back(
2507          ReadSourceLocation(F, Record, I).getRawEncoding());
2508      }
2509      break;
2510
2511    case SEMA_DECL_REFS:
2512      // Later tables overwrite earlier ones.
2513      // FIXME: Modules will have some trouble with this.
2514      SemaDeclRefs.clear();
2515      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2516        SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2517      break;
2518
2519    case PPD_ENTITIES_OFFSETS: {
2520      F.PreprocessedEntityOffsets = (const PPEntityOffset *)BlobStart;
2521      assert(BlobLen % sizeof(PPEntityOffset) == 0);
2522      F.NumPreprocessedEntities = BlobLen / sizeof(PPEntityOffset);
2523
2524      unsigned LocalBasePreprocessedEntityID = Record[0];
2525
2526      unsigned StartingID;
2527      if (!PP.getPreprocessingRecord())
2528        PP.createPreprocessingRecord(/*RecordConditionalDirectives=*/false);
2529      if (!PP.getPreprocessingRecord()->getExternalSource())
2530        PP.getPreprocessingRecord()->SetExternalSource(*this);
2531      StartingID
2532        = PP.getPreprocessingRecord()
2533            ->allocateLoadedEntities(F.NumPreprocessedEntities);
2534      F.BasePreprocessedEntityID = StartingID;
2535
2536      if (F.NumPreprocessedEntities > 0) {
2537        // Introduce the global -> local mapping for preprocessed entities in
2538        // this module.
2539        GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
2540
2541        // Introduce the local -> global mapping for preprocessed entities in
2542        // this module.
2543        F.PreprocessedEntityRemap.insertOrReplace(
2544          std::make_pair(LocalBasePreprocessedEntityID,
2545            F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
2546      }
2547
2548      break;
2549    }
2550
2551    case DECL_UPDATE_OFFSETS: {
2552      if (Record.size() % 2 != 0) {
2553        Error("invalid DECL_UPDATE_OFFSETS block in AST file");
2554        return true;
2555      }
2556      for (unsigned I = 0, N = Record.size(); I != N; I += 2)
2557        DeclUpdateOffsets[getGlobalDeclID(F, Record[I])]
2558          .push_back(std::make_pair(&F, Record[I+1]));
2559      break;
2560    }
2561
2562    case DECL_REPLACEMENTS: {
2563      if (Record.size() % 3 != 0) {
2564        Error("invalid DECL_REPLACEMENTS block in AST file");
2565        return true;
2566      }
2567      for (unsigned I = 0, N = Record.size(); I != N; I += 3)
2568        ReplacedDecls[getGlobalDeclID(F, Record[I])]
2569          = ReplacedDeclInfo(&F, Record[I+1], Record[I+2]);
2570      break;
2571    }
2572
2573    case OBJC_CATEGORIES_MAP: {
2574      if (F.LocalNumObjCCategoriesInMap != 0) {
2575        Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
2576        return true;
2577      }
2578
2579      F.LocalNumObjCCategoriesInMap = Record[0];
2580      F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)BlobStart;
2581      break;
2582    }
2583
2584    case OBJC_CATEGORIES:
2585      F.ObjCCategories.swap(Record);
2586      break;
2587
2588    case CXX_BASE_SPECIFIER_OFFSETS: {
2589      if (F.LocalNumCXXBaseSpecifiers != 0) {
2590        Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
2591        return true;
2592      }
2593
2594      F.LocalNumCXXBaseSpecifiers = Record[0];
2595      F.CXXBaseSpecifiersOffsets = (const uint32_t *)BlobStart;
2596      NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers;
2597      break;
2598    }
2599
2600    case DIAG_PRAGMA_MAPPINGS:
2601      if (Record.size() % 2 != 0) {
2602        Error("invalid DIAG_USER_MAPPINGS block in AST file");
2603        return true;
2604      }
2605
2606      if (F.PragmaDiagMappings.empty())
2607        F.PragmaDiagMappings.swap(Record);
2608      else
2609        F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
2610                                    Record.begin(), Record.end());
2611      break;
2612
2613    case CUDA_SPECIAL_DECL_REFS:
2614      // Later tables overwrite earlier ones.
2615      // FIXME: Modules will have trouble with this.
2616      CUDASpecialDeclRefs.clear();
2617      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2618        CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2619      break;
2620
2621    case HEADER_SEARCH_TABLE: {
2622      F.HeaderFileInfoTableData = BlobStart;
2623      F.LocalNumHeaderFileInfos = Record[1];
2624      F.HeaderFileFrameworkStrings = BlobStart + Record[2];
2625      if (Record[0]) {
2626        F.HeaderFileInfoTable
2627          = HeaderFileInfoLookupTable::Create(
2628                   (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
2629                   (const unsigned char *)F.HeaderFileInfoTableData,
2630                   HeaderFileInfoTrait(*this, F,
2631                                       &PP.getHeaderSearchInfo(),
2632                                       BlobStart + Record[2]));
2633
2634        PP.getHeaderSearchInfo().SetExternalSource(this);
2635        if (!PP.getHeaderSearchInfo().getExternalLookup())
2636          PP.getHeaderSearchInfo().SetExternalLookup(this);
2637      }
2638      break;
2639    }
2640
2641    case FP_PRAGMA_OPTIONS:
2642      // Later tables overwrite earlier ones.
2643      FPPragmaOptions.swap(Record);
2644      break;
2645
2646    case OPENCL_EXTENSIONS:
2647      // Later tables overwrite earlier ones.
2648      OpenCLExtensions.swap(Record);
2649      break;
2650
2651    case TENTATIVE_DEFINITIONS:
2652      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2653        TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
2654      break;
2655
2656    case KNOWN_NAMESPACES:
2657      for (unsigned I = 0, N = Record.size(); I != N; ++I)
2658        KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
2659      break;
2660
2661    case IMPORTED_MODULES: {
2662      if (F.Kind != MK_Module) {
2663        // If we aren't loading a module (which has its own exports), make
2664        // all of the imported modules visible.
2665        // FIXME: Deal with macros-only imports.
2666        for (unsigned I = 0, N = Record.size(); I != N; ++I) {
2667          if (unsigned GlobalID = getGlobalSubmoduleID(F, Record[I]))
2668            ImportedModules.push_back(GlobalID);
2669        }
2670      }
2671      break;
2672    }
2673
2674    case LOCAL_REDECLARATIONS: {
2675      F.RedeclarationChains.swap(Record);
2676      break;
2677    }
2678
2679    case LOCAL_REDECLARATIONS_MAP: {
2680      if (F.LocalNumRedeclarationsInMap != 0) {
2681        Error("duplicate LOCAL_REDECLARATIONS_MAP record in AST file");
2682        return true;
2683      }
2684
2685      F.LocalNumRedeclarationsInMap = Record[0];
2686      F.RedeclarationsMap = (const LocalRedeclarationsInfo *)BlobStart;
2687      break;
2688    }
2689
2690    case MERGED_DECLARATIONS: {
2691      for (unsigned Idx = 0; Idx < Record.size(); /* increment in loop */) {
2692        GlobalDeclID CanonID = getGlobalDeclID(F, Record[Idx++]);
2693        SmallVectorImpl<GlobalDeclID> &Decls = StoredMergedDecls[CanonID];
2694        for (unsigned N = Record[Idx++]; N > 0; --N)
2695          Decls.push_back(getGlobalDeclID(F, Record[Idx++]));
2696      }
2697      break;
2698    }
2699
2700    case MACRO_OFFSET: {
2701      if (F.LocalNumMacros != 0) {
2702        Error("duplicate MACRO_OFFSET record in AST file");
2703        return true;
2704      }
2705      F.MacroOffsets = (const uint32_t *)BlobStart;
2706      F.LocalNumMacros = Record[0];
2707      unsigned LocalBaseMacroID = Record[1];
2708      F.BaseMacroID = getTotalNumMacros();
2709
2710      if (F.LocalNumMacros > 0) {
2711        // Introduce the global -> local mapping for macros within this module.
2712        GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
2713
2714        // Introduce the local -> global mapping for macros within this module.
2715        F.MacroRemap.insertOrReplace(
2716          std::make_pair(LocalBaseMacroID,
2717                         F.BaseMacroID - LocalBaseMacroID));
2718
2719        MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
2720      }
2721      break;
2722    }
2723
2724    case MACRO_UPDATES: {
2725      for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
2726        MacroID ID = getGlobalMacroID(F, Record[I++]);
2727        if (I == N)
2728          break;
2729
2730        SourceLocation UndefLoc = ReadSourceLocation(F, Record, I);
2731        SubmoduleID SubmoduleID = getGlobalSubmoduleID(F, Record[I++]);;
2732        MacroUpdate Update;
2733        Update.UndefLoc = UndefLoc;
2734        MacroUpdates[ID].push_back(std::make_pair(SubmoduleID, Update));
2735      }
2736      break;
2737    }
2738    }
2739  }
2740  Error("premature end of bitstream in AST file");
2741  return true;
2742}
2743
2744void ASTReader::makeNamesVisible(const HiddenNames &Names) {
2745  for (unsigned I = 0, N = Names.size(); I != N; ++I) {
2746    switch (Names[I].getKind()) {
2747    case HiddenName::Declaration:
2748      Names[I].getDecl()->Hidden = false;
2749      break;
2750
2751    case HiddenName::MacroVisibility: {
2752      std::pair<IdentifierInfo *, MacroInfo *> Macro = Names[I].getMacro();
2753      Macro.second->setHidden(!Macro.second->isPublic());
2754      if (Macro.second->isDefined()) {
2755        PP.makeLoadedMacroInfoVisible(Macro.first, Macro.second);
2756      }
2757      break;
2758    }
2759
2760    case HiddenName::MacroUndef: {
2761      std::pair<IdentifierInfo *, MacroInfo *> Macro = Names[I].getMacro();
2762      if (Macro.second->isDefined()) {
2763        Macro.second->setUndefLoc(Names[I].getMacroUndefLoc());
2764        if (PPMutationListener *Listener = PP.getPPMutationListener())
2765          Listener->UndefinedMacro(Macro.second);
2766        PP.makeLoadedMacroInfoVisible(Macro.first, Macro.second);
2767      }
2768      break;
2769    }
2770    }
2771  }
2772}
2773
2774void ASTReader::makeModuleVisible(Module *Mod,
2775                                  Module::NameVisibilityKind NameVisibility) {
2776  llvm::SmallPtrSet<Module *, 4> Visited;
2777  llvm::SmallVector<Module *, 4> Stack;
2778  Stack.push_back(Mod);
2779  while (!Stack.empty()) {
2780    Mod = Stack.back();
2781    Stack.pop_back();
2782
2783    if (NameVisibility <= Mod->NameVisibility) {
2784      // This module already has this level of visibility (or greater), so
2785      // there is nothing more to do.
2786      continue;
2787    }
2788
2789    if (!Mod->isAvailable()) {
2790      // Modules that aren't available cannot be made visible.
2791      continue;
2792    }
2793
2794    // Update the module's name visibility.
2795    Mod->NameVisibility = NameVisibility;
2796
2797    // If we've already deserialized any names from this module,
2798    // mark them as visible.
2799    HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
2800    if (Hidden != HiddenNamesMap.end()) {
2801      makeNamesVisible(Hidden->second);
2802      HiddenNamesMap.erase(Hidden);
2803    }
2804
2805    // Push any non-explicit submodules onto the stack to be marked as
2806    // visible.
2807    for (Module::submodule_iterator Sub = Mod->submodule_begin(),
2808                                 SubEnd = Mod->submodule_end();
2809         Sub != SubEnd; ++Sub) {
2810      if (!(*Sub)->IsExplicit && Visited.insert(*Sub))
2811        Stack.push_back(*Sub);
2812    }
2813
2814    // Push any exported modules onto the stack to be marked as visible.
2815    bool AnyWildcard = false;
2816    bool UnrestrictedWildcard = false;
2817    llvm::SmallVector<Module *, 4> WildcardRestrictions;
2818    for (unsigned I = 0, N = Mod->Exports.size(); I != N; ++I) {
2819      Module *Exported = Mod->Exports[I].getPointer();
2820      if (!Mod->Exports[I].getInt()) {
2821        // Export a named module directly; no wildcards involved.
2822        if (Visited.insert(Exported))
2823          Stack.push_back(Exported);
2824
2825        continue;
2826      }
2827
2828      // Wildcard export: export all of the imported modules that match
2829      // the given pattern.
2830      AnyWildcard = true;
2831      if (UnrestrictedWildcard)
2832        continue;
2833
2834      if (Module *Restriction = Mod->Exports[I].getPointer())
2835        WildcardRestrictions.push_back(Restriction);
2836      else {
2837        WildcardRestrictions.clear();
2838        UnrestrictedWildcard = true;
2839      }
2840    }
2841
2842    // If there were any wildcards, push any imported modules that were
2843    // re-exported by the wildcard restriction.
2844    if (!AnyWildcard)
2845      continue;
2846
2847    for (unsigned I = 0, N = Mod->Imports.size(); I != N; ++I) {
2848      Module *Imported = Mod->Imports[I];
2849      if (!Visited.insert(Imported))
2850        continue;
2851
2852      bool Acceptable = UnrestrictedWildcard;
2853      if (!Acceptable) {
2854        // Check whether this module meets one of the restrictions.
2855        for (unsigned R = 0, NR = WildcardRestrictions.size(); R != NR; ++R) {
2856          Module *Restriction = WildcardRestrictions[R];
2857          if (Imported == Restriction || Imported->isSubModuleOf(Restriction)) {
2858            Acceptable = true;
2859            break;
2860          }
2861        }
2862      }
2863
2864      if (!Acceptable)
2865        continue;
2866
2867      Stack.push_back(Imported);
2868    }
2869  }
2870}
2871
2872ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
2873                                            ModuleKind Type) {
2874  // Bump the generation number.
2875  unsigned PreviousGeneration = CurrentGeneration++;
2876
2877  // Load the core of the AST files.
2878  llvm::SmallVector<ModuleFile *, 4> Loaded;
2879  switch(ReadASTCore(FileName, Type, /*ImportedBy=*/0, Loaded)) {
2880  case Failure: return Failure;
2881  case OutOfDate: return OutOfDate;
2882  case VersionMismatch: return VersionMismatch;
2883  case ConfigurationMismatch: return ConfigurationMismatch;
2884  case HadErrors: return HadErrors;
2885  case Success: break;
2886  }
2887
2888  // Here comes stuff that we only do once the entire chain is loaded.
2889
2890  // Load the AST blocks of all of the modules that we loaded.
2891  for (llvm::SmallVectorImpl<ModuleFile *>::iterator M = Loaded.begin(),
2892                                                  MEnd = Loaded.end();
2893       M != MEnd; ++M) {
2894    ModuleFile &F = **M;
2895
2896    // Read the AST block.
2897    if (ReadASTBlock(F))
2898      return Failure;
2899
2900    // Once read, set the ModuleFile bit base offset and update the size in
2901    // bits of all files we've seen.
2902    F.GlobalBitOffset = TotalModulesSizeInBits;
2903    TotalModulesSizeInBits += F.SizeInBits;
2904    GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
2905
2906    // Preload SLocEntries.
2907    for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
2908      int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
2909      // Load it through the SourceManager and don't call ReadSLocEntryRecord()
2910      // directly because the entry may have already been loaded in which case
2911      // calling ReadSLocEntryRecord() directly would trigger an assertion in
2912      // SourceManager.
2913      SourceMgr.getLoadedSLocEntryByID(Index);
2914    }
2915  }
2916
2917  // Check the predefines buffers.
2918  if (!DisableValidation && Type == MK_PCH &&
2919      // FIXME: CheckPredefinesBuffers also sets the SuggestedPredefines;
2920      // if DisableValidation is true, defines that were set on command-line
2921      // but not in the PCH file will not be added to SuggestedPredefines.
2922      CheckPredefinesBuffers())
2923    return ConfigurationMismatch;
2924
2925  // Mark all of the identifiers in the identifier table as being out of date,
2926  // so that various accessors know to check the loaded modules when the
2927  // identifier is used.
2928  for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
2929                              IdEnd = PP.getIdentifierTable().end();
2930       Id != IdEnd; ++Id)
2931    Id->second->setOutOfDate(true);
2932
2933  // Resolve any unresolved module exports.
2934  for (unsigned I = 0, N = UnresolvedModuleImportExports.size(); I != N; ++I) {
2935    UnresolvedModuleImportExport &Unresolved = UnresolvedModuleImportExports[I];
2936    SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
2937    Module *ResolvedMod = getSubmodule(GlobalID);
2938
2939    if (Unresolved.IsImport) {
2940      if (ResolvedMod)
2941        Unresolved.Mod->Imports.push_back(ResolvedMod);
2942      continue;
2943    }
2944
2945    if (ResolvedMod || Unresolved.IsWildcard)
2946      Unresolved.Mod->Exports.push_back(
2947        Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
2948  }
2949  UnresolvedModuleImportExports.clear();
2950
2951  InitializeContext();
2952
2953  if (DeserializationListener)
2954    DeserializationListener->ReaderInitialized(this);
2955
2956  ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
2957  if (!PrimaryModule.OriginalSourceFileID.isInvalid()) {
2958    PrimaryModule.OriginalSourceFileID
2959      = FileID::get(PrimaryModule.SLocEntryBaseID
2960                    + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
2961
2962    // If this AST file is a precompiled preamble, then set the
2963    // preamble file ID of the source manager to the file source file
2964    // from which the preamble was built.
2965    if (Type == MK_Preamble) {
2966      SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
2967    } else if (Type == MK_MainFile) {
2968      SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
2969    }
2970  }
2971
2972  // For any Objective-C class definitions we have already loaded, make sure
2973  // that we load any additional categories.
2974  for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
2975    loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
2976                       ObjCClassesLoaded[I],
2977                       PreviousGeneration);
2978  }
2979
2980  return Success;
2981}
2982
2983ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName,
2984                                                ModuleKind Type,
2985                                                ModuleFile *ImportedBy,
2986                           llvm::SmallVectorImpl<ModuleFile *> &Loaded) {
2987  ModuleFile *M;
2988  bool NewModule;
2989  std::string ErrorStr;
2990  llvm::tie(M, NewModule) = ModuleMgr.addModule(FileName, Type, ImportedBy,
2991                                                CurrentGeneration, ErrorStr);
2992
2993  if (!M) {
2994    // We couldn't load the module.
2995    std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
2996      + ErrorStr;
2997    Error(Msg);
2998    return Failure;
2999  }
3000
3001  if (!NewModule) {
3002    // We've already loaded this module.
3003    return Success;
3004  }
3005
3006  // FIXME: This seems rather a hack. Should CurrentDir be part of the
3007  // module?
3008  if (FileName != "-") {
3009    CurrentDir = llvm::sys::path::parent_path(FileName);
3010    if (CurrentDir.empty()) CurrentDir = ".";
3011  }
3012
3013  ModuleFile &F = *M;
3014  llvm::BitstreamCursor &Stream = F.Stream;
3015  Stream.init(F.StreamFile);
3016  F.SizeInBits = F.Buffer->getBufferSize() * 8;
3017
3018  // Sniff for the signature.
3019  if (Stream.Read(8) != 'C' ||
3020      Stream.Read(8) != 'P' ||
3021      Stream.Read(8) != 'C' ||
3022      Stream.Read(8) != 'H') {
3023    Diag(diag::err_not_a_pch_file) << FileName;
3024    return Failure;
3025  }
3026
3027  while (!Stream.AtEndOfStream()) {
3028    unsigned Code = Stream.ReadCode();
3029
3030    if (Code != llvm::bitc::ENTER_SUBBLOCK) {
3031      Error("invalid record at top-level of AST file");
3032      return Failure;
3033    }
3034
3035    unsigned BlockID = Stream.ReadSubBlockID();
3036
3037    // We only know the control subblock ID.
3038    switch (BlockID) {
3039    case llvm::bitc::BLOCKINFO_BLOCK_ID:
3040      if (Stream.ReadBlockInfoBlock()) {
3041        Error("malformed BlockInfoBlock in AST file");
3042        return Failure;
3043      }
3044      break;
3045    case CONTROL_BLOCK_ID:
3046      switch (ReadControlBlock(F, Loaded)) {
3047      case Success:
3048        break;
3049
3050      case Failure: return Failure;
3051      case OutOfDate: return OutOfDate;
3052      case VersionMismatch: return VersionMismatch;
3053      case ConfigurationMismatch: return ConfigurationMismatch;
3054      case HadErrors: return HadErrors;
3055      }
3056      break;
3057    case AST_BLOCK_ID:
3058      // Record that we've loaded this module.
3059      Loaded.push_back(M);
3060      return Success;
3061
3062    default:
3063      if (Stream.SkipBlock()) {
3064        Error("malformed block record in AST file");
3065        return Failure;
3066      }
3067      break;
3068    }
3069  }
3070
3071  return Success;
3072}
3073
3074void ASTReader::InitializeContext() {
3075  // If there's a listener, notify them that we "read" the translation unit.
3076  if (DeserializationListener)
3077    DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
3078                                      Context.getTranslationUnitDecl());
3079
3080  // Make sure we load the declaration update records for the translation unit,
3081  // if there are any.
3082  loadDeclUpdateRecords(PREDEF_DECL_TRANSLATION_UNIT_ID,
3083                        Context.getTranslationUnitDecl());
3084
3085  // FIXME: Find a better way to deal with collisions between these
3086  // built-in types. Right now, we just ignore the problem.
3087
3088  // Load the special types.
3089  if (SpecialTypes.size() >= NumSpecialTypeIDs) {
3090    if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
3091      if (!Context.CFConstantStringTypeDecl)
3092        Context.setCFConstantStringType(GetType(String));
3093    }
3094
3095    if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
3096      QualType FileType = GetType(File);
3097      if (FileType.isNull()) {
3098        Error("FILE type is NULL");
3099        return;
3100      }
3101
3102      if (!Context.FILEDecl) {
3103        if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
3104          Context.setFILEDecl(Typedef->getDecl());
3105        else {
3106          const TagType *Tag = FileType->getAs<TagType>();
3107          if (!Tag) {
3108            Error("Invalid FILE type in AST file");
3109            return;
3110          }
3111          Context.setFILEDecl(Tag->getDecl());
3112        }
3113      }
3114    }
3115
3116    if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
3117      QualType Jmp_bufType = GetType(Jmp_buf);
3118      if (Jmp_bufType.isNull()) {
3119        Error("jmp_buf type is NULL");
3120        return;
3121      }
3122
3123      if (!Context.jmp_bufDecl) {
3124        if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
3125          Context.setjmp_bufDecl(Typedef->getDecl());
3126        else {
3127          const TagType *Tag = Jmp_bufType->getAs<TagType>();
3128          if (!Tag) {
3129            Error("Invalid jmp_buf type in AST file");
3130            return;
3131          }
3132          Context.setjmp_bufDecl(Tag->getDecl());
3133        }
3134      }
3135    }
3136
3137    if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
3138      QualType Sigjmp_bufType = GetType(Sigjmp_buf);
3139      if (Sigjmp_bufType.isNull()) {
3140        Error("sigjmp_buf type is NULL");
3141        return;
3142      }
3143
3144      if (!Context.sigjmp_bufDecl) {
3145        if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
3146          Context.setsigjmp_bufDecl(Typedef->getDecl());
3147        else {
3148          const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
3149          assert(Tag && "Invalid sigjmp_buf type in AST file");
3150          Context.setsigjmp_bufDecl(Tag->getDecl());
3151        }
3152      }
3153    }
3154
3155    if (unsigned ObjCIdRedef
3156          = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
3157      if (Context.ObjCIdRedefinitionType.isNull())
3158        Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
3159    }
3160
3161    if (unsigned ObjCClassRedef
3162          = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
3163      if (Context.ObjCClassRedefinitionType.isNull())
3164        Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
3165    }
3166
3167    if (unsigned ObjCSelRedef
3168          = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
3169      if (Context.ObjCSelRedefinitionType.isNull())
3170        Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
3171    }
3172
3173    if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
3174      QualType Ucontext_tType = GetType(Ucontext_t);
3175      if (Ucontext_tType.isNull()) {
3176        Error("ucontext_t type is NULL");
3177        return;
3178      }
3179
3180      if (!Context.ucontext_tDecl) {
3181        if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
3182          Context.setucontext_tDecl(Typedef->getDecl());
3183        else {
3184          const TagType *Tag = Ucontext_tType->getAs<TagType>();
3185          assert(Tag && "Invalid ucontext_t type in AST file");
3186          Context.setucontext_tDecl(Tag->getDecl());
3187        }
3188      }
3189    }
3190  }
3191
3192  ReadPragmaDiagnosticMappings(Context.getDiagnostics());
3193
3194  // If there were any CUDA special declarations, deserialize them.
3195  if (!CUDASpecialDeclRefs.empty()) {
3196    assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
3197    Context.setcudaConfigureCallDecl(
3198                           cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
3199  }
3200
3201  // Re-export any modules that were imported by a non-module AST file.
3202  for (unsigned I = 0, N = ImportedModules.size(); I != N; ++I) {
3203    if (Module *Imported = getSubmodule(ImportedModules[I]))
3204      makeModuleVisible(Imported, Module::AllVisible);
3205  }
3206  ImportedModules.clear();
3207}
3208
3209void ASTReader::finalizeForWriting() {
3210  for (HiddenNamesMapType::iterator Hidden = HiddenNamesMap.begin(),
3211                                 HiddenEnd = HiddenNamesMap.end();
3212       Hidden != HiddenEnd; ++Hidden) {
3213    makeNamesVisible(Hidden->second);
3214  }
3215  HiddenNamesMap.clear();
3216}
3217
3218/// \brief Retrieve the name of the original source file name
3219/// directly from the AST file, without actually loading the AST
3220/// file.
3221std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
3222                                             FileManager &FileMgr,
3223                                             DiagnosticsEngine &Diags) {
3224  // Open the AST file.
3225  std::string ErrStr;
3226  OwningPtr<llvm::MemoryBuffer> Buffer;
3227  Buffer.reset(FileMgr.getBufferForFile(ASTFileName, &ErrStr));
3228  if (!Buffer) {
3229    Diags.Report(diag::err_fe_unable_to_read_pch_file) << ASTFileName << ErrStr;
3230    return std::string();
3231  }
3232
3233  // Initialize the stream
3234  llvm::BitstreamReader StreamFile;
3235  llvm::BitstreamCursor Stream;
3236  StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
3237                  (const unsigned char *)Buffer->getBufferEnd());
3238  Stream.init(StreamFile);
3239
3240  // Sniff for the signature.
3241  if (Stream.Read(8) != 'C' ||
3242      Stream.Read(8) != 'P' ||
3243      Stream.Read(8) != 'C' ||
3244      Stream.Read(8) != 'H') {
3245    Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
3246    return std::string();
3247  }
3248
3249  RecordData Record;
3250  while (!Stream.AtEndOfStream()) {
3251    unsigned Code = Stream.ReadCode();
3252
3253    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
3254      unsigned BlockID = Stream.ReadSubBlockID();
3255
3256      // We only know the AST subblock ID.
3257      switch (BlockID) {
3258      case CONTROL_BLOCK_ID:
3259        if (Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
3260          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
3261          return std::string();
3262        }
3263        break;
3264
3265      default:
3266        if (Stream.SkipBlock()) {
3267          Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
3268          return std::string();
3269        }
3270        break;
3271      }
3272      continue;
3273    }
3274
3275    if (Code == llvm::bitc::END_BLOCK) {
3276      if (Stream.ReadBlockEnd()) {
3277        Diags.Report(diag::err_fe_pch_error_at_end_block) << ASTFileName;
3278        return std::string();
3279      }
3280      continue;
3281    }
3282
3283    if (Code == llvm::bitc::DEFINE_ABBREV) {
3284      Stream.ReadAbbrevRecord();
3285      continue;
3286    }
3287
3288    Record.clear();
3289    const char *BlobStart = 0;
3290    unsigned BlobLen = 0;
3291    if (Stream.ReadRecord(Code, Record, &BlobStart, &BlobLen) == ORIGINAL_FILE)
3292      return std::string(BlobStart, BlobLen);
3293  }
3294
3295  return std::string();
3296}
3297
3298bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
3299  // Enter the submodule block.
3300  if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
3301    Error("malformed submodule block record in AST file");
3302    return true;
3303  }
3304
3305  ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
3306  bool First = true;
3307  Module *CurrentModule = 0;
3308  RecordData Record;
3309  while (true) {
3310    unsigned Code = F.Stream.ReadCode();
3311    if (Code == llvm::bitc::END_BLOCK) {
3312      if (F.Stream.ReadBlockEnd()) {
3313        Error("error at end of submodule block in AST file");
3314        return true;
3315      }
3316      return false;
3317    }
3318
3319    if (Code == llvm::bitc::ENTER_SUBBLOCK) {
3320      // No known subblocks, always skip them.
3321      F.Stream.ReadSubBlockID();
3322      if (F.Stream.SkipBlock()) {
3323        Error("malformed block record in AST file");
3324        return true;
3325      }
3326      continue;
3327    }
3328
3329    if (Code == llvm::bitc::DEFINE_ABBREV) {
3330      F.Stream.ReadAbbrevRecord();
3331      continue;
3332    }
3333
3334    // Read a record.
3335    const char *BlobStart;
3336    unsigned BlobLen;
3337    Record.clear();
3338    switch (F.Stream.ReadRecord(Code, Record, &BlobStart, &BlobLen)) {
3339    default:  // Default behavior: ignore.
3340      break;
3341
3342    case SUBMODULE_DEFINITION: {
3343      if (First) {
3344        Error("missing submodule metadata record at beginning of block");
3345        return true;
3346      }
3347
3348      if (Record.size() < 7) {
3349        Error("malformed module definition");
3350        return true;
3351      }
3352
3353      StringRef Name(BlobStart, BlobLen);
3354      SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[0]);
3355      SubmoduleID Parent = getGlobalSubmoduleID(F, Record[1]);
3356      bool IsFramework = Record[2];
3357      bool IsExplicit = Record[3];
3358      bool IsSystem = Record[4];
3359      bool InferSubmodules = Record[5];
3360      bool InferExplicitSubmodules = Record[6];
3361      bool InferExportWildcard = Record[7];
3362
3363      Module *ParentModule = 0;
3364      if (Parent)
3365        ParentModule = getSubmodule(Parent);
3366
3367      // Retrieve this (sub)module from the module map, creating it if
3368      // necessary.
3369      CurrentModule = ModMap.findOrCreateModule(Name, ParentModule,
3370                                                IsFramework,
3371                                                IsExplicit).first;
3372      SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
3373      if (GlobalIndex >= SubmodulesLoaded.size() ||
3374          SubmodulesLoaded[GlobalIndex]) {
3375        Error("too many submodules");
3376        return true;
3377      }
3378
3379      CurrentModule->setASTFile(F.File);
3380      CurrentModule->IsFromModuleFile = true;
3381      CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
3382      CurrentModule->InferSubmodules = InferSubmodules;
3383      CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
3384      CurrentModule->InferExportWildcard = InferExportWildcard;
3385      if (DeserializationListener)
3386        DeserializationListener->ModuleRead(GlobalID, CurrentModule);
3387
3388      SubmodulesLoaded[GlobalIndex] = CurrentModule;
3389      break;
3390    }
3391
3392    case SUBMODULE_UMBRELLA_HEADER: {
3393      if (First) {
3394        Error("missing submodule metadata record at beginning of block");
3395        return true;
3396      }
3397
3398      if (!CurrentModule)
3399        break;
3400
3401      StringRef FileName(BlobStart, BlobLen);
3402      if (const FileEntry *Umbrella = PP.getFileManager().getFile(FileName)) {
3403        if (!CurrentModule->getUmbrellaHeader())
3404          ModMap.setUmbrellaHeader(CurrentModule, Umbrella);
3405        else if (CurrentModule->getUmbrellaHeader() != Umbrella) {
3406          Error("mismatched umbrella headers in submodule");
3407          return true;
3408        }
3409      }
3410      break;
3411    }
3412
3413    case SUBMODULE_HEADER: {
3414      if (First) {
3415        Error("missing submodule metadata record at beginning of block");
3416        return true;
3417      }
3418
3419      if (!CurrentModule)
3420        break;
3421
3422      // FIXME: Be more lazy about this!
3423      StringRef FileName(BlobStart, BlobLen);
3424      if (const FileEntry *File = PP.getFileManager().getFile(FileName)) {
3425        if (std::find(CurrentModule->Headers.begin(),
3426                      CurrentModule->Headers.end(),
3427                      File) == CurrentModule->Headers.end())
3428          ModMap.addHeader(CurrentModule, File, false);
3429      }
3430      break;
3431    }
3432
3433    case SUBMODULE_EXCLUDED_HEADER: {
3434      if (First) {
3435        Error("missing submodule metadata record at beginning of block");
3436        return true;
3437      }
3438
3439      if (!CurrentModule)
3440        break;
3441
3442      // FIXME: Be more lazy about this!
3443      StringRef FileName(BlobStart, BlobLen);
3444      if (const FileEntry *File = PP.getFileManager().getFile(FileName)) {
3445        if (std::find(CurrentModule->Headers.begin(),
3446                      CurrentModule->Headers.end(),
3447                      File) == CurrentModule->Headers.end())
3448          ModMap.addHeader(CurrentModule, File, true);
3449      }
3450      break;
3451    }
3452
3453    case SUBMODULE_TOPHEADER: {
3454      if (First) {
3455        Error("missing submodule metadata record at beginning of block");
3456        return true;
3457      }
3458
3459      if (!CurrentModule)
3460        break;
3461
3462      // FIXME: Be more lazy about this!
3463      StringRef FileName(BlobStart, BlobLen);
3464      if (const FileEntry *File = PP.getFileManager().getFile(FileName))
3465        CurrentModule->TopHeaders.insert(File);
3466      break;
3467    }
3468
3469    case SUBMODULE_UMBRELLA_DIR: {
3470      if (First) {
3471        Error("missing submodule metadata record at beginning of block");
3472        return true;
3473      }
3474
3475      if (!CurrentModule)
3476        break;
3477
3478      StringRef DirName(BlobStart, BlobLen);
3479      if (const DirectoryEntry *Umbrella
3480                                  = PP.getFileManager().getDirectory(DirName)) {
3481        if (!CurrentModule->getUmbrellaDir())
3482          ModMap.setUmbrellaDir(CurrentModule, Umbrella);
3483        else if (CurrentModule->getUmbrellaDir() != Umbrella) {
3484          Error("mismatched umbrella directories in submodule");
3485          return true;
3486        }
3487      }
3488      break;
3489    }
3490
3491    case SUBMODULE_METADATA: {
3492      if (!First) {
3493        Error("submodule metadata record not at beginning of block");
3494        return true;
3495      }
3496      First = false;
3497
3498      F.BaseSubmoduleID = getTotalNumSubmodules();
3499      F.LocalNumSubmodules = Record[0];
3500      unsigned LocalBaseSubmoduleID = Record[1];
3501      if (F.LocalNumSubmodules > 0) {
3502        // Introduce the global -> local mapping for submodules within this
3503        // module.
3504        GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
3505
3506        // Introduce the local -> global mapping for submodules within this
3507        // module.
3508        F.SubmoduleRemap.insertOrReplace(
3509          std::make_pair(LocalBaseSubmoduleID,
3510                         F.BaseSubmoduleID - LocalBaseSubmoduleID));
3511
3512        SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
3513      }
3514      break;
3515    }
3516
3517    case SUBMODULE_IMPORTS: {
3518      if (First) {
3519        Error("missing submodule metadata record at beginning of block");
3520        return true;
3521      }
3522
3523      if (!CurrentModule)
3524        break;
3525
3526      for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
3527        UnresolvedModuleImportExport Unresolved;
3528        Unresolved.File = &F;
3529        Unresolved.Mod = CurrentModule;
3530        Unresolved.ID = Record[Idx];
3531        Unresolved.IsImport = true;
3532        Unresolved.IsWildcard = false;
3533        UnresolvedModuleImportExports.push_back(Unresolved);
3534      }
3535      break;
3536    }
3537
3538    case SUBMODULE_EXPORTS: {
3539      if (First) {
3540        Error("missing submodule metadata record at beginning of block");
3541        return true;
3542      }
3543
3544      if (!CurrentModule)
3545        break;
3546
3547      for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
3548        UnresolvedModuleImportExport Unresolved;
3549        Unresolved.File = &F;
3550        Unresolved.Mod = CurrentModule;
3551        Unresolved.ID = Record[Idx];
3552        Unresolved.IsImport = false;
3553        Unresolved.IsWildcard = Record[Idx + 1];
3554        UnresolvedModuleImportExports.push_back(Unresolved);
3555      }
3556
3557      // Once we've loaded the set of exports, there's no reason to keep
3558      // the parsed, unresolved exports around.
3559      CurrentModule->UnresolvedExports.clear();
3560      break;
3561    }
3562    case SUBMODULE_REQUIRES: {
3563      if (First) {
3564        Error("missing submodule metadata record at beginning of block");
3565        return true;
3566      }
3567
3568      if (!CurrentModule)
3569        break;
3570
3571      CurrentModule->addRequirement(StringRef(BlobStart, BlobLen),
3572                                    Context.getLangOpts(),
3573                                    Context.getTargetInfo());
3574      break;
3575    }
3576    }
3577  }
3578}
3579
3580/// \brief Parse the record that corresponds to a LangOptions data
3581/// structure.
3582///
3583/// This routine parses the language options from the AST file and then gives
3584/// them to the AST listener if one is set.
3585///
3586/// \returns true if the listener deems the file unacceptable, false otherwise.
3587bool ASTReader::ParseLanguageOptions(const ModuleFile &M,
3588                                     const RecordData &Record) {
3589  if (Listener) {
3590    LangOptions LangOpts;
3591    unsigned Idx = 0;
3592#define LANGOPT(Name, Bits, Default, Description) \
3593  LangOpts.Name = Record[Idx++];
3594#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
3595  LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
3596#include "clang/Basic/LangOptions.def"
3597
3598    ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
3599    VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
3600    LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
3601
3602    unsigned Length = Record[Idx++];
3603    LangOpts.CurrentModule.assign(Record.begin() + Idx,
3604                                  Record.begin() + Idx + Length);
3605    return Listener->ReadLanguageOptions(M, LangOpts);
3606  }
3607
3608  return false;
3609}
3610
3611std::pair<ModuleFile *, unsigned>
3612ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
3613  GlobalPreprocessedEntityMapType::iterator
3614  I = GlobalPreprocessedEntityMap.find(GlobalIndex);
3615  assert(I != GlobalPreprocessedEntityMap.end() &&
3616         "Corrupted global preprocessed entity map");
3617  ModuleFile *M = I->second;
3618  unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
3619  return std::make_pair(M, LocalIndex);
3620}
3621
3622std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator>
3623ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
3624  if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
3625    return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
3626                                             Mod.NumPreprocessedEntities);
3627
3628  return std::make_pair(PreprocessingRecord::iterator(),
3629                        PreprocessingRecord::iterator());
3630}
3631
3632std::pair<ASTReader::ModuleDeclIterator, ASTReader::ModuleDeclIterator>
3633ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
3634  return std::make_pair(ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
3635                        ModuleDeclIterator(this, &Mod,
3636                                 Mod.FileSortedDecls + Mod.NumFileSortedDecls));
3637}
3638
3639PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
3640  PreprocessedEntityID PPID = Index+1;
3641  std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
3642  ModuleFile &M = *PPInfo.first;
3643  unsigned LocalIndex = PPInfo.second;
3644  const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
3645
3646  SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
3647  M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
3648
3649  unsigned Code = M.PreprocessorDetailCursor.ReadCode();
3650  switch (Code) {
3651  case llvm::bitc::END_BLOCK:
3652    return 0;
3653
3654  case llvm::bitc::ENTER_SUBBLOCK:
3655    Error("unexpected subblock record in preprocessor detail block");
3656    return 0;
3657
3658  case llvm::bitc::DEFINE_ABBREV:
3659    Error("unexpected abbrevation record in preprocessor detail block");
3660    return 0;
3661
3662  default:
3663    break;
3664  }
3665
3666  if (!PP.getPreprocessingRecord()) {
3667    Error("no preprocessing record");
3668    return 0;
3669  }
3670
3671  // Read the record.
3672  SourceRange Range(ReadSourceLocation(M, PPOffs.Begin),
3673                    ReadSourceLocation(M, PPOffs.End));
3674  PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
3675  const char *BlobStart = 0;
3676  unsigned BlobLen = 0;
3677  RecordData Record;
3678  PreprocessorDetailRecordTypes RecType =
3679    (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.ReadRecord(
3680                                             Code, Record, BlobStart, BlobLen);
3681  switch (RecType) {
3682  case PPD_MACRO_EXPANSION: {
3683    bool isBuiltin = Record[0];
3684    IdentifierInfo *Name = 0;
3685    MacroDefinition *Def = 0;
3686    if (isBuiltin)
3687      Name = getLocalIdentifier(M, Record[1]);
3688    else {
3689      PreprocessedEntityID
3690          GlobalID = getGlobalPreprocessedEntityID(M, Record[1]);
3691      Def =cast<MacroDefinition>(PPRec.getLoadedPreprocessedEntity(GlobalID-1));
3692    }
3693
3694    MacroExpansion *ME;
3695    if (isBuiltin)
3696      ME = new (PPRec) MacroExpansion(Name, Range);
3697    else
3698      ME = new (PPRec) MacroExpansion(Def, Range);
3699
3700    return ME;
3701  }
3702
3703  case PPD_MACRO_DEFINITION: {
3704    // Decode the identifier info and then check again; if the macro is
3705    // still defined and associated with the identifier,
3706    IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
3707    MacroDefinition *MD
3708      = new (PPRec) MacroDefinition(II, Range);
3709
3710    if (DeserializationListener)
3711      DeserializationListener->MacroDefinitionRead(PPID, MD);
3712
3713    return MD;
3714  }
3715
3716  case PPD_INCLUSION_DIRECTIVE: {
3717    const char *FullFileNameStart = BlobStart + Record[0];
3718    StringRef FullFileName(FullFileNameStart, BlobLen - Record[0]);
3719    const FileEntry *File = 0;
3720    if (!FullFileName.empty())
3721      File = PP.getFileManager().getFile(FullFileName);
3722
3723    // FIXME: Stable encoding
3724    InclusionDirective::InclusionKind Kind
3725      = static_cast<InclusionDirective::InclusionKind>(Record[2]);
3726    InclusionDirective *ID
3727      = new (PPRec) InclusionDirective(PPRec, Kind,
3728                                       StringRef(BlobStart, Record[0]),
3729                                       Record[1], Record[3],
3730                                       File,
3731                                       Range);
3732    return ID;
3733  }
3734  }
3735
3736  llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
3737}
3738
3739/// \brief \arg SLocMapI points at a chunk of a module that contains no
3740/// preprocessed entities or the entities it contains are not the ones we are
3741/// looking for. Find the next module that contains entities and return the ID
3742/// of the first entry.
3743PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
3744                       GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
3745  ++SLocMapI;
3746  for (GlobalSLocOffsetMapType::const_iterator
3747         EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
3748    ModuleFile &M = *SLocMapI->second;
3749    if (M.NumPreprocessedEntities)
3750      return getGlobalPreprocessedEntityID(M, M.BasePreprocessedEntityID);
3751  }
3752
3753  return getTotalNumPreprocessedEntities();
3754}
3755
3756namespace {
3757
3758template <unsigned PPEntityOffset::*PPLoc>
3759struct PPEntityComp {
3760  const ASTReader &Reader;
3761  ModuleFile &M;
3762
3763  PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
3764
3765  bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
3766    SourceLocation LHS = getLoc(L);
3767    SourceLocation RHS = getLoc(R);
3768    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
3769  }
3770
3771  bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
3772    SourceLocation LHS = getLoc(L);
3773    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
3774  }
3775
3776  bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
3777    SourceLocation RHS = getLoc(R);
3778    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
3779  }
3780
3781  SourceLocation getLoc(const PPEntityOffset &PPE) const {
3782    return Reader.ReadSourceLocation(M, PPE.*PPLoc);
3783  }
3784};
3785
3786}
3787
3788/// \brief Returns the first preprocessed entity ID that ends after \arg BLoc.
3789PreprocessedEntityID
3790ASTReader::findBeginPreprocessedEntity(SourceLocation BLoc) const {
3791  if (SourceMgr.isLocalSourceLocation(BLoc))
3792    return getTotalNumPreprocessedEntities();
3793
3794  GlobalSLocOffsetMapType::const_iterator
3795    SLocMapI = GlobalSLocOffsetMap.find(SourceManager::MaxLoadedOffset -
3796                                        BLoc.getOffset());
3797  assert(SLocMapI != GlobalSLocOffsetMap.end() &&
3798         "Corrupted global sloc offset map");
3799
3800  if (SLocMapI->second->NumPreprocessedEntities == 0)
3801    return findNextPreprocessedEntity(SLocMapI);
3802
3803  ModuleFile &M = *SLocMapI->second;
3804  typedef const PPEntityOffset *pp_iterator;
3805  pp_iterator pp_begin = M.PreprocessedEntityOffsets;
3806  pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
3807
3808  size_t Count = M.NumPreprocessedEntities;
3809  size_t Half;
3810  pp_iterator First = pp_begin;
3811  pp_iterator PPI;
3812
3813  // Do a binary search manually instead of using std::lower_bound because
3814  // The end locations of entities may be unordered (when a macro expansion
3815  // is inside another macro argument), but for this case it is not important
3816  // whether we get the first macro expansion or its containing macro.
3817  while (Count > 0) {
3818    Half = Count/2;
3819    PPI = First;
3820    std::advance(PPI, Half);
3821    if (SourceMgr.isBeforeInTranslationUnit(ReadSourceLocation(M, PPI->End),
3822                                            BLoc)){
3823      First = PPI;
3824      ++First;
3825      Count = Count - Half - 1;
3826    } else
3827      Count = Half;
3828  }
3829
3830  if (PPI == pp_end)
3831    return findNextPreprocessedEntity(SLocMapI);
3832
3833  return getGlobalPreprocessedEntityID(M,
3834                                 M.BasePreprocessedEntityID + (PPI - pp_begin));
3835}
3836
3837/// \brief Returns the first preprocessed entity ID that begins after \arg ELoc.
3838PreprocessedEntityID
3839ASTReader::findEndPreprocessedEntity(SourceLocation ELoc) const {
3840  if (SourceMgr.isLocalSourceLocation(ELoc))
3841    return getTotalNumPreprocessedEntities();
3842
3843  GlobalSLocOffsetMapType::const_iterator
3844    SLocMapI = GlobalSLocOffsetMap.find(SourceManager::MaxLoadedOffset -
3845                                        ELoc.getOffset());
3846  assert(SLocMapI != GlobalSLocOffsetMap.end() &&
3847         "Corrupted global sloc offset map");
3848
3849  if (SLocMapI->second->NumPreprocessedEntities == 0)
3850    return findNextPreprocessedEntity(SLocMapI);
3851
3852  ModuleFile &M = *SLocMapI->second;
3853  typedef const PPEntityOffset *pp_iterator;
3854  pp_iterator pp_begin = M.PreprocessedEntityOffsets;
3855  pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
3856  pp_iterator PPI =
3857      std::upper_bound(pp_begin, pp_end, ELoc,
3858                       PPEntityComp<&PPEntityOffset::Begin>(*this, M));
3859
3860  if (PPI == pp_end)
3861    return findNextPreprocessedEntity(SLocMapI);
3862
3863  return getGlobalPreprocessedEntityID(M,
3864                                 M.BasePreprocessedEntityID + (PPI - pp_begin));
3865}
3866
3867/// \brief Returns a pair of [Begin, End) indices of preallocated
3868/// preprocessed entities that \arg Range encompasses.
3869std::pair<unsigned, unsigned>
3870    ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
3871  if (Range.isInvalid())
3872    return std::make_pair(0,0);
3873  assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
3874
3875  PreprocessedEntityID BeginID = findBeginPreprocessedEntity(Range.getBegin());
3876  PreprocessedEntityID EndID = findEndPreprocessedEntity(Range.getEnd());
3877  return std::make_pair(BeginID, EndID);
3878}
3879
3880/// \brief Optionally returns true or false if the preallocated preprocessed
3881/// entity with index \arg Index came from file \arg FID.
3882llvm::Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
3883                                                             FileID FID) {
3884  if (FID.isInvalid())
3885    return false;
3886
3887  std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
3888  ModuleFile &M = *PPInfo.first;
3889  unsigned LocalIndex = PPInfo.second;
3890  const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
3891
3892  SourceLocation Loc = ReadSourceLocation(M, PPOffs.Begin);
3893  if (Loc.isInvalid())
3894    return false;
3895
3896  if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
3897    return true;
3898  else
3899    return false;
3900}
3901
3902namespace {
3903  /// \brief Visitor used to search for information about a header file.
3904  class HeaderFileInfoVisitor {
3905    ASTReader &Reader;
3906    const FileEntry *FE;
3907
3908    llvm::Optional<HeaderFileInfo> HFI;
3909
3910  public:
3911    HeaderFileInfoVisitor(ASTReader &Reader, const FileEntry *FE)
3912      : Reader(Reader), FE(FE) { }
3913
3914    static bool visit(ModuleFile &M, void *UserData) {
3915      HeaderFileInfoVisitor *This
3916        = static_cast<HeaderFileInfoVisitor *>(UserData);
3917
3918      HeaderFileInfoTrait Trait(This->Reader, M,
3919                                &This->Reader.getPreprocessor().getHeaderSearchInfo(),
3920                                M.HeaderFileFrameworkStrings,
3921                                This->FE->getName());
3922
3923      HeaderFileInfoLookupTable *Table
3924        = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
3925      if (!Table)
3926        return false;
3927
3928      // Look in the on-disk hash table for an entry for this file name.
3929      HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE->getName(),
3930                                                            &Trait);
3931      if (Pos == Table->end())
3932        return false;
3933
3934      This->HFI = *Pos;
3935      return true;
3936    }
3937
3938    llvm::Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
3939  };
3940}
3941
3942HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
3943  HeaderFileInfoVisitor Visitor(*this, FE);
3944  ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor);
3945  if (llvm::Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo()) {
3946    if (Listener)
3947      Listener->ReadHeaderFileInfo(*HFI, FE->getUID());
3948    return *HFI;
3949  }
3950
3951  return HeaderFileInfo();
3952}
3953
3954void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
3955  for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) {
3956    ModuleFile &F = *(*I);
3957    unsigned Idx = 0;
3958    while (Idx < F.PragmaDiagMappings.size()) {
3959      SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
3960      Diag.DiagStates.push_back(*Diag.GetCurDiagState());
3961      Diag.DiagStatePoints.push_back(
3962          DiagnosticsEngine::DiagStatePoint(&Diag.DiagStates.back(),
3963                                            FullSourceLoc(Loc, SourceMgr)));
3964      while (1) {
3965        assert(Idx < F.PragmaDiagMappings.size() &&
3966               "Invalid data, didn't find '-1' marking end of diag/map pairs");
3967        if (Idx >= F.PragmaDiagMappings.size()) {
3968          break; // Something is messed up but at least avoid infinite loop in
3969                 // release build.
3970        }
3971        unsigned DiagID = F.PragmaDiagMappings[Idx++];
3972        if (DiagID == (unsigned)-1) {
3973          break; // no more diag/map pairs for this location.
3974        }
3975        diag::Mapping Map = (diag::Mapping)F.PragmaDiagMappings[Idx++];
3976        DiagnosticMappingInfo MappingInfo = Diag.makeMappingInfo(Map, Loc);
3977        Diag.GetCurDiagState()->setMappingInfo(DiagID, MappingInfo);
3978      }
3979    }
3980  }
3981}
3982
3983/// \brief Get the correct cursor and offset for loading a type.
3984ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
3985  GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
3986  assert(I != GlobalTypeMap.end() && "Corrupted global type map");
3987  ModuleFile *M = I->second;
3988  return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
3989}
3990
3991/// \brief Read and return the type with the given index..
3992///
3993/// The index is the type ID, shifted and minus the number of predefs. This
3994/// routine actually reads the record corresponding to the type at the given
3995/// location. It is a helper routine for GetType, which deals with reading type
3996/// IDs.
3997QualType ASTReader::readTypeRecord(unsigned Index) {
3998  RecordLocation Loc = TypeCursorForIndex(Index);
3999  llvm::BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
4000
4001  // Keep track of where we are in the stream, then jump back there
4002  // after reading this type.
4003  SavedStreamPosition SavedPosition(DeclsCursor);
4004
4005  ReadingKindTracker ReadingKind(Read_Type, *this);
4006
4007  // Note that we are loading a type record.
4008  Deserializing AType(this);
4009
4010  unsigned Idx = 0;
4011  DeclsCursor.JumpToBit(Loc.Offset);
4012  RecordData Record;
4013  unsigned Code = DeclsCursor.ReadCode();
4014  switch ((TypeCode)DeclsCursor.ReadRecord(Code, Record)) {
4015  case TYPE_EXT_QUAL: {
4016    if (Record.size() != 2) {
4017      Error("Incorrect encoding of extended qualifier type");
4018      return QualType();
4019    }
4020    QualType Base = readType(*Loc.F, Record, Idx);
4021    Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
4022    return Context.getQualifiedType(Base, Quals);
4023  }
4024
4025  case TYPE_COMPLEX: {
4026    if (Record.size() != 1) {
4027      Error("Incorrect encoding of complex type");
4028      return QualType();
4029    }
4030    QualType ElemType = readType(*Loc.F, Record, Idx);
4031    return Context.getComplexType(ElemType);
4032  }
4033
4034  case TYPE_POINTER: {
4035    if (Record.size() != 1) {
4036      Error("Incorrect encoding of pointer type");
4037      return QualType();
4038    }
4039    QualType PointeeType = readType(*Loc.F, Record, Idx);
4040    return Context.getPointerType(PointeeType);
4041  }
4042
4043  case TYPE_BLOCK_POINTER: {
4044    if (Record.size() != 1) {
4045      Error("Incorrect encoding of block pointer type");
4046      return QualType();
4047    }
4048    QualType PointeeType = readType(*Loc.F, Record, Idx);
4049    return Context.getBlockPointerType(PointeeType);
4050  }
4051
4052  case TYPE_LVALUE_REFERENCE: {
4053    if (Record.size() != 2) {
4054      Error("Incorrect encoding of lvalue reference type");
4055      return QualType();
4056    }
4057    QualType PointeeType = readType(*Loc.F, Record, Idx);
4058    return Context.getLValueReferenceType(PointeeType, Record[1]);
4059  }
4060
4061  case TYPE_RVALUE_REFERENCE: {
4062    if (Record.size() != 1) {
4063      Error("Incorrect encoding of rvalue reference type");
4064      return QualType();
4065    }
4066    QualType PointeeType = readType(*Loc.F, Record, Idx);
4067    return Context.getRValueReferenceType(PointeeType);
4068  }
4069
4070  case TYPE_MEMBER_POINTER: {
4071    if (Record.size() != 2) {
4072      Error("Incorrect encoding of member pointer type");
4073      return QualType();
4074    }
4075    QualType PointeeType = readType(*Loc.F, Record, Idx);
4076    QualType ClassType = readType(*Loc.F, Record, Idx);
4077    if (PointeeType.isNull() || ClassType.isNull())
4078      return QualType();
4079
4080    return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
4081  }
4082
4083  case TYPE_CONSTANT_ARRAY: {
4084    QualType ElementType = readType(*Loc.F, Record, Idx);
4085    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4086    unsigned IndexTypeQuals = Record[2];
4087    unsigned Idx = 3;
4088    llvm::APInt Size = ReadAPInt(Record, Idx);
4089    return Context.getConstantArrayType(ElementType, Size,
4090                                         ASM, IndexTypeQuals);
4091  }
4092
4093  case TYPE_INCOMPLETE_ARRAY: {
4094    QualType ElementType = readType(*Loc.F, Record, Idx);
4095    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4096    unsigned IndexTypeQuals = Record[2];
4097    return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
4098  }
4099
4100  case TYPE_VARIABLE_ARRAY: {
4101    QualType ElementType = readType(*Loc.F, Record, Idx);
4102    ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4103    unsigned IndexTypeQuals = Record[2];
4104    SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
4105    SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
4106    return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
4107                                         ASM, IndexTypeQuals,
4108                                         SourceRange(LBLoc, RBLoc));
4109  }
4110
4111  case TYPE_VECTOR: {
4112    if (Record.size() != 3) {
4113      Error("incorrect encoding of vector type in AST file");
4114      return QualType();
4115    }
4116
4117    QualType ElementType = readType(*Loc.F, Record, Idx);
4118    unsigned NumElements = Record[1];
4119    unsigned VecKind = Record[2];
4120    return Context.getVectorType(ElementType, NumElements,
4121                                  (VectorType::VectorKind)VecKind);
4122  }
4123
4124  case TYPE_EXT_VECTOR: {
4125    if (Record.size() != 3) {
4126      Error("incorrect encoding of extended vector type in AST file");
4127      return QualType();
4128    }
4129
4130    QualType ElementType = readType(*Loc.F, Record, Idx);
4131    unsigned NumElements = Record[1];
4132    return Context.getExtVectorType(ElementType, NumElements);
4133  }
4134
4135  case TYPE_FUNCTION_NO_PROTO: {
4136    if (Record.size() != 6) {
4137      Error("incorrect encoding of no-proto function type");
4138      return QualType();
4139    }
4140    QualType ResultType = readType(*Loc.F, Record, Idx);
4141    FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
4142                               (CallingConv)Record[4], Record[5]);
4143    return Context.getFunctionNoProtoType(ResultType, Info);
4144  }
4145
4146  case TYPE_FUNCTION_PROTO: {
4147    QualType ResultType = readType(*Loc.F, Record, Idx);
4148
4149    FunctionProtoType::ExtProtoInfo EPI;
4150    EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
4151                                        /*hasregparm*/ Record[2],
4152                                        /*regparm*/ Record[3],
4153                                        static_cast<CallingConv>(Record[4]),
4154                                        /*produces*/ Record[5]);
4155
4156    unsigned Idx = 6;
4157    unsigned NumParams = Record[Idx++];
4158    SmallVector<QualType, 16> ParamTypes;
4159    for (unsigned I = 0; I != NumParams; ++I)
4160      ParamTypes.push_back(readType(*Loc.F, Record, Idx));
4161
4162    EPI.Variadic = Record[Idx++];
4163    EPI.HasTrailingReturn = Record[Idx++];
4164    EPI.TypeQuals = Record[Idx++];
4165    EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
4166    ExceptionSpecificationType EST =
4167        static_cast<ExceptionSpecificationType>(Record[Idx++]);
4168    EPI.ExceptionSpecType = EST;
4169    SmallVector<QualType, 2> Exceptions;
4170    if (EST == EST_Dynamic) {
4171      EPI.NumExceptions = Record[Idx++];
4172      for (unsigned I = 0; I != EPI.NumExceptions; ++I)
4173        Exceptions.push_back(readType(*Loc.F, Record, Idx));
4174      EPI.Exceptions = Exceptions.data();
4175    } else if (EST == EST_ComputedNoexcept) {
4176      EPI.NoexceptExpr = ReadExpr(*Loc.F);
4177    } else if (EST == EST_Uninstantiated) {
4178      EPI.ExceptionSpecDecl = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4179      EPI.ExceptionSpecTemplate = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4180    } else if (EST == EST_Unevaluated) {
4181      EPI.ExceptionSpecDecl = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4182    }
4183    return Context.getFunctionType(ResultType, ParamTypes.data(), NumParams,
4184                                    EPI);
4185  }
4186
4187  case TYPE_UNRESOLVED_USING: {
4188    unsigned Idx = 0;
4189    return Context.getTypeDeclType(
4190                  ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
4191  }
4192
4193  case TYPE_TYPEDEF: {
4194    if (Record.size() != 2) {
4195      Error("incorrect encoding of typedef type");
4196      return QualType();
4197    }
4198    unsigned Idx = 0;
4199    TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
4200    QualType Canonical = readType(*Loc.F, Record, Idx);
4201    if (!Canonical.isNull())
4202      Canonical = Context.getCanonicalType(Canonical);
4203    return Context.getTypedefType(Decl, Canonical);
4204  }
4205
4206  case TYPE_TYPEOF_EXPR:
4207    return Context.getTypeOfExprType(ReadExpr(*Loc.F));
4208
4209  case TYPE_TYPEOF: {
4210    if (Record.size() != 1) {
4211      Error("incorrect encoding of typeof(type) in AST file");
4212      return QualType();
4213    }
4214    QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4215    return Context.getTypeOfType(UnderlyingType);
4216  }
4217
4218  case TYPE_DECLTYPE: {
4219    QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4220    return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
4221  }
4222
4223  case TYPE_UNARY_TRANSFORM: {
4224    QualType BaseType = readType(*Loc.F, Record, Idx);
4225    QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4226    UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
4227    return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
4228  }
4229
4230  case TYPE_AUTO:
4231    return Context.getAutoType(readType(*Loc.F, Record, Idx));
4232
4233  case TYPE_RECORD: {
4234    if (Record.size() != 2) {
4235      Error("incorrect encoding of record type");
4236      return QualType();
4237    }
4238    unsigned Idx = 0;
4239    bool IsDependent = Record[Idx++];
4240    RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
4241    RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
4242    QualType T = Context.getRecordType(RD);
4243    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4244    return T;
4245  }
4246
4247  case TYPE_ENUM: {
4248    if (Record.size() != 2) {
4249      Error("incorrect encoding of enum type");
4250      return QualType();
4251    }
4252    unsigned Idx = 0;
4253    bool IsDependent = Record[Idx++];
4254    QualType T
4255      = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
4256    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4257    return T;
4258  }
4259
4260  case TYPE_ATTRIBUTED: {
4261    if (Record.size() != 3) {
4262      Error("incorrect encoding of attributed type");
4263      return QualType();
4264    }
4265    QualType modifiedType = readType(*Loc.F, Record, Idx);
4266    QualType equivalentType = readType(*Loc.F, Record, Idx);
4267    AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
4268    return Context.getAttributedType(kind, modifiedType, equivalentType);
4269  }
4270
4271  case TYPE_PAREN: {
4272    if (Record.size() != 1) {
4273      Error("incorrect encoding of paren type");
4274      return QualType();
4275    }
4276    QualType InnerType = readType(*Loc.F, Record, Idx);
4277    return Context.getParenType(InnerType);
4278  }
4279
4280  case TYPE_PACK_EXPANSION: {
4281    if (Record.size() != 2) {
4282      Error("incorrect encoding of pack expansion type");
4283      return QualType();
4284    }
4285    QualType Pattern = readType(*Loc.F, Record, Idx);
4286    if (Pattern.isNull())
4287      return QualType();
4288    llvm::Optional<unsigned> NumExpansions;
4289    if (Record[1])
4290      NumExpansions = Record[1] - 1;
4291    return Context.getPackExpansionType(Pattern, NumExpansions);
4292  }
4293
4294  case TYPE_ELABORATED: {
4295    unsigned Idx = 0;
4296    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4297    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4298    QualType NamedType = readType(*Loc.F, Record, Idx);
4299    return Context.getElaboratedType(Keyword, NNS, NamedType);
4300  }
4301
4302  case TYPE_OBJC_INTERFACE: {
4303    unsigned Idx = 0;
4304    ObjCInterfaceDecl *ItfD
4305      = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
4306    return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
4307  }
4308
4309  case TYPE_OBJC_OBJECT: {
4310    unsigned Idx = 0;
4311    QualType Base = readType(*Loc.F, Record, Idx);
4312    unsigned NumProtos = Record[Idx++];
4313    SmallVector<ObjCProtocolDecl*, 4> Protos;
4314    for (unsigned I = 0; I != NumProtos; ++I)
4315      Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
4316    return Context.getObjCObjectType(Base, Protos.data(), NumProtos);
4317  }
4318
4319  case TYPE_OBJC_OBJECT_POINTER: {
4320    unsigned Idx = 0;
4321    QualType Pointee = readType(*Loc.F, Record, Idx);
4322    return Context.getObjCObjectPointerType(Pointee);
4323  }
4324
4325  case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
4326    unsigned Idx = 0;
4327    QualType Parm = readType(*Loc.F, Record, Idx);
4328    QualType Replacement = readType(*Loc.F, Record, Idx);
4329    return
4330      Context.getSubstTemplateTypeParmType(cast<TemplateTypeParmType>(Parm),
4331                                            Replacement);
4332  }
4333
4334  case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
4335    unsigned Idx = 0;
4336    QualType Parm = readType(*Loc.F, Record, Idx);
4337    TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
4338    return Context.getSubstTemplateTypeParmPackType(
4339                                               cast<TemplateTypeParmType>(Parm),
4340                                                     ArgPack);
4341  }
4342
4343  case TYPE_INJECTED_CLASS_NAME: {
4344    CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
4345    QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
4346    // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
4347    // for AST reading, too much interdependencies.
4348    return
4349      QualType(new (Context, TypeAlignment) InjectedClassNameType(D, TST), 0);
4350  }
4351
4352  case TYPE_TEMPLATE_TYPE_PARM: {
4353    unsigned Idx = 0;
4354    unsigned Depth = Record[Idx++];
4355    unsigned Index = Record[Idx++];
4356    bool Pack = Record[Idx++];
4357    TemplateTypeParmDecl *D
4358      = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
4359    return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
4360  }
4361
4362  case TYPE_DEPENDENT_NAME: {
4363    unsigned Idx = 0;
4364    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4365    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4366    const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
4367    QualType Canon = readType(*Loc.F, Record, Idx);
4368    if (!Canon.isNull())
4369      Canon = Context.getCanonicalType(Canon);
4370    return Context.getDependentNameType(Keyword, NNS, Name, Canon);
4371  }
4372
4373  case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
4374    unsigned Idx = 0;
4375    ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4376    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4377    const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
4378    unsigned NumArgs = Record[Idx++];
4379    SmallVector<TemplateArgument, 8> Args;
4380    Args.reserve(NumArgs);
4381    while (NumArgs--)
4382      Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
4383    return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
4384                                                      Args.size(), Args.data());
4385  }
4386
4387  case TYPE_DEPENDENT_SIZED_ARRAY: {
4388    unsigned Idx = 0;
4389
4390    // ArrayType
4391    QualType ElementType = readType(*Loc.F, Record, Idx);
4392    ArrayType::ArraySizeModifier ASM
4393      = (ArrayType::ArraySizeModifier)Record[Idx++];
4394    unsigned IndexTypeQuals = Record[Idx++];
4395
4396    // DependentSizedArrayType
4397    Expr *NumElts = ReadExpr(*Loc.F);
4398    SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
4399
4400    return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
4401                                               IndexTypeQuals, Brackets);
4402  }
4403
4404  case TYPE_TEMPLATE_SPECIALIZATION: {
4405    unsigned Idx = 0;
4406    bool IsDependent = Record[Idx++];
4407    TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
4408    SmallVector<TemplateArgument, 8> Args;
4409    ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
4410    QualType Underlying = readType(*Loc.F, Record, Idx);
4411    QualType T;
4412    if (Underlying.isNull())
4413      T = Context.getCanonicalTemplateSpecializationType(Name, Args.data(),
4414                                                          Args.size());
4415    else
4416      T = Context.getTemplateSpecializationType(Name, Args.data(),
4417                                                 Args.size(), Underlying);
4418    const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4419    return T;
4420  }
4421
4422  case TYPE_ATOMIC: {
4423    if (Record.size() != 1) {
4424      Error("Incorrect encoding of atomic type");
4425      return QualType();
4426    }
4427    QualType ValueType = readType(*Loc.F, Record, Idx);
4428    return Context.getAtomicType(ValueType);
4429  }
4430  }
4431  llvm_unreachable("Invalid TypeCode!");
4432}
4433
4434class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
4435  ASTReader &Reader;
4436  ModuleFile &F;
4437  const ASTReader::RecordData &Record;
4438  unsigned &Idx;
4439
4440  SourceLocation ReadSourceLocation(const ASTReader::RecordData &R,
4441                                    unsigned &I) {
4442    return Reader.ReadSourceLocation(F, R, I);
4443  }
4444
4445  template<typename T>
4446  T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) {
4447    return Reader.ReadDeclAs<T>(F, Record, Idx);
4448  }
4449
4450public:
4451  TypeLocReader(ASTReader &Reader, ModuleFile &F,
4452                const ASTReader::RecordData &Record, unsigned &Idx)
4453    : Reader(Reader), F(F), Record(Record), Idx(Idx)
4454  { }
4455
4456  // We want compile-time assurance that we've enumerated all of
4457  // these, so unfortunately we have to declare them first, then
4458  // define them out-of-line.
4459#define ABSTRACT_TYPELOC(CLASS, PARENT)
4460#define TYPELOC(CLASS, PARENT) \
4461  void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
4462#include "clang/AST/TypeLocNodes.def"
4463
4464  void VisitFunctionTypeLoc(FunctionTypeLoc);
4465  void VisitArrayTypeLoc(ArrayTypeLoc);
4466};
4467
4468void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
4469  // nothing to do
4470}
4471void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
4472  TL.setBuiltinLoc(ReadSourceLocation(Record, Idx));
4473  if (TL.needsExtraLocalData()) {
4474    TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
4475    TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
4476    TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
4477    TL.setModeAttr(Record[Idx++]);
4478  }
4479}
4480void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
4481  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4482}
4483void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
4484  TL.setStarLoc(ReadSourceLocation(Record, Idx));
4485}
4486void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
4487  TL.setCaretLoc(ReadSourceLocation(Record, Idx));
4488}
4489void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
4490  TL.setAmpLoc(ReadSourceLocation(Record, Idx));
4491}
4492void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
4493  TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx));
4494}
4495void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
4496  TL.setStarLoc(ReadSourceLocation(Record, Idx));
4497  TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
4498}
4499void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
4500  TL.setLBracketLoc(ReadSourceLocation(Record, Idx));
4501  TL.setRBracketLoc(ReadSourceLocation(Record, Idx));
4502  if (Record[Idx++])
4503    TL.setSizeExpr(Reader.ReadExpr(F));
4504  else
4505    TL.setSizeExpr(0);
4506}
4507void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
4508  VisitArrayTypeLoc(TL);
4509}
4510void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
4511  VisitArrayTypeLoc(TL);
4512}
4513void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
4514  VisitArrayTypeLoc(TL);
4515}
4516void TypeLocReader::VisitDependentSizedArrayTypeLoc(
4517                                            DependentSizedArrayTypeLoc TL) {
4518  VisitArrayTypeLoc(TL);
4519}
4520void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
4521                                        DependentSizedExtVectorTypeLoc TL) {
4522  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4523}
4524void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
4525  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4526}
4527void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
4528  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4529}
4530void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
4531  TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx));
4532  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4533  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4534  TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx));
4535  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i) {
4536    TL.setArg(i, ReadDeclAs<ParmVarDecl>(Record, Idx));
4537  }
4538}
4539void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
4540  VisitFunctionTypeLoc(TL);
4541}
4542void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
4543  VisitFunctionTypeLoc(TL);
4544}
4545void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
4546  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4547}
4548void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
4549  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4550}
4551void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
4552  TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
4553  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4554  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4555}
4556void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
4557  TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
4558  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4559  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4560  TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
4561}
4562void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
4563  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4564}
4565void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
4566  TL.setKWLoc(ReadSourceLocation(Record, Idx));
4567  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4568  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4569  TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
4570}
4571void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
4572  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4573}
4574void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
4575  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4576}
4577void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
4578  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4579}
4580void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
4581  TL.setAttrNameLoc(ReadSourceLocation(Record, Idx));
4582  if (TL.hasAttrOperand()) {
4583    SourceRange range;
4584    range.setBegin(ReadSourceLocation(Record, Idx));
4585    range.setEnd(ReadSourceLocation(Record, Idx));
4586    TL.setAttrOperandParensRange(range);
4587  }
4588  if (TL.hasAttrExprOperand()) {
4589    if (Record[Idx++])
4590      TL.setAttrExprOperand(Reader.ReadExpr(F));
4591    else
4592      TL.setAttrExprOperand(0);
4593  } else if (TL.hasAttrEnumOperand())
4594    TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx));
4595}
4596void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
4597  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4598}
4599void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
4600                                            SubstTemplateTypeParmTypeLoc TL) {
4601  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4602}
4603void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
4604                                          SubstTemplateTypeParmPackTypeLoc TL) {
4605  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4606}
4607void TypeLocReader::VisitTemplateSpecializationTypeLoc(
4608                                           TemplateSpecializationTypeLoc TL) {
4609  TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
4610  TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
4611  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
4612  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
4613  for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
4614    TL.setArgLocInfo(i,
4615        Reader.GetTemplateArgumentLocInfo(F,
4616                                          TL.getTypePtr()->getArg(i).getKind(),
4617                                          Record, Idx));
4618}
4619void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
4620  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4621  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4622}
4623void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
4624  TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
4625  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
4626}
4627void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
4628  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4629}
4630void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
4631  TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
4632  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
4633  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4634}
4635void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
4636       DependentTemplateSpecializationTypeLoc TL) {
4637  TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
4638  TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
4639  TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
4640  TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
4641  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
4642  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
4643  for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
4644    TL.setArgLocInfo(I,
4645        Reader.GetTemplateArgumentLocInfo(F,
4646                                          TL.getTypePtr()->getArg(I).getKind(),
4647                                          Record, Idx));
4648}
4649void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
4650  TL.setEllipsisLoc(ReadSourceLocation(Record, Idx));
4651}
4652void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
4653  TL.setNameLoc(ReadSourceLocation(Record, Idx));
4654}
4655void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
4656  TL.setHasBaseTypeAsWritten(Record[Idx++]);
4657  TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
4658  TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
4659  for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
4660    TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx));
4661}
4662void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
4663  TL.setStarLoc(ReadSourceLocation(Record, Idx));
4664}
4665void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
4666  TL.setKWLoc(ReadSourceLocation(Record, Idx));
4667  TL.setLParenLoc(ReadSourceLocation(Record, Idx));
4668  TL.setRParenLoc(ReadSourceLocation(Record, Idx));
4669}
4670
4671TypeSourceInfo *ASTReader::GetTypeSourceInfo(ModuleFile &F,
4672                                             const RecordData &Record,
4673                                             unsigned &Idx) {
4674  QualType InfoTy = readType(F, Record, Idx);
4675  if (InfoTy.isNull())
4676    return 0;
4677
4678  TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
4679  TypeLocReader TLR(*this, F, Record, Idx);
4680  for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
4681    TLR.Visit(TL);
4682  return TInfo;
4683}
4684
4685QualType ASTReader::GetType(TypeID ID) {
4686  unsigned FastQuals = ID & Qualifiers::FastMask;
4687  unsigned Index = ID >> Qualifiers::FastWidth;
4688
4689  if (Index < NUM_PREDEF_TYPE_IDS) {
4690    QualType T;
4691    switch ((PredefinedTypeIDs)Index) {
4692    case PREDEF_TYPE_NULL_ID: return QualType();
4693    case PREDEF_TYPE_VOID_ID: T = Context.VoidTy; break;
4694    case PREDEF_TYPE_BOOL_ID: T = Context.BoolTy; break;
4695
4696    case PREDEF_TYPE_CHAR_U_ID:
4697    case PREDEF_TYPE_CHAR_S_ID:
4698      // FIXME: Check that the signedness of CharTy is correct!
4699      T = Context.CharTy;
4700      break;
4701
4702    case PREDEF_TYPE_UCHAR_ID:      T = Context.UnsignedCharTy;     break;
4703    case PREDEF_TYPE_USHORT_ID:     T = Context.UnsignedShortTy;    break;
4704    case PREDEF_TYPE_UINT_ID:       T = Context.UnsignedIntTy;      break;
4705    case PREDEF_TYPE_ULONG_ID:      T = Context.UnsignedLongTy;     break;
4706    case PREDEF_TYPE_ULONGLONG_ID:  T = Context.UnsignedLongLongTy; break;
4707    case PREDEF_TYPE_UINT128_ID:    T = Context.UnsignedInt128Ty;   break;
4708    case PREDEF_TYPE_SCHAR_ID:      T = Context.SignedCharTy;       break;
4709    case PREDEF_TYPE_WCHAR_ID:      T = Context.WCharTy;            break;
4710    case PREDEF_TYPE_SHORT_ID:      T = Context.ShortTy;            break;
4711    case PREDEF_TYPE_INT_ID:        T = Context.IntTy;              break;
4712    case PREDEF_TYPE_LONG_ID:       T = Context.LongTy;             break;
4713    case PREDEF_TYPE_LONGLONG_ID:   T = Context.LongLongTy;         break;
4714    case PREDEF_TYPE_INT128_ID:     T = Context.Int128Ty;           break;
4715    case PREDEF_TYPE_HALF_ID:       T = Context.HalfTy;             break;
4716    case PREDEF_TYPE_FLOAT_ID:      T = Context.FloatTy;            break;
4717    case PREDEF_TYPE_DOUBLE_ID:     T = Context.DoubleTy;           break;
4718    case PREDEF_TYPE_LONGDOUBLE_ID: T = Context.LongDoubleTy;       break;
4719    case PREDEF_TYPE_OVERLOAD_ID:   T = Context.OverloadTy;         break;
4720    case PREDEF_TYPE_BOUND_MEMBER:  T = Context.BoundMemberTy;      break;
4721    case PREDEF_TYPE_PSEUDO_OBJECT: T = Context.PseudoObjectTy;     break;
4722    case PREDEF_TYPE_DEPENDENT_ID:  T = Context.DependentTy;        break;
4723    case PREDEF_TYPE_UNKNOWN_ANY:   T = Context.UnknownAnyTy;       break;
4724    case PREDEF_TYPE_NULLPTR_ID:    T = Context.NullPtrTy;          break;
4725    case PREDEF_TYPE_CHAR16_ID:     T = Context.Char16Ty;           break;
4726    case PREDEF_TYPE_CHAR32_ID:     T = Context.Char32Ty;           break;
4727    case PREDEF_TYPE_OBJC_ID:       T = Context.ObjCBuiltinIdTy;    break;
4728    case PREDEF_TYPE_OBJC_CLASS:    T = Context.ObjCBuiltinClassTy; break;
4729    case PREDEF_TYPE_OBJC_SEL:      T = Context.ObjCBuiltinSelTy;   break;
4730    case PREDEF_TYPE_AUTO_DEDUCT:   T = Context.getAutoDeductType(); break;
4731
4732    case PREDEF_TYPE_AUTO_RREF_DEDUCT:
4733      T = Context.getAutoRRefDeductType();
4734      break;
4735
4736    case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
4737      T = Context.ARCUnbridgedCastTy;
4738      break;
4739
4740    case PREDEF_TYPE_VA_LIST_TAG:
4741      T = Context.getVaListTagType();
4742      break;
4743
4744    case PREDEF_TYPE_BUILTIN_FN:
4745      T = Context.BuiltinFnTy;
4746      break;
4747    }
4748
4749    assert(!T.isNull() && "Unknown predefined type");
4750    return T.withFastQualifiers(FastQuals);
4751  }
4752
4753  Index -= NUM_PREDEF_TYPE_IDS;
4754  assert(Index < TypesLoaded.size() && "Type index out-of-range");
4755  if (TypesLoaded[Index].isNull()) {
4756    TypesLoaded[Index] = readTypeRecord(Index);
4757    if (TypesLoaded[Index].isNull())
4758      return QualType();
4759
4760    TypesLoaded[Index]->setFromAST();
4761    if (DeserializationListener)
4762      DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
4763                                        TypesLoaded[Index]);
4764  }
4765
4766  return TypesLoaded[Index].withFastQualifiers(FastQuals);
4767}
4768
4769QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
4770  return GetType(getGlobalTypeID(F, LocalID));
4771}
4772
4773serialization::TypeID
4774ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
4775  unsigned FastQuals = LocalID & Qualifiers::FastMask;
4776  unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
4777
4778  if (LocalIndex < NUM_PREDEF_TYPE_IDS)
4779    return LocalID;
4780
4781  ContinuousRangeMap<uint32_t, int, 2>::iterator I
4782    = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
4783  assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
4784
4785  unsigned GlobalIndex = LocalIndex + I->second;
4786  return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
4787}
4788
4789TemplateArgumentLocInfo
4790ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
4791                                      TemplateArgument::ArgKind Kind,
4792                                      const RecordData &Record,
4793                                      unsigned &Index) {
4794  switch (Kind) {
4795  case TemplateArgument::Expression:
4796    return ReadExpr(F);
4797  case TemplateArgument::Type:
4798    return GetTypeSourceInfo(F, Record, Index);
4799  case TemplateArgument::Template: {
4800    NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
4801                                                                     Index);
4802    SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
4803    return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
4804                                   SourceLocation());
4805  }
4806  case TemplateArgument::TemplateExpansion: {
4807    NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
4808                                                                     Index);
4809    SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
4810    SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
4811    return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
4812                                   EllipsisLoc);
4813  }
4814  case TemplateArgument::Null:
4815  case TemplateArgument::Integral:
4816  case TemplateArgument::Declaration:
4817  case TemplateArgument::NullPtr:
4818  case TemplateArgument::Pack:
4819    // FIXME: Is this right?
4820    return TemplateArgumentLocInfo();
4821  }
4822  llvm_unreachable("unexpected template argument loc");
4823}
4824
4825TemplateArgumentLoc
4826ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
4827                                   const RecordData &Record, unsigned &Index) {
4828  TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
4829
4830  if (Arg.getKind() == TemplateArgument::Expression) {
4831    if (Record[Index++]) // bool InfoHasSameExpr.
4832      return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
4833  }
4834  return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
4835                                                             Record, Index));
4836}
4837
4838Decl *ASTReader::GetExternalDecl(uint32_t ID) {
4839  return GetDecl(ID);
4840}
4841
4842uint64_t ASTReader::readCXXBaseSpecifiers(ModuleFile &M, const RecordData &Record,
4843                                          unsigned &Idx){
4844  if (Idx >= Record.size())
4845    return 0;
4846
4847  unsigned LocalID = Record[Idx++];
4848  return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]);
4849}
4850
4851CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
4852  RecordLocation Loc = getLocalBitOffset(Offset);
4853  llvm::BitstreamCursor &Cursor = Loc.F->DeclsCursor;
4854  SavedStreamPosition SavedPosition(Cursor);
4855  Cursor.JumpToBit(Loc.Offset);
4856  ReadingKindTracker ReadingKind(Read_Decl, *this);
4857  RecordData Record;
4858  unsigned Code = Cursor.ReadCode();
4859  unsigned RecCode = Cursor.ReadRecord(Code, Record);
4860  if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
4861    Error("Malformed AST file: missing C++ base specifiers");
4862    return 0;
4863  }
4864
4865  unsigned Idx = 0;
4866  unsigned NumBases = Record[Idx++];
4867  void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
4868  CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
4869  for (unsigned I = 0; I != NumBases; ++I)
4870    Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
4871  return Bases;
4872}
4873
4874serialization::DeclID
4875ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
4876  if (LocalID < NUM_PREDEF_DECL_IDS)
4877    return LocalID;
4878
4879  ContinuousRangeMap<uint32_t, int, 2>::iterator I
4880    = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
4881  assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
4882
4883  return LocalID + I->second;
4884}
4885
4886bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
4887                                   ModuleFile &M) const {
4888  GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID);
4889  assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
4890  return &M == I->second;
4891}
4892
4893ModuleFile *ASTReader::getOwningModuleFile(Decl *D) {
4894  if (!D->isFromASTFile())
4895    return 0;
4896  GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
4897  assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
4898  return I->second;
4899}
4900
4901SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
4902  if (ID < NUM_PREDEF_DECL_IDS)
4903    return SourceLocation();
4904
4905  unsigned Index = ID - NUM_PREDEF_DECL_IDS;
4906
4907  if (Index > DeclsLoaded.size()) {
4908    Error("declaration ID out-of-range for AST file");
4909    return SourceLocation();
4910  }
4911
4912  if (Decl *D = DeclsLoaded[Index])
4913    return D->getLocation();
4914
4915  unsigned RawLocation = 0;
4916  RecordLocation Rec = DeclCursorForID(ID, RawLocation);
4917  return ReadSourceLocation(*Rec.F, RawLocation);
4918}
4919
4920Decl *ASTReader::GetDecl(DeclID ID) {
4921  if (ID < NUM_PREDEF_DECL_IDS) {
4922    switch ((PredefinedDeclIDs)ID) {
4923    case PREDEF_DECL_NULL_ID:
4924      return 0;
4925
4926    case PREDEF_DECL_TRANSLATION_UNIT_ID:
4927      return Context.getTranslationUnitDecl();
4928
4929    case PREDEF_DECL_OBJC_ID_ID:
4930      return Context.getObjCIdDecl();
4931
4932    case PREDEF_DECL_OBJC_SEL_ID:
4933      return Context.getObjCSelDecl();
4934
4935    case PREDEF_DECL_OBJC_CLASS_ID:
4936      return Context.getObjCClassDecl();
4937
4938    case PREDEF_DECL_OBJC_PROTOCOL_ID:
4939      return Context.getObjCProtocolDecl();
4940
4941    case PREDEF_DECL_INT_128_ID:
4942      return Context.getInt128Decl();
4943
4944    case PREDEF_DECL_UNSIGNED_INT_128_ID:
4945      return Context.getUInt128Decl();
4946
4947    case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
4948      return Context.getObjCInstanceTypeDecl();
4949
4950    case PREDEF_DECL_BUILTIN_VA_LIST_ID:
4951      return Context.getBuiltinVaListDecl();
4952    }
4953  }
4954
4955  unsigned Index = ID - NUM_PREDEF_DECL_IDS;
4956
4957  if (Index >= DeclsLoaded.size()) {
4958    assert(0 && "declaration ID out-of-range for AST file");
4959    Error("declaration ID out-of-range for AST file");
4960    return 0;
4961  }
4962
4963  if (!DeclsLoaded[Index]) {
4964    ReadDeclRecord(ID);
4965    if (DeserializationListener)
4966      DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
4967  }
4968
4969  return DeclsLoaded[Index];
4970}
4971
4972DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
4973                                                  DeclID GlobalID) {
4974  if (GlobalID < NUM_PREDEF_DECL_IDS)
4975    return GlobalID;
4976
4977  GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
4978  assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
4979  ModuleFile *Owner = I->second;
4980
4981  llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
4982    = M.GlobalToLocalDeclIDs.find(Owner);
4983  if (Pos == M.GlobalToLocalDeclIDs.end())
4984    return 0;
4985
4986  return GlobalID - Owner->BaseDeclID + Pos->second;
4987}
4988
4989serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
4990                                            const RecordData &Record,
4991                                            unsigned &Idx) {
4992  if (Idx >= Record.size()) {
4993    Error("Corrupted AST file");
4994    return 0;
4995  }
4996
4997  return getGlobalDeclID(F, Record[Idx++]);
4998}
4999
5000/// \brief Resolve the offset of a statement into a statement.
5001///
5002/// This operation will read a new statement from the external
5003/// source each time it is called, and is meant to be used via a
5004/// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
5005Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
5006  // Switch case IDs are per Decl.
5007  ClearSwitchCaseIDs();
5008
5009  // Offset here is a global offset across the entire chain.
5010  RecordLocation Loc = getLocalBitOffset(Offset);
5011  Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
5012  return ReadStmtFromStream(*Loc.F);
5013}
5014
5015namespace {
5016  class FindExternalLexicalDeclsVisitor {
5017    ASTReader &Reader;
5018    const DeclContext *DC;
5019    bool (*isKindWeWant)(Decl::Kind);
5020
5021    SmallVectorImpl<Decl*> &Decls;
5022    bool PredefsVisited[NUM_PREDEF_DECL_IDS];
5023
5024  public:
5025    FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC,
5026                                    bool (*isKindWeWant)(Decl::Kind),
5027                                    SmallVectorImpl<Decl*> &Decls)
5028      : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls)
5029    {
5030      for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I)
5031        PredefsVisited[I] = false;
5032    }
5033
5034    static bool visit(ModuleFile &M, bool Preorder, void *UserData) {
5035      if (Preorder)
5036        return false;
5037
5038      FindExternalLexicalDeclsVisitor *This
5039        = static_cast<FindExternalLexicalDeclsVisitor *>(UserData);
5040
5041      ModuleFile::DeclContextInfosMap::iterator Info
5042        = M.DeclContextInfos.find(This->DC);
5043      if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls)
5044        return false;
5045
5046      // Load all of the declaration IDs
5047      for (const KindDeclIDPair *ID = Info->second.LexicalDecls,
5048                               *IDE = ID + Info->second.NumLexicalDecls;
5049           ID != IDE; ++ID) {
5050        if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first))
5051          continue;
5052
5053        // Don't add predefined declarations to the lexical context more
5054        // than once.
5055        if (ID->second < NUM_PREDEF_DECL_IDS) {
5056          if (This->PredefsVisited[ID->second])
5057            continue;
5058
5059          This->PredefsVisited[ID->second] = true;
5060        }
5061
5062        if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) {
5063          if (!This->DC->isDeclInLexicalTraversal(D))
5064            This->Decls.push_back(D);
5065        }
5066      }
5067
5068      return false;
5069    }
5070  };
5071}
5072
5073ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
5074                                         bool (*isKindWeWant)(Decl::Kind),
5075                                         SmallVectorImpl<Decl*> &Decls) {
5076  // There might be lexical decls in multiple modules, for the TU at
5077  // least. Walk all of the modules in the order they were loaded.
5078  FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls);
5079  ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor);
5080  ++NumLexicalDeclContextsRead;
5081  return ELR_Success;
5082}
5083
5084namespace {
5085
5086class DeclIDComp {
5087  ASTReader &Reader;
5088  ModuleFile &Mod;
5089
5090public:
5091  DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
5092
5093  bool operator()(LocalDeclID L, LocalDeclID R) const {
5094    SourceLocation LHS = getLocation(L);
5095    SourceLocation RHS = getLocation(R);
5096    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5097  }
5098
5099  bool operator()(SourceLocation LHS, LocalDeclID R) const {
5100    SourceLocation RHS = getLocation(R);
5101    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5102  }
5103
5104  bool operator()(LocalDeclID L, SourceLocation RHS) const {
5105    SourceLocation LHS = getLocation(L);
5106    return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5107  }
5108
5109  SourceLocation getLocation(LocalDeclID ID) const {
5110    return Reader.getSourceManager().getFileLoc(
5111            Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
5112  }
5113};
5114
5115}
5116
5117void ASTReader::FindFileRegionDecls(FileID File,
5118                                    unsigned Offset, unsigned Length,
5119                                    SmallVectorImpl<Decl *> &Decls) {
5120  SourceManager &SM = getSourceManager();
5121
5122  llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
5123  if (I == FileDeclIDs.end())
5124    return;
5125
5126  FileDeclsInfo &DInfo = I->second;
5127  if (DInfo.Decls.empty())
5128    return;
5129
5130  SourceLocation
5131    BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
5132  SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
5133
5134  DeclIDComp DIDComp(*this, *DInfo.Mod);
5135  ArrayRef<serialization::LocalDeclID>::iterator
5136    BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
5137                               BeginLoc, DIDComp);
5138  if (BeginIt != DInfo.Decls.begin())
5139    --BeginIt;
5140
5141  // If we are pointing at a top-level decl inside an objc container, we need
5142  // to backtrack until we find it otherwise we will fail to report that the
5143  // region overlaps with an objc container.
5144  while (BeginIt != DInfo.Decls.begin() &&
5145         GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
5146             ->isTopLevelDeclInObjCContainer())
5147    --BeginIt;
5148
5149  ArrayRef<serialization::LocalDeclID>::iterator
5150    EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
5151                             EndLoc, DIDComp);
5152  if (EndIt != DInfo.Decls.end())
5153    ++EndIt;
5154
5155  for (ArrayRef<serialization::LocalDeclID>::iterator
5156         DIt = BeginIt; DIt != EndIt; ++DIt)
5157    Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
5158}
5159
5160namespace {
5161  /// \brief ModuleFile visitor used to perform name lookup into a
5162  /// declaration context.
5163  class DeclContextNameLookupVisitor {
5164    ASTReader &Reader;
5165    llvm::SmallVectorImpl<const DeclContext *> &Contexts;
5166    DeclarationName Name;
5167    SmallVectorImpl<NamedDecl *> &Decls;
5168
5169  public:
5170    DeclContextNameLookupVisitor(ASTReader &Reader,
5171                                 SmallVectorImpl<const DeclContext *> &Contexts,
5172                                 DeclarationName Name,
5173                                 SmallVectorImpl<NamedDecl *> &Decls)
5174      : Reader(Reader), Contexts(Contexts), Name(Name), Decls(Decls) { }
5175
5176    static bool visit(ModuleFile &M, void *UserData) {
5177      DeclContextNameLookupVisitor *This
5178        = static_cast<DeclContextNameLookupVisitor *>(UserData);
5179
5180      // Check whether we have any visible declaration information for
5181      // this context in this module.
5182      ModuleFile::DeclContextInfosMap::iterator Info;
5183      bool FoundInfo = false;
5184      for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
5185        Info = M.DeclContextInfos.find(This->Contexts[I]);
5186        if (Info != M.DeclContextInfos.end() &&
5187            Info->second.NameLookupTableData) {
5188          FoundInfo = true;
5189          break;
5190        }
5191      }
5192
5193      if (!FoundInfo)
5194        return false;
5195
5196      // Look for this name within this module.
5197      ASTDeclContextNameLookupTable *LookupTable =
5198        Info->second.NameLookupTableData;
5199      ASTDeclContextNameLookupTable::iterator Pos
5200        = LookupTable->find(This->Name);
5201      if (Pos == LookupTable->end())
5202        return false;
5203
5204      bool FoundAnything = false;
5205      ASTDeclContextNameLookupTrait::data_type Data = *Pos;
5206      for (; Data.first != Data.second; ++Data.first) {
5207        NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first);
5208        if (!ND)
5209          continue;
5210
5211        if (ND->getDeclName() != This->Name) {
5212          // A name might be null because the decl's redeclarable part is
5213          // currently read before reading its name. The lookup is triggered by
5214          // building that decl (likely indirectly), and so it is later in the
5215          // sense of "already existing" and can be ignored here.
5216          continue;
5217        }
5218
5219        // Record this declaration.
5220        FoundAnything = true;
5221        This->Decls.push_back(ND);
5222      }
5223
5224      return FoundAnything;
5225    }
5226  };
5227}
5228
5229DeclContext::lookup_result
5230ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
5231                                          DeclarationName Name) {
5232  assert(DC->hasExternalVisibleStorage() &&
5233         "DeclContext has no visible decls in storage");
5234  if (!Name)
5235    return DeclContext::lookup_result(DeclContext::lookup_iterator(0),
5236                                      DeclContext::lookup_iterator(0));
5237
5238  SmallVector<NamedDecl *, 64> Decls;
5239
5240  // Compute the declaration contexts we need to look into. Multiple such
5241  // declaration contexts occur when two declaration contexts from disjoint
5242  // modules get merged, e.g., when two namespaces with the same name are
5243  // independently defined in separate modules.
5244  SmallVector<const DeclContext *, 2> Contexts;
5245  Contexts.push_back(DC);
5246
5247  if (DC->isNamespace()) {
5248    MergedDeclsMap::iterator Merged
5249      = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
5250    if (Merged != MergedDecls.end()) {
5251      for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
5252        Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
5253    }
5254  }
5255
5256  DeclContextNameLookupVisitor Visitor(*this, Contexts, Name, Decls);
5257  ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor);
5258  ++NumVisibleDeclContextsRead;
5259  SetExternalVisibleDeclsForName(DC, Name, Decls);
5260  return const_cast<DeclContext*>(DC)->lookup(Name);
5261}
5262
5263namespace {
5264  /// \brief ModuleFile visitor used to retrieve all visible names in a
5265  /// declaration context.
5266  class DeclContextAllNamesVisitor {
5267    ASTReader &Reader;
5268    llvm::SmallVectorImpl<const DeclContext *> &Contexts;
5269    llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8> > &Decls;
5270
5271  public:
5272    DeclContextAllNamesVisitor(ASTReader &Reader,
5273                               SmallVectorImpl<const DeclContext *> &Contexts,
5274                               llvm::DenseMap<DeclarationName,
5275                                           SmallVector<NamedDecl *, 8> > &Decls)
5276      : Reader(Reader), Contexts(Contexts), Decls(Decls) { }
5277
5278    static bool visit(ModuleFile &M, void *UserData) {
5279      DeclContextAllNamesVisitor *This
5280        = static_cast<DeclContextAllNamesVisitor *>(UserData);
5281
5282      // Check whether we have any visible declaration information for
5283      // this context in this module.
5284      ModuleFile::DeclContextInfosMap::iterator Info;
5285      bool FoundInfo = false;
5286      for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
5287        Info = M.DeclContextInfos.find(This->Contexts[I]);
5288        if (Info != M.DeclContextInfos.end() &&
5289            Info->second.NameLookupTableData) {
5290          FoundInfo = true;
5291          break;
5292        }
5293      }
5294
5295      if (!FoundInfo)
5296        return false;
5297
5298      ASTDeclContextNameLookupTable *LookupTable =
5299        Info->second.NameLookupTableData;
5300      bool FoundAnything = false;
5301      for (ASTDeclContextNameLookupTable::data_iterator
5302	     I = LookupTable->data_begin(), E = LookupTable->data_end();
5303	   I != E; ++I) {
5304        ASTDeclContextNameLookupTrait::data_type Data = *I;
5305        for (; Data.first != Data.second; ++Data.first) {
5306          NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M,
5307                                                                 *Data.first);
5308          if (!ND)
5309            continue;
5310
5311          // Record this declaration.
5312          FoundAnything = true;
5313          This->Decls[ND->getDeclName()].push_back(ND);
5314        }
5315      }
5316
5317      return FoundAnything;
5318    }
5319  };
5320}
5321
5322void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
5323  if (!DC->hasExternalVisibleStorage())
5324    return;
5325  llvm::DenseMap<DeclarationName, llvm::SmallVector<NamedDecl*, 8> > Decls;
5326
5327  // Compute the declaration contexts we need to look into. Multiple such
5328  // declaration contexts occur when two declaration contexts from disjoint
5329  // modules get merged, e.g., when two namespaces with the same name are
5330  // independently defined in separate modules.
5331  SmallVector<const DeclContext *, 2> Contexts;
5332  Contexts.push_back(DC);
5333
5334  if (DC->isNamespace()) {
5335    MergedDeclsMap::iterator Merged
5336      = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
5337    if (Merged != MergedDecls.end()) {
5338      for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
5339        Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
5340    }
5341  }
5342
5343  DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls);
5344  ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor);
5345  ++NumVisibleDeclContextsRead;
5346
5347  for (llvm::DenseMap<DeclarationName,
5348                      llvm::SmallVector<NamedDecl*, 8> >::iterator
5349         I = Decls.begin(), E = Decls.end(); I != E; ++I) {
5350    SetExternalVisibleDeclsForName(DC, I->first, I->second);
5351  }
5352  const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
5353}
5354
5355/// \brief Under non-PCH compilation the consumer receives the objc methods
5356/// before receiving the implementation, and codegen depends on this.
5357/// We simulate this by deserializing and passing to consumer the methods of the
5358/// implementation before passing the deserialized implementation decl.
5359static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
5360                                       ASTConsumer *Consumer) {
5361  assert(ImplD && Consumer);
5362
5363  for (ObjCImplDecl::method_iterator
5364         I = ImplD->meth_begin(), E = ImplD->meth_end(); I != E; ++I)
5365    Consumer->HandleInterestingDecl(DeclGroupRef(*I));
5366
5367  Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
5368}
5369
5370void ASTReader::PassInterestingDeclsToConsumer() {
5371  assert(Consumer);
5372  while (!InterestingDecls.empty()) {
5373    Decl *D = InterestingDecls.front();
5374    InterestingDecls.pop_front();
5375
5376    PassInterestingDeclToConsumer(D);
5377  }
5378}
5379
5380void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
5381  if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
5382    PassObjCImplDeclToConsumer(ImplD, Consumer);
5383  else
5384    Consumer->HandleInterestingDecl(DeclGroupRef(D));
5385}
5386
5387void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
5388  this->Consumer = Consumer;
5389
5390  if (!Consumer)
5391    return;
5392
5393  for (unsigned I = 0, N = ExternalDefinitions.size(); I != N; ++I) {
5394    // Force deserialization of this decl, which will cause it to be queued for
5395    // passing to the consumer.
5396    GetDecl(ExternalDefinitions[I]);
5397  }
5398  ExternalDefinitions.clear();
5399
5400  PassInterestingDeclsToConsumer();
5401}
5402
5403void ASTReader::PrintStats() {
5404  std::fprintf(stderr, "*** AST File Statistics:\n");
5405
5406  unsigned NumTypesLoaded
5407    = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
5408                                      QualType());
5409  unsigned NumDeclsLoaded
5410    = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
5411                                      (Decl *)0);
5412  unsigned NumIdentifiersLoaded
5413    = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
5414                                            IdentifiersLoaded.end(),
5415                                            (IdentifierInfo *)0);
5416  unsigned NumMacrosLoaded
5417    = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
5418                                       MacrosLoaded.end(),
5419                                       (MacroInfo *)0);
5420  unsigned NumSelectorsLoaded
5421    = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
5422                                          SelectorsLoaded.end(),
5423                                          Selector());
5424
5425  std::fprintf(stderr, "  %u stat cache hits\n", NumStatHits);
5426  std::fprintf(stderr, "  %u stat cache misses\n", NumStatMisses);
5427  if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
5428    std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
5429                 NumSLocEntriesRead, TotalNumSLocEntries,
5430                 ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
5431  if (!TypesLoaded.empty())
5432    std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
5433                 NumTypesLoaded, (unsigned)TypesLoaded.size(),
5434                 ((float)NumTypesLoaded/TypesLoaded.size() * 100));
5435  if (!DeclsLoaded.empty())
5436    std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
5437                 NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
5438                 ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
5439  if (!IdentifiersLoaded.empty())
5440    std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
5441                 NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
5442                 ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
5443  if (!MacrosLoaded.empty())
5444    std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
5445                 NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
5446                 ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
5447  if (!SelectorsLoaded.empty())
5448    std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
5449                 NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
5450                 ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
5451  if (TotalNumStatements)
5452    std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
5453                 NumStatementsRead, TotalNumStatements,
5454                 ((float)NumStatementsRead/TotalNumStatements * 100));
5455  if (TotalNumMacros)
5456    std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
5457                 NumMacrosRead, TotalNumMacros,
5458                 ((float)NumMacrosRead/TotalNumMacros * 100));
5459  if (TotalLexicalDeclContexts)
5460    std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
5461                 NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
5462                 ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
5463                  * 100));
5464  if (TotalVisibleDeclContexts)
5465    std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
5466                 NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
5467                 ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
5468                  * 100));
5469  if (TotalNumMethodPoolEntries) {
5470    std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
5471                 NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
5472                 ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
5473                  * 100));
5474    std::fprintf(stderr, "  %u method pool misses\n", NumMethodPoolMisses);
5475  }
5476  std::fprintf(stderr, "\n");
5477  dump();
5478  std::fprintf(stderr, "\n");
5479}
5480
5481template<typename Key, typename ModuleFile, unsigned InitialCapacity>
5482static void
5483dumpModuleIDMap(StringRef Name,
5484                const ContinuousRangeMap<Key, ModuleFile *,
5485                                         InitialCapacity> &Map) {
5486  if (Map.begin() == Map.end())
5487    return;
5488
5489  typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
5490  llvm::errs() << Name << ":\n";
5491  for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
5492       I != IEnd; ++I) {
5493    llvm::errs() << "  " << I->first << " -> " << I->second->FileName
5494      << "\n";
5495  }
5496}
5497
5498void ASTReader::dump() {
5499  llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
5500  dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
5501  dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
5502  dumpModuleIDMap("Global type map", GlobalTypeMap);
5503  dumpModuleIDMap("Global declaration map", GlobalDeclMap);
5504  dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
5505  dumpModuleIDMap("Global macro map", GlobalMacroMap);
5506  dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
5507  dumpModuleIDMap("Global selector map", GlobalSelectorMap);
5508  dumpModuleIDMap("Global preprocessed entity map",
5509                  GlobalPreprocessedEntityMap);
5510
5511  llvm::errs() << "\n*** PCH/Modules Loaded:";
5512  for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(),
5513                                       MEnd = ModuleMgr.end();
5514       M != MEnd; ++M)
5515    (*M)->dump();
5516}
5517
5518/// Return the amount of memory used by memory buffers, breaking down
5519/// by heap-backed versus mmap'ed memory.
5520void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
5521  for (ModuleConstIterator I = ModuleMgr.begin(),
5522      E = ModuleMgr.end(); I != E; ++I) {
5523    if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) {
5524      size_t bytes = buf->getBufferSize();
5525      switch (buf->getBufferKind()) {
5526        case llvm::MemoryBuffer::MemoryBuffer_Malloc:
5527          sizes.malloc_bytes += bytes;
5528          break;
5529        case llvm::MemoryBuffer::MemoryBuffer_MMap:
5530          sizes.mmap_bytes += bytes;
5531          break;
5532      }
5533    }
5534  }
5535}
5536
5537void ASTReader::InitializeSema(Sema &S) {
5538  SemaObj = &S;
5539  S.addExternalSource(this);
5540
5541  // Makes sure any declarations that were deserialized "too early"
5542  // still get added to the identifier's declaration chains.
5543  for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) {
5544    SemaObj->pushExternalDeclIntoScope(PreloadedDecls[I],
5545                                       PreloadedDecls[I]->getDeclName());
5546  }
5547  PreloadedDecls.clear();
5548
5549  // Load the offsets of the declarations that Sema references.
5550  // They will be lazily deserialized when needed.
5551  if (!SemaDeclRefs.empty()) {
5552    assert(SemaDeclRefs.size() == 2 && "More decl refs than expected!");
5553    if (!SemaObj->StdNamespace)
5554      SemaObj->StdNamespace = SemaDeclRefs[0];
5555    if (!SemaObj->StdBadAlloc)
5556      SemaObj->StdBadAlloc = SemaDeclRefs[1];
5557  }
5558
5559  if (!FPPragmaOptions.empty()) {
5560    assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
5561    SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
5562  }
5563
5564  if (!OpenCLExtensions.empty()) {
5565    unsigned I = 0;
5566#define OPENCLEXT(nm)  SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++];
5567#include "clang/Basic/OpenCLExtensions.def"
5568
5569    assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS");
5570  }
5571}
5572
5573IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
5574  // Note that we are loading an identifier.
5575  Deserializing AnIdentifier(this);
5576
5577  IdentifierLookupVisitor Visitor(StringRef(NameStart, NameEnd - NameStart),
5578                                  /*PriorGeneration=*/0);
5579  ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor);
5580  IdentifierInfo *II = Visitor.getIdentifierInfo();
5581  markIdentifierUpToDate(II);
5582  return II;
5583}
5584
5585namespace clang {
5586  /// \brief An identifier-lookup iterator that enumerates all of the
5587  /// identifiers stored within a set of AST files.
5588  class ASTIdentifierIterator : public IdentifierIterator {
5589    /// \brief The AST reader whose identifiers are being enumerated.
5590    const ASTReader &Reader;
5591
5592    /// \brief The current index into the chain of AST files stored in
5593    /// the AST reader.
5594    unsigned Index;
5595
5596    /// \brief The current position within the identifier lookup table
5597    /// of the current AST file.
5598    ASTIdentifierLookupTable::key_iterator Current;
5599
5600    /// \brief The end position within the identifier lookup table of
5601    /// the current AST file.
5602    ASTIdentifierLookupTable::key_iterator End;
5603
5604  public:
5605    explicit ASTIdentifierIterator(const ASTReader &Reader);
5606
5607    virtual StringRef Next();
5608  };
5609}
5610
5611ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader)
5612  : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) {
5613  ASTIdentifierLookupTable *IdTable
5614    = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable;
5615  Current = IdTable->key_begin();
5616  End = IdTable->key_end();
5617}
5618
5619StringRef ASTIdentifierIterator::Next() {
5620  while (Current == End) {
5621    // If we have exhausted all of our AST files, we're done.
5622    if (Index == 0)
5623      return StringRef();
5624
5625    --Index;
5626    ASTIdentifierLookupTable *IdTable
5627      = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].
5628        IdentifierLookupTable;
5629    Current = IdTable->key_begin();
5630    End = IdTable->key_end();
5631  }
5632
5633  // We have any identifiers remaining in the current AST file; return
5634  // the next one.
5635  std::pair<const char*, unsigned> Key = *Current;
5636  ++Current;
5637  return StringRef(Key.first, Key.second);
5638}
5639
5640IdentifierIterator *ASTReader::getIdentifiers() const {
5641  return new ASTIdentifierIterator(*this);
5642}
5643
5644namespace clang { namespace serialization {
5645  class ReadMethodPoolVisitor {
5646    ASTReader &Reader;
5647    Selector Sel;
5648    unsigned PriorGeneration;
5649    llvm::SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
5650    llvm::SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
5651
5652  public:
5653    ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
5654                          unsigned PriorGeneration)
5655      : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) { }
5656
5657    static bool visit(ModuleFile &M, void *UserData) {
5658      ReadMethodPoolVisitor *This
5659        = static_cast<ReadMethodPoolVisitor *>(UserData);
5660
5661      if (!M.SelectorLookupTable)
5662        return false;
5663
5664      // If we've already searched this module file, skip it now.
5665      if (M.Generation <= This->PriorGeneration)
5666        return true;
5667
5668      ASTSelectorLookupTable *PoolTable
5669        = (ASTSelectorLookupTable*)M.SelectorLookupTable;
5670      ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel);
5671      if (Pos == PoolTable->end())
5672        return false;
5673
5674      ++This->Reader.NumSelectorsRead;
5675      // FIXME: Not quite happy with the statistics here. We probably should
5676      // disable this tracking when called via LoadSelector.
5677      // Also, should entries without methods count as misses?
5678      ++This->Reader.NumMethodPoolEntriesRead;
5679      ASTSelectorLookupTrait::data_type Data = *Pos;
5680      if (This->Reader.DeserializationListener)
5681        This->Reader.DeserializationListener->SelectorRead(Data.ID,
5682                                                           This->Sel);
5683
5684      This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
5685      This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
5686      return true;
5687    }
5688
5689    /// \brief Retrieve the instance methods found by this visitor.
5690    ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
5691      return InstanceMethods;
5692    }
5693
5694    /// \brief Retrieve the instance methods found by this visitor.
5695    ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
5696      return FactoryMethods;
5697    }
5698  };
5699} } // end namespace clang::serialization
5700
5701/// \brief Add the given set of methods to the method list.
5702static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
5703                             ObjCMethodList &List) {
5704  for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
5705    S.addMethodToGlobalList(&List, Methods[I]);
5706  }
5707}
5708
5709void ASTReader::ReadMethodPool(Selector Sel) {
5710  // Get the selector generation and update it to the current generation.
5711  unsigned &Generation = SelectorGeneration[Sel];
5712  unsigned PriorGeneration = Generation;
5713  Generation = CurrentGeneration;
5714
5715  // Search for methods defined with this selector.
5716  ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
5717  ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor);
5718
5719  if (Visitor.getInstanceMethods().empty() &&
5720      Visitor.getFactoryMethods().empty()) {
5721    ++NumMethodPoolMisses;
5722    return;
5723  }
5724
5725  if (!getSema())
5726    return;
5727
5728  Sema &S = *getSema();
5729  Sema::GlobalMethodPool::iterator Pos
5730    = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
5731
5732  addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
5733  addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
5734}
5735
5736void ASTReader::ReadKnownNamespaces(
5737                          SmallVectorImpl<NamespaceDecl *> &Namespaces) {
5738  Namespaces.clear();
5739
5740  for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
5741    if (NamespaceDecl *Namespace
5742                = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
5743      Namespaces.push_back(Namespace);
5744  }
5745}
5746
5747void ASTReader::ReadTentativeDefinitions(
5748                  SmallVectorImpl<VarDecl *> &TentativeDefs) {
5749  for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
5750    VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
5751    if (Var)
5752      TentativeDefs.push_back(Var);
5753  }
5754  TentativeDefinitions.clear();
5755}
5756
5757void ASTReader::ReadUnusedFileScopedDecls(
5758                               SmallVectorImpl<const DeclaratorDecl *> &Decls) {
5759  for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
5760    DeclaratorDecl *D
5761      = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
5762    if (D)
5763      Decls.push_back(D);
5764  }
5765  UnusedFileScopedDecls.clear();
5766}
5767
5768void ASTReader::ReadDelegatingConstructors(
5769                                 SmallVectorImpl<CXXConstructorDecl *> &Decls) {
5770  for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
5771    CXXConstructorDecl *D
5772      = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
5773    if (D)
5774      Decls.push_back(D);
5775  }
5776  DelegatingCtorDecls.clear();
5777}
5778
5779void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
5780  for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
5781    TypedefNameDecl *D
5782      = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
5783    if (D)
5784      Decls.push_back(D);
5785  }
5786  ExtVectorDecls.clear();
5787}
5788
5789void ASTReader::ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) {
5790  for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
5791    CXXRecordDecl *D
5792      = dyn_cast_or_null<CXXRecordDecl>(GetDecl(DynamicClasses[I]));
5793    if (D)
5794      Decls.push_back(D);
5795  }
5796  DynamicClasses.clear();
5797}
5798
5799void
5800ASTReader::ReadLocallyScopedExternalDecls(SmallVectorImpl<NamedDecl *> &Decls) {
5801  for (unsigned I = 0, N = LocallyScopedExternalDecls.size(); I != N; ++I) {
5802    NamedDecl *D
5803      = dyn_cast_or_null<NamedDecl>(GetDecl(LocallyScopedExternalDecls[I]));
5804    if (D)
5805      Decls.push_back(D);
5806  }
5807  LocallyScopedExternalDecls.clear();
5808}
5809
5810void ASTReader::ReadReferencedSelectors(
5811       SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
5812  if (ReferencedSelectorsData.empty())
5813    return;
5814
5815  // If there are @selector references added them to its pool. This is for
5816  // implementation of -Wselector.
5817  unsigned int DataSize = ReferencedSelectorsData.size()-1;
5818  unsigned I = 0;
5819  while (I < DataSize) {
5820    Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
5821    SourceLocation SelLoc
5822      = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
5823    Sels.push_back(std::make_pair(Sel, SelLoc));
5824  }
5825  ReferencedSelectorsData.clear();
5826}
5827
5828void ASTReader::ReadWeakUndeclaredIdentifiers(
5829       SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
5830  if (WeakUndeclaredIdentifiers.empty())
5831    return;
5832
5833  for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
5834    IdentifierInfo *WeakId
5835      = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
5836    IdentifierInfo *AliasId
5837      = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
5838    SourceLocation Loc
5839      = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
5840    bool Used = WeakUndeclaredIdentifiers[I++];
5841    WeakInfo WI(AliasId, Loc);
5842    WI.setUsed(Used);
5843    WeakIDs.push_back(std::make_pair(WeakId, WI));
5844  }
5845  WeakUndeclaredIdentifiers.clear();
5846}
5847
5848void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
5849  for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
5850    ExternalVTableUse VT;
5851    VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
5852    VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
5853    VT.DefinitionRequired = VTableUses[Idx++];
5854    VTables.push_back(VT);
5855  }
5856
5857  VTableUses.clear();
5858}
5859
5860void ASTReader::ReadPendingInstantiations(
5861       SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
5862  for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
5863    ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
5864    SourceLocation Loc
5865      = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
5866
5867    Pending.push_back(std::make_pair(D, Loc));
5868  }
5869  PendingInstantiations.clear();
5870}
5871
5872void ASTReader::LoadSelector(Selector Sel) {
5873  // It would be complicated to avoid reading the methods anyway. So don't.
5874  ReadMethodPool(Sel);
5875}
5876
5877void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
5878  assert(ID && "Non-zero identifier ID required");
5879  assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
5880  IdentifiersLoaded[ID - 1] = II;
5881  if (DeserializationListener)
5882    DeserializationListener->IdentifierRead(ID, II);
5883}
5884
5885/// \brief Set the globally-visible declarations associated with the given
5886/// identifier.
5887///
5888/// If the AST reader is currently in a state where the given declaration IDs
5889/// cannot safely be resolved, they are queued until it is safe to resolve
5890/// them.
5891///
5892/// \param II an IdentifierInfo that refers to one or more globally-visible
5893/// declarations.
5894///
5895/// \param DeclIDs the set of declaration IDs with the name @p II that are
5896/// visible at global scope.
5897///
5898/// \param Nonrecursive should be true to indicate that the caller knows that
5899/// this call is non-recursive, and therefore the globally-visible declarations
5900/// will not be placed onto the pending queue.
5901void
5902ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
5903                              const SmallVectorImpl<uint32_t> &DeclIDs,
5904                                   bool Nonrecursive) {
5905  if (NumCurrentElementsDeserializing && !Nonrecursive) {
5906    PendingIdentifierInfos.push_back(PendingIdentifierInfo());
5907    PendingIdentifierInfo &PII = PendingIdentifierInfos.back();
5908    PII.II = II;
5909    PII.DeclIDs.append(DeclIDs.begin(), DeclIDs.end());
5910    return;
5911  }
5912
5913  for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
5914    NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
5915    if (SemaObj) {
5916      // Introduce this declaration into the translation-unit scope
5917      // and add it to the declaration chain for this identifier, so
5918      // that (unqualified) name lookup will find it.
5919      SemaObj->pushExternalDeclIntoScope(D, II);
5920    } else {
5921      // Queue this declaration so that it will be added to the
5922      // translation unit scope and identifier's declaration chain
5923      // once a Sema object is known.
5924      PreloadedDecls.push_back(D);
5925    }
5926  }
5927}
5928
5929IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
5930  if (ID == 0)
5931    return 0;
5932
5933  if (IdentifiersLoaded.empty()) {
5934    Error("no identifier table in AST file");
5935    return 0;
5936  }
5937
5938  ID -= 1;
5939  if (!IdentifiersLoaded[ID]) {
5940    GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
5941    assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
5942    ModuleFile *M = I->second;
5943    unsigned Index = ID - M->BaseIdentifierID;
5944    const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
5945
5946    // All of the strings in the AST file are preceded by a 16-bit length.
5947    // Extract that 16-bit length to avoid having to execute strlen().
5948    // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
5949    //  unsigned integers.  This is important to avoid integer overflow when
5950    //  we cast them to 'unsigned'.
5951    const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
5952    unsigned StrLen = (((unsigned) StrLenPtr[0])
5953                       | (((unsigned) StrLenPtr[1]) << 8)) - 1;
5954    IdentifiersLoaded[ID]
5955      = &PP.getIdentifierTable().get(StringRef(Str, StrLen));
5956    if (DeserializationListener)
5957      DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
5958  }
5959
5960  return IdentifiersLoaded[ID];
5961}
5962
5963IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
5964  return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
5965}
5966
5967IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
5968  if (LocalID < NUM_PREDEF_IDENT_IDS)
5969    return LocalID;
5970
5971  ContinuousRangeMap<uint32_t, int, 2>::iterator I
5972    = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
5973  assert(I != M.IdentifierRemap.end()
5974         && "Invalid index into identifier index remap");
5975
5976  return LocalID + I->second;
5977}
5978
5979MacroInfo *ASTReader::getMacro(MacroID ID, MacroInfo *Hint) {
5980  if (ID == 0)
5981    return 0;
5982
5983  if (MacrosLoaded.empty()) {
5984    Error("no macro table in AST file");
5985    return 0;
5986  }
5987
5988  ID -= NUM_PREDEF_MACRO_IDS;
5989  if (!MacrosLoaded[ID]) {
5990    GlobalMacroMapType::iterator I
5991      = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
5992    assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
5993    ModuleFile *M = I->second;
5994    unsigned Index = ID - M->BaseMacroID;
5995    ReadMacroRecord(*M, M->MacroOffsets[Index], Hint);
5996  }
5997
5998  return MacrosLoaded[ID];
5999}
6000
6001MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
6002  if (LocalID < NUM_PREDEF_MACRO_IDS)
6003    return LocalID;
6004
6005  ContinuousRangeMap<uint32_t, int, 2>::iterator I
6006    = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
6007  assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
6008
6009  return LocalID + I->second;
6010}
6011
6012bool ASTReader::ReadSLocEntry(int ID) {
6013  return ReadSLocEntryRecord(ID);
6014}
6015
6016serialization::SubmoduleID
6017ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
6018  if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
6019    return LocalID;
6020
6021  ContinuousRangeMap<uint32_t, int, 2>::iterator I
6022    = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
6023  assert(I != M.SubmoduleRemap.end()
6024         && "Invalid index into submodule index remap");
6025
6026  return LocalID + I->second;
6027}
6028
6029Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
6030  if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
6031    assert(GlobalID == 0 && "Unhandled global submodule ID");
6032    return 0;
6033  }
6034
6035  if (GlobalID > SubmodulesLoaded.size()) {
6036    Error("submodule ID out of range in AST file");
6037    return 0;
6038  }
6039
6040  return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
6041}
6042
6043Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
6044  return DecodeSelector(getGlobalSelectorID(M, LocalID));
6045}
6046
6047Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
6048  if (ID == 0)
6049    return Selector();
6050
6051  if (ID > SelectorsLoaded.size()) {
6052    Error("selector ID out of range in AST file");
6053    return Selector();
6054  }
6055
6056  if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == 0) {
6057    // Load this selector from the selector table.
6058    GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
6059    assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
6060    ModuleFile &M = *I->second;
6061    ASTSelectorLookupTrait Trait(*this, M);
6062    unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
6063    SelectorsLoaded[ID - 1] =
6064      Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
6065    if (DeserializationListener)
6066      DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
6067  }
6068
6069  return SelectorsLoaded[ID - 1];
6070}
6071
6072Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
6073  return DecodeSelector(ID);
6074}
6075
6076uint32_t ASTReader::GetNumExternalSelectors() {
6077  // ID 0 (the null selector) is considered an external selector.
6078  return getTotalNumSelectors() + 1;
6079}
6080
6081serialization::SelectorID
6082ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
6083  if (LocalID < NUM_PREDEF_SELECTOR_IDS)
6084    return LocalID;
6085
6086  ContinuousRangeMap<uint32_t, int, 2>::iterator I
6087    = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
6088  assert(I != M.SelectorRemap.end()
6089         && "Invalid index into selector index remap");
6090
6091  return LocalID + I->second;
6092}
6093
6094DeclarationName
6095ASTReader::ReadDeclarationName(ModuleFile &F,
6096                               const RecordData &Record, unsigned &Idx) {
6097  DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
6098  switch (Kind) {
6099  case DeclarationName::Identifier:
6100    return DeclarationName(GetIdentifierInfo(F, Record, Idx));
6101
6102  case DeclarationName::ObjCZeroArgSelector:
6103  case DeclarationName::ObjCOneArgSelector:
6104  case DeclarationName::ObjCMultiArgSelector:
6105    return DeclarationName(ReadSelector(F, Record, Idx));
6106
6107  case DeclarationName::CXXConstructorName:
6108    return Context.DeclarationNames.getCXXConstructorName(
6109                          Context.getCanonicalType(readType(F, Record, Idx)));
6110
6111  case DeclarationName::CXXDestructorName:
6112    return Context.DeclarationNames.getCXXDestructorName(
6113                          Context.getCanonicalType(readType(F, Record, Idx)));
6114
6115  case DeclarationName::CXXConversionFunctionName:
6116    return Context.DeclarationNames.getCXXConversionFunctionName(
6117                          Context.getCanonicalType(readType(F, Record, Idx)));
6118
6119  case DeclarationName::CXXOperatorName:
6120    return Context.DeclarationNames.getCXXOperatorName(
6121                                       (OverloadedOperatorKind)Record[Idx++]);
6122
6123  case DeclarationName::CXXLiteralOperatorName:
6124    return Context.DeclarationNames.getCXXLiteralOperatorName(
6125                                       GetIdentifierInfo(F, Record, Idx));
6126
6127  case DeclarationName::CXXUsingDirective:
6128    return DeclarationName::getUsingDirectiveName();
6129  }
6130
6131  llvm_unreachable("Invalid NameKind!");
6132}
6133
6134void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
6135                                       DeclarationNameLoc &DNLoc,
6136                                       DeclarationName Name,
6137                                      const RecordData &Record, unsigned &Idx) {
6138  switch (Name.getNameKind()) {
6139  case DeclarationName::CXXConstructorName:
6140  case DeclarationName::CXXDestructorName:
6141  case DeclarationName::CXXConversionFunctionName:
6142    DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
6143    break;
6144
6145  case DeclarationName::CXXOperatorName:
6146    DNLoc.CXXOperatorName.BeginOpNameLoc
6147        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6148    DNLoc.CXXOperatorName.EndOpNameLoc
6149        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6150    break;
6151
6152  case DeclarationName::CXXLiteralOperatorName:
6153    DNLoc.CXXLiteralOperatorName.OpNameLoc
6154        = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6155    break;
6156
6157  case DeclarationName::Identifier:
6158  case DeclarationName::ObjCZeroArgSelector:
6159  case DeclarationName::ObjCOneArgSelector:
6160  case DeclarationName::ObjCMultiArgSelector:
6161  case DeclarationName::CXXUsingDirective:
6162    break;
6163  }
6164}
6165
6166void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
6167                                        DeclarationNameInfo &NameInfo,
6168                                      const RecordData &Record, unsigned &Idx) {
6169  NameInfo.setName(ReadDeclarationName(F, Record, Idx));
6170  NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
6171  DeclarationNameLoc DNLoc;
6172  ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
6173  NameInfo.setInfo(DNLoc);
6174}
6175
6176void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
6177                                  const RecordData &Record, unsigned &Idx) {
6178  Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
6179  unsigned NumTPLists = Record[Idx++];
6180  Info.NumTemplParamLists = NumTPLists;
6181  if (NumTPLists) {
6182    Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
6183    for (unsigned i=0; i != NumTPLists; ++i)
6184      Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
6185  }
6186}
6187
6188TemplateName
6189ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
6190                            unsigned &Idx) {
6191  TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
6192  switch (Kind) {
6193  case TemplateName::Template:
6194      return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
6195
6196  case TemplateName::OverloadedTemplate: {
6197    unsigned size = Record[Idx++];
6198    UnresolvedSet<8> Decls;
6199    while (size--)
6200      Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
6201
6202    return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
6203  }
6204
6205  case TemplateName::QualifiedTemplate: {
6206    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
6207    bool hasTemplKeyword = Record[Idx++];
6208    TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
6209    return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
6210  }
6211
6212  case TemplateName::DependentTemplate: {
6213    NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
6214    if (Record[Idx++])  // isIdentifier
6215      return Context.getDependentTemplateName(NNS,
6216                                               GetIdentifierInfo(F, Record,
6217                                                                 Idx));
6218    return Context.getDependentTemplateName(NNS,
6219                                         (OverloadedOperatorKind)Record[Idx++]);
6220  }
6221
6222  case TemplateName::SubstTemplateTemplateParm: {
6223    TemplateTemplateParmDecl *param
6224      = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
6225    if (!param) return TemplateName();
6226    TemplateName replacement = ReadTemplateName(F, Record, Idx);
6227    return Context.getSubstTemplateTemplateParm(param, replacement);
6228  }
6229
6230  case TemplateName::SubstTemplateTemplateParmPack: {
6231    TemplateTemplateParmDecl *Param
6232      = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
6233    if (!Param)
6234      return TemplateName();
6235
6236    TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
6237    if (ArgPack.getKind() != TemplateArgument::Pack)
6238      return TemplateName();
6239
6240    return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
6241  }
6242  }
6243
6244  llvm_unreachable("Unhandled template name kind!");
6245}
6246
6247TemplateArgument
6248ASTReader::ReadTemplateArgument(ModuleFile &F,
6249                                const RecordData &Record, unsigned &Idx) {
6250  TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
6251  switch (Kind) {
6252  case TemplateArgument::Null:
6253    return TemplateArgument();
6254  case TemplateArgument::Type:
6255    return TemplateArgument(readType(F, Record, Idx));
6256  case TemplateArgument::Declaration: {
6257    ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
6258    bool ForReferenceParam = Record[Idx++];
6259    return TemplateArgument(D, ForReferenceParam);
6260  }
6261  case TemplateArgument::NullPtr:
6262    return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
6263  case TemplateArgument::Integral: {
6264    llvm::APSInt Value = ReadAPSInt(Record, Idx);
6265    QualType T = readType(F, Record, Idx);
6266    return TemplateArgument(Context, Value, T);
6267  }
6268  case TemplateArgument::Template:
6269    return TemplateArgument(ReadTemplateName(F, Record, Idx));
6270  case TemplateArgument::TemplateExpansion: {
6271    TemplateName Name = ReadTemplateName(F, Record, Idx);
6272    llvm::Optional<unsigned> NumTemplateExpansions;
6273    if (unsigned NumExpansions = Record[Idx++])
6274      NumTemplateExpansions = NumExpansions - 1;
6275    return TemplateArgument(Name, NumTemplateExpansions);
6276  }
6277  case TemplateArgument::Expression:
6278    return TemplateArgument(ReadExpr(F));
6279  case TemplateArgument::Pack: {
6280    unsigned NumArgs = Record[Idx++];
6281    TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
6282    for (unsigned I = 0; I != NumArgs; ++I)
6283      Args[I] = ReadTemplateArgument(F, Record, Idx);
6284    return TemplateArgument(Args, NumArgs);
6285  }
6286  }
6287
6288  llvm_unreachable("Unhandled template argument kind!");
6289}
6290
6291TemplateParameterList *
6292ASTReader::ReadTemplateParameterList(ModuleFile &F,
6293                                     const RecordData &Record, unsigned &Idx) {
6294  SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
6295  SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
6296  SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
6297
6298  unsigned NumParams = Record[Idx++];
6299  SmallVector<NamedDecl *, 16> Params;
6300  Params.reserve(NumParams);
6301  while (NumParams--)
6302    Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
6303
6304  TemplateParameterList* TemplateParams =
6305    TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
6306                                  Params.data(), Params.size(), RAngleLoc);
6307  return TemplateParams;
6308}
6309
6310void
6311ASTReader::
6312ReadTemplateArgumentList(SmallVector<TemplateArgument, 8> &TemplArgs,
6313                         ModuleFile &F, const RecordData &Record,
6314                         unsigned &Idx) {
6315  unsigned NumTemplateArgs = Record[Idx++];
6316  TemplArgs.reserve(NumTemplateArgs);
6317  while (NumTemplateArgs--)
6318    TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx));
6319}
6320
6321/// \brief Read a UnresolvedSet structure.
6322void ASTReader::ReadUnresolvedSet(ModuleFile &F, UnresolvedSetImpl &Set,
6323                                  const RecordData &Record, unsigned &Idx) {
6324  unsigned NumDecls = Record[Idx++];
6325  while (NumDecls--) {
6326    NamedDecl *D = ReadDeclAs<NamedDecl>(F, Record, Idx);
6327    AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
6328    Set.addDecl(D, AS);
6329  }
6330}
6331
6332CXXBaseSpecifier
6333ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
6334                                const RecordData &Record, unsigned &Idx) {
6335  bool isVirtual = static_cast<bool>(Record[Idx++]);
6336  bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
6337  AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
6338  bool inheritConstructors = static_cast<bool>(Record[Idx++]);
6339  TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
6340  SourceRange Range = ReadSourceRange(F, Record, Idx);
6341  SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
6342  CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
6343                          EllipsisLoc);
6344  Result.setInheritConstructors(inheritConstructors);
6345  return Result;
6346}
6347
6348std::pair<CXXCtorInitializer **, unsigned>
6349ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
6350                                   unsigned &Idx) {
6351  CXXCtorInitializer **CtorInitializers = 0;
6352  unsigned NumInitializers = Record[Idx++];
6353  if (NumInitializers) {
6354    CtorInitializers
6355        = new (Context) CXXCtorInitializer*[NumInitializers];
6356    for (unsigned i=0; i != NumInitializers; ++i) {
6357      TypeSourceInfo *TInfo = 0;
6358      bool IsBaseVirtual = false;
6359      FieldDecl *Member = 0;
6360      IndirectFieldDecl *IndirectMember = 0;
6361
6362      CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
6363      switch (Type) {
6364      case CTOR_INITIALIZER_BASE:
6365        TInfo = GetTypeSourceInfo(F, Record, Idx);
6366        IsBaseVirtual = Record[Idx++];
6367        break;
6368
6369      case CTOR_INITIALIZER_DELEGATING:
6370        TInfo = GetTypeSourceInfo(F, Record, Idx);
6371        break;
6372
6373       case CTOR_INITIALIZER_MEMBER:
6374        Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
6375        break;
6376
6377       case CTOR_INITIALIZER_INDIRECT_MEMBER:
6378        IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
6379        break;
6380      }
6381
6382      SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
6383      Expr *Init = ReadExpr(F);
6384      SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
6385      SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
6386      bool IsWritten = Record[Idx++];
6387      unsigned SourceOrderOrNumArrayIndices;
6388      SmallVector<VarDecl *, 8> Indices;
6389      if (IsWritten) {
6390        SourceOrderOrNumArrayIndices = Record[Idx++];
6391      } else {
6392        SourceOrderOrNumArrayIndices = Record[Idx++];
6393        Indices.reserve(SourceOrderOrNumArrayIndices);
6394        for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
6395          Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx));
6396      }
6397
6398      CXXCtorInitializer *BOMInit;
6399      if (Type == CTOR_INITIALIZER_BASE) {
6400        BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, IsBaseVirtual,
6401                                             LParenLoc, Init, RParenLoc,
6402                                             MemberOrEllipsisLoc);
6403      } else if (Type == CTOR_INITIALIZER_DELEGATING) {
6404        BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, LParenLoc,
6405                                                   Init, RParenLoc);
6406      } else if (IsWritten) {
6407        if (Member)
6408          BOMInit = new (Context) CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc,
6409                                               LParenLoc, Init, RParenLoc);
6410        else
6411          BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
6412                                               MemberOrEllipsisLoc, LParenLoc,
6413                                               Init, RParenLoc);
6414      } else {
6415        BOMInit = CXXCtorInitializer::Create(Context, Member, MemberOrEllipsisLoc,
6416                                             LParenLoc, Init, RParenLoc,
6417                                             Indices.data(), Indices.size());
6418      }
6419
6420      if (IsWritten)
6421        BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
6422      CtorInitializers[i] = BOMInit;
6423    }
6424  }
6425
6426  return std::make_pair(CtorInitializers, NumInitializers);
6427}
6428
6429NestedNameSpecifier *
6430ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
6431                                   const RecordData &Record, unsigned &Idx) {
6432  unsigned N = Record[Idx++];
6433  NestedNameSpecifier *NNS = 0, *Prev = 0;
6434  for (unsigned I = 0; I != N; ++I) {
6435    NestedNameSpecifier::SpecifierKind Kind
6436      = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
6437    switch (Kind) {
6438    case NestedNameSpecifier::Identifier: {
6439      IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
6440      NNS = NestedNameSpecifier::Create(Context, Prev, II);
6441      break;
6442    }
6443
6444    case NestedNameSpecifier::Namespace: {
6445      NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
6446      NNS = NestedNameSpecifier::Create(Context, Prev, NS);
6447      break;
6448    }
6449
6450    case NestedNameSpecifier::NamespaceAlias: {
6451      NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
6452      NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
6453      break;
6454    }
6455
6456    case NestedNameSpecifier::TypeSpec:
6457    case NestedNameSpecifier::TypeSpecWithTemplate: {
6458      const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
6459      if (!T)
6460        return 0;
6461
6462      bool Template = Record[Idx++];
6463      NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
6464      break;
6465    }
6466
6467    case NestedNameSpecifier::Global: {
6468      NNS = NestedNameSpecifier::GlobalSpecifier(Context);
6469      // No associated value, and there can't be a prefix.
6470      break;
6471    }
6472    }
6473    Prev = NNS;
6474  }
6475  return NNS;
6476}
6477
6478NestedNameSpecifierLoc
6479ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
6480                                      unsigned &Idx) {
6481  unsigned N = Record[Idx++];
6482  NestedNameSpecifierLocBuilder Builder;
6483  for (unsigned I = 0; I != N; ++I) {
6484    NestedNameSpecifier::SpecifierKind Kind
6485      = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
6486    switch (Kind) {
6487    case NestedNameSpecifier::Identifier: {
6488      IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
6489      SourceRange Range = ReadSourceRange(F, Record, Idx);
6490      Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
6491      break;
6492    }
6493
6494    case NestedNameSpecifier::Namespace: {
6495      NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
6496      SourceRange Range = ReadSourceRange(F, Record, Idx);
6497      Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
6498      break;
6499    }
6500
6501    case NestedNameSpecifier::NamespaceAlias: {
6502      NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
6503      SourceRange Range = ReadSourceRange(F, Record, Idx);
6504      Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
6505      break;
6506    }
6507
6508    case NestedNameSpecifier::TypeSpec:
6509    case NestedNameSpecifier::TypeSpecWithTemplate: {
6510      bool Template = Record[Idx++];
6511      TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
6512      if (!T)
6513        return NestedNameSpecifierLoc();
6514      SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
6515
6516      // FIXME: 'template' keyword location not saved anywhere, so we fake it.
6517      Builder.Extend(Context,
6518                     Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
6519                     T->getTypeLoc(), ColonColonLoc);
6520      break;
6521    }
6522
6523    case NestedNameSpecifier::Global: {
6524      SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
6525      Builder.MakeGlobal(Context, ColonColonLoc);
6526      break;
6527    }
6528    }
6529  }
6530
6531  return Builder.getWithLocInContext(Context);
6532}
6533
6534SourceRange
6535ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
6536                           unsigned &Idx) {
6537  SourceLocation beg = ReadSourceLocation(F, Record, Idx);
6538  SourceLocation end = ReadSourceLocation(F, Record, Idx);
6539  return SourceRange(beg, end);
6540}
6541
6542/// \brief Read an integral value
6543llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
6544  unsigned BitWidth = Record[Idx++];
6545  unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
6546  llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
6547  Idx += NumWords;
6548  return Result;
6549}
6550
6551/// \brief Read a signed integral value
6552llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
6553  bool isUnsigned = Record[Idx++];
6554  return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
6555}
6556
6557/// \brief Read a floating-point value
6558llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record, unsigned &Idx) {
6559  return llvm::APFloat(ReadAPInt(Record, Idx));
6560}
6561
6562// \brief Read a string
6563std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
6564  unsigned Len = Record[Idx++];
6565  std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
6566  Idx += Len;
6567  return Result;
6568}
6569
6570VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
6571                                         unsigned &Idx) {
6572  unsigned Major = Record[Idx++];
6573  unsigned Minor = Record[Idx++];
6574  unsigned Subminor = Record[Idx++];
6575  if (Minor == 0)
6576    return VersionTuple(Major);
6577  if (Subminor == 0)
6578    return VersionTuple(Major, Minor - 1);
6579  return VersionTuple(Major, Minor - 1, Subminor - 1);
6580}
6581
6582CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
6583                                          const RecordData &Record,
6584                                          unsigned &Idx) {
6585  CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
6586  return CXXTemporary::Create(Context, Decl);
6587}
6588
6589DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
6590  return Diag(SourceLocation(), DiagID);
6591}
6592
6593DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
6594  return Diags.Report(Loc, DiagID);
6595}
6596
6597/// \brief Retrieve the identifier table associated with the
6598/// preprocessor.
6599IdentifierTable &ASTReader::getIdentifierTable() {
6600  return PP.getIdentifierTable();
6601}
6602
6603/// \brief Record that the given ID maps to the given switch-case
6604/// statement.
6605void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
6606  assert((*CurrSwitchCaseStmts)[ID] == 0 &&
6607         "Already have a SwitchCase with this ID");
6608  (*CurrSwitchCaseStmts)[ID] = SC;
6609}
6610
6611/// \brief Retrieve the switch-case statement with the given ID.
6612SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
6613  assert((*CurrSwitchCaseStmts)[ID] != 0 && "No SwitchCase with this ID");
6614  return (*CurrSwitchCaseStmts)[ID];
6615}
6616
6617void ASTReader::ClearSwitchCaseIDs() {
6618  CurrSwitchCaseStmts->clear();
6619}
6620
6621void ASTReader::ReadComments() {
6622  std::vector<RawComment *> Comments;
6623  for (SmallVectorImpl<std::pair<llvm::BitstreamCursor,
6624                                 serialization::ModuleFile *> >::iterator
6625       I = CommentsCursors.begin(),
6626       E = CommentsCursors.end();
6627       I != E; ++I) {
6628    llvm::BitstreamCursor &Cursor = I->first;
6629    serialization::ModuleFile &F = *I->second;
6630    SavedStreamPosition SavedPosition(Cursor);
6631
6632    RecordData Record;
6633    while (true) {
6634      unsigned Code = Cursor.ReadCode();
6635      if (Code == llvm::bitc::END_BLOCK)
6636        break;
6637
6638      if (Code == llvm::bitc::ENTER_SUBBLOCK) {
6639        // No known subblocks, always skip them.
6640        Cursor.ReadSubBlockID();
6641        if (Cursor.SkipBlock()) {
6642          Error("malformed block record in AST file");
6643          return;
6644        }
6645        continue;
6646      }
6647
6648      if (Code == llvm::bitc::DEFINE_ABBREV) {
6649        Cursor.ReadAbbrevRecord();
6650        continue;
6651      }
6652
6653      // Read a record.
6654      Record.clear();
6655      switch ((CommentRecordTypes) Cursor.ReadRecord(Code, Record)) {
6656      case COMMENTS_RAW_COMMENT: {
6657        unsigned Idx = 0;
6658        SourceRange SR = ReadSourceRange(F, Record, Idx);
6659        RawComment::CommentKind Kind =
6660            (RawComment::CommentKind) Record[Idx++];
6661        bool IsTrailingComment = Record[Idx++];
6662        bool IsAlmostTrailingComment = Record[Idx++];
6663        Comments.push_back(new (Context) RawComment(SR, Kind,
6664                                                    IsTrailingComment,
6665                                                    IsAlmostTrailingComment));
6666        break;
6667      }
6668      }
6669    }
6670  }
6671  Context.Comments.addCommentsToFront(Comments);
6672}
6673
6674void ASTReader::finishPendingActions() {
6675  while (!PendingIdentifierInfos.empty() || !PendingDeclChains.empty() ||
6676         !PendingMacroIDs.empty()) {
6677    // If any identifiers with corresponding top-level declarations have
6678    // been loaded, load those declarations now.
6679    while (!PendingIdentifierInfos.empty()) {
6680      SetGloballyVisibleDecls(PendingIdentifierInfos.front().II,
6681                              PendingIdentifierInfos.front().DeclIDs, true);
6682      PendingIdentifierInfos.pop_front();
6683    }
6684
6685    // Load pending declaration chains.
6686    for (unsigned I = 0; I != PendingDeclChains.size(); ++I) {
6687      loadPendingDeclChain(PendingDeclChains[I]);
6688      PendingDeclChainsKnown.erase(PendingDeclChains[I]);
6689    }
6690    PendingDeclChains.clear();
6691
6692    // Load any pending macro definitions.
6693    for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
6694      // FIXME: std::move here
6695      SmallVector<MacroID, 2> GlobalIDs = PendingMacroIDs.begin()[I].second;
6696      MacroInfo *Hint = 0;
6697      for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx !=  NumIDs;
6698           ++IDIdx) {
6699        Hint = getMacro(GlobalIDs[IDIdx], Hint);
6700      }
6701    }
6702    PendingMacroIDs.clear();
6703  }
6704
6705  // If we deserialized any C++ or Objective-C class definitions, any
6706  // Objective-C protocol definitions, or any redeclarable templates, make sure
6707  // that all redeclarations point to the definitions. Note that this can only
6708  // happen now, after the redeclaration chains have been fully wired.
6709  for (llvm::SmallPtrSet<Decl *, 4>::iterator D = PendingDefinitions.begin(),
6710                                           DEnd = PendingDefinitions.end();
6711       D != DEnd; ++D) {
6712    if (TagDecl *TD = dyn_cast<TagDecl>(*D)) {
6713      if (const TagType *TagT = dyn_cast<TagType>(TD->TypeForDecl)) {
6714        // Make sure that the TagType points at the definition.
6715        const_cast<TagType*>(TagT)->decl = TD;
6716      }
6717
6718      if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(*D)) {
6719        for (CXXRecordDecl::redecl_iterator R = RD->redecls_begin(),
6720                                         REnd = RD->redecls_end();
6721             R != REnd; ++R)
6722          cast<CXXRecordDecl>(*R)->DefinitionData = RD->DefinitionData;
6723
6724      }
6725
6726      continue;
6727    }
6728
6729    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(*D)) {
6730      // Make sure that the ObjCInterfaceType points at the definition.
6731      const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
6732        ->Decl = ID;
6733
6734      for (ObjCInterfaceDecl::redecl_iterator R = ID->redecls_begin(),
6735                                           REnd = ID->redecls_end();
6736           R != REnd; ++R)
6737        R->Data = ID->Data;
6738
6739      continue;
6740    }
6741
6742    if (ObjCProtocolDecl *PD = dyn_cast<ObjCProtocolDecl>(*D)) {
6743      for (ObjCProtocolDecl::redecl_iterator R = PD->redecls_begin(),
6744                                          REnd = PD->redecls_end();
6745           R != REnd; ++R)
6746        R->Data = PD->Data;
6747
6748      continue;
6749    }
6750
6751    RedeclarableTemplateDecl *RTD
6752      = cast<RedeclarableTemplateDecl>(*D)->getCanonicalDecl();
6753    for (RedeclarableTemplateDecl::redecl_iterator R = RTD->redecls_begin(),
6754                                                REnd = RTD->redecls_end();
6755         R != REnd; ++R)
6756      R->Common = RTD->Common;
6757  }
6758  PendingDefinitions.clear();
6759
6760  // Load the bodies of any functions or methods we've encountered. We do
6761  // this now (delayed) so that we can be sure that the declaration chains
6762  // have been fully wired up.
6763  for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
6764                               PBEnd = PendingBodies.end();
6765       PB != PBEnd; ++PB) {
6766    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
6767      // FIXME: Check for =delete/=default?
6768      // FIXME: Complain about ODR violations here?
6769      if (!getContext().getLangOpts().Modules || !FD->hasBody())
6770        FD->setLazyBody(PB->second);
6771      continue;
6772    }
6773
6774    ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
6775    if (!getContext().getLangOpts().Modules || !MD->hasBody())
6776      MD->setLazyBody(PB->second);
6777  }
6778  PendingBodies.clear();
6779}
6780
6781void ASTReader::FinishedDeserializing() {
6782  assert(NumCurrentElementsDeserializing &&
6783         "FinishedDeserializing not paired with StartedDeserializing");
6784  if (NumCurrentElementsDeserializing == 1) {
6785    // We decrease NumCurrentElementsDeserializing only after pending actions
6786    // are finished, to avoid recursively re-calling finishPendingActions().
6787    finishPendingActions();
6788  }
6789  --NumCurrentElementsDeserializing;
6790
6791  if (NumCurrentElementsDeserializing == 0 &&
6792      Consumer && !PassingDeclsToConsumer) {
6793    // Guard variable to avoid recursively redoing the process of passing
6794    // decls to consumer.
6795    SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer,
6796                                                     true);
6797
6798    while (!InterestingDecls.empty()) {
6799      // We are not in recursive loading, so it's safe to pass the "interesting"
6800      // decls to the consumer.
6801      Decl *D = InterestingDecls.front();
6802      InterestingDecls.pop_front();
6803      PassInterestingDeclToConsumer(D);
6804    }
6805  }
6806}
6807
6808ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context,
6809                     StringRef isysroot, bool DisableValidation,
6810                     bool DisableStatCache, bool AllowASTWithCompilerErrors)
6811  : Listener(new PCHValidator(PP, *this)), DeserializationListener(0),
6812    SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
6813    Diags(PP.getDiagnostics()), SemaObj(0), PP(PP), Context(Context),
6814    Consumer(0), ModuleMgr(PP.getFileManager()),
6815    isysroot(isysroot), DisableValidation(DisableValidation),
6816    DisableStatCache(DisableStatCache),
6817    AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
6818    CurrentGeneration(0), CurrSwitchCaseStmts(&SwitchCaseStmts),
6819    NumStatHits(0), NumStatMisses(0),
6820    NumSLocEntriesRead(0), TotalNumSLocEntries(0),
6821    NumStatementsRead(0), TotalNumStatements(0), NumMacrosRead(0),
6822    TotalNumMacros(0), NumSelectorsRead(0), NumMethodPoolEntriesRead(0),
6823    NumMethodPoolMisses(0), TotalNumMethodPoolEntries(0),
6824    NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0),
6825    NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0),
6826    TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0),
6827    PassingDeclsToConsumer(false),
6828    NumCXXBaseSpecifiersLoaded(0)
6829{
6830  SourceMgr.setExternalSLocEntrySource(this);
6831}
6832
6833ASTReader::~ASTReader() {
6834  for (DeclContextVisibleUpdatesPending::iterator
6835           I = PendingVisibleUpdates.begin(),
6836           E = PendingVisibleUpdates.end();
6837       I != E; ++I) {
6838    for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
6839                                             F = I->second.end();
6840         J != F; ++J)
6841      delete J->first;
6842  }
6843}
6844