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