Home | History | Annotate | Download | only in Serialization
      1 //===--- ASTReader.h - 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 #ifndef LLVM_CLANG_FRONTEND_AST_READER_H
     15 #define LLVM_CLANG_FRONTEND_AST_READER_H
     16 
     17 #include "clang/Serialization/ASTBitCodes.h"
     18 #include "clang/Serialization/ContinuousRangeMap.h"
     19 #include "clang/Serialization/Module.h"
     20 #include "clang/Serialization/ModuleManager.h"
     21 #include "clang/Sema/ExternalSemaSource.h"
     22 #include "clang/AST/DeclarationName.h"
     23 #include "clang/AST/DeclObjC.h"
     24 #include "clang/AST/TemplateBase.h"
     25 #include "clang/Lex/ExternalPreprocessorSource.h"
     26 #include "clang/Lex/HeaderSearch.h"
     27 #include "clang/Lex/PreprocessingRecord.h"
     28 #include "clang/Basic/Diagnostic.h"
     29 #include "clang/Basic/FileManager.h"
     30 #include "clang/Basic/FileSystemOptions.h"
     31 #include "clang/Basic/IdentifierTable.h"
     32 #include "clang/Basic/SourceManager.h"
     33 #include "llvm/ADT/APFloat.h"
     34 #include "llvm/ADT/APInt.h"
     35 #include "llvm/ADT/APSInt.h"
     36 #include "llvm/ADT/OwningPtr.h"
     37 #include "llvm/ADT/SmallVector.h"
     38 #include "llvm/ADT/StringRef.h"
     39 #include "llvm/ADT/DenseSet.h"
     40 #include "llvm/Bitcode/BitstreamReader.h"
     41 #include "llvm/Support/DataTypes.h"
     42 #include <deque>
     43 #include <map>
     44 #include <string>
     45 #include <utility>
     46 #include <vector>
     47 
     48 namespace llvm {
     49   class MemoryBuffer;
     50 }
     51 
     52 namespace clang {
     53 
     54 class AddrLabelExpr;
     55 class ASTConsumer;
     56 class ASTContext;
     57 class ASTIdentifierIterator;
     58 class ASTUnit; // FIXME: Layering violation and egregious hack.
     59 class Attr;
     60 class Decl;
     61 class DeclContext;
     62 class NestedNameSpecifier;
     63 class CXXBaseSpecifier;
     64 class CXXConstructorDecl;
     65 class CXXCtorInitializer;
     66 class GotoStmt;
     67 class MacroDefinition;
     68 class NamedDecl;
     69 class OpaqueValueExpr;
     70 class Preprocessor;
     71 class Sema;
     72 class SwitchCase;
     73 class ASTDeserializationListener;
     74 class ASTWriter;
     75 class ASTReader;
     76 class ASTDeclReader;
     77 class ASTStmtReader;
     78 class TypeLocReader;
     79 struct HeaderFileInfo;
     80 class VersionTuple;
     81 
     82 struct PCHPredefinesBlock {
     83   /// \brief The file ID for this predefines buffer in a PCH file.
     84   FileID BufferID;
     85 
     86   /// \brief This predefines buffer in a PCH file.
     87   StringRef Data;
     88 };
     89 typedef SmallVector<PCHPredefinesBlock, 2> PCHPredefinesBlocks;
     90 
     91 /// \brief Abstract interface for callback invocations by the ASTReader.
     92 ///
     93 /// While reading an AST file, the ASTReader will call the methods of the
     94 /// listener to pass on specific information. Some of the listener methods can
     95 /// return true to indicate to the ASTReader that the information (and
     96 /// consequently the AST file) is invalid.
     97 class ASTReaderListener {
     98 public:
     99   virtual ~ASTReaderListener();
    100 
    101   /// \brief Receives the language options.
    102   ///
    103   /// \returns true to indicate the options are invalid or false otherwise.
    104   virtual bool ReadLanguageOptions(const LangOptions &LangOpts) {
    105     return false;
    106   }
    107 
    108   /// \brief Receives the target triple.
    109   ///
    110   /// \returns true to indicate the target triple is invalid or false otherwise.
    111   virtual bool ReadTargetTriple(StringRef Triple) {
    112     return false;
    113   }
    114 
    115   /// \brief Receives the contents of the predefines buffer.
    116   ///
    117   /// \param Buffers Information about the predefines buffers.
    118   ///
    119   /// \param OriginalFileName The original file name for the AST file, which
    120   /// will appear as an entry in the predefines buffer.
    121   ///
    122   /// \param SuggestedPredefines If necessary, additional definitions are added
    123   /// here.
    124   ///
    125   /// \returns true to indicate the predefines are invalid or false otherwise.
    126   virtual bool ReadPredefinesBuffer(const PCHPredefinesBlocks &Buffers,
    127                                     StringRef OriginalFileName,
    128                                     std::string &SuggestedPredefines,
    129                                     FileManager &FileMgr) {
    130     return false;
    131   }
    132 
    133   /// \brief Receives a HeaderFileInfo entry.
    134   virtual void ReadHeaderFileInfo(const HeaderFileInfo &HFI, unsigned ID) {}
    135 
    136   /// \brief Receives __COUNTER__ value.
    137   virtual void ReadCounter(unsigned Value) {}
    138 };
    139 
    140 /// \brief ASTReaderListener implementation to validate the information of
    141 /// the PCH file against an initialized Preprocessor.
    142 class PCHValidator : public ASTReaderListener {
    143   Preprocessor &PP;
    144   ASTReader &Reader;
    145 
    146   unsigned NumHeaderInfos;
    147 
    148 public:
    149   PCHValidator(Preprocessor &PP, ASTReader &Reader)
    150     : PP(PP), Reader(Reader), NumHeaderInfos(0) {}
    151 
    152   virtual bool ReadLanguageOptions(const LangOptions &LangOpts);
    153   virtual bool ReadTargetTriple(StringRef Triple);
    154   virtual bool ReadPredefinesBuffer(const PCHPredefinesBlocks &Buffers,
    155                                     StringRef OriginalFileName,
    156                                     std::string &SuggestedPredefines,
    157                                     FileManager &FileMgr);
    158   virtual void ReadHeaderFileInfo(const HeaderFileInfo &HFI, unsigned ID);
    159   virtual void ReadCounter(unsigned Value);
    160 
    161 private:
    162   void Error(const char *Msg);
    163 };
    164 
    165 namespace serialization {
    166 
    167 class ReadMethodPoolVisitor;
    168 
    169 namespace reader {
    170   class ASTIdentifierLookupTrait;
    171 }
    172 
    173 } // end namespace serialization
    174 
    175 /// \brief Reads an AST files chain containing the contents of a translation
    176 /// unit.
    177 ///
    178 /// The ASTReader class reads bitstreams (produced by the ASTWriter
    179 /// class) containing the serialized representation of a given
    180 /// abstract syntax tree and its supporting data structures. An
    181 /// instance of the ASTReader can be attached to an ASTContext object,
    182 /// which will provide access to the contents of the AST files.
    183 ///
    184 /// The AST reader provides lazy de-serialization of declarations, as
    185 /// required when traversing the AST. Only those AST nodes that are
    186 /// actually required will be de-serialized.
    187 class ASTReader
    188   : public ExternalPreprocessorSource,
    189     public ExternalPreprocessingRecordSource,
    190     public ExternalHeaderFileInfoSource,
    191     public ExternalSemaSource,
    192     public IdentifierInfoLookup,
    193     public ExternalIdentifierLookup,
    194     public ExternalSLocEntrySource
    195 {
    196 public:
    197   enum ASTReadResult { Success, Failure, IgnorePCH };
    198   /// \brief Types of AST files.
    199   friend class PCHValidator;
    200   friend class ASTDeclReader;
    201   friend class ASTStmtReader;
    202   friend class ASTIdentifierIterator;
    203   friend class serialization::reader::ASTIdentifierLookupTrait;
    204   friend class TypeLocReader;
    205   friend class ASTWriter;
    206   friend class ASTUnit; // ASTUnit needs to remap source locations.
    207   friend class serialization::ReadMethodPoolVisitor;
    208 
    209   typedef serialization::Module Module;
    210   typedef serialization::ModuleKind ModuleKind;
    211   typedef serialization::ModuleManager ModuleManager;
    212 
    213   typedef ModuleManager::ModuleIterator ModuleIterator;
    214   typedef ModuleManager::ModuleConstIterator ModuleConstIterator;
    215   typedef ModuleManager::ModuleReverseIterator ModuleReverseIterator;
    216 
    217 private:
    218   /// \brief The receiver of some callbacks invoked by ASTReader.
    219   llvm::OwningPtr<ASTReaderListener> Listener;
    220 
    221   /// \brief The receiver of deserialization events.
    222   ASTDeserializationListener *DeserializationListener;
    223 
    224   SourceManager &SourceMgr;
    225   FileManager &FileMgr;
    226   DiagnosticsEngine &Diags;
    227 
    228   /// \brief The semantic analysis object that will be processing the
    229   /// AST files and the translation unit that uses it.
    230   Sema *SemaObj;
    231 
    232   /// \brief The preprocessor that will be loading the source file.
    233   Preprocessor &PP;
    234 
    235   /// \brief The AST context into which we'll read the AST files.
    236   ASTContext &Context;
    237 
    238   /// \brief The AST consumer.
    239   ASTConsumer *Consumer;
    240 
    241   /// \brief The module manager which manages modules and their dependencies
    242   ModuleManager ModuleMgr;
    243 
    244   /// \brief A map of global bit offsets to the module that stores entities
    245   /// at those bit offsets.
    246   ContinuousRangeMap<uint64_t, Module*, 4> GlobalBitOffsetsMap;
    247 
    248   /// \brief A map of negated SLocEntryIDs to the modules containing them.
    249   ContinuousRangeMap<unsigned, Module*, 64> GlobalSLocEntryMap;
    250 
    251   typedef ContinuousRangeMap<unsigned, Module*, 64> GlobalSLocOffsetMapType;
    252 
    253   /// \brief A map of reversed (SourceManager::MaxLoadedOffset - SLocOffset)
    254   /// SourceLocation offsets to the modules containing them.
    255   GlobalSLocOffsetMapType GlobalSLocOffsetMap;
    256 
    257   /// \brief Types that have already been loaded from the chain.
    258   ///
    259   /// When the pointer at index I is non-NULL, the type with
    260   /// ID = (I + 1) << FastQual::Width has already been loaded
    261   std::vector<QualType> TypesLoaded;
    262 
    263   typedef ContinuousRangeMap<serialization::TypeID, Module *, 4>
    264     GlobalTypeMapType;
    265 
    266   /// \brief Mapping from global type IDs to the module in which the
    267   /// type resides along with the offset that should be added to the
    268   /// global type ID to produce a local ID.
    269   GlobalTypeMapType GlobalTypeMap;
    270 
    271   /// \brief Declarations that have already been loaded from the chain.
    272   ///
    273   /// When the pointer at index I is non-NULL, the declaration with ID
    274   /// = I + 1 has already been loaded.
    275   std::vector<Decl *> DeclsLoaded;
    276 
    277   typedef ContinuousRangeMap<serialization::DeclID, Module *, 4>
    278     GlobalDeclMapType;
    279 
    280   /// \brief Mapping from global declaration IDs to the module in which the
    281   /// declaration resides.
    282   GlobalDeclMapType GlobalDeclMap;
    283 
    284   typedef std::pair<Module *, uint64_t> FileOffset;
    285   typedef SmallVector<FileOffset, 2> FileOffsetsTy;
    286   typedef llvm::DenseMap<serialization::DeclID, FileOffsetsTy>
    287       DeclUpdateOffsetsMap;
    288 
    289   /// \brief Declarations that have modifications residing in a later file
    290   /// in the chain.
    291   DeclUpdateOffsetsMap DeclUpdateOffsets;
    292 
    293   typedef llvm::DenseMap<serialization::DeclID,
    294                          std::pair<Module *, uint64_t> >
    295       DeclReplacementMap;
    296   /// \brief Declarations that have been replaced in a later file in the chain.
    297   DeclReplacementMap ReplacedDecls;
    298 
    299   // Updates for visible decls can occur for other contexts than just the
    300   // TU, and when we read those update records, the actual context will not
    301   // be available yet (unless it's the TU), so have this pending map using the
    302   // ID as a key. It will be realized when the context is actually loaded.
    303   typedef SmallVector<std::pair<void *, Module*>, 1> DeclContextVisibleUpdates;
    304   typedef llvm::DenseMap<serialization::DeclID, DeclContextVisibleUpdates>
    305       DeclContextVisibleUpdatesPending;
    306 
    307   /// \brief Updates to the visible declarations of declaration contexts that
    308   /// haven't been loaded yet.
    309   DeclContextVisibleUpdatesPending PendingVisibleUpdates;
    310 
    311   typedef SmallVector<CXXRecordDecl *, 4> ForwardRefs;
    312   typedef llvm::DenseMap<const CXXRecordDecl *, ForwardRefs>
    313       PendingForwardRefsMap;
    314   /// \brief Forward references that have a definition but the definition decl
    315   /// is still initializing. When the definition gets read it will update
    316   /// the DefinitionData pointer of all pending references.
    317   PendingForwardRefsMap PendingForwardRefs;
    318 
    319   typedef llvm::DenseMap<serialization::DeclID, serialization::DeclID>
    320       FirstLatestDeclIDMap;
    321   /// \brief Map of first declarations from a chained PCH that point to the
    322   /// most recent declarations in another AST file.
    323   FirstLatestDeclIDMap FirstLatestDeclIDs;
    324 
    325   /// \brief Set of ObjC interfaces that have categories chained to them in
    326   /// other modules.
    327   llvm::DenseSet<serialization::GlobalDeclID> ObjCChainedCategoriesInterfaces;
    328 
    329   /// \brief Read the records that describe the contents of declcontexts.
    330   bool ReadDeclContextStorage(Module &M,
    331                               llvm::BitstreamCursor &Cursor,
    332                               const std::pair<uint64_t, uint64_t> &Offsets,
    333                               serialization::DeclContextInfo &Info);
    334 
    335   /// \brief A vector containing identifiers that have already been
    336   /// loaded.
    337   ///
    338   /// If the pointer at index I is non-NULL, then it refers to the
    339   /// IdentifierInfo for the identifier with ID=I+1 that has already
    340   /// been loaded.
    341   std::vector<IdentifierInfo *> IdentifiersLoaded;
    342 
    343   typedef ContinuousRangeMap<serialization::IdentID, Module *, 4>
    344     GlobalIdentifierMapType;
    345 
    346   /// \brief Mapping from global identifer IDs to the module in which the
    347   /// identifier resides along with the offset that should be added to the
    348   /// global identifier ID to produce a local ID.
    349   GlobalIdentifierMapType GlobalIdentifierMap;
    350 
    351   /// \brief A vector containing selectors that have already been loaded.
    352   ///
    353   /// This vector is indexed by the Selector ID (-1). NULL selector
    354   /// entries indicate that the particular selector ID has not yet
    355   /// been loaded.
    356   SmallVector<Selector, 16> SelectorsLoaded;
    357 
    358   typedef ContinuousRangeMap<serialization::SelectorID, Module *, 4>
    359     GlobalSelectorMapType;
    360 
    361   /// \brief Mapping from global selector IDs to the module in which the
    362   /// selector resides along with the offset that should be added to the
    363   /// global selector ID to produce a local ID.
    364   GlobalSelectorMapType GlobalSelectorMap;
    365 
    366   /// \brief Mapping from identifiers that represent macros whose definitions
    367   /// have not yet been deserialized to the global offset where the macro
    368   /// record resides.
    369   llvm::DenseMap<IdentifierInfo *, uint64_t> UnreadMacroRecordOffsets;
    370 
    371   typedef ContinuousRangeMap<unsigned, Module *, 4>
    372     GlobalPreprocessedEntityMapType;
    373 
    374   /// \brief Mapping from global preprocessing entity IDs to the module in
    375   /// which the preprocessed entity resides along with the offset that should be
    376   /// added to the global preprocessing entitiy ID to produce a local ID.
    377   GlobalPreprocessedEntityMapType GlobalPreprocessedEntityMap;
    378 
    379   /// \name CodeGen-relevant special data
    380   /// \brief Fields containing data that is relevant to CodeGen.
    381   //@{
    382 
    383   /// \brief The IDs of all declarations that fulfill the criteria of
    384   /// "interesting" decls.
    385   ///
    386   /// This contains the data loaded from all EXTERNAL_DEFINITIONS blocks in the
    387   /// chain. The referenced declarations are deserialized and passed to the
    388   /// consumer eagerly.
    389   SmallVector<uint64_t, 16> ExternalDefinitions;
    390 
    391   /// \brief The IDs of all tentative definitions stored in the the chain.
    392   ///
    393   /// Sema keeps track of all tentative definitions in a TU because it has to
    394   /// complete them and pass them on to CodeGen. Thus, tentative definitions in
    395   /// the PCH chain must be eagerly deserialized.
    396   SmallVector<uint64_t, 16> TentativeDefinitions;
    397 
    398   /// \brief The IDs of all CXXRecordDecls stored in the chain whose VTables are
    399   /// used.
    400   ///
    401   /// CodeGen has to emit VTables for these records, so they have to be eagerly
    402   /// deserialized.
    403   SmallVector<uint64_t, 64> VTableUses;
    404 
    405   /// \brief A snapshot of the pending instantiations in the chain.
    406   ///
    407   /// This record tracks the instantiations that Sema has to perform at the
    408   /// end of the TU. It consists of a pair of values for every pending
    409   /// instantiation where the first value is the ID of the decl and the second
    410   /// is the instantiation location.
    411   SmallVector<uint64_t, 64> PendingInstantiations;
    412 
    413   //@}
    414 
    415   /// \name DiagnosticsEngine-relevant special data
    416   /// \brief Fields containing data that is used for generating diagnostics
    417   //@{
    418 
    419   /// \brief A snapshot of Sema's unused file-scoped variable tracking, for
    420   /// generating warnings.
    421   SmallVector<uint64_t, 16> UnusedFileScopedDecls;
    422 
    423   /// \brief A list of all the delegating constructors we've seen, to diagnose
    424   /// cycles.
    425   SmallVector<uint64_t, 4> DelegatingCtorDecls;
    426 
    427   /// \brief Method selectors used in a @selector expression. Used for
    428   /// implementation of -Wselector.
    429   SmallVector<uint64_t, 64> ReferencedSelectorsData;
    430 
    431   /// \brief A snapshot of Sema's weak undeclared identifier tracking, for
    432   /// generating warnings.
    433   SmallVector<uint64_t, 64> WeakUndeclaredIdentifiers;
    434 
    435   /// \brief The IDs of type aliases for ext_vectors that exist in the chain.
    436   ///
    437   /// Used by Sema for finding sugared names for ext_vectors in diagnostics.
    438   SmallVector<uint64_t, 4> ExtVectorDecls;
    439 
    440   //@}
    441 
    442   /// \name Sema-relevant special data
    443   /// \brief Fields containing data that is used for semantic analysis
    444   //@{
    445 
    446   /// \brief The IDs of all locally scoped external decls in the chain.
    447   ///
    448   /// Sema tracks these to validate that the types are consistent across all
    449   /// local external declarations.
    450   SmallVector<uint64_t, 16> LocallyScopedExternalDecls;
    451 
    452   /// \brief The IDs of all dynamic class declarations in the chain.
    453   ///
    454   /// Sema tracks these because it checks for the key functions being defined
    455   /// at the end of the TU, in which case it directs CodeGen to emit the VTable.
    456   SmallVector<uint64_t, 16> DynamicClasses;
    457 
    458   /// \brief The IDs of the declarations Sema stores directly.
    459   ///
    460   /// Sema tracks a few important decls, such as namespace std, directly.
    461   SmallVector<uint64_t, 4> SemaDeclRefs;
    462 
    463   /// \brief The IDs of the types ASTContext stores directly.
    464   ///
    465   /// The AST context tracks a few important types, such as va_list, directly.
    466   SmallVector<uint64_t, 16> SpecialTypes;
    467 
    468   /// \brief The IDs of CUDA-specific declarations ASTContext stores directly.
    469   ///
    470   /// The AST context tracks a few important decls, currently cudaConfigureCall,
    471   /// directly.
    472   SmallVector<uint64_t, 2> CUDASpecialDeclRefs;
    473 
    474   /// \brief The floating point pragma option settings.
    475   SmallVector<uint64_t, 1> FPPragmaOptions;
    476 
    477   /// \brief The OpenCL extension settings.
    478   SmallVector<uint64_t, 1> OpenCLExtensions;
    479 
    480   /// \brief A list of the namespaces we've seen.
    481   SmallVector<uint64_t, 4> KnownNamespaces;
    482 
    483   //@}
    484 
    485   /// \brief The original file name that was used to build the primary AST file,
    486   /// which may have been modified for relocatable-pch support.
    487   std::string OriginalFileName;
    488 
    489   /// \brief The actual original file name that was used to build the primary
    490   /// AST file.
    491   std::string ActualOriginalFileName;
    492 
    493   /// \brief The file ID for the original file that was used to build the
    494   /// primary AST file.
    495   FileID OriginalFileID;
    496 
    497   /// \brief The directory that the PCH was originally created in. Used to
    498   /// allow resolving headers even after headers+PCH was moved to a new path.
    499   std::string OriginalDir;
    500 
    501   /// \brief The directory that the PCH we are reading is stored in.
    502   std::string CurrentDir;
    503 
    504   /// \brief Whether this precompiled header is a relocatable PCH file.
    505   bool RelocatablePCH;
    506 
    507   /// \brief The system include root to be used when loading the
    508   /// precompiled header.
    509   std::string isysroot;
    510 
    511   /// \brief Whether to disable the normal validation performed on precompiled
    512   /// headers when they are loaded.
    513   bool DisableValidation;
    514 
    515   /// \brief Whether to disable the use of stat caches in AST files.
    516   bool DisableStatCache;
    517 
    518   /// \brief Mapping from switch-case IDs in the chain to switch-case statements
    519   ///
    520   /// Statements usually don't have IDs, but switch cases need them, so that the
    521   /// switch statement can refer to them.
    522   std::map<unsigned, SwitchCase *> SwitchCaseStmts;
    523 
    524   /// \brief Mapping from opaque value IDs to OpaqueValueExprs.
    525   std::map<unsigned, OpaqueValueExpr*> OpaqueValueExprs;
    526 
    527   /// \brief The number of stat() calls that hit/missed the stat
    528   /// cache.
    529   unsigned NumStatHits, NumStatMisses;
    530 
    531   /// \brief The number of source location entries de-serialized from
    532   /// the PCH file.
    533   unsigned NumSLocEntriesRead;
    534 
    535   /// \brief The number of source location entries in the chain.
    536   unsigned TotalNumSLocEntries;
    537 
    538   /// \brief The number of statements (and expressions) de-serialized
    539   /// from the chain.
    540   unsigned NumStatementsRead;
    541 
    542   /// \brief The total number of statements (and expressions) stored
    543   /// in the chain.
    544   unsigned TotalNumStatements;
    545 
    546   /// \brief The number of macros de-serialized from the chain.
    547   unsigned NumMacrosRead;
    548 
    549   /// \brief The total number of macros stored in the chain.
    550   unsigned TotalNumMacros;
    551 
    552   /// \brief The number of selectors that have been read.
    553   unsigned NumSelectorsRead;
    554 
    555   /// \brief The number of method pool entries that have been read.
    556   unsigned NumMethodPoolEntriesRead;
    557 
    558   /// \brief The number of times we have looked up a selector in the method
    559   /// pool and not found anything interesting.
    560   unsigned NumMethodPoolMisses;
    561 
    562   /// \brief The total number of method pool entries in the selector table.
    563   unsigned TotalNumMethodPoolEntries;
    564 
    565   /// Number of lexical decl contexts read/total.
    566   unsigned NumLexicalDeclContextsRead, TotalLexicalDeclContexts;
    567 
    568   /// Number of visible decl contexts read/total.
    569   unsigned NumVisibleDeclContextsRead, TotalVisibleDeclContexts;
    570 
    571   /// Total size of modules, in bits, currently loaded
    572   uint64_t TotalModulesSizeInBits;
    573 
    574   /// \brief Number of Decl/types that are currently deserializing.
    575   unsigned NumCurrentElementsDeserializing;
    576 
    577   /// Number of CXX base specifiers currently loaded
    578   unsigned NumCXXBaseSpecifiersLoaded;
    579 
    580   /// \brief An IdentifierInfo that has been loaded but whose top-level
    581   /// declarations of the same name have not (yet) been loaded.
    582   struct PendingIdentifierInfo {
    583     IdentifierInfo *II;
    584     SmallVector<uint32_t, 4> DeclIDs;
    585   };
    586 
    587   /// \brief The set of identifiers that were read while the AST reader was
    588   /// (recursively) loading declarations.
    589   ///
    590   /// The declarations on the identifier chain for these identifiers will be
    591   /// loaded once the recursive loading has completed.
    592   std::deque<PendingIdentifierInfo> PendingIdentifierInfos;
    593 
    594   /// \brief Contains declarations and definitions that will be
    595   /// "interesting" to the ASTConsumer, when we get that AST consumer.
    596   ///
    597   /// "Interesting" declarations are those that have data that may
    598   /// need to be emitted, such as inline function definitions or
    599   /// Objective-C protocols.
    600   std::deque<Decl *> InterestingDecls;
    601 
    602   /// \brief We delay loading of the previous declaration chain to avoid
    603   /// deeply nested calls when there are many redeclarations.
    604   std::deque<std::pair<Decl *, serialization::DeclID> > PendingPreviousDecls;
    605 
    606   /// \brief Ready to load the previous declaration of the given Decl.
    607   void loadAndAttachPreviousDecl(Decl *D, serialization::DeclID ID);
    608 
    609   /// \brief When reading a Stmt tree, Stmt operands are placed in this stack.
    610   SmallVector<Stmt *, 16> StmtStack;
    611 
    612   /// \brief What kind of records we are reading.
    613   enum ReadingKind {
    614     Read_Decl, Read_Type, Read_Stmt
    615   };
    616 
    617   /// \brief What kind of records we are reading.
    618   ReadingKind ReadingKind;
    619 
    620   /// \brief RAII object to change the reading kind.
    621   class ReadingKindTracker {
    622     ASTReader &Reader;
    623     enum ReadingKind PrevKind;
    624 
    625     ReadingKindTracker(const ReadingKindTracker&); // do not implement
    626     ReadingKindTracker &operator=(const ReadingKindTracker&);// do not implement
    627 
    628   public:
    629     ReadingKindTracker(enum ReadingKind newKind, ASTReader &reader)
    630       : Reader(reader), PrevKind(Reader.ReadingKind) {
    631       Reader.ReadingKind = newKind;
    632     }
    633 
    634     ~ReadingKindTracker() { Reader.ReadingKind = PrevKind; }
    635   };
    636 
    637   /// \brief All predefines buffers in the chain, to be treated as if
    638   /// concatenated.
    639   PCHPredefinesBlocks PCHPredefinesBuffers;
    640 
    641   /// \brief Suggested contents of the predefines buffer, after this
    642   /// PCH file has been processed.
    643   ///
    644   /// In most cases, this string will be empty, because the predefines
    645   /// buffer computed to build the PCH file will be identical to the
    646   /// predefines buffer computed from the command line. However, when
    647   /// there are differences that the PCH reader can work around, this
    648   /// predefines buffer may contain additional definitions.
    649   std::string SuggestedPredefines;
    650 
    651   /// \brief Reads a statement from the specified cursor.
    652   Stmt *ReadStmtFromStream(Module &F);
    653 
    654   /// \brief Get a FileEntry out of stored-in-PCH filename, making sure we take
    655   /// into account all the necessary relocations.
    656   const FileEntry *getFileEntry(StringRef filename);
    657 
    658   void MaybeAddSystemRootToFilename(std::string &Filename);
    659 
    660   ASTReadResult ReadASTCore(StringRef FileName, ModuleKind Type,
    661                             Module *ImportedBy);
    662   ASTReadResult ReadASTBlock(Module &F);
    663   bool CheckPredefinesBuffers();
    664   bool ParseLineTable(Module &F, SmallVectorImpl<uint64_t> &Record);
    665   ASTReadResult ReadSourceManagerBlock(Module &F);
    666   ASTReadResult ReadSLocEntryRecord(int ID);
    667   llvm::BitstreamCursor &SLocCursorForID(int ID);
    668   SourceLocation getImportLocation(Module *F);
    669   bool ParseLanguageOptions(const SmallVectorImpl<uint64_t> &Record);
    670 
    671   struct RecordLocation {
    672     RecordLocation(Module *M, uint64_t O)
    673       : F(M), Offset(O) {}
    674     Module *F;
    675     uint64_t Offset;
    676   };
    677 
    678   QualType readTypeRecord(unsigned Index);
    679   RecordLocation TypeCursorForIndex(unsigned Index);
    680   void LoadedDecl(unsigned Index, Decl *D);
    681   Decl *ReadDeclRecord(serialization::DeclID ID);
    682   RecordLocation DeclCursorForID(serialization::DeclID ID);
    683   void loadDeclUpdateRecords(serialization::DeclID ID, Decl *D);
    684   void loadObjCChainedCategories(serialization::GlobalDeclID ID,
    685                                  ObjCInterfaceDecl *D);
    686 
    687   RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
    688   uint64_t getGlobalBitOffset(Module &M, uint32_t LocalOffset);
    689 
    690   /// \brief Returns the first preprocessed entity ID that ends after \arg BLoc.
    691   serialization::PreprocessedEntityID
    692     findBeginPreprocessedEntity(SourceLocation BLoc) const;
    693 
    694   /// \brief Returns the first preprocessed entity ID that begins after \arg ELoc.
    695   serialization::PreprocessedEntityID
    696     findEndPreprocessedEntity(SourceLocation ELoc) const;
    697 
    698   /// \brief \arg SLocMapI points at a chunk of a module that contains no
    699   /// preprocessed entities or the entities it contains are not the ones we are
    700   /// looking for. Find the next module that contains entities and return the ID
    701   /// of the first entry.
    702   serialization::PreprocessedEntityID
    703     findNextPreprocessedEntity(
    704                         GlobalSLocOffsetMapType::const_iterator SLocMapI) const;
    705 
    706   void PassInterestingDeclsToConsumer();
    707 
    708   /// \brief Produce an error diagnostic and return true.
    709   ///
    710   /// This routine should only be used for fatal errors that have to
    711   /// do with non-routine failures (e.g., corrupted AST file).
    712   void Error(StringRef Msg);
    713   void Error(unsigned DiagID, StringRef Arg1 = StringRef(),
    714              StringRef Arg2 = StringRef());
    715 
    716   ASTReader(const ASTReader&); // do not implement
    717   ASTReader &operator=(const ASTReader &); // do not implement
    718 public:
    719   typedef SmallVector<uint64_t, 64> RecordData;
    720 
    721   /// \brief Load the AST file and validate its contents against the given
    722   /// Preprocessor.
    723   ///
    724   /// \param PP the preprocessor associated with the context in which this
    725   /// precompiled header will be loaded.
    726   ///
    727   /// \param Context the AST context that this precompiled header will be
    728   /// loaded into.
    729   ///
    730   /// \param isysroot If non-NULL, the system include path specified by the
    731   /// user. This is only used with relocatable PCH files. If non-NULL,
    732   /// a relocatable PCH file will use the default path "/".
    733   ///
    734   /// \param DisableValidation If true, the AST reader will suppress most
    735   /// of its regular consistency checking, allowing the use of precompiled
    736   /// headers that cannot be determined to be compatible.
    737   ///
    738   /// \param DisableStatCache If true, the AST reader will ignore the
    739   /// stat cache in the AST files. This performance pessimization can
    740   /// help when an AST file is being used in cases where the
    741   /// underlying files in the file system may have changed, but
    742   /// parsing should still continue.
    743   ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot = "",
    744             bool DisableValidation = false, bool DisableStatCache = false);
    745 
    746   ~ASTReader();
    747 
    748   SourceManager &getSourceManager() const { return SourceMgr; }
    749 
    750   /// \brief Load the AST file designated by the given file name.
    751   ASTReadResult ReadAST(const std::string &FileName, ModuleKind Type);
    752 
    753   /// \brief Checks that no file that is stored in PCH is out-of-sync with
    754   /// the actual file in the file system.
    755   ASTReadResult validateFileEntries(Module &M);
    756 
    757   /// \brief Set the AST callbacks listener.
    758   void setListener(ASTReaderListener *listener) {
    759     Listener.reset(listener);
    760   }
    761 
    762   /// \brief Set the AST deserialization listener.
    763   void setDeserializationListener(ASTDeserializationListener *Listener);
    764 
    765   /// \brief Initializes the ASTContext
    766   void InitializeContext();
    767 
    768   /// \brief Add in-memory (virtual file) buffer.
    769   void addInMemoryBuffer(StringRef &FileName, llvm::MemoryBuffer *Buffer) {
    770     ModuleMgr.addInMemoryBuffer(FileName, Buffer);
    771   }
    772 
    773   /// \brief Retrieve the module manager.
    774   ModuleManager &getModuleManager() { return ModuleMgr; }
    775 
    776   /// \brief Retrieve the preprocessor.
    777   Preprocessor &getPreprocessor() const { return PP; }
    778 
    779   /// \brief Retrieve the name of the original source file name
    780   const std::string &getOriginalSourceFile() { return OriginalFileName; }
    781 
    782   /// \brief Retrieve the name of the original source file name directly from
    783   /// the AST file, without actually loading the AST file.
    784   static std::string getOriginalSourceFile(const std::string &ASTFileName,
    785                                            FileManager &FileMgr,
    786                                            DiagnosticsEngine &Diags);
    787 
    788   /// \brief Returns the suggested contents of the predefines buffer,
    789   /// which contains a (typically-empty) subset of the predefines
    790   /// build prior to including the precompiled header.
    791   const std::string &getSuggestedPredefines() { return SuggestedPredefines; }
    792 
    793   /// \brief Read a preallocated preprocessed entity from the external source.
    794   ///
    795   /// \returns null if an error occurred that prevented the preprocessed
    796   /// entity from being loaded.
    797   virtual PreprocessedEntity *ReadPreprocessedEntity(unsigned Index);
    798 
    799   /// \brief Returns a pair of [Begin, End) indices of preallocated
    800   /// preprocessed entities that \arg Range encompasses.
    801   virtual std::pair<unsigned, unsigned>
    802       findPreprocessedEntitiesInRange(SourceRange Range);
    803 
    804   /// \brief Read the header file information for the given file entry.
    805   virtual HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE);
    806 
    807   void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag);
    808 
    809   /// \brief Returns the number of source locations found in the chain.
    810   unsigned getTotalNumSLocs() const {
    811     return TotalNumSLocEntries;
    812   }
    813 
    814   /// \brief Returns the number of identifiers found in the chain.
    815   unsigned getTotalNumIdentifiers() const {
    816     return static_cast<unsigned>(IdentifiersLoaded.size());
    817   }
    818 
    819   /// \brief Returns the number of types found in the chain.
    820   unsigned getTotalNumTypes() const {
    821     return static_cast<unsigned>(TypesLoaded.size());
    822   }
    823 
    824   /// \brief Returns the number of declarations found in the chain.
    825   unsigned getTotalNumDecls() const {
    826     return static_cast<unsigned>(DeclsLoaded.size());
    827   }
    828 
    829   /// \brief Returns the number of selectors found in the chain.
    830   unsigned getTotalNumSelectors() const {
    831     return static_cast<unsigned>(SelectorsLoaded.size());
    832   }
    833 
    834   /// \brief Returns the number of preprocessed entities known to the AST
    835   /// reader.
    836   unsigned getTotalNumPreprocessedEntities() const {
    837     unsigned Result = 0;
    838     for (ModuleConstIterator I = ModuleMgr.begin(),
    839         E = ModuleMgr.end(); I != E; ++I) {
    840       Result += (*I)->NumPreprocessedEntities;
    841     }
    842 
    843     return Result;
    844   }
    845 
    846   /// \brief Returns the number of C++ base specifiers found in the chain.
    847   unsigned getTotalNumCXXBaseSpecifiers() const {
    848     return NumCXXBaseSpecifiersLoaded;
    849   }
    850 
    851   /// \brief Reads a TemplateArgumentLocInfo appropriate for the
    852   /// given TemplateArgument kind.
    853   TemplateArgumentLocInfo
    854   GetTemplateArgumentLocInfo(Module &F, TemplateArgument::ArgKind Kind,
    855                              const RecordData &Record, unsigned &Idx);
    856 
    857   /// \brief Reads a TemplateArgumentLoc.
    858   TemplateArgumentLoc
    859   ReadTemplateArgumentLoc(Module &F,
    860                           const RecordData &Record, unsigned &Idx);
    861 
    862   /// \brief Reads a declarator info from the given record.
    863   TypeSourceInfo *GetTypeSourceInfo(Module &F,
    864                                     const RecordData &Record, unsigned &Idx);
    865 
    866   /// \brief Resolve a type ID into a type, potentially building a new
    867   /// type.
    868   QualType GetType(serialization::TypeID ID);
    869 
    870   /// \brief Resolve a local type ID within a given AST file into a type.
    871   QualType getLocalType(Module &F, unsigned LocalID);
    872 
    873   /// \brief Map a local type ID within a given AST file into a global type ID.
    874   serialization::TypeID getGlobalTypeID(Module &F, unsigned LocalID) const;
    875 
    876   /// \brief Read a type from the current position in the given record, which
    877   /// was read from the given AST file.
    878   QualType readType(Module &F, const RecordData &Record, unsigned &Idx) {
    879     if (Idx >= Record.size())
    880       return QualType();
    881 
    882     return getLocalType(F, Record[Idx++]);
    883   }
    884 
    885   /// \brief Map from a local declaration ID within a given module to a
    886   /// global declaration ID.
    887   serialization::DeclID getGlobalDeclID(Module &F, unsigned LocalID) const;
    888 
    889   /// \brief Returns true if global DeclID \arg ID originated from module
    890   /// \arg M.
    891   bool isDeclIDFromModule(serialization::GlobalDeclID ID, Module &M) const;
    892 
    893   /// \brief Resolve a declaration ID into a declaration, potentially
    894   /// building a new declaration.
    895   Decl *GetDecl(serialization::DeclID ID);
    896   virtual Decl *GetExternalDecl(uint32_t ID);
    897 
    898   /// \brief Reads a declaration with the given local ID in the given module.
    899   Decl *GetLocalDecl(Module &F, uint32_t LocalID) {
    900     return GetDecl(getGlobalDeclID(F, LocalID));
    901   }
    902 
    903   /// \brief Reads a declaration with the given local ID in the given module.
    904   ///
    905   /// \returns The requested declaration, casted to the given return type.
    906   template<typename T>
    907   T *GetLocalDeclAs(Module &F, uint32_t LocalID) {
    908     return cast_or_null<T>(GetLocalDecl(F, LocalID));
    909   }
    910 
    911   /// \brief Reads a declaration ID from the given position in a record in the
    912   /// given module.
    913   ///
    914   /// \returns The declaration ID read from the record, adjusted to a global ID.
    915   serialization::DeclID ReadDeclID(Module &F, const RecordData &Record,
    916                                    unsigned &Idx);
    917 
    918   /// \brief Reads a declaration from the given position in a record in the
    919   /// given module.
    920   Decl *ReadDecl(Module &F, const RecordData &R, unsigned &I) {
    921     return GetDecl(ReadDeclID(F, R, I));
    922   }
    923 
    924   /// \brief Reads a declaration from the given position in a record in the
    925   /// given module.
    926   ///
    927   /// \returns The declaration read from this location, casted to the given
    928   /// result type.
    929   template<typename T>
    930   T *ReadDeclAs(Module &F, const RecordData &R, unsigned &I) {
    931     return cast_or_null<T>(GetDecl(ReadDeclID(F, R, I)));
    932   }
    933 
    934   /// \brief Read a CXXBaseSpecifiers ID form the given record and
    935   /// return its global bit offset.
    936   uint64_t readCXXBaseSpecifiers(Module &M, const RecordData &Record,
    937                                  unsigned &Idx);
    938 
    939   virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset);
    940 
    941   /// \brief Resolve the offset of a statement into a statement.
    942   ///
    943   /// This operation will read a new statement from the external
    944   /// source each time it is called, and is meant to be used via a
    945   /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
    946   virtual Stmt *GetExternalDeclStmt(uint64_t Offset);
    947 
    948   /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
    949   /// specified cursor.  Read the abbreviations that are at the top of the block
    950   /// and then leave the cursor pointing into the block.
    951   bool ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor, unsigned BlockID);
    952 
    953   /// \brief Finds all the visible declarations with a given name.
    954   /// The current implementation of this method just loads the entire
    955   /// lookup table as unmaterialized references.
    956   virtual DeclContext::lookup_result
    957   FindExternalVisibleDeclsByName(const DeclContext *DC,
    958                                  DeclarationName Name);
    959 
    960   /// \brief Read all of the declarations lexically stored in a
    961   /// declaration context.
    962   ///
    963   /// \param DC The declaration context whose declarations will be
    964   /// read.
    965   ///
    966   /// \param Decls Vector that will contain the declarations loaded
    967   /// from the external source. The caller is responsible for merging
    968   /// these declarations with any declarations already stored in the
    969   /// declaration context.
    970   ///
    971   /// \returns true if there was an error while reading the
    972   /// declarations for this declaration context.
    973   virtual ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC,
    974                                         bool (*isKindWeWant)(Decl::Kind),
    975                                         SmallVectorImpl<Decl*> &Decls);
    976 
    977   /// \brief Notify ASTReader that we started deserialization of
    978   /// a decl or type so until FinishedDeserializing is called there may be
    979   /// decls that are initializing. Must be paired with FinishedDeserializing.
    980   virtual void StartedDeserializing() { ++NumCurrentElementsDeserializing; }
    981 
    982   /// \brief Notify ASTReader that we finished the deserialization of
    983   /// a decl or type. Must be paired with StartedDeserializing.
    984   virtual void FinishedDeserializing();
    985 
    986   /// \brief Function that will be invoked when we begin parsing a new
    987   /// translation unit involving this external AST source.
    988   ///
    989   /// This function will provide all of the external definitions to
    990   /// the ASTConsumer.
    991   virtual void StartTranslationUnit(ASTConsumer *Consumer);
    992 
    993   /// \brief Print some statistics about AST usage.
    994   virtual void PrintStats();
    995 
    996   /// \brief Dump information about the AST reader to standard error.
    997   void dump();
    998 
    999   /// Return the amount of memory used by memory buffers, breaking down
   1000   /// by heap-backed versus mmap'ed memory.
   1001   virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const;
   1002 
   1003   /// \brief Initialize the semantic source with the Sema instance
   1004   /// being used to perform semantic analysis on the abstract syntax
   1005   /// tree.
   1006   virtual void InitializeSema(Sema &S);
   1007 
   1008   /// \brief Inform the semantic consumer that Sema is no longer available.
   1009   virtual void ForgetSema() { SemaObj = 0; }
   1010 
   1011   /// \brief Retrieve the IdentifierInfo for the named identifier.
   1012   ///
   1013   /// This routine builds a new IdentifierInfo for the given identifier. If any
   1014   /// declarations with this name are visible from translation unit scope, their
   1015   /// declarations will be deserialized and introduced into the declaration
   1016   /// chain of the identifier.
   1017   virtual IdentifierInfo *get(const char *NameStart, const char *NameEnd);
   1018   IdentifierInfo *get(StringRef Name) {
   1019     return get(Name.begin(), Name.end());
   1020   }
   1021 
   1022   /// \brief Retrieve an iterator into the set of all identifiers
   1023   /// in all loaded AST files.
   1024   virtual IdentifierIterator *getIdentifiers() const;
   1025 
   1026   /// \brief Load the contents of the global method pool for a given
   1027   /// selector.
   1028   ///
   1029   /// \returns a pair of Objective-C methods lists containing the
   1030   /// instance and factory methods, respectively, with this selector.
   1031   virtual std::pair<ObjCMethodList, ObjCMethodList>
   1032     ReadMethodPool(Selector Sel);
   1033 
   1034   /// \brief Load the set of namespaces that are known to the external source,
   1035   /// which will be used during typo correction.
   1036   virtual void ReadKnownNamespaces(
   1037                            SmallVectorImpl<NamespaceDecl *> &Namespaces);
   1038 
   1039   virtual void ReadTentativeDefinitions(
   1040                  SmallVectorImpl<VarDecl *> &TentativeDefs);
   1041 
   1042   virtual void ReadUnusedFileScopedDecls(
   1043                  SmallVectorImpl<const DeclaratorDecl *> &Decls);
   1044 
   1045   virtual void ReadDelegatingConstructors(
   1046                  SmallVectorImpl<CXXConstructorDecl *> &Decls);
   1047 
   1048   virtual void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls);
   1049 
   1050   virtual void ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls);
   1051 
   1052   virtual void ReadLocallyScopedExternalDecls(
   1053                  SmallVectorImpl<NamedDecl *> &Decls);
   1054 
   1055   virtual void ReadReferencedSelectors(
   1056                  SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels);
   1057 
   1058   virtual void ReadWeakUndeclaredIdentifiers(
   1059                  SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WI);
   1060 
   1061   virtual void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables);
   1062 
   1063   virtual void ReadPendingInstantiations(
   1064                  SmallVectorImpl<std::pair<ValueDecl *,
   1065                                            SourceLocation> > &Pending);
   1066 
   1067   /// \brief Load a selector from disk, registering its ID if it exists.
   1068   void LoadSelector(Selector Sel);
   1069 
   1070   void SetIdentifierInfo(unsigned ID, IdentifierInfo *II);
   1071   void SetGloballyVisibleDecls(IdentifierInfo *II,
   1072                                const SmallVectorImpl<uint32_t> &DeclIDs,
   1073                                bool Nonrecursive = false);
   1074 
   1075   /// \brief Report a diagnostic.
   1076   DiagnosticBuilder Diag(unsigned DiagID);
   1077 
   1078   /// \brief Report a diagnostic.
   1079   DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID);
   1080 
   1081   IdentifierInfo *DecodeIdentifierInfo(serialization::IdentifierID ID);
   1082 
   1083   IdentifierInfo *GetIdentifierInfo(Module &M, const RecordData &Record,
   1084                                     unsigned &Idx) {
   1085     return DecodeIdentifierInfo(getGlobalIdentifierID(M, Record[Idx++]));
   1086   }
   1087 
   1088   virtual IdentifierInfo *GetIdentifier(serialization::IdentifierID ID) {
   1089     return DecodeIdentifierInfo(ID);
   1090   }
   1091 
   1092   IdentifierInfo *getLocalIdentifier(Module &M, unsigned LocalID);
   1093 
   1094   serialization::IdentifierID getGlobalIdentifierID(Module &M,
   1095                                                     unsigned LocalID);
   1096 
   1097   /// \brief Read the source location entry with index ID.
   1098   virtual bool ReadSLocEntry(int ID);
   1099 
   1100   /// \brief Retrieve a selector from the given module with its local ID
   1101   /// number.
   1102   Selector getLocalSelector(Module &M, unsigned LocalID);
   1103 
   1104   Selector DecodeSelector(serialization::SelectorID Idx);
   1105 
   1106   virtual Selector GetExternalSelector(serialization::SelectorID ID);
   1107   uint32_t GetNumExternalSelectors();
   1108 
   1109   Selector ReadSelector(Module &M, const RecordData &Record, unsigned &Idx) {
   1110     return getLocalSelector(M, Record[Idx++]);
   1111   }
   1112 
   1113   /// \brief Retrieve the global selector ID that corresponds to this
   1114   /// the local selector ID in a given module.
   1115   serialization::SelectorID getGlobalSelectorID(Module &F,
   1116                                                 unsigned LocalID) const;
   1117 
   1118   /// \brief Read a declaration name.
   1119   DeclarationName ReadDeclarationName(Module &F,
   1120                                       const RecordData &Record, unsigned &Idx);
   1121   void ReadDeclarationNameLoc(Module &F,
   1122                               DeclarationNameLoc &DNLoc, DeclarationName Name,
   1123                               const RecordData &Record, unsigned &Idx);
   1124   void ReadDeclarationNameInfo(Module &F, DeclarationNameInfo &NameInfo,
   1125                                const RecordData &Record, unsigned &Idx);
   1126 
   1127   void ReadQualifierInfo(Module &F, QualifierInfo &Info,
   1128                          const RecordData &Record, unsigned &Idx);
   1129 
   1130   NestedNameSpecifier *ReadNestedNameSpecifier(Module &F,
   1131                                                const RecordData &Record,
   1132                                                unsigned &Idx);
   1133 
   1134   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc(Module &F,
   1135                                                     const RecordData &Record,
   1136                                                     unsigned &Idx);
   1137 
   1138   /// \brief Read a template name.
   1139   TemplateName ReadTemplateName(Module &F, const RecordData &Record,
   1140                                 unsigned &Idx);
   1141 
   1142   /// \brief Read a template argument.
   1143   TemplateArgument ReadTemplateArgument(Module &F,
   1144                                         const RecordData &Record,unsigned &Idx);
   1145 
   1146   /// \brief Read a template parameter list.
   1147   TemplateParameterList *ReadTemplateParameterList(Module &F,
   1148                                                    const RecordData &Record,
   1149                                                    unsigned &Idx);
   1150 
   1151   /// \brief Read a template argument array.
   1152   void
   1153   ReadTemplateArgumentList(SmallVector<TemplateArgument, 8> &TemplArgs,
   1154                            Module &F, const RecordData &Record,
   1155                            unsigned &Idx);
   1156 
   1157   /// \brief Read a UnresolvedSet structure.
   1158   void ReadUnresolvedSet(Module &F, UnresolvedSetImpl &Set,
   1159                          const RecordData &Record, unsigned &Idx);
   1160 
   1161   /// \brief Read a C++ base specifier.
   1162   CXXBaseSpecifier ReadCXXBaseSpecifier(Module &F,
   1163                                         const RecordData &Record,unsigned &Idx);
   1164 
   1165   /// \brief Read a CXXCtorInitializer array.
   1166   std::pair<CXXCtorInitializer **, unsigned>
   1167   ReadCXXCtorInitializers(Module &F, const RecordData &Record,
   1168                           unsigned &Idx);
   1169 
   1170   /// \brief Read a source location from raw form.
   1171   SourceLocation ReadSourceLocation(Module &Module, unsigned Raw) const {
   1172     SourceLocation Loc = SourceLocation::getFromRawEncoding(Raw);
   1173     assert(Module.SLocRemap.find(Loc.getOffset()) != Module.SLocRemap.end() &&
   1174            "Cannot find offset to remap.");
   1175     int Remap = Module.SLocRemap.find(Loc.getOffset())->second;
   1176     return Loc.getLocWithOffset(Remap);
   1177   }
   1178 
   1179   /// \brief Read a source location.
   1180   SourceLocation ReadSourceLocation(Module &Module,
   1181                                     const RecordData &Record, unsigned& Idx) {
   1182     return ReadSourceLocation(Module, Record[Idx++]);
   1183   }
   1184 
   1185   /// \brief Read a source range.
   1186   SourceRange ReadSourceRange(Module &F,
   1187                               const RecordData &Record, unsigned& Idx);
   1188 
   1189   /// \brief Read an integral value
   1190   llvm::APInt ReadAPInt(const RecordData &Record, unsigned &Idx);
   1191 
   1192   /// \brief Read a signed integral value
   1193   llvm::APSInt ReadAPSInt(const RecordData &Record, unsigned &Idx);
   1194 
   1195   /// \brief Read a floating-point value
   1196   llvm::APFloat ReadAPFloat(const RecordData &Record, unsigned &Idx);
   1197 
   1198   // \brief Read a string
   1199   std::string ReadString(const RecordData &Record, unsigned &Idx);
   1200 
   1201   /// \brief Read a version tuple.
   1202   VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx);
   1203 
   1204   CXXTemporary *ReadCXXTemporary(Module &F, const RecordData &Record,
   1205                                  unsigned &Idx);
   1206 
   1207   /// \brief Reads attributes from the current stream position.
   1208   void ReadAttributes(Module &F, AttrVec &Attrs,
   1209                       const RecordData &Record, unsigned &Idx);
   1210 
   1211   /// \brief Reads a statement.
   1212   Stmt *ReadStmt(Module &F);
   1213 
   1214   /// \brief Reads an expression.
   1215   Expr *ReadExpr(Module &F);
   1216 
   1217   /// \brief Reads a sub-statement operand during statement reading.
   1218   Stmt *ReadSubStmt() {
   1219     assert(ReadingKind == Read_Stmt &&
   1220            "Should be called only during statement reading!");
   1221     // Subexpressions are stored from last to first, so the next Stmt we need
   1222     // is at the back of the stack.
   1223     assert(!StmtStack.empty() && "Read too many sub statements!");
   1224     return StmtStack.pop_back_val();
   1225   }
   1226 
   1227   /// \brief Reads a sub-expression operand during statement reading.
   1228   Expr *ReadSubExpr();
   1229 
   1230   /// \brief Reads the macro record located at the given offset.
   1231   void ReadMacroRecord(Module &F, uint64_t Offset);
   1232 
   1233   /// \brief Determine the global preprocessed entity ID that corresponds to
   1234   /// the given local ID within the given module.
   1235   serialization::PreprocessedEntityID
   1236   getGlobalPreprocessedEntityID(Module &M, unsigned LocalID) const;
   1237 
   1238   /// \brief Note that the identifier is a macro whose record will be loaded
   1239   /// from the given AST file at the given (file-local) offset.
   1240   void SetIdentifierIsMacro(IdentifierInfo *II, Module &F,
   1241                             uint64_t Offset);
   1242 
   1243   /// \brief Read the set of macros defined by this external macro source.
   1244   virtual void ReadDefinedMacros();
   1245 
   1246   /// \brief Read the macro definition for this identifier.
   1247   virtual void LoadMacroDefinition(IdentifierInfo *II);
   1248 
   1249   /// \brief Read the macro definition corresponding to this iterator
   1250   /// into the unread macro record offsets table.
   1251   void LoadMacroDefinition(
   1252                      llvm::DenseMap<IdentifierInfo *, uint64_t>::iterator Pos);
   1253 
   1254   /// \brief Retrieve the AST context that this AST reader supplements.
   1255   ASTContext &getContext() { return Context; }
   1256 
   1257   // \brief Contains declarations that were loaded before we have
   1258   // access to a Sema object.
   1259   SmallVector<NamedDecl *, 16> PreloadedDecls;
   1260 
   1261   /// \brief Retrieve the semantic analysis object used to analyze the
   1262   /// translation unit in which the precompiled header is being
   1263   /// imported.
   1264   Sema *getSema() { return SemaObj; }
   1265 
   1266   /// \brief Retrieve the identifier table associated with the
   1267   /// preprocessor.
   1268   IdentifierTable &getIdentifierTable();
   1269 
   1270   /// \brief Record that the given ID maps to the given switch-case
   1271   /// statement.
   1272   void RecordSwitchCaseID(SwitchCase *SC, unsigned ID);
   1273 
   1274   /// \brief Retrieve the switch-case statement with the given ID.
   1275   SwitchCase *getSwitchCaseWithID(unsigned ID);
   1276 
   1277   void ClearSwitchCaseIDs();
   1278 };
   1279 
   1280 /// \brief Helper class that saves the current stream position and
   1281 /// then restores it when destroyed.
   1282 struct SavedStreamPosition {
   1283   explicit SavedStreamPosition(llvm::BitstreamCursor &Cursor)
   1284   : Cursor(Cursor), Offset(Cursor.GetCurrentBitNo()) { }
   1285 
   1286   ~SavedStreamPosition() {
   1287     Cursor.JumpToBit(Offset);
   1288   }
   1289 
   1290 private:
   1291   llvm::BitstreamCursor &Cursor;
   1292   uint64_t Offset;
   1293 };
   1294 
   1295 inline void PCHValidator::Error(const char *Msg) {
   1296   Reader.Error(Msg);
   1297 }
   1298 
   1299 } // end namespace clang
   1300 
   1301 #endif
   1302