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