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_SERIALIZATION_ASTREADER_H
     15 #define LLVM_CLANG_SERIALIZATION_ASTREADER_H
     16 
     17 #include "clang/AST/DeclObjC.h"
     18 #include "clang/AST/DeclarationName.h"
     19 #include "clang/AST/TemplateBase.h"
     20 #include "clang/Basic/Diagnostic.h"
     21 #include "clang/Basic/FileSystemOptions.h"
     22 #include "clang/Basic/IdentifierTable.h"
     23 #include "clang/Basic/Version.h"
     24 #include "clang/Lex/ExternalPreprocessorSource.h"
     25 #include "clang/Lex/HeaderSearch.h"
     26 #include "clang/Lex/PreprocessingRecord.h"
     27 #include "clang/Sema/ExternalSemaSource.h"
     28 #include "clang/Sema/IdentifierResolver.h"
     29 #include "clang/Serialization/ASTBitCodes.h"
     30 #include "clang/Serialization/ContinuousRangeMap.h"
     31 #include "clang/Serialization/Module.h"
     32 #include "clang/Serialization/ModuleFileExtension.h"
     33 #include "clang/Serialization/ModuleManager.h"
     34 #include "llvm/ADT/MapVector.h"
     35 #include "llvm/ADT/SmallPtrSet.h"
     36 #include "llvm/ADT/SmallSet.h"
     37 #include "llvm/ADT/SmallVector.h"
     38 #include "llvm/ADT/StringMap.h"
     39 #include "llvm/ADT/StringRef.h"
     40 #include "llvm/ADT/TinyPtrVector.h"
     41 #include "llvm/Support/DataTypes.h"
     42 #include "llvm/Support/Timer.h"
     43 #include <deque>
     44 #include <memory>
     45 #include <string>
     46 #include <utility>
     47 #include <vector>
     48 
     49 namespace llvm {
     50   class BitstreamCursor;
     51   class MemoryBuffer;
     52   class APInt;
     53   class APSInt;
     54   class APFloat;
     55 }
     56 
     57 namespace clang {
     58 
     59 class SourceManager;
     60 class HeaderSearchOptions;
     61 class FileManager;
     62 class AddrLabelExpr;
     63 class ASTConsumer;
     64 class ASTContext;
     65 class ASTIdentifierIterator;
     66 class ASTUnit; // FIXME: Layering violation and egregious hack.
     67 class Attr;
     68 class Decl;
     69 class DeclContext;
     70 class DefMacroDirective;
     71 class DiagnosticOptions;
     72 class NestedNameSpecifier;
     73 class CXXBaseSpecifier;
     74 class CXXConstructorDecl;
     75 class CXXCtorInitializer;
     76 class GlobalModuleIndex;
     77 class GotoStmt;
     78 class MacroDefinition;
     79 class MacroDirective;
     80 class ModuleMacro;
     81 class NamedDecl;
     82 class OpaqueValueExpr;
     83 class Preprocessor;
     84 class PreprocessorOptions;
     85 class Sema;
     86 class SwitchCase;
     87 class ASTDeserializationListener;
     88 class ASTWriter;
     89 class ASTReader;
     90 class ASTDeclReader;
     91 class ASTStmtReader;
     92 class ASTRecordReader;
     93 class TypeLocReader;
     94 struct HeaderFileInfo;
     95 class VersionTuple;
     96 class TargetOptions;
     97 class LazyASTUnresolvedSet;
     98 
     99 /// \brief Abstract interface for callback invocations by the ASTReader.
    100 ///
    101 /// While reading an AST file, the ASTReader will call the methods of the
    102 /// listener to pass on specific information. Some of the listener methods can
    103 /// return true to indicate to the ASTReader that the information (and
    104 /// consequently the AST file) is invalid.
    105 class ASTReaderListener {
    106 public:
    107   virtual ~ASTReaderListener();
    108 
    109   /// \brief Receives the full Clang version information.
    110   ///
    111   /// \returns true to indicate that the version is invalid. Subclasses should
    112   /// generally defer to this implementation.
    113   virtual bool ReadFullVersionInformation(StringRef FullVersion) {
    114     return FullVersion != getClangFullRepositoryVersion();
    115   }
    116 
    117   virtual void ReadModuleName(StringRef ModuleName) {}
    118   virtual void ReadModuleMapFile(StringRef ModuleMapPath) {}
    119 
    120   /// \brief Receives the language options.
    121   ///
    122   /// \returns true to indicate the options are invalid or false otherwise.
    123   virtual bool ReadLanguageOptions(const LangOptions &LangOpts,
    124                                    bool Complain,
    125                                    bool AllowCompatibleDifferences) {
    126     return false;
    127   }
    128 
    129   /// \brief Receives the target options.
    130   ///
    131   /// \returns true to indicate the target options are invalid, or false
    132   /// otherwise.
    133   virtual bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
    134                                  bool AllowCompatibleDifferences) {
    135     return false;
    136   }
    137 
    138   /// \brief Receives the diagnostic options.
    139   ///
    140   /// \returns true to indicate the diagnostic options are invalid, or false
    141   /// otherwise.
    142   virtual bool
    143   ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
    144                         bool Complain) {
    145     return false;
    146   }
    147 
    148   /// \brief Receives the file system options.
    149   ///
    150   /// \returns true to indicate the file system options are invalid, or false
    151   /// otherwise.
    152   virtual bool ReadFileSystemOptions(const FileSystemOptions &FSOpts,
    153                                      bool Complain) {
    154     return false;
    155   }
    156 
    157   /// \brief Receives the header search options.
    158   ///
    159   /// \returns true to indicate the header search options are invalid, or false
    160   /// otherwise.
    161   virtual bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
    162                                        StringRef SpecificModuleCachePath,
    163                                        bool Complain) {
    164     return false;
    165   }
    166 
    167   /// \brief Receives the preprocessor options.
    168   ///
    169   /// \param SuggestedPredefines Can be filled in with the set of predefines
    170   /// that are suggested by the preprocessor options. Typically only used when
    171   /// loading a precompiled header.
    172   ///
    173   /// \returns true to indicate the preprocessor options are invalid, or false
    174   /// otherwise.
    175   virtual bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
    176                                        bool Complain,
    177                                        std::string &SuggestedPredefines) {
    178     return false;
    179   }
    180 
    181   /// \brief Receives __COUNTER__ value.
    182   virtual void ReadCounter(const serialization::ModuleFile &M,
    183                            unsigned Value) {}
    184 
    185   /// This is called for each AST file loaded.
    186   virtual void visitModuleFile(StringRef Filename,
    187                                serialization::ModuleKind Kind) {}
    188 
    189   /// \brief Returns true if this \c ASTReaderListener wants to receive the
    190   /// input files of the AST file via \c visitInputFile, false otherwise.
    191   virtual bool needsInputFileVisitation() { return false; }
    192   /// \brief Returns true if this \c ASTReaderListener wants to receive the
    193   /// system input files of the AST file via \c visitInputFile, false otherwise.
    194   virtual bool needsSystemInputFileVisitation() { return false; }
    195   /// \brief if \c needsInputFileVisitation returns true, this is called for
    196   /// each non-system input file of the AST File. If
    197   /// \c needsSystemInputFileVisitation is true, then it is called for all
    198   /// system input files as well.
    199   ///
    200   /// \returns true to continue receiving the next input file, false to stop.
    201   virtual bool visitInputFile(StringRef Filename, bool isSystem,
    202                               bool isOverridden, bool isExplicitModule) {
    203     return true;
    204   }
    205 
    206   /// \brief Returns true if this \c ASTReaderListener wants to receive the
    207   /// imports of the AST file via \c visitImport, false otherwise.
    208   virtual bool needsImportVisitation() const { return false; }
    209   /// \brief If needsImportVisitation returns \c true, this is called for each
    210   /// AST file imported by this AST file.
    211   virtual void visitImport(StringRef Filename) {}
    212 
    213   /// Indicates that a particular module file extension has been read.
    214   virtual void readModuleFileExtension(
    215                  const ModuleFileExtensionMetadata &Metadata) {}
    216 };
    217 
    218 /// \brief Simple wrapper class for chaining listeners.
    219 class ChainedASTReaderListener : public ASTReaderListener {
    220   std::unique_ptr<ASTReaderListener> First;
    221   std::unique_ptr<ASTReaderListener> Second;
    222 
    223 public:
    224   /// Takes ownership of \p First and \p Second.
    225   ChainedASTReaderListener(std::unique_ptr<ASTReaderListener> First,
    226                            std::unique_ptr<ASTReaderListener> Second)
    227       : First(std::move(First)), Second(std::move(Second)) {}
    228 
    229   std::unique_ptr<ASTReaderListener> takeFirst() { return std::move(First); }
    230   std::unique_ptr<ASTReaderListener> takeSecond() { return std::move(Second); }
    231 
    232   bool ReadFullVersionInformation(StringRef FullVersion) override;
    233   void ReadModuleName(StringRef ModuleName) override;
    234   void ReadModuleMapFile(StringRef ModuleMapPath) override;
    235   bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
    236                            bool AllowCompatibleDifferences) override;
    237   bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
    238                          bool AllowCompatibleDifferences) override;
    239   bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
    240                              bool Complain) override;
    241   bool ReadFileSystemOptions(const FileSystemOptions &FSOpts,
    242                              bool Complain) override;
    243 
    244   bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
    245                                StringRef SpecificModuleCachePath,
    246                                bool Complain) override;
    247   bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
    248                                bool Complain,
    249                                std::string &SuggestedPredefines) override;
    250 
    251   void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
    252   bool needsInputFileVisitation() override;
    253   bool needsSystemInputFileVisitation() override;
    254   void visitModuleFile(StringRef Filename,
    255                        serialization::ModuleKind Kind) override;
    256   bool visitInputFile(StringRef Filename, bool isSystem,
    257                       bool isOverridden, bool isExplicitModule) override;
    258   void readModuleFileExtension(
    259          const ModuleFileExtensionMetadata &Metadata) override;
    260 };
    261 
    262 /// \brief ASTReaderListener implementation to validate the information of
    263 /// the PCH file against an initialized Preprocessor.
    264 class PCHValidator : public ASTReaderListener {
    265   Preprocessor &PP;
    266   ASTReader &Reader;
    267 
    268 public:
    269   PCHValidator(Preprocessor &PP, ASTReader &Reader)
    270     : PP(PP), Reader(Reader) {}
    271 
    272   bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
    273                            bool AllowCompatibleDifferences) override;
    274   bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
    275                          bool AllowCompatibleDifferences) override;
    276   bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
    277                              bool Complain) override;
    278   bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, bool Complain,
    279                                std::string &SuggestedPredefines) override;
    280   bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
    281                                StringRef SpecificModuleCachePath,
    282                                bool Complain) override;
    283   void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
    284 
    285 private:
    286   void Error(const char *Msg);
    287 };
    288 
    289 /// \brief ASTReaderListenter implementation to set SuggestedPredefines of
    290 /// ASTReader which is required to use a pch file. This is the replacement
    291 /// of PCHValidator or SimplePCHValidator when using a pch file without
    292 /// validating it.
    293 class SimpleASTReaderListener : public ASTReaderListener {
    294   Preprocessor &PP;
    295 
    296 public:
    297   SimpleASTReaderListener(Preprocessor &PP)
    298     : PP(PP) {}
    299 
    300   bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, bool Complain,
    301                                std::string &SuggestedPredefines) override;
    302 };
    303 
    304 namespace serialization {
    305 
    306 class ReadMethodPoolVisitor;
    307 
    308 namespace reader {
    309   class ASTIdentifierLookupTrait;
    310   /// \brief The on-disk hash table(s) used for DeclContext name lookup.
    311   struct DeclContextLookupTable;
    312 }
    313 
    314 } // end namespace serialization
    315 
    316 /// \brief Reads an AST files chain containing the contents of a translation
    317 /// unit.
    318 ///
    319 /// The ASTReader class reads bitstreams (produced by the ASTWriter
    320 /// class) containing the serialized representation of a given
    321 /// abstract syntax tree and its supporting data structures. An
    322 /// instance of the ASTReader can be attached to an ASTContext object,
    323 /// which will provide access to the contents of the AST files.
    324 ///
    325 /// The AST reader provides lazy de-serialization of declarations, as
    326 /// required when traversing the AST. Only those AST nodes that are
    327 /// actually required will be de-serialized.
    328 class ASTReader
    329   : public ExternalPreprocessorSource,
    330     public ExternalPreprocessingRecordSource,
    331     public ExternalHeaderFileInfoSource,
    332     public ExternalSemaSource,
    333     public IdentifierInfoLookup,
    334     public ExternalSLocEntrySource
    335 {
    336 public:
    337   typedef SmallVector<uint64_t, 64> RecordData;
    338   typedef SmallVectorImpl<uint64_t> RecordDataImpl;
    339 
    340   /// \brief The result of reading the control block of an AST file, which
    341   /// can fail for various reasons.
    342   enum ASTReadResult {
    343     /// \brief The control block was read successfully. Aside from failures,
    344     /// the AST file is safe to read into the current context.
    345     Success,
    346     /// \brief The AST file itself appears corrupted.
    347     Failure,
    348     /// \brief The AST file was missing.
    349     Missing,
    350     /// \brief The AST file is out-of-date relative to its input files,
    351     /// and needs to be regenerated.
    352     OutOfDate,
    353     /// \brief The AST file was written by a different version of Clang.
    354     VersionMismatch,
    355     /// \brief The AST file was writtten with a different language/target
    356     /// configuration.
    357     ConfigurationMismatch,
    358     /// \brief The AST file has errors.
    359     HadErrors
    360   };
    361 
    362   /// \brief Types of AST files.
    363   friend class PCHValidator;
    364   friend class ASTDeclReader;
    365   friend class ASTStmtReader;
    366   friend class ASTIdentifierIterator;
    367   friend class serialization::reader::ASTIdentifierLookupTrait;
    368   friend class TypeLocReader;
    369   friend class ASTRecordReader;
    370   friend class ASTWriter;
    371   friend class ASTUnit; // ASTUnit needs to remap source locations.
    372   friend class serialization::ReadMethodPoolVisitor;
    373 
    374   typedef serialization::ModuleFile ModuleFile;
    375   typedef serialization::ModuleKind ModuleKind;
    376   typedef serialization::ModuleManager ModuleManager;
    377 
    378   typedef ModuleManager::ModuleIterator ModuleIterator;
    379   typedef ModuleManager::ModuleConstIterator ModuleConstIterator;
    380   typedef ModuleManager::ModuleReverseIterator ModuleReverseIterator;
    381 
    382 private:
    383   /// \brief The receiver of some callbacks invoked by ASTReader.
    384   std::unique_ptr<ASTReaderListener> Listener;
    385 
    386   /// \brief The receiver of deserialization events.
    387   ASTDeserializationListener *DeserializationListener = nullptr;
    388   bool OwnsDeserializationListener = false;
    389 
    390   SourceManager &SourceMgr;
    391   FileManager &FileMgr;
    392   const PCHContainerReader &PCHContainerRdr;
    393   DiagnosticsEngine &Diags;
    394 
    395   /// \brief The semantic analysis object that will be processing the
    396   /// AST files and the translation unit that uses it.
    397   Sema *SemaObj = nullptr;
    398 
    399   /// \brief The preprocessor that will be loading the source file.
    400   Preprocessor &PP;
    401 
    402   /// \brief The AST context into which we'll read the AST files.
    403   ASTContext *ContextObj = nullptr;
    404 
    405   /// \brief The AST consumer.
    406   ASTConsumer *Consumer = nullptr;
    407 
    408   /// \brief The module manager which manages modules and their dependencies
    409   ModuleManager ModuleMgr;
    410 
    411   /// The cache that manages memory buffers for PCM files.
    412   MemoryBufferCache &PCMCache;
    413 
    414   /// \brief A dummy identifier resolver used to merge TU-scope declarations in
    415   /// C, for the cases where we don't have a Sema object to provide a real
    416   /// identifier resolver.
    417   IdentifierResolver DummyIdResolver;
    418 
    419   /// A mapping from extension block names to module file extensions.
    420   llvm::StringMap<std::shared_ptr<ModuleFileExtension>> ModuleFileExtensions;
    421 
    422   /// \brief A timer used to track the time spent deserializing.
    423   std::unique_ptr<llvm::Timer> ReadTimer;
    424 
    425   /// \brief The location where the module file will be considered as
    426   /// imported from. For non-module AST types it should be invalid.
    427   SourceLocation CurrentImportLoc;
    428 
    429   /// \brief The global module index, if loaded.
    430   std::unique_ptr<GlobalModuleIndex> GlobalIndex;
    431 
    432   /// \brief A map of global bit offsets to the module that stores entities
    433   /// at those bit offsets.
    434   ContinuousRangeMap<uint64_t, ModuleFile*, 4> GlobalBitOffsetsMap;
    435 
    436   /// \brief A map of negated SLocEntryIDs to the modules containing them.
    437   ContinuousRangeMap<unsigned, ModuleFile*, 64> GlobalSLocEntryMap;
    438 
    439   typedef ContinuousRangeMap<unsigned, ModuleFile*, 64> GlobalSLocOffsetMapType;
    440 
    441   /// \brief A map of reversed (SourceManager::MaxLoadedOffset - SLocOffset)
    442   /// SourceLocation offsets to the modules containing them.
    443   GlobalSLocOffsetMapType GlobalSLocOffsetMap;
    444 
    445   /// \brief Types that have already been loaded from the chain.
    446   ///
    447   /// When the pointer at index I is non-NULL, the type with
    448   /// ID = (I + 1) << FastQual::Width has already been loaded
    449   std::vector<QualType> TypesLoaded;
    450 
    451   typedef ContinuousRangeMap<serialization::TypeID, ModuleFile *, 4>
    452     GlobalTypeMapType;
    453 
    454   /// \brief Mapping from global type IDs to the module in which the
    455   /// type resides along with the offset that should be added to the
    456   /// global type ID to produce a local ID.
    457   GlobalTypeMapType GlobalTypeMap;
    458 
    459   /// \brief Declarations that have already been loaded from the chain.
    460   ///
    461   /// When the pointer at index I is non-NULL, the declaration with ID
    462   /// = I + 1 has already been loaded.
    463   std::vector<Decl *> DeclsLoaded;
    464 
    465   typedef ContinuousRangeMap<serialization::DeclID, ModuleFile *, 4>
    466     GlobalDeclMapType;
    467 
    468   /// \brief Mapping from global declaration IDs to the module in which the
    469   /// declaration resides.
    470   GlobalDeclMapType GlobalDeclMap;
    471 
    472   typedef std::pair<ModuleFile *, uint64_t> FileOffset;
    473   typedef SmallVector<FileOffset, 2> FileOffsetsTy;
    474   typedef llvm::DenseMap<serialization::DeclID, FileOffsetsTy>
    475       DeclUpdateOffsetsMap;
    476 
    477   /// \brief Declarations that have modifications residing in a later file
    478   /// in the chain.
    479   DeclUpdateOffsetsMap DeclUpdateOffsets;
    480 
    481   struct PendingUpdateRecord {
    482     Decl *D;
    483     serialization::GlobalDeclID ID;
    484     // Whether the declaration was just deserialized.
    485     bool JustLoaded;
    486     PendingUpdateRecord(serialization::GlobalDeclID ID, Decl *D,
    487                         bool JustLoaded)
    488         : D(D), ID(ID), JustLoaded(JustLoaded) {}
    489   };
    490   /// \brief Declaration updates for already-loaded declarations that we need
    491   /// to apply once we finish processing an import.
    492   llvm::SmallVector<PendingUpdateRecord, 16> PendingUpdateRecords;
    493 
    494   enum class PendingFakeDefinitionKind { NotFake, Fake, FakeLoaded };
    495 
    496   /// \brief The DefinitionData pointers that we faked up for class definitions
    497   /// that we needed but hadn't loaded yet.
    498   llvm::DenseMap<void *, PendingFakeDefinitionKind> PendingFakeDefinitionData;
    499 
    500   /// \brief Exception specification updates that have been loaded but not yet
    501   /// propagated across the relevant redeclaration chain. The map key is the
    502   /// canonical declaration (used only for deduplication) and the value is a
    503   /// declaration that has an exception specification.
    504   llvm::SmallMapVector<Decl *, FunctionDecl *, 4> PendingExceptionSpecUpdates;
    505 
    506   /// \brief Declarations that have been imported and have typedef names for
    507   /// linkage purposes.
    508   llvm::DenseMap<std::pair<DeclContext*, IdentifierInfo*>, NamedDecl*>
    509       ImportedTypedefNamesForLinkage;
    510 
    511   /// \brief Mergeable declaration contexts that have anonymous declarations
    512   /// within them, and those anonymous declarations.
    513   llvm::DenseMap<DeclContext*, llvm::SmallVector<NamedDecl*, 2>>
    514     AnonymousDeclarationsForMerging;
    515 
    516   struct FileDeclsInfo {
    517     ModuleFile *Mod;
    518     ArrayRef<serialization::LocalDeclID> Decls;
    519 
    520     FileDeclsInfo() : Mod(nullptr) {}
    521     FileDeclsInfo(ModuleFile *Mod, ArrayRef<serialization::LocalDeclID> Decls)
    522       : Mod(Mod), Decls(Decls) {}
    523   };
    524 
    525   /// \brief Map from a FileID to the file-level declarations that it contains.
    526   llvm::DenseMap<FileID, FileDeclsInfo> FileDeclIDs;
    527 
    528   /// \brief An array of lexical contents of a declaration context, as a sequence of
    529   /// Decl::Kind, DeclID pairs.
    530   typedef ArrayRef<llvm::support::unaligned_uint32_t> LexicalContents;
    531 
    532   /// \brief Map from a DeclContext to its lexical contents.
    533   llvm::DenseMap<const DeclContext*, std::pair<ModuleFile*, LexicalContents>>
    534       LexicalDecls;
    535 
    536   /// \brief Map from the TU to its lexical contents from each module file.
    537   std::vector<std::pair<ModuleFile*, LexicalContents>> TULexicalDecls;
    538 
    539   /// \brief Map from a DeclContext to its lookup tables.
    540   llvm::DenseMap<const DeclContext *,
    541                  serialization::reader::DeclContextLookupTable> Lookups;
    542 
    543   // Updates for visible decls can occur for other contexts than just the
    544   // TU, and when we read those update records, the actual context may not
    545   // be available yet, so have this pending map using the ID as a key. It
    546   // will be realized when the context is actually loaded.
    547   struct PendingVisibleUpdate {
    548     ModuleFile *Mod;
    549     const unsigned char *Data;
    550   };
    551   typedef SmallVector<PendingVisibleUpdate, 1> DeclContextVisibleUpdates;
    552 
    553   /// \brief Updates to the visible declarations of declaration contexts that
    554   /// haven't been loaded yet.
    555   llvm::DenseMap<serialization::DeclID, DeclContextVisibleUpdates>
    556       PendingVisibleUpdates;
    557 
    558   /// \brief The set of C++ or Objective-C classes that have forward
    559   /// declarations that have not yet been linked to their definitions.
    560   llvm::SmallPtrSet<Decl *, 4> PendingDefinitions;
    561 
    562   typedef llvm::MapVector<Decl *, uint64_t,
    563                           llvm::SmallDenseMap<Decl *, unsigned, 4>,
    564                           SmallVector<std::pair<Decl *, uint64_t>, 4> >
    565     PendingBodiesMap;
    566 
    567   /// \brief Functions or methods that have bodies that will be attached.
    568   PendingBodiesMap PendingBodies;
    569 
    570   /// \brief Definitions for which we have added merged definitions but not yet
    571   /// performed deduplication.
    572   llvm::SetVector<NamedDecl*> PendingMergedDefinitionsToDeduplicate;
    573 
    574   /// \brief Read the record that describes the lexical contents of a DC.
    575   bool ReadLexicalDeclContextStorage(ModuleFile &M,
    576                                      llvm::BitstreamCursor &Cursor,
    577                                      uint64_t Offset, DeclContext *DC);
    578   /// \brief Read the record that describes the visible contents of a DC.
    579   bool ReadVisibleDeclContextStorage(ModuleFile &M,
    580                                      llvm::BitstreamCursor &Cursor,
    581                                      uint64_t Offset, serialization::DeclID ID);
    582 
    583   /// \brief A vector containing identifiers that have already been
    584   /// loaded.
    585   ///
    586   /// If the pointer at index I is non-NULL, then it refers to the
    587   /// IdentifierInfo for the identifier with ID=I+1 that has already
    588   /// been loaded.
    589   std::vector<IdentifierInfo *> IdentifiersLoaded;
    590 
    591   typedef ContinuousRangeMap<serialization::IdentID, ModuleFile *, 4>
    592     GlobalIdentifierMapType;
    593 
    594   /// \brief Mapping from global identifier IDs to the module in which the
    595   /// identifier resides along with the offset that should be added to the
    596   /// global identifier ID to produce a local ID.
    597   GlobalIdentifierMapType GlobalIdentifierMap;
    598 
    599   /// \brief A vector containing macros that have already been
    600   /// loaded.
    601   ///
    602   /// If the pointer at index I is non-NULL, then it refers to the
    603   /// MacroInfo for the identifier with ID=I+1 that has already
    604   /// been loaded.
    605   std::vector<MacroInfo *> MacrosLoaded;
    606 
    607   typedef std::pair<IdentifierInfo *, serialization::SubmoduleID>
    608       LoadedMacroInfo;
    609 
    610   /// \brief A set of #undef directives that we have loaded; used to
    611   /// deduplicate the same #undef information coming from multiple module
    612   /// files.
    613   llvm::DenseSet<LoadedMacroInfo> LoadedUndefs;
    614 
    615   typedef ContinuousRangeMap<serialization::MacroID, ModuleFile *, 4>
    616     GlobalMacroMapType;
    617 
    618   /// \brief Mapping from global macro IDs to the module in which the
    619   /// macro resides along with the offset that should be added to the
    620   /// global macro ID to produce a local ID.
    621   GlobalMacroMapType GlobalMacroMap;
    622 
    623   /// \brief A vector containing submodules that have already been loaded.
    624   ///
    625   /// This vector is indexed by the Submodule ID (-1). NULL submodule entries
    626   /// indicate that the particular submodule ID has not yet been loaded.
    627   SmallVector<Module *, 2> SubmodulesLoaded;
    628 
    629   typedef ContinuousRangeMap<serialization::SubmoduleID, ModuleFile *, 4>
    630     GlobalSubmoduleMapType;
    631 
    632   /// \brief Mapping from global submodule IDs to the module file in which the
    633   /// submodule resides along with the offset that should be added to the
    634   /// global submodule ID to produce a local ID.
    635   GlobalSubmoduleMapType GlobalSubmoduleMap;
    636 
    637   /// \brief A set of hidden declarations.
    638   typedef SmallVector<Decl*, 2> HiddenNames;
    639   typedef llvm::DenseMap<Module *, HiddenNames> HiddenNamesMapType;
    640 
    641   /// \brief A mapping from each of the hidden submodules to the deserialized
    642   /// declarations in that submodule that could be made visible.
    643   HiddenNamesMapType HiddenNamesMap;
    644 
    645 
    646   /// \brief A module import, export, or conflict that hasn't yet been resolved.
    647   struct UnresolvedModuleRef {
    648     /// \brief The file in which this module resides.
    649     ModuleFile *File;
    650 
    651     /// \brief The module that is importing or exporting.
    652     Module *Mod;
    653 
    654     /// \brief The kind of module reference.
    655     enum { Import, Export, Conflict } Kind;
    656 
    657     /// \brief The local ID of the module that is being exported.
    658     unsigned ID;
    659 
    660     /// \brief Whether this is a wildcard export.
    661     unsigned IsWildcard : 1;
    662 
    663     /// \brief String data.
    664     StringRef String;
    665   };
    666 
    667   /// \brief The set of module imports and exports that still need to be
    668   /// resolved.
    669   SmallVector<UnresolvedModuleRef, 2> UnresolvedModuleRefs;
    670 
    671   /// \brief A vector containing selectors that have already been loaded.
    672   ///
    673   /// This vector is indexed by the Selector ID (-1). NULL selector
    674   /// entries indicate that the particular selector ID has not yet
    675   /// been loaded.
    676   SmallVector<Selector, 16> SelectorsLoaded;
    677 
    678   typedef ContinuousRangeMap<serialization::SelectorID, ModuleFile *, 4>
    679     GlobalSelectorMapType;
    680 
    681   /// \brief Mapping from global selector IDs to the module in which the
    682 
    683   /// global selector ID to produce a local ID.
    684   GlobalSelectorMapType GlobalSelectorMap;
    685 
    686   /// \brief The generation number of the last time we loaded data from the
    687   /// global method pool for this selector.
    688   llvm::DenseMap<Selector, unsigned> SelectorGeneration;
    689 
    690   /// Whether a selector is out of date. We mark a selector as out of date
    691   /// if we load another module after the method pool entry was pulled in.
    692   llvm::DenseMap<Selector, bool> SelectorOutOfDate;
    693 
    694   struct PendingMacroInfo {
    695     ModuleFile *M;
    696     uint64_t MacroDirectivesOffset;
    697 
    698     PendingMacroInfo(ModuleFile *M, uint64_t MacroDirectivesOffset)
    699         : M(M), MacroDirectivesOffset(MacroDirectivesOffset) {}
    700   };
    701 
    702   typedef llvm::MapVector<IdentifierInfo *, SmallVector<PendingMacroInfo, 2> >
    703     PendingMacroIDsMap;
    704 
    705   /// \brief Mapping from identifiers that have a macro history to the global
    706   /// IDs have not yet been deserialized to the global IDs of those macros.
    707   PendingMacroIDsMap PendingMacroIDs;
    708 
    709   typedef ContinuousRangeMap<unsigned, ModuleFile *, 4>
    710     GlobalPreprocessedEntityMapType;
    711 
    712   /// \brief Mapping from global preprocessing entity IDs to the module in
    713   /// which the preprocessed entity resides along with the offset that should be
    714   /// added to the global preprocessing entity ID to produce a local ID.
    715   GlobalPreprocessedEntityMapType GlobalPreprocessedEntityMap;
    716 
    717   /// \name CodeGen-relevant special data
    718   /// \brief Fields containing data that is relevant to CodeGen.
    719   //@{
    720 
    721   /// \brief The IDs of all declarations that fulfill the criteria of
    722   /// "interesting" decls.
    723   ///
    724   /// This contains the data loaded from all EAGERLY_DESERIALIZED_DECLS blocks
    725   /// in the chain. The referenced declarations are deserialized and passed to
    726   /// the consumer eagerly.
    727   SmallVector<uint64_t, 16> EagerlyDeserializedDecls;
    728 
    729   /// \brief The IDs of all tentative definitions stored in the chain.
    730   ///
    731   /// Sema keeps track of all tentative definitions in a TU because it has to
    732   /// complete them and pass them on to CodeGen. Thus, tentative definitions in
    733   /// the PCH chain must be eagerly deserialized.
    734   SmallVector<uint64_t, 16> TentativeDefinitions;
    735 
    736   /// \brief The IDs of all CXXRecordDecls stored in the chain whose VTables are
    737   /// used.
    738   ///
    739   /// CodeGen has to emit VTables for these records, so they have to be eagerly
    740   /// deserialized.
    741   SmallVector<uint64_t, 64> VTableUses;
    742 
    743   /// \brief A snapshot of the pending instantiations in the chain.
    744   ///
    745   /// This record tracks the instantiations that Sema has to perform at the
    746   /// end of the TU. It consists of a pair of values for every pending
    747   /// instantiation where the first value is the ID of the decl and the second
    748   /// is the instantiation location.
    749   SmallVector<uint64_t, 64> PendingInstantiations;
    750 
    751   //@}
    752 
    753   /// \name DiagnosticsEngine-relevant special data
    754   /// \brief Fields containing data that is used for generating diagnostics
    755   //@{
    756 
    757   /// \brief A snapshot of Sema's unused file-scoped variable tracking, for
    758   /// generating warnings.
    759   SmallVector<uint64_t, 16> UnusedFileScopedDecls;
    760 
    761   /// \brief A list of all the delegating constructors we've seen, to diagnose
    762   /// cycles.
    763   SmallVector<uint64_t, 4> DelegatingCtorDecls;
    764 
    765   /// \brief Method selectors used in a @selector expression. Used for
    766   /// implementation of -Wselector.
    767   SmallVector<uint64_t, 64> ReferencedSelectorsData;
    768 
    769   /// \brief A snapshot of Sema's weak undeclared identifier tracking, for
    770   /// generating warnings.
    771   SmallVector<uint64_t, 64> WeakUndeclaredIdentifiers;
    772 
    773   /// \brief The IDs of type aliases for ext_vectors that exist in the chain.
    774   ///
    775   /// Used by Sema for finding sugared names for ext_vectors in diagnostics.
    776   SmallVector<uint64_t, 4> ExtVectorDecls;
    777 
    778   //@}
    779 
    780   /// \name Sema-relevant special data
    781   /// \brief Fields containing data that is used for semantic analysis
    782   //@{
    783 
    784   /// \brief The IDs of all potentially unused typedef names in the chain.
    785   ///
    786   /// Sema tracks these to emit warnings.
    787   SmallVector<uint64_t, 16> UnusedLocalTypedefNameCandidates;
    788 
    789   /// \brief Our current depth in #pragma cuda force_host_device begin/end
    790   /// macros.
    791   unsigned ForceCUDAHostDeviceDepth = 0;
    792 
    793   /// \brief The IDs of the declarations Sema stores directly.
    794   ///
    795   /// Sema tracks a few important decls, such as namespace std, directly.
    796   SmallVector<uint64_t, 4> SemaDeclRefs;
    797 
    798   /// \brief The IDs of the types ASTContext stores directly.
    799   ///
    800   /// The AST context tracks a few important types, such as va_list, directly.
    801   SmallVector<uint64_t, 16> SpecialTypes;
    802 
    803   /// \brief The IDs of CUDA-specific declarations ASTContext stores directly.
    804   ///
    805   /// The AST context tracks a few important decls, currently cudaConfigureCall,
    806   /// directly.
    807   SmallVector<uint64_t, 2> CUDASpecialDeclRefs;
    808 
    809   /// \brief The floating point pragma option settings.
    810   SmallVector<uint64_t, 1> FPPragmaOptions;
    811 
    812   /// \brief The pragma clang optimize location (if the pragma state is "off").
    813   SourceLocation OptimizeOffPragmaLocation;
    814 
    815   /// \brief The PragmaMSStructKind pragma ms_struct state if set, or -1.
    816   int PragmaMSStructState = -1;
    817 
    818   /// \brief The PragmaMSPointersToMembersKind pragma pointers_to_members state.
    819   int PragmaMSPointersToMembersState = -1;
    820   SourceLocation PointersToMembersPragmaLocation;
    821 
    822   /// \brief The pragma pack state.
    823   Optional<unsigned> PragmaPackCurrentValue;
    824   SourceLocation PragmaPackCurrentLocation;
    825   struct PragmaPackStackEntry {
    826     unsigned Value;
    827     SourceLocation Location;
    828     SourceLocation PushLocation;
    829     StringRef SlotLabel;
    830   };
    831   llvm::SmallVector<PragmaPackStackEntry, 2> PragmaPackStack;
    832   llvm::SmallVector<std::string, 2> PragmaPackStrings;
    833 
    834   /// \brief The OpenCL extension settings.
    835   OpenCLOptions OpenCLExtensions;
    836 
    837   /// \brief Extensions required by an OpenCL type.
    838   llvm::DenseMap<const Type *, std::set<std::string>> OpenCLTypeExtMap;
    839 
    840   /// \brief Extensions required by an OpenCL declaration.
    841   llvm::DenseMap<const Decl *, std::set<std::string>> OpenCLDeclExtMap;
    842 
    843   /// \brief A list of the namespaces we've seen.
    844   SmallVector<uint64_t, 4> KnownNamespaces;
    845 
    846   /// \brief A list of undefined decls with internal linkage followed by the
    847   /// SourceLocation of a matching ODR-use.
    848   SmallVector<uint64_t, 8> UndefinedButUsed;
    849 
    850   /// \brief Delete expressions to analyze at the end of translation unit.
    851   SmallVector<uint64_t, 8> DelayedDeleteExprs;
    852 
    853   // \brief A list of late parsed template function data.
    854   SmallVector<uint64_t, 1> LateParsedTemplates;
    855 
    856 public:
    857   struct ImportedSubmodule {
    858     serialization::SubmoduleID ID;
    859     SourceLocation ImportLoc;
    860 
    861     ImportedSubmodule(serialization::SubmoduleID ID, SourceLocation ImportLoc)
    862       : ID(ID), ImportLoc(ImportLoc) {}
    863   };
    864 
    865 private:
    866   /// \brief A list of modules that were imported by precompiled headers or
    867   /// any other non-module AST file.
    868   SmallVector<ImportedSubmodule, 2> ImportedModules;
    869   //@}
    870 
    871   /// \brief The system include root to be used when loading the
    872   /// precompiled header.
    873   std::string isysroot;
    874 
    875   /// \brief Whether to disable the normal validation performed on precompiled
    876   /// headers when they are loaded.
    877   bool DisableValidation;
    878 
    879   /// \brief Whether to accept an AST file with compiler errors.
    880   bool AllowASTWithCompilerErrors;
    881 
    882   /// \brief Whether to accept an AST file that has a different configuration
    883   /// from the current compiler instance.
    884   bool AllowConfigurationMismatch;
    885 
    886   /// \brief Whether validate system input files.
    887   bool ValidateSystemInputs;
    888 
    889   /// \brief Whether we are allowed to use the global module index.
    890   bool UseGlobalIndex;
    891 
    892   /// \brief Whether we have tried loading the global module index yet.
    893   bool TriedLoadingGlobalIndex = false;
    894 
    895   ///\brief Whether we are currently processing update records.
    896   bool ProcessingUpdateRecords = false;
    897 
    898   typedef llvm::DenseMap<unsigned, SwitchCase *> SwitchCaseMapTy;
    899   /// \brief Mapping from switch-case IDs in the chain to switch-case statements
    900   ///
    901   /// Statements usually don't have IDs, but switch cases need them, so that the
    902   /// switch statement can refer to them.
    903   SwitchCaseMapTy SwitchCaseStmts;
    904 
    905   SwitchCaseMapTy *CurrSwitchCaseStmts;
    906 
    907   /// \brief The number of source location entries de-serialized from
    908   /// the PCH file.
    909   unsigned NumSLocEntriesRead = 0;
    910 
    911   /// \brief The number of source location entries in the chain.
    912   unsigned TotalNumSLocEntries = 0;
    913 
    914   /// \brief The number of statements (and expressions) de-serialized
    915   /// from the chain.
    916   unsigned NumStatementsRead = 0;
    917 
    918   /// \brief The total number of statements (and expressions) stored
    919   /// in the chain.
    920   unsigned TotalNumStatements = 0;
    921 
    922   /// \brief The number of macros de-serialized from the chain.
    923   unsigned NumMacrosRead = 0;
    924 
    925   /// \brief The total number of macros stored in the chain.
    926   unsigned TotalNumMacros = 0;
    927 
    928   /// \brief The number of lookups into identifier tables.
    929   unsigned NumIdentifierLookups = 0;
    930 
    931   /// \brief The number of lookups into identifier tables that succeed.
    932   unsigned NumIdentifierLookupHits = 0;
    933 
    934   /// \brief The number of selectors that have been read.
    935   unsigned NumSelectorsRead = 0;
    936 
    937   /// \brief The number of method pool entries that have been read.
    938   unsigned NumMethodPoolEntriesRead = 0;
    939 
    940   /// \brief The number of times we have looked up a selector in the method
    941   /// pool.
    942   unsigned NumMethodPoolLookups = 0;
    943 
    944   /// \brief The number of times we have looked up a selector in the method
    945   /// pool and found something.
    946   unsigned NumMethodPoolHits = 0;
    947 
    948   /// \brief The number of times we have looked up a selector in the method
    949   /// pool within a specific module.
    950   unsigned NumMethodPoolTableLookups = 0;
    951 
    952   /// \brief The number of times we have looked up a selector in the method
    953   /// pool within a specific module and found something.
    954   unsigned NumMethodPoolTableHits = 0;
    955 
    956   /// \brief The total number of method pool entries in the selector table.
    957   unsigned TotalNumMethodPoolEntries = 0;
    958 
    959   /// Number of lexical decl contexts read/total.
    960   unsigned NumLexicalDeclContextsRead = 0, TotalLexicalDeclContexts = 0;
    961 
    962   /// Number of visible decl contexts read/total.
    963   unsigned NumVisibleDeclContextsRead = 0, TotalVisibleDeclContexts = 0;
    964 
    965   /// Total size of modules, in bits, currently loaded
    966   uint64_t TotalModulesSizeInBits = 0;
    967 
    968   /// \brief Number of Decl/types that are currently deserializing.
    969   unsigned NumCurrentElementsDeserializing = 0;
    970 
    971   /// \brief Set true while we are in the process of passing deserialized
    972   /// "interesting" decls to consumer inside FinishedDeserializing().
    973   /// This is used as a guard to avoid recursively repeating the process of
    974   /// passing decls to consumer.
    975   bool PassingDeclsToConsumer = false;
    976 
    977   /// \brief The set of identifiers that were read while the AST reader was
    978   /// (recursively) loading declarations.
    979   ///
    980   /// The declarations on the identifier chain for these identifiers will be
    981   /// loaded once the recursive loading has completed.
    982   llvm::MapVector<IdentifierInfo *, SmallVector<uint32_t, 4> >
    983     PendingIdentifierInfos;
    984 
    985   /// \brief The set of lookup results that we have faked in order to support
    986   /// merging of partially deserialized decls but that we have not yet removed.
    987   llvm::SmallMapVector<IdentifierInfo *, SmallVector<NamedDecl*, 2>, 16>
    988     PendingFakeLookupResults;
    989 
    990   /// \brief The generation number of each identifier, which keeps track of
    991   /// the last time we loaded information about this identifier.
    992   llvm::DenseMap<IdentifierInfo *, unsigned> IdentifierGeneration;
    993 
    994   class InterestingDecl {
    995     Decl *D;
    996     bool DeclHasPendingBody;
    997 
    998   public:
    999     InterestingDecl(Decl *D, bool HasBody)
   1000         : D(D), DeclHasPendingBody(HasBody) {}
   1001     Decl *getDecl() { return D; }
   1002     /// Whether the declaration has a pending body.
   1003     bool hasPendingBody() { return DeclHasPendingBody; }
   1004   };
   1005 
   1006   /// \brief Contains declarations and definitions that could be
   1007   /// "interesting" to the ASTConsumer, when we get that AST consumer.
   1008   ///
   1009   /// "Interesting" declarations are those that have data that may
   1010   /// need to be emitted, such as inline function definitions or
   1011   /// Objective-C protocols.
   1012   std::deque<InterestingDecl> PotentiallyInterestingDecls;
   1013 
   1014   /// \brief The list of redeclaration chains that still need to be
   1015   /// reconstructed, and the local offset to the corresponding list
   1016   /// of redeclarations.
   1017   SmallVector<std::pair<Decl *, uint64_t>, 16> PendingDeclChains;
   1018 
   1019   /// \brief The list of canonical declarations whose redeclaration chains
   1020   /// need to be marked as incomplete once we're done deserializing things.
   1021   SmallVector<Decl *, 16> PendingIncompleteDeclChains;
   1022 
   1023   /// \brief The Decl IDs for the Sema/Lexical DeclContext of a Decl that has
   1024   /// been loaded but its DeclContext was not set yet.
   1025   struct PendingDeclContextInfo {
   1026     Decl *D;
   1027     serialization::GlobalDeclID SemaDC;
   1028     serialization::GlobalDeclID LexicalDC;
   1029   };
   1030 
   1031   /// \brief The set of Decls that have been loaded but their DeclContexts are
   1032   /// not set yet.
   1033   ///
   1034   /// The DeclContexts for these Decls will be set once recursive loading has
   1035   /// been completed.
   1036   std::deque<PendingDeclContextInfo> PendingDeclContextInfos;
   1037 
   1038   /// \brief The set of NamedDecls that have been loaded, but are members of a
   1039   /// context that has been merged into another context where the corresponding
   1040   /// declaration is either missing or has not yet been loaded.
   1041   ///
   1042   /// We will check whether the corresponding declaration is in fact missing
   1043   /// once recursing loading has been completed.
   1044   llvm::SmallVector<NamedDecl *, 16> PendingOdrMergeChecks;
   1045 
   1046   using DataPointers =
   1047       std::pair<CXXRecordDecl *, struct CXXRecordDecl::DefinitionData *>;
   1048 
   1049   /// \brief Record definitions in which we found an ODR violation.
   1050   llvm::SmallDenseMap<CXXRecordDecl *, llvm::SmallVector<DataPointers, 2>, 2>
   1051       PendingOdrMergeFailures;
   1052 
   1053   /// \brief DeclContexts in which we have diagnosed an ODR violation.
   1054   llvm::SmallPtrSet<DeclContext*, 2> DiagnosedOdrMergeFailures;
   1055 
   1056   /// \brief The set of Objective-C categories that have been deserialized
   1057   /// since the last time the declaration chains were linked.
   1058   llvm::SmallPtrSet<ObjCCategoryDecl *, 16> CategoriesDeserialized;
   1059 
   1060   /// \brief The set of Objective-C class definitions that have already been
   1061   /// loaded, for which we will need to check for categories whenever a new
   1062   /// module is loaded.
   1063   SmallVector<ObjCInterfaceDecl *, 16> ObjCClassesLoaded;
   1064 
   1065   typedef llvm::DenseMap<Decl *, SmallVector<serialization::DeclID, 2> >
   1066     KeyDeclsMap;
   1067 
   1068   /// \brief A mapping from canonical declarations to the set of global
   1069   /// declaration IDs for key declaration that have been merged with that
   1070   /// canonical declaration. A key declaration is a formerly-canonical
   1071   /// declaration whose module did not import any other key declaration for that
   1072   /// entity. These are the IDs that we use as keys when finding redecl chains.
   1073   KeyDeclsMap KeyDecls;
   1074 
   1075   /// \brief A mapping from DeclContexts to the semantic DeclContext that we
   1076   /// are treating as the definition of the entity. This is used, for instance,
   1077   /// when merging implicit instantiations of class templates across modules.
   1078   llvm::DenseMap<DeclContext *, DeclContext *> MergedDeclContexts;
   1079 
   1080   /// \brief A mapping from canonical declarations of enums to their canonical
   1081   /// definitions. Only populated when using modules in C++.
   1082   llvm::DenseMap<EnumDecl *, EnumDecl *> EnumDefinitions;
   1083 
   1084   /// \brief When reading a Stmt tree, Stmt operands are placed in this stack.
   1085   SmallVector<Stmt *, 16> StmtStack;
   1086 
   1087   /// \brief What kind of records we are reading.
   1088   enum ReadingKind {
   1089     Read_None, Read_Decl, Read_Type, Read_Stmt
   1090   };
   1091 
   1092   /// \brief What kind of records we are reading.
   1093   ReadingKind ReadingKind = Read_None;
   1094 
   1095   /// \brief RAII object to change the reading kind.
   1096   class ReadingKindTracker {
   1097     ASTReader &Reader;
   1098     enum ReadingKind PrevKind;
   1099 
   1100     ReadingKindTracker(const ReadingKindTracker &) = delete;
   1101     void operator=(const ReadingKindTracker &) = delete;
   1102 
   1103   public:
   1104     ReadingKindTracker(enum ReadingKind newKind, ASTReader &reader)
   1105       : Reader(reader), PrevKind(Reader.ReadingKind) {
   1106       Reader.ReadingKind = newKind;
   1107     }
   1108 
   1109     ~ReadingKindTracker() { Reader.ReadingKind = PrevKind; }
   1110   };
   1111 
   1112   /// \brief RAII object to mark the start of processing updates.
   1113   class ProcessingUpdatesRAIIObj {
   1114     ASTReader &Reader;
   1115     bool PrevState;
   1116 
   1117     ProcessingUpdatesRAIIObj(const ProcessingUpdatesRAIIObj &) = delete;
   1118     void operator=(const ProcessingUpdatesRAIIObj &) = delete;
   1119 
   1120   public:
   1121     ProcessingUpdatesRAIIObj(ASTReader &reader)
   1122       : Reader(reader), PrevState(Reader.ProcessingUpdateRecords) {
   1123       Reader.ProcessingUpdateRecords = true;
   1124     }
   1125 
   1126     ~ProcessingUpdatesRAIIObj() { Reader.ProcessingUpdateRecords = PrevState; }
   1127   };
   1128 
   1129   /// \brief Suggested contents of the predefines buffer, after this
   1130   /// PCH file has been processed.
   1131   ///
   1132   /// In most cases, this string will be empty, because the predefines
   1133   /// buffer computed to build the PCH file will be identical to the
   1134   /// predefines buffer computed from the command line. However, when
   1135   /// there are differences that the PCH reader can work around, this
   1136   /// predefines buffer may contain additional definitions.
   1137   std::string SuggestedPredefines;
   1138 
   1139   llvm::DenseMap<const Decl *, bool> DefinitionSource;
   1140 
   1141   /// \brief Reads a statement from the specified cursor.
   1142   Stmt *ReadStmtFromStream(ModuleFile &F);
   1143 
   1144   struct InputFileInfo {
   1145     std::string Filename;
   1146     off_t StoredSize;
   1147     time_t StoredTime;
   1148     bool Overridden;
   1149     bool Transient;
   1150     bool TopLevelModuleMap;
   1151   };
   1152 
   1153   /// \brief Reads the stored information about an input file.
   1154   InputFileInfo readInputFileInfo(ModuleFile &F, unsigned ID);
   1155 
   1156   /// \brief Retrieve the file entry and 'overridden' bit for an input
   1157   /// file in the given module file.
   1158   serialization::InputFile getInputFile(ModuleFile &F, unsigned ID,
   1159                                         bool Complain = true);
   1160 
   1161 public:
   1162   void ResolveImportedPath(ModuleFile &M, std::string &Filename);
   1163   static void ResolveImportedPath(std::string &Filename, StringRef Prefix);
   1164 
   1165   /// \brief Returns the first key declaration for the given declaration. This
   1166   /// is one that is formerly-canonical (or still canonical) and whose module
   1167   /// did not import any other key declaration of the entity.
   1168   Decl *getKeyDeclaration(Decl *D) {
   1169     D = D->getCanonicalDecl();
   1170     if (D->isFromASTFile())
   1171       return D;
   1172 
   1173     auto I = KeyDecls.find(D);
   1174     if (I == KeyDecls.end() || I->second.empty())
   1175       return D;
   1176     return GetExistingDecl(I->second[0]);
   1177   }
   1178   const Decl *getKeyDeclaration(const Decl *D) {
   1179     return getKeyDeclaration(const_cast<Decl*>(D));
   1180   }
   1181 
   1182   /// \brief Run a callback on each imported key declaration of \p D.
   1183   template <typename Fn>
   1184   void forEachImportedKeyDecl(const Decl *D, Fn Visit) {
   1185     D = D->getCanonicalDecl();
   1186     if (D->isFromASTFile())
   1187       Visit(D);
   1188 
   1189     auto It = KeyDecls.find(const_cast<Decl*>(D));
   1190     if (It != KeyDecls.end())
   1191       for (auto ID : It->second)
   1192         Visit(GetExistingDecl(ID));
   1193   }
   1194 
   1195   /// \brief Get the loaded lookup tables for \p Primary, if any.
   1196   const serialization::reader::DeclContextLookupTable *
   1197   getLoadedLookupTables(DeclContext *Primary) const;
   1198 
   1199 private:
   1200   struct ImportedModule {
   1201     ModuleFile *Mod;
   1202     ModuleFile *ImportedBy;
   1203     SourceLocation ImportLoc;
   1204 
   1205     ImportedModule(ModuleFile *Mod,
   1206                    ModuleFile *ImportedBy,
   1207                    SourceLocation ImportLoc)
   1208       : Mod(Mod), ImportedBy(ImportedBy), ImportLoc(ImportLoc) { }
   1209   };
   1210 
   1211   ASTReadResult ReadASTCore(StringRef FileName, ModuleKind Type,
   1212                             SourceLocation ImportLoc, ModuleFile *ImportedBy,
   1213                             SmallVectorImpl<ImportedModule> &Loaded,
   1214                             off_t ExpectedSize, time_t ExpectedModTime,
   1215                             ASTFileSignature ExpectedSignature,
   1216                             unsigned ClientLoadCapabilities);
   1217   ASTReadResult ReadControlBlock(ModuleFile &F,
   1218                                  SmallVectorImpl<ImportedModule> &Loaded,
   1219                                  const ModuleFile *ImportedBy,
   1220                                  unsigned ClientLoadCapabilities);
   1221   static ASTReadResult ReadOptionsBlock(
   1222       llvm::BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
   1223       bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
   1224       std::string &SuggestedPredefines);
   1225 
   1226   /// Read the unhashed control block.
   1227   ///
   1228   /// This has no effect on \c F.Stream, instead creating a fresh cursor from
   1229   /// \c F.Data and reading ahead.
   1230   ASTReadResult readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
   1231                                          unsigned ClientLoadCapabilities);
   1232 
   1233   static ASTReadResult
   1234   readUnhashedControlBlockImpl(ModuleFile *F, llvm::StringRef StreamData,
   1235                                unsigned ClientLoadCapabilities,
   1236                                bool AllowCompatibleConfigurationMismatch,
   1237                                ASTReaderListener *Listener,
   1238                                bool ValidateDiagnosticOptions);
   1239 
   1240   ASTReadResult ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities);
   1241   ASTReadResult ReadExtensionBlock(ModuleFile &F);
   1242   void ReadModuleOffsetMap(ModuleFile &F) const;
   1243   bool ParseLineTable(ModuleFile &F, const RecordData &Record);
   1244   bool ReadSourceManagerBlock(ModuleFile &F);
   1245   llvm::BitstreamCursor &SLocCursorForID(int ID);
   1246   SourceLocation getImportLocation(ModuleFile *F);
   1247   ASTReadResult ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
   1248                                        const ModuleFile *ImportedBy,
   1249                                        unsigned ClientLoadCapabilities);
   1250   ASTReadResult ReadSubmoduleBlock(ModuleFile &F,
   1251                                    unsigned ClientLoadCapabilities);
   1252   static bool ParseLanguageOptions(const RecordData &Record, bool Complain,
   1253                                    ASTReaderListener &Listener,
   1254                                    bool AllowCompatibleDifferences);
   1255   static bool ParseTargetOptions(const RecordData &Record, bool Complain,
   1256                                  ASTReaderListener &Listener,
   1257                                  bool AllowCompatibleDifferences);
   1258   static bool ParseDiagnosticOptions(const RecordData &Record, bool Complain,
   1259                                      ASTReaderListener &Listener);
   1260   static bool ParseFileSystemOptions(const RecordData &Record, bool Complain,
   1261                                      ASTReaderListener &Listener);
   1262   static bool ParseHeaderSearchOptions(const RecordData &Record, bool Complain,
   1263                                        ASTReaderListener &Listener);
   1264   static bool ParsePreprocessorOptions(const RecordData &Record, bool Complain,
   1265                                        ASTReaderListener &Listener,
   1266                                        std::string &SuggestedPredefines);
   1267 
   1268   struct RecordLocation {
   1269     RecordLocation(ModuleFile *M, uint64_t O)
   1270       : F(M), Offset(O) {}
   1271     ModuleFile *F;
   1272     uint64_t Offset;
   1273   };
   1274 
   1275   QualType readTypeRecord(unsigned Index);
   1276   void readExceptionSpec(ModuleFile &ModuleFile,
   1277                          SmallVectorImpl<QualType> &ExceptionStorage,
   1278                          FunctionProtoType::ExceptionSpecInfo &ESI,
   1279                          const RecordData &Record, unsigned &Index);
   1280   RecordLocation TypeCursorForIndex(unsigned Index);
   1281   void LoadedDecl(unsigned Index, Decl *D);
   1282   Decl *ReadDeclRecord(serialization::DeclID ID);
   1283   void markIncompleteDeclChain(Decl *Canon);
   1284 
   1285   /// \brief Returns the most recent declaration of a declaration (which must be
   1286   /// of a redeclarable kind) that is either local or has already been loaded
   1287   /// merged into its redecl chain.
   1288   Decl *getMostRecentExistingDecl(Decl *D);
   1289 
   1290   RecordLocation DeclCursorForID(serialization::DeclID ID,
   1291                                  SourceLocation &Location);
   1292   void loadDeclUpdateRecords(PendingUpdateRecord &Record);
   1293   void loadPendingDeclChain(Decl *D, uint64_t LocalOffset);
   1294   void loadObjCCategories(serialization::GlobalDeclID ID, ObjCInterfaceDecl *D,
   1295                           unsigned PreviousGeneration = 0);
   1296 
   1297   RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
   1298   uint64_t getGlobalBitOffset(ModuleFile &M, uint32_t LocalOffset);
   1299 
   1300   /// \brief Returns the first preprocessed entity ID that begins or ends after
   1301   /// \arg Loc.
   1302   serialization::PreprocessedEntityID
   1303   findPreprocessedEntity(SourceLocation Loc, bool EndsAfter) const;
   1304 
   1305   /// \brief Find the next module that contains entities and return the ID
   1306   /// of the first entry.
   1307   ///
   1308   /// \param SLocMapI points at a chunk of a module that contains no
   1309   /// preprocessed entities or the entities it contains are not the
   1310   /// ones we are looking for.
   1311   serialization::PreprocessedEntityID
   1312     findNextPreprocessedEntity(
   1313                         GlobalSLocOffsetMapType::const_iterator SLocMapI) const;
   1314 
   1315   /// \brief Returns (ModuleFile, Local index) pair for \p GlobalIndex of a
   1316   /// preprocessed entity.
   1317   std::pair<ModuleFile *, unsigned>
   1318     getModulePreprocessedEntity(unsigned GlobalIndex);
   1319 
   1320   /// \brief Returns (begin, end) pair for the preprocessed entities of a
   1321   /// particular module.
   1322   llvm::iterator_range<PreprocessingRecord::iterator>
   1323   getModulePreprocessedEntities(ModuleFile &Mod) const;
   1324 
   1325 public:
   1326   class ModuleDeclIterator
   1327       : public llvm::iterator_adaptor_base<
   1328             ModuleDeclIterator, const serialization::LocalDeclID *,
   1329             std::random_access_iterator_tag, const Decl *, ptrdiff_t,
   1330             const Decl *, const Decl *> {
   1331     ASTReader *Reader;
   1332     ModuleFile *Mod;
   1333 
   1334   public:
   1335     ModuleDeclIterator()
   1336         : iterator_adaptor_base(nullptr), Reader(nullptr), Mod(nullptr) {}
   1337 
   1338     ModuleDeclIterator(ASTReader *Reader, ModuleFile *Mod,
   1339                        const serialization::LocalDeclID *Pos)
   1340         : iterator_adaptor_base(Pos), Reader(Reader), Mod(Mod) {}
   1341 
   1342     value_type operator*() const {
   1343       return Reader->GetDecl(Reader->getGlobalDeclID(*Mod, *I));
   1344     }
   1345     value_type operator->() const { return **this; }
   1346 
   1347     bool operator==(const ModuleDeclIterator &RHS) const {
   1348       assert(Reader == RHS.Reader && Mod == RHS.Mod);
   1349       return I == RHS.I;
   1350     }
   1351   };
   1352 
   1353   llvm::iterator_range<ModuleDeclIterator>
   1354   getModuleFileLevelDecls(ModuleFile &Mod);
   1355 
   1356 private:
   1357   void PassInterestingDeclsToConsumer();
   1358   void PassInterestingDeclToConsumer(Decl *D);
   1359 
   1360   void finishPendingActions();
   1361   void diagnoseOdrViolations();
   1362 
   1363   void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
   1364 
   1365   void addPendingDeclContextInfo(Decl *D,
   1366                                  serialization::GlobalDeclID SemaDC,
   1367                                  serialization::GlobalDeclID LexicalDC) {
   1368     assert(D);
   1369     PendingDeclContextInfo Info = { D, SemaDC, LexicalDC };
   1370     PendingDeclContextInfos.push_back(Info);
   1371   }
   1372 
   1373   /// \brief Produce an error diagnostic and return true.
   1374   ///
   1375   /// This routine should only be used for fatal errors that have to
   1376   /// do with non-routine failures (e.g., corrupted AST file).
   1377   void Error(StringRef Msg) const;
   1378   void Error(unsigned DiagID, StringRef Arg1 = StringRef(),
   1379              StringRef Arg2 = StringRef()) const;
   1380 
   1381   ASTReader(const ASTReader &) = delete;
   1382   void operator=(const ASTReader &) = delete;
   1383 public:
   1384   /// \brief Load the AST file and validate its contents against the given
   1385   /// Preprocessor.
   1386   ///
   1387   /// \param PP the preprocessor associated with the context in which this
   1388   /// precompiled header will be loaded.
   1389   ///
   1390   /// \param Context the AST context that this precompiled header will be
   1391   /// loaded into, if any.
   1392   ///
   1393   /// \param PCHContainerRdr the PCHContainerOperations to use for loading and
   1394   /// creating modules.
   1395   ///
   1396   /// \param Extensions the list of module file extensions that can be loaded
   1397   /// from the AST files.
   1398   ///
   1399   /// \param isysroot If non-NULL, the system include path specified by the
   1400   /// user. This is only used with relocatable PCH files. If non-NULL,
   1401   /// a relocatable PCH file will use the default path "/".
   1402   ///
   1403   /// \param DisableValidation If true, the AST reader will suppress most
   1404   /// of its regular consistency checking, allowing the use of precompiled
   1405   /// headers that cannot be determined to be compatible.
   1406   ///
   1407   /// \param AllowASTWithCompilerErrors If true, the AST reader will accept an
   1408   /// AST file the was created out of an AST with compiler errors,
   1409   /// otherwise it will reject it.
   1410   ///
   1411   /// \param AllowConfigurationMismatch If true, the AST reader will not check
   1412   /// for configuration differences between the AST file and the invocation.
   1413   ///
   1414   /// \param ValidateSystemInputs If true, the AST reader will validate
   1415   /// system input files in addition to user input files. This is only
   1416   /// meaningful if \p DisableValidation is false.
   1417   ///
   1418   /// \param UseGlobalIndex If true, the AST reader will try to load and use
   1419   /// the global module index.
   1420   ///
   1421   /// \param ReadTimer If non-null, a timer used to track the time spent
   1422   /// deserializing.
   1423   ASTReader(Preprocessor &PP, ASTContext *Context,
   1424             const PCHContainerReader &PCHContainerRdr,
   1425             ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
   1426             StringRef isysroot = "", bool DisableValidation = false,
   1427             bool AllowASTWithCompilerErrors = false,
   1428             bool AllowConfigurationMismatch = false,
   1429             bool ValidateSystemInputs = false, bool UseGlobalIndex = true,
   1430             std::unique_ptr<llvm::Timer> ReadTimer = {});
   1431 
   1432   ~ASTReader() override;
   1433 
   1434   SourceManager &getSourceManager() const { return SourceMgr; }
   1435   FileManager &getFileManager() const { return FileMgr; }
   1436   DiagnosticsEngine &getDiags() const { return Diags; }
   1437 
   1438   /// \brief Flags that indicate what kind of AST loading failures the client
   1439   /// of the AST reader can directly handle.
   1440   ///
   1441   /// When a client states that it can handle a particular kind of failure,
   1442   /// the AST reader will not emit errors when producing that kind of failure.
   1443   enum LoadFailureCapabilities {
   1444     /// \brief The client can't handle any AST loading failures.
   1445     ARR_None = 0,
   1446     /// \brief The client can handle an AST file that cannot load because it
   1447     /// is missing.
   1448     ARR_Missing = 0x1,
   1449     /// \brief The client can handle an AST file that cannot load because it
   1450     /// is out-of-date relative to its input files.
   1451     ARR_OutOfDate = 0x2,
   1452     /// \brief The client can handle an AST file that cannot load because it
   1453     /// was built with a different version of Clang.
   1454     ARR_VersionMismatch = 0x4,
   1455     /// \brief The client can handle an AST file that cannot load because it's
   1456     /// compiled configuration doesn't match that of the context it was
   1457     /// loaded into.
   1458     ARR_ConfigurationMismatch = 0x8
   1459   };
   1460 
   1461   /// \brief Load the AST file designated by the given file name.
   1462   ///
   1463   /// \param FileName The name of the AST file to load.
   1464   ///
   1465   /// \param Type The kind of AST being loaded, e.g., PCH, module, main file,
   1466   /// or preamble.
   1467   ///
   1468   /// \param ImportLoc the location where the module file will be considered as
   1469   /// imported from. For non-module AST types it should be invalid.
   1470   ///
   1471   /// \param ClientLoadCapabilities The set of client load-failure
   1472   /// capabilities, represented as a bitset of the enumerators of
   1473   /// LoadFailureCapabilities.
   1474   ///
   1475   /// \param Imported optional out-parameter to append the list of modules
   1476   /// that were imported by precompiled headers or any other non-module AST file
   1477   ASTReadResult ReadAST(StringRef FileName, ModuleKind Type,
   1478                         SourceLocation ImportLoc,
   1479                         unsigned ClientLoadCapabilities,
   1480                         SmallVectorImpl<ImportedSubmodule> *Imported = nullptr);
   1481 
   1482   /// \brief Make the entities in the given module and any of its (non-explicit)
   1483   /// submodules visible to name lookup.
   1484   ///
   1485   /// \param Mod The module whose names should be made visible.
   1486   ///
   1487   /// \param NameVisibility The level of visibility to give the names in the
   1488   /// module.  Visibility can only be increased over time.
   1489   ///
   1490   /// \param ImportLoc The location at which the import occurs.
   1491   void makeModuleVisible(Module *Mod,
   1492                          Module::NameVisibilityKind NameVisibility,
   1493                          SourceLocation ImportLoc);
   1494 
   1495   /// \brief Make the names within this set of hidden names visible.
   1496   void makeNamesVisible(const HiddenNames &Names, Module *Owner);
   1497 
   1498   /// \brief Note that MergedDef is a redefinition of the canonical definition
   1499   /// Def, so Def should be visible whenever MergedDef is.
   1500   void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef);
   1501 
   1502   /// \brief Take the AST callbacks listener.
   1503   std::unique_ptr<ASTReaderListener> takeListener() {
   1504     return std::move(Listener);
   1505   }
   1506 
   1507   /// \brief Set the AST callbacks listener.
   1508   void setListener(std::unique_ptr<ASTReaderListener> Listener) {
   1509     this->Listener = std::move(Listener);
   1510   }
   1511 
   1512   /// \brief Add an AST callback listener.
   1513   ///
   1514   /// Takes ownership of \p L.
   1515   void addListener(std::unique_ptr<ASTReaderListener> L) {
   1516     if (Listener)
   1517       L = llvm::make_unique<ChainedASTReaderListener>(std::move(L),
   1518                                                       std::move(Listener));
   1519     Listener = std::move(L);
   1520   }
   1521 
   1522   /// RAII object to temporarily add an AST callback listener.
   1523   class ListenerScope {
   1524     ASTReader &Reader;
   1525     bool Chained;
   1526 
   1527   public:
   1528     ListenerScope(ASTReader &Reader, std::unique_ptr<ASTReaderListener> L)
   1529         : Reader(Reader), Chained(false) {
   1530       auto Old = Reader.takeListener();
   1531       if (Old) {
   1532         Chained = true;
   1533         L = llvm::make_unique<ChainedASTReaderListener>(std::move(L),
   1534                                                         std::move(Old));
   1535       }
   1536       Reader.setListener(std::move(L));
   1537     }
   1538     ~ListenerScope() {
   1539       auto New = Reader.takeListener();
   1540       if (Chained)
   1541         Reader.setListener(static_cast<ChainedASTReaderListener *>(New.get())
   1542                                ->takeSecond());
   1543     }
   1544   };
   1545 
   1546   /// \brief Set the AST deserialization listener.
   1547   void setDeserializationListener(ASTDeserializationListener *Listener,
   1548                                   bool TakeOwnership = false);
   1549 
   1550   /// \brief Determine whether this AST reader has a global index.
   1551   bool hasGlobalIndex() const { return (bool)GlobalIndex; }
   1552 
   1553   /// \brief Return global module index.
   1554   GlobalModuleIndex *getGlobalIndex() { return GlobalIndex.get(); }
   1555 
   1556   /// \brief Reset reader for a reload try.
   1557   void resetForReload() { TriedLoadingGlobalIndex = false; }
   1558 
   1559   /// \brief Attempts to load the global index.
   1560   ///
   1561   /// \returns true if loading the global index has failed for any reason.
   1562   bool loadGlobalIndex();
   1563 
   1564   /// \brief Determine whether we tried to load the global index, but failed,
   1565   /// e.g., because it is out-of-date or does not exist.
   1566   bool isGlobalIndexUnavailable() const;
   1567 
   1568   /// \brief Initializes the ASTContext
   1569   void InitializeContext();
   1570 
   1571   /// \brief Update the state of Sema after loading some additional modules.
   1572   void UpdateSema();
   1573 
   1574   /// \brief Add in-memory (virtual file) buffer.
   1575   void addInMemoryBuffer(StringRef &FileName,
   1576                          std::unique_ptr<llvm::MemoryBuffer> Buffer) {
   1577     ModuleMgr.addInMemoryBuffer(FileName, std::move(Buffer));
   1578   }
   1579 
   1580   /// \brief Finalizes the AST reader's state before writing an AST file to
   1581   /// disk.
   1582   ///
   1583   /// This operation may undo temporary state in the AST that should not be
   1584   /// emitted.
   1585   void finalizeForWriting();
   1586 
   1587   /// \brief Retrieve the module manager.
   1588   ModuleManager &getModuleManager() { return ModuleMgr; }
   1589 
   1590   /// \brief Retrieve the preprocessor.
   1591   Preprocessor &getPreprocessor() const { return PP; }
   1592 
   1593   /// \brief Retrieve the name of the original source file name for the primary
   1594   /// module file.
   1595   StringRef getOriginalSourceFile() {
   1596     return ModuleMgr.getPrimaryModule().OriginalSourceFileName;
   1597   }
   1598 
   1599   /// \brief Retrieve the name of the original source file name directly from
   1600   /// the AST file, without actually loading the AST file.
   1601   static std::string
   1602   getOriginalSourceFile(const std::string &ASTFileName, FileManager &FileMgr,
   1603                         const PCHContainerReader &PCHContainerRdr,
   1604                         DiagnosticsEngine &Diags);
   1605 
   1606   /// \brief Read the control block for the named AST file.
   1607   ///
   1608   /// \returns true if an error occurred, false otherwise.
   1609   static bool
   1610   readASTFileControlBlock(StringRef Filename, FileManager &FileMgr,
   1611                           const PCHContainerReader &PCHContainerRdr,
   1612                           bool FindModuleFileExtensions,
   1613                           ASTReaderListener &Listener,
   1614                           bool ValidateDiagnosticOptions);
   1615 
   1616   /// \brief Determine whether the given AST file is acceptable to load into a
   1617   /// translation unit with the given language and target options.
   1618   static bool isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
   1619                                   const PCHContainerReader &PCHContainerRdr,
   1620                                   const LangOptions &LangOpts,
   1621                                   const TargetOptions &TargetOpts,
   1622                                   const PreprocessorOptions &PPOpts,
   1623                                   StringRef ExistingModuleCachePath);
   1624 
   1625   /// \brief Returns the suggested contents of the predefines buffer,
   1626   /// which contains a (typically-empty) subset of the predefines
   1627   /// build prior to including the precompiled header.
   1628   const std::string &getSuggestedPredefines() { return SuggestedPredefines; }
   1629 
   1630   /// \brief Read a preallocated preprocessed entity from the external source.
   1631   ///
   1632   /// \returns null if an error occurred that prevented the preprocessed
   1633   /// entity from being loaded.
   1634   PreprocessedEntity *ReadPreprocessedEntity(unsigned Index) override;
   1635 
   1636   /// \brief Returns a pair of [Begin, End) indices of preallocated
   1637   /// preprocessed entities that \p Range encompasses.
   1638   std::pair<unsigned, unsigned>
   1639       findPreprocessedEntitiesInRange(SourceRange Range) override;
   1640 
   1641   /// \brief Optionally returns true or false if the preallocated preprocessed
   1642   /// entity with index \p Index came from file \p FID.
   1643   Optional<bool> isPreprocessedEntityInFileID(unsigned Index,
   1644                                               FileID FID) override;
   1645 
   1646   /// \brief Read the header file information for the given file entry.
   1647   HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) override;
   1648 
   1649   void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag);
   1650 
   1651   /// \brief Returns the number of source locations found in the chain.
   1652   unsigned getTotalNumSLocs() const {
   1653     return TotalNumSLocEntries;
   1654   }
   1655 
   1656   /// \brief Returns the number of identifiers found in the chain.
   1657   unsigned getTotalNumIdentifiers() const {
   1658     return static_cast<unsigned>(IdentifiersLoaded.size());
   1659   }
   1660 
   1661   /// \brief Returns the number of macros found in the chain.
   1662   unsigned getTotalNumMacros() const {
   1663     return static_cast<unsigned>(MacrosLoaded.size());
   1664   }
   1665 
   1666   /// \brief Returns the number of types found in the chain.
   1667   unsigned getTotalNumTypes() const {
   1668     return static_cast<unsigned>(TypesLoaded.size());
   1669   }
   1670 
   1671   /// \brief Returns the number of declarations found in the chain.
   1672   unsigned getTotalNumDecls() const {
   1673     return static_cast<unsigned>(DeclsLoaded.size());
   1674   }
   1675 
   1676   /// \brief Returns the number of submodules known.
   1677   unsigned getTotalNumSubmodules() const {
   1678     return static_cast<unsigned>(SubmodulesLoaded.size());
   1679   }
   1680 
   1681   /// \brief Returns the number of selectors found in the chain.
   1682   unsigned getTotalNumSelectors() const {
   1683     return static_cast<unsigned>(SelectorsLoaded.size());
   1684   }
   1685 
   1686   /// \brief Returns the number of preprocessed entities known to the AST
   1687   /// reader.
   1688   unsigned getTotalNumPreprocessedEntities() const {
   1689     unsigned Result = 0;
   1690     for (const auto &M : ModuleMgr)
   1691       Result += M.NumPreprocessedEntities;
   1692     return Result;
   1693   }
   1694 
   1695   /// \brief Reads a TemplateArgumentLocInfo appropriate for the
   1696   /// given TemplateArgument kind.
   1697   TemplateArgumentLocInfo
   1698   GetTemplateArgumentLocInfo(ModuleFile &F, TemplateArgument::ArgKind Kind,
   1699                              const RecordData &Record, unsigned &Idx);
   1700 
   1701   /// \brief Reads a TemplateArgumentLoc.
   1702   TemplateArgumentLoc
   1703   ReadTemplateArgumentLoc(ModuleFile &F,
   1704                           const RecordData &Record, unsigned &Idx);
   1705 
   1706   const ASTTemplateArgumentListInfo*
   1707   ReadASTTemplateArgumentListInfo(ModuleFile &F,
   1708                                   const RecordData &Record, unsigned &Index);
   1709 
   1710   /// \brief Reads a declarator info from the given record.
   1711   TypeSourceInfo *GetTypeSourceInfo(ModuleFile &F,
   1712                                     const RecordData &Record, unsigned &Idx);
   1713 
   1714   /// \brief Resolve a type ID into a type, potentially building a new
   1715   /// type.
   1716   QualType GetType(serialization::TypeID ID);
   1717 
   1718   /// \brief Resolve a local type ID within a given AST file into a type.
   1719   QualType getLocalType(ModuleFile &F, unsigned LocalID);
   1720 
   1721   /// \brief Map a local type ID within a given AST file into a global type ID.
   1722   serialization::TypeID getGlobalTypeID(ModuleFile &F, unsigned LocalID) const;
   1723 
   1724   /// \brief Read a type from the current position in the given record, which
   1725   /// was read from the given AST file.
   1726   QualType readType(ModuleFile &F, const RecordData &Record, unsigned &Idx) {
   1727     if (Idx >= Record.size())
   1728       return QualType();
   1729 
   1730     return getLocalType(F, Record[Idx++]);
   1731   }
   1732 
   1733   /// \brief Map from a local declaration ID within a given module to a
   1734   /// global declaration ID.
   1735   serialization::DeclID getGlobalDeclID(ModuleFile &F,
   1736                                       serialization::LocalDeclID LocalID) const;
   1737 
   1738   /// \brief Returns true if global DeclID \p ID originated from module \p M.
   1739   bool isDeclIDFromModule(serialization::GlobalDeclID ID, ModuleFile &M) const;
   1740 
   1741   /// \brief Retrieve the module file that owns the given declaration, or NULL
   1742   /// if the declaration is not from a module file.
   1743   ModuleFile *getOwningModuleFile(const Decl *D);
   1744 
   1745   /// \brief Get the best name we know for the module that owns the given
   1746   /// declaration, or an empty string if the declaration is not from a module.
   1747   std::string getOwningModuleNameForDiagnostic(const Decl *D);
   1748 
   1749   /// \brief Returns the source location for the decl \p ID.
   1750   SourceLocation getSourceLocationForDeclID(serialization::GlobalDeclID ID);
   1751 
   1752   /// \brief Resolve a declaration ID into a declaration, potentially
   1753   /// building a new declaration.
   1754   Decl *GetDecl(serialization::DeclID ID);
   1755   Decl *GetExternalDecl(uint32_t ID) override;
   1756 
   1757   /// \brief Resolve a declaration ID into a declaration. Return 0 if it's not
   1758   /// been loaded yet.
   1759   Decl *GetExistingDecl(serialization::DeclID ID);
   1760 
   1761   /// \brief Reads a declaration with the given local ID in the given module.
   1762   Decl *GetLocalDecl(ModuleFile &F, uint32_t LocalID) {
   1763     return GetDecl(getGlobalDeclID(F, LocalID));
   1764   }
   1765 
   1766   /// \brief Reads a declaration with the given local ID in the given module.
   1767   ///
   1768   /// \returns The requested declaration, casted to the given return type.
   1769   template<typename T>
   1770   T *GetLocalDeclAs(ModuleFile &F, uint32_t LocalID) {
   1771     return cast_or_null<T>(GetLocalDecl(F, LocalID));
   1772   }
   1773 
   1774   /// \brief Map a global declaration ID into the declaration ID used to
   1775   /// refer to this declaration within the given module fule.
   1776   ///
   1777   /// \returns the global ID of the given declaration as known in the given
   1778   /// module file.
   1779   serialization::DeclID
   1780   mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
   1781                                   serialization::DeclID GlobalID);
   1782 
   1783   /// \brief Reads a declaration ID from the given position in a record in the
   1784   /// given module.
   1785   ///
   1786   /// \returns The declaration ID read from the record, adjusted to a global ID.
   1787   serialization::DeclID ReadDeclID(ModuleFile &F, const RecordData &Record,
   1788                                    unsigned &Idx);
   1789 
   1790   /// \brief Reads a declaration from the given position in a record in the
   1791   /// given module.
   1792   Decl *ReadDecl(ModuleFile &F, const RecordData &R, unsigned &I) {
   1793     return GetDecl(ReadDeclID(F, R, I));
   1794   }
   1795 
   1796   /// \brief Reads a declaration from the given position in a record in the
   1797   /// given module.
   1798   ///
   1799   /// \returns The declaration read from this location, casted to the given
   1800   /// result type.
   1801   template<typename T>
   1802   T *ReadDeclAs(ModuleFile &F, const RecordData &R, unsigned &I) {
   1803     return cast_or_null<T>(GetDecl(ReadDeclID(F, R, I)));
   1804   }
   1805 
   1806   /// \brief If any redeclarations of \p D have been imported since it was
   1807   /// last checked, this digs out those redeclarations and adds them to the
   1808   /// redeclaration chain for \p D.
   1809   void CompleteRedeclChain(const Decl *D) override;
   1810 
   1811   CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
   1812 
   1813   /// \brief Resolve the offset of a statement into a statement.
   1814   ///
   1815   /// This operation will read a new statement from the external
   1816   /// source each time it is called, and is meant to be used via a
   1817   /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
   1818   Stmt *GetExternalDeclStmt(uint64_t Offset) override;
   1819 
   1820   /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
   1821   /// specified cursor.  Read the abbreviations that are at the top of the block
   1822   /// and then leave the cursor pointing into the block.
   1823   static bool ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor, unsigned BlockID);
   1824 
   1825   /// \brief Finds all the visible declarations with a given name.
   1826   /// The current implementation of this method just loads the entire
   1827   /// lookup table as unmaterialized references.
   1828   bool FindExternalVisibleDeclsByName(const DeclContext *DC,
   1829                                       DeclarationName Name) override;
   1830 
   1831   /// \brief Read all of the declarations lexically stored in a
   1832   /// declaration context.
   1833   ///
   1834   /// \param DC The declaration context whose declarations will be
   1835   /// read.
   1836   ///
   1837   /// \param IsKindWeWant A predicate indicating which declaration kinds
   1838   /// we are interested in.
   1839   ///
   1840   /// \param Decls Vector that will contain the declarations loaded
   1841   /// from the external source. The caller is responsible for merging
   1842   /// these declarations with any declarations already stored in the
   1843   /// declaration context.
   1844   void
   1845   FindExternalLexicalDecls(const DeclContext *DC,
   1846                            llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
   1847                            SmallVectorImpl<Decl *> &Decls) override;
   1848 
   1849   /// \brief Get the decls that are contained in a file in the Offset/Length
   1850   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
   1851   /// a range.
   1852   void FindFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
   1853                            SmallVectorImpl<Decl *> &Decls) override;
   1854 
   1855   /// \brief Notify ASTReader that we started deserialization of
   1856   /// a decl or type so until FinishedDeserializing is called there may be
   1857   /// decls that are initializing. Must be paired with FinishedDeserializing.
   1858   void StartedDeserializing() override;
   1859 
   1860   /// \brief Notify ASTReader that we finished the deserialization of
   1861   /// a decl or type. Must be paired with StartedDeserializing.
   1862   void FinishedDeserializing() override;
   1863 
   1864   /// \brief Function that will be invoked when we begin parsing a new
   1865   /// translation unit involving this external AST source.
   1866   ///
   1867   /// This function will provide all of the external definitions to
   1868   /// the ASTConsumer.
   1869   void StartTranslationUnit(ASTConsumer *Consumer) override;
   1870 
   1871   /// \brief Print some statistics about AST usage.
   1872   void PrintStats() override;
   1873 
   1874   /// \brief Dump information about the AST reader to standard error.
   1875   void dump();
   1876 
   1877   /// Return the amount of memory used by memory buffers, breaking down
   1878   /// by heap-backed versus mmap'ed memory.
   1879   void getMemoryBufferSizes(MemoryBufferSizes &sizes) const override;
   1880 
   1881   /// \brief Initialize the semantic source with the Sema instance
   1882   /// being used to perform semantic analysis on the abstract syntax
   1883   /// tree.
   1884   void InitializeSema(Sema &S) override;
   1885 
   1886   /// \brief Inform the semantic consumer that Sema is no longer available.
   1887   void ForgetSema() override { SemaObj = nullptr; }
   1888 
   1889   /// \brief Retrieve the IdentifierInfo for the named identifier.
   1890   ///
   1891   /// This routine builds a new IdentifierInfo for the given identifier. If any
   1892   /// declarations with this name are visible from translation unit scope, their
   1893   /// declarations will be deserialized and introduced into the declaration
   1894   /// chain of the identifier.
   1895   IdentifierInfo *get(StringRef Name) override;
   1896 
   1897   /// \brief Retrieve an iterator into the set of all identifiers
   1898   /// in all loaded AST files.
   1899   IdentifierIterator *getIdentifiers() override;
   1900 
   1901   /// \brief Load the contents of the global method pool for a given
   1902   /// selector.
   1903   void ReadMethodPool(Selector Sel) override;
   1904 
   1905   /// Load the contents of the global method pool for a given
   1906   /// selector if necessary.
   1907   void updateOutOfDateSelector(Selector Sel) override;
   1908 
   1909   /// \brief Load the set of namespaces that are known to the external source,
   1910   /// which will be used during typo correction.
   1911   void ReadKnownNamespaces(
   1912                          SmallVectorImpl<NamespaceDecl *> &Namespaces) override;
   1913 
   1914   void ReadUndefinedButUsed(
   1915       llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) override;
   1916 
   1917   void ReadMismatchingDeleteExpressions(llvm::MapVector<
   1918       FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
   1919                                             Exprs) override;
   1920 
   1921   void ReadTentativeDefinitions(
   1922                             SmallVectorImpl<VarDecl *> &TentativeDefs) override;
   1923 
   1924   void ReadUnusedFileScopedDecls(
   1925                        SmallVectorImpl<const DeclaratorDecl *> &Decls) override;
   1926 
   1927   void ReadDelegatingConstructors(
   1928                          SmallVectorImpl<CXXConstructorDecl *> &Decls) override;
   1929 
   1930   void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) override;
   1931 
   1932   void ReadUnusedLocalTypedefNameCandidates(
   1933       llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) override;
   1934 
   1935   void ReadReferencedSelectors(
   1936           SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) override;
   1937 
   1938   void ReadWeakUndeclaredIdentifiers(
   1939           SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WI) override;
   1940 
   1941   void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) override;
   1942 
   1943   void ReadPendingInstantiations(
   1944                  SmallVectorImpl<std::pair<ValueDecl *,
   1945                                            SourceLocation> > &Pending) override;
   1946 
   1947   void ReadLateParsedTemplates(
   1948       llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
   1949           &LPTMap) override;
   1950 
   1951   /// \brief Load a selector from disk, registering its ID if it exists.
   1952   void LoadSelector(Selector Sel);
   1953 
   1954   void SetIdentifierInfo(unsigned ID, IdentifierInfo *II);
   1955   void SetGloballyVisibleDecls(IdentifierInfo *II,
   1956                                const SmallVectorImpl<uint32_t> &DeclIDs,
   1957                                SmallVectorImpl<Decl *> *Decls = nullptr);
   1958 
   1959   /// \brief Report a diagnostic.
   1960   DiagnosticBuilder Diag(unsigned DiagID) const;
   1961 
   1962   /// \brief Report a diagnostic.
   1963   DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) const;
   1964 
   1965   IdentifierInfo *DecodeIdentifierInfo(serialization::IdentifierID ID);
   1966 
   1967   IdentifierInfo *GetIdentifierInfo(ModuleFile &M, const RecordData &Record,
   1968                                     unsigned &Idx) {
   1969     return DecodeIdentifierInfo(getGlobalIdentifierID(M, Record[Idx++]));
   1970   }
   1971 
   1972   IdentifierInfo *GetIdentifier(serialization::IdentifierID ID) override {
   1973     // Note that we are loading an identifier.
   1974     Deserializing AnIdentifier(this);
   1975 
   1976     return DecodeIdentifierInfo(ID);
   1977   }
   1978 
   1979   IdentifierInfo *getLocalIdentifier(ModuleFile &M, unsigned LocalID);
   1980 
   1981   serialization::IdentifierID getGlobalIdentifierID(ModuleFile &M,
   1982                                                     unsigned LocalID);
   1983 
   1984   void resolvePendingMacro(IdentifierInfo *II, const PendingMacroInfo &PMInfo);
   1985 
   1986   /// \brief Retrieve the macro with the given ID.
   1987   MacroInfo *getMacro(serialization::MacroID ID);
   1988 
   1989   /// \brief Retrieve the global macro ID corresponding to the given local
   1990   /// ID within the given module file.
   1991   serialization::MacroID getGlobalMacroID(ModuleFile &M, unsigned LocalID);
   1992 
   1993   /// \brief Read the source location entry with index ID.
   1994   bool ReadSLocEntry(int ID) override;
   1995 
   1996   /// \brief Retrieve the module import location and module name for the
   1997   /// given source manager entry ID.
   1998   std::pair<SourceLocation, StringRef> getModuleImportLoc(int ID) override;
   1999 
   2000   /// \brief Retrieve the global submodule ID given a module and its local ID
   2001   /// number.
   2002   serialization::SubmoduleID
   2003   getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID);
   2004 
   2005   /// \brief Retrieve the submodule that corresponds to a global submodule ID.
   2006   ///
   2007   Module *getSubmodule(serialization::SubmoduleID GlobalID);
   2008 
   2009   /// \brief Retrieve the module that corresponds to the given module ID.
   2010   ///
   2011   /// Note: overrides method in ExternalASTSource
   2012   Module *getModule(unsigned ID) override;
   2013 
   2014   /// \brief Retrieve the module file with a given local ID within the specified
   2015   /// ModuleFile.
   2016   ModuleFile *getLocalModuleFile(ModuleFile &M, unsigned ID);
   2017 
   2018   /// \brief Get an ID for the given module file.
   2019   unsigned getModuleFileID(ModuleFile *M);
   2020 
   2021   /// \brief Return a descriptor for the corresponding module.
   2022   llvm::Optional<ASTSourceDescriptor> getSourceDescriptor(unsigned ID) override;
   2023 
   2024   ExtKind hasExternalDefinitions(const Decl *D) override;
   2025 
   2026   /// \brief Retrieve a selector from the given module with its local ID
   2027   /// number.
   2028   Selector getLocalSelector(ModuleFile &M, unsigned LocalID);
   2029 
   2030   Selector DecodeSelector(serialization::SelectorID Idx);
   2031 
   2032   Selector GetExternalSelector(serialization::SelectorID ID) override;
   2033   uint32_t GetNumExternalSelectors() override;
   2034 
   2035   Selector ReadSelector(ModuleFile &M, const RecordData &Record, unsigned &Idx) {
   2036     return getLocalSelector(M, Record[Idx++]);
   2037   }
   2038 
   2039   /// \brief Retrieve the global selector ID that corresponds to this
   2040   /// the local selector ID in a given module.
   2041   serialization::SelectorID getGlobalSelectorID(ModuleFile &F,
   2042                                                 unsigned LocalID) const;
   2043 
   2044   /// \brief Read a declaration name.
   2045   DeclarationName ReadDeclarationName(ModuleFile &F,
   2046                                       const RecordData &Record, unsigned &Idx);
   2047   void ReadDeclarationNameLoc(ModuleFile &F,
   2048                               DeclarationNameLoc &DNLoc, DeclarationName Name,
   2049                               const RecordData &Record, unsigned &Idx);
   2050   void ReadDeclarationNameInfo(ModuleFile &F, DeclarationNameInfo &NameInfo,
   2051                                const RecordData &Record, unsigned &Idx);
   2052 
   2053   void ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
   2054                          const RecordData &Record, unsigned &Idx);
   2055 
   2056   NestedNameSpecifier *ReadNestedNameSpecifier(ModuleFile &F,
   2057                                                const RecordData &Record,
   2058                                                unsigned &Idx);
   2059 
   2060   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc(ModuleFile &F,
   2061                                                     const RecordData &Record,
   2062                                                     unsigned &Idx);
   2063 
   2064   /// \brief Read a template name.
   2065   TemplateName ReadTemplateName(ModuleFile &F, const RecordData &Record,
   2066                                 unsigned &Idx);
   2067 
   2068   /// \brief Read a template argument.
   2069   TemplateArgument ReadTemplateArgument(ModuleFile &F, const RecordData &Record,
   2070                                         unsigned &Idx,
   2071                                         bool Canonicalize = false);
   2072 
   2073   /// \brief Read a template parameter list.
   2074   TemplateParameterList *ReadTemplateParameterList(ModuleFile &F,
   2075                                                    const RecordData &Record,
   2076                                                    unsigned &Idx);
   2077 
   2078   /// \brief Read a template argument array.
   2079   void ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
   2080                                 ModuleFile &F, const RecordData &Record,
   2081                                 unsigned &Idx, bool Canonicalize = false);
   2082 
   2083   /// \brief Read a UnresolvedSet structure.
   2084   void ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
   2085                          const RecordData &Record, unsigned &Idx);
   2086 
   2087   /// \brief Read a C++ base specifier.
   2088   CXXBaseSpecifier ReadCXXBaseSpecifier(ModuleFile &F,
   2089                                         const RecordData &Record,unsigned &Idx);
   2090 
   2091   /// \brief Read a CXXCtorInitializer array.
   2092   CXXCtorInitializer **
   2093   ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
   2094                           unsigned &Idx);
   2095 
   2096   /// \brief Read the contents of a CXXCtorInitializer array.
   2097   CXXCtorInitializer **GetExternalCXXCtorInitializers(uint64_t Offset) override;
   2098 
   2099   /// \brief Read a source location from raw form and return it in its
   2100   /// originating module file's source location space.
   2101   SourceLocation ReadUntranslatedSourceLocation(uint32_t Raw) const {
   2102     return SourceLocation::getFromRawEncoding((Raw >> 1) | (Raw << 31));
   2103   }
   2104 
   2105   /// \brief Read a source location from raw form.
   2106   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile, uint32_t Raw) const {
   2107     SourceLocation Loc = ReadUntranslatedSourceLocation(Raw);
   2108     return TranslateSourceLocation(ModuleFile, Loc);
   2109   }
   2110 
   2111   /// \brief Translate a source location from another module file's source
   2112   /// location space into ours.
   2113   SourceLocation TranslateSourceLocation(ModuleFile &ModuleFile,
   2114                                          SourceLocation Loc) const {
   2115     if (!ModuleFile.ModuleOffsetMap.empty())
   2116       ReadModuleOffsetMap(ModuleFile);
   2117     assert(ModuleFile.SLocRemap.find(Loc.getOffset()) !=
   2118                ModuleFile.SLocRemap.end() &&
   2119            "Cannot find offset to remap.");
   2120     int Remap = ModuleFile.SLocRemap.find(Loc.getOffset())->second;
   2121     return Loc.getLocWithOffset(Remap);
   2122   }
   2123 
   2124   /// \brief Read a source location.
   2125   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile,
   2126                                     const RecordDataImpl &Record,
   2127                                     unsigned &Idx) {
   2128     return ReadSourceLocation(ModuleFile, Record[Idx++]);
   2129   }
   2130 
   2131   /// \brief Read a source range.
   2132   SourceRange ReadSourceRange(ModuleFile &F,
   2133                               const RecordData &Record, unsigned &Idx);
   2134 
   2135   /// \brief Read an integral value
   2136   llvm::APInt ReadAPInt(const RecordData &Record, unsigned &Idx);
   2137 
   2138   /// \brief Read a signed integral value
   2139   llvm::APSInt ReadAPSInt(const RecordData &Record, unsigned &Idx);
   2140 
   2141   /// \brief Read a floating-point value
   2142   llvm::APFloat ReadAPFloat(const RecordData &Record,
   2143                             const llvm::fltSemantics &Sem, unsigned &Idx);
   2144 
   2145   // \brief Read a string
   2146   static std::string ReadString(const RecordData &Record, unsigned &Idx);
   2147 
   2148   // \brief Skip a string
   2149   static void SkipString(const RecordData &Record, unsigned &Idx) {
   2150     Idx += Record[Idx] + 1;
   2151   }
   2152 
   2153   // \brief Read a path
   2154   std::string ReadPath(ModuleFile &F, const RecordData &Record, unsigned &Idx);
   2155 
   2156   // \brief Skip a path
   2157   static void SkipPath(const RecordData &Record, unsigned &Idx) {
   2158     SkipString(Record, Idx);
   2159   }
   2160 
   2161   /// \brief Read a version tuple.
   2162   static VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx);
   2163 
   2164   CXXTemporary *ReadCXXTemporary(ModuleFile &F, const RecordData &Record,
   2165                                  unsigned &Idx);
   2166 
   2167   /// \brief Reads attributes from the current stream position.
   2168   void ReadAttributes(ASTRecordReader &Record, AttrVec &Attrs);
   2169 
   2170   /// \brief Reads a statement.
   2171   Stmt *ReadStmt(ModuleFile &F);
   2172 
   2173   /// \brief Reads an expression.
   2174   Expr *ReadExpr(ModuleFile &F);
   2175 
   2176   /// \brief Reads a sub-statement operand during statement reading.
   2177   Stmt *ReadSubStmt() {
   2178     assert(ReadingKind == Read_Stmt &&
   2179            "Should be called only during statement reading!");
   2180     // Subexpressions are stored from last to first, so the next Stmt we need
   2181     // is at the back of the stack.
   2182     assert(!StmtStack.empty() && "Read too many sub-statements!");
   2183     return StmtStack.pop_back_val();
   2184   }
   2185 
   2186   /// \brief Reads a sub-expression operand during statement reading.
   2187   Expr *ReadSubExpr();
   2188 
   2189   /// \brief Reads a token out of a record.
   2190   Token ReadToken(ModuleFile &M, const RecordDataImpl &Record, unsigned &Idx);
   2191 
   2192   /// \brief Reads the macro record located at the given offset.
   2193   MacroInfo *ReadMacroRecord(ModuleFile &F, uint64_t Offset);
   2194 
   2195   /// \brief Determine the global preprocessed entity ID that corresponds to
   2196   /// the given local ID within the given module.
   2197   serialization::PreprocessedEntityID
   2198   getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const;
   2199 
   2200   /// \brief Add a macro to deserialize its macro directive history.
   2201   ///
   2202   /// \param II The name of the macro.
   2203   /// \param M The module file.
   2204   /// \param MacroDirectivesOffset Offset of the serialized macro directive
   2205   /// history.
   2206   void addPendingMacro(IdentifierInfo *II, ModuleFile *M,
   2207                        uint64_t MacroDirectivesOffset);
   2208 
   2209   /// \brief Read the set of macros defined by this external macro source.
   2210   void ReadDefinedMacros() override;
   2211 
   2212   /// \brief Update an out-of-date identifier.
   2213   void updateOutOfDateIdentifier(IdentifierInfo &II) override;
   2214 
   2215   /// \brief Note that this identifier is up-to-date.
   2216   void markIdentifierUpToDate(IdentifierInfo *II);
   2217 
   2218   /// \brief Load all external visible decls in the given DeclContext.
   2219   void completeVisibleDeclsMap(const DeclContext *DC) override;
   2220 
   2221   /// \brief Retrieve the AST context that this AST reader supplements.
   2222   ASTContext &getContext() {
   2223     assert(ContextObj && "requested AST context when not loading AST");
   2224     return *ContextObj;
   2225   }
   2226 
   2227   // \brief Contains the IDs for declarations that were requested before we have
   2228   // access to a Sema object.
   2229   SmallVector<uint64_t, 16> PreloadedDeclIDs;
   2230 
   2231   /// \brief Retrieve the semantic analysis object used to analyze the
   2232   /// translation unit in which the precompiled header is being
   2233   /// imported.
   2234   Sema *getSema() { return SemaObj; }
   2235 
   2236   /// \brief Get the identifier resolver used for name lookup / updates
   2237   /// in the translation unit scope. We have one of these even if we don't
   2238   /// have a Sema object.
   2239   IdentifierResolver &getIdResolver();
   2240 
   2241   /// \brief Retrieve the identifier table associated with the
   2242   /// preprocessor.
   2243   IdentifierTable &getIdentifierTable();
   2244 
   2245   /// \brief Record that the given ID maps to the given switch-case
   2246   /// statement.
   2247   void RecordSwitchCaseID(SwitchCase *SC, unsigned ID);
   2248 
   2249   /// \brief Retrieve the switch-case statement with the given ID.
   2250   SwitchCase *getSwitchCaseWithID(unsigned ID);
   2251 
   2252   void ClearSwitchCaseIDs();
   2253 
   2254   /// \brief Cursors for comments blocks.
   2255   SmallVector<std::pair<llvm::BitstreamCursor,
   2256                         serialization::ModuleFile *>, 8> CommentsCursors;
   2257 
   2258   /// \brief Loads comments ranges.
   2259   void ReadComments() override;
   2260 
   2261   /// Visit all the input files of the given module file.
   2262   void visitInputFiles(serialization::ModuleFile &MF,
   2263                        bool IncludeSystem, bool Complain,
   2264           llvm::function_ref<void(const serialization::InputFile &IF,
   2265                                   bool isSystem)> Visitor);
   2266 
   2267   /// Visit all the top-level module maps loaded when building the given module
   2268   /// file.
   2269   void visitTopLevelModuleMaps(serialization::ModuleFile &MF,
   2270                                llvm::function_ref<
   2271                                    void(const FileEntry *)> Visitor);
   2272 
   2273   bool isProcessingUpdateRecords() { return ProcessingUpdateRecords; }
   2274 };
   2275 
   2276 /// \brief An object for streaming information from a record.
   2277 class ASTRecordReader {
   2278   typedef serialization::ModuleFile ModuleFile;
   2279 
   2280   ASTReader *Reader;
   2281   ModuleFile *F;
   2282   unsigned Idx = 0;
   2283   ASTReader::RecordData Record;
   2284 
   2285   typedef ASTReader::RecordData RecordData;
   2286   typedef ASTReader::RecordDataImpl RecordDataImpl;
   2287 
   2288 public:
   2289   /// Construct an ASTRecordReader that uses the default encoding scheme.
   2290   ASTRecordReader(ASTReader &Reader, ModuleFile &F)
   2291       : Reader(&Reader), F(&F) {}
   2292 
   2293   /// \brief Reads a record with id AbbrevID from Cursor, resetting the
   2294   /// internal state.
   2295   unsigned readRecord(llvm::BitstreamCursor &Cursor, unsigned AbbrevID);
   2296 
   2297   /// \brief Is this a module file for a module (rather than a PCH or similar).
   2298   bool isModule() const { return F->isModule(); }
   2299 
   2300   /// \brief Retrieve the AST context that this AST reader supplements.
   2301   ASTContext &getContext() { return Reader->getContext(); }
   2302 
   2303   /// \brief The current position in this record.
   2304   unsigned getIdx() const { return Idx; }
   2305   /// \brief The length of this record.
   2306   size_t size() const { return Record.size(); }
   2307 
   2308   /// \brief An arbitrary index in this record.
   2309   const uint64_t &operator[](size_t N) { return Record[N]; }
   2310   /// \brief The last element in this record.
   2311   const uint64_t &back() const { return Record.back(); }
   2312 
   2313   /// \brief Returns the current value in this record, and advances to the
   2314   /// next value.
   2315   const uint64_t &readInt() { return Record[Idx++]; }
   2316   /// \brief Returns the current value in this record, without advancing.
   2317   const uint64_t &peekInt() { return Record[Idx]; }
   2318 
   2319   /// \brief Skips the specified number of values.
   2320   void skipInts(unsigned N) { Idx += N; }
   2321 
   2322   /// \brief Retrieve the global submodule ID its local ID number.
   2323   serialization::SubmoduleID
   2324   getGlobalSubmoduleID(unsigned LocalID) {
   2325     return Reader->getGlobalSubmoduleID(*F, LocalID);
   2326   }
   2327 
   2328   /// \brief Retrieve the submodule that corresponds to a global submodule ID.
   2329   Module *getSubmodule(serialization::SubmoduleID GlobalID) {
   2330     return Reader->getSubmodule(GlobalID);
   2331   }
   2332 
   2333   /// \brief Read the record that describes the lexical contents of a DC.
   2334   bool readLexicalDeclContextStorage(uint64_t Offset, DeclContext *DC) {
   2335     return Reader->ReadLexicalDeclContextStorage(*F, F->DeclsCursor, Offset,
   2336                                                  DC);
   2337   }
   2338 
   2339   /// \brief Read the record that describes the visible contents of a DC.
   2340   bool readVisibleDeclContextStorage(uint64_t Offset,
   2341                                      serialization::DeclID ID) {
   2342     return Reader->ReadVisibleDeclContextStorage(*F, F->DeclsCursor, Offset,
   2343                                                  ID);
   2344   }
   2345 
   2346   void readExceptionSpec(SmallVectorImpl<QualType> &ExceptionStorage,
   2347                          FunctionProtoType::ExceptionSpecInfo &ESI) {
   2348     return Reader->readExceptionSpec(*F, ExceptionStorage, ESI, Record, Idx);
   2349   }
   2350 
   2351   /// \brief Get the global offset corresponding to a local offset.
   2352   uint64_t getGlobalBitOffset(uint32_t LocalOffset) {
   2353     return Reader->getGlobalBitOffset(*F, LocalOffset);
   2354   }
   2355 
   2356   /// \brief Reads a statement.
   2357   Stmt *readStmt() { return Reader->ReadStmt(*F); }
   2358 
   2359   /// \brief Reads an expression.
   2360   Expr *readExpr() { return Reader->ReadExpr(*F); }
   2361 
   2362   /// \brief Reads a sub-statement operand during statement reading.
   2363   Stmt *readSubStmt() { return Reader->ReadSubStmt(); }
   2364 
   2365   /// \brief Reads a sub-expression operand during statement reading.
   2366   Expr *readSubExpr() { return Reader->ReadSubExpr(); }
   2367 
   2368   /// \brief Reads a declaration with the given local ID in the given module.
   2369   ///
   2370   /// \returns The requested declaration, casted to the given return type.
   2371   template<typename T>
   2372   T *GetLocalDeclAs(uint32_t LocalID) {
   2373     return cast_or_null<T>(Reader->GetLocalDecl(*F, LocalID));
   2374   }
   2375 
   2376   /// \brief Reads a TemplateArgumentLocInfo appropriate for the
   2377   /// given TemplateArgument kind, advancing Idx.
   2378   TemplateArgumentLocInfo
   2379   getTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
   2380     return Reader->GetTemplateArgumentLocInfo(*F, Kind, Record, Idx);
   2381   }
   2382 
   2383   /// \brief Reads a TemplateArgumentLoc, advancing Idx.
   2384   TemplateArgumentLoc
   2385   readTemplateArgumentLoc() {
   2386     return Reader->ReadTemplateArgumentLoc(*F, Record, Idx);
   2387   }
   2388 
   2389   const ASTTemplateArgumentListInfo*
   2390   readASTTemplateArgumentListInfo() {
   2391     return Reader->ReadASTTemplateArgumentListInfo(*F, Record, Idx);
   2392   }
   2393 
   2394   /// \brief Reads a declarator info from the given record, advancing Idx.
   2395   TypeSourceInfo *getTypeSourceInfo() {
   2396     return Reader->GetTypeSourceInfo(*F, Record, Idx);
   2397   }
   2398 
   2399   /// \brief Map a local type ID within a given AST file to a global type ID.
   2400   serialization::TypeID getGlobalTypeID(unsigned LocalID) const {
   2401     return Reader->getGlobalTypeID(*F, LocalID);
   2402   }
   2403 
   2404   /// \brief Read a type from the current position in the record.
   2405   QualType readType() {
   2406     return Reader->readType(*F, Record, Idx);
   2407   }
   2408 
   2409   /// \brief Reads a declaration ID from the given position in this record.
   2410   ///
   2411   /// \returns The declaration ID read from the record, adjusted to a global ID.
   2412   serialization::DeclID readDeclID() {
   2413     return Reader->ReadDeclID(*F, Record, Idx);
   2414   }
   2415 
   2416   /// \brief Reads a declaration from the given position in a record in the
   2417   /// given module, advancing Idx.
   2418   Decl *readDecl() {
   2419     return Reader->ReadDecl(*F, Record, Idx);
   2420   }
   2421 
   2422   /// \brief Reads a declaration from the given position in the record,
   2423   /// advancing Idx.
   2424   ///
   2425   /// \returns The declaration read from this location, casted to the given
   2426   /// result type.
   2427   template<typename T>
   2428   T *readDeclAs() {
   2429     return Reader->ReadDeclAs<T>(*F, Record, Idx);
   2430   }
   2431 
   2432   IdentifierInfo *getIdentifierInfo() {
   2433     return Reader->GetIdentifierInfo(*F, Record, Idx);
   2434   }
   2435 
   2436   /// \brief Read a selector from the Record, advancing Idx.
   2437   Selector readSelector() {
   2438     return Reader->ReadSelector(*F, Record, Idx);
   2439   }
   2440 
   2441   /// \brief Read a declaration name, advancing Idx.
   2442   DeclarationName readDeclarationName() {
   2443     return Reader->ReadDeclarationName(*F, Record, Idx);
   2444   }
   2445   void readDeclarationNameLoc(DeclarationNameLoc &DNLoc, DeclarationName Name) {
   2446     return Reader->ReadDeclarationNameLoc(*F, DNLoc, Name, Record, Idx);
   2447   }
   2448   void readDeclarationNameInfo(DeclarationNameInfo &NameInfo) {
   2449     return Reader->ReadDeclarationNameInfo(*F, NameInfo, Record, Idx);
   2450   }
   2451 
   2452   void readQualifierInfo(QualifierInfo &Info) {
   2453     return Reader->ReadQualifierInfo(*F, Info, Record, Idx);
   2454   }
   2455 
   2456   NestedNameSpecifier *readNestedNameSpecifier() {
   2457     return Reader->ReadNestedNameSpecifier(*F, Record, Idx);
   2458   }
   2459 
   2460   NestedNameSpecifierLoc readNestedNameSpecifierLoc() {
   2461     return Reader->ReadNestedNameSpecifierLoc(*F, Record, Idx);
   2462   }
   2463 
   2464   /// \brief Read a template name, advancing Idx.
   2465   TemplateName readTemplateName() {
   2466     return Reader->ReadTemplateName(*F, Record, Idx);
   2467   }
   2468 
   2469   /// \brief Read a template argument, advancing Idx.
   2470   TemplateArgument readTemplateArgument(bool Canonicalize = false) {
   2471     return Reader->ReadTemplateArgument(*F, Record, Idx, Canonicalize);
   2472   }
   2473 
   2474   /// \brief Read a template parameter list, advancing Idx.
   2475   TemplateParameterList *readTemplateParameterList() {
   2476     return Reader->ReadTemplateParameterList(*F, Record, Idx);
   2477   }
   2478 
   2479   /// \brief Read a template argument array, advancing Idx.
   2480   void readTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
   2481                                 bool Canonicalize = false) {
   2482     return Reader->ReadTemplateArgumentList(TemplArgs, *F, Record, Idx,
   2483                                             Canonicalize);
   2484   }
   2485 
   2486   /// \brief Read a UnresolvedSet structure, advancing Idx.
   2487   void readUnresolvedSet(LazyASTUnresolvedSet &Set) {
   2488     return Reader->ReadUnresolvedSet(*F, Set, Record, Idx);
   2489   }
   2490 
   2491   /// \brief Read a C++ base specifier, advancing Idx.
   2492   CXXBaseSpecifier readCXXBaseSpecifier() {
   2493     return Reader->ReadCXXBaseSpecifier(*F, Record, Idx);
   2494   }
   2495 
   2496   /// \brief Read a CXXCtorInitializer array, advancing Idx.
   2497   CXXCtorInitializer **readCXXCtorInitializers() {
   2498     return Reader->ReadCXXCtorInitializers(*F, Record, Idx);
   2499   }
   2500 
   2501   CXXTemporary *readCXXTemporary() {
   2502     return Reader->ReadCXXTemporary(*F, Record, Idx);
   2503   }
   2504 
   2505   /// \brief Read a source location, advancing Idx.
   2506   SourceLocation readSourceLocation() {
   2507     return Reader->ReadSourceLocation(*F, Record, Idx);
   2508   }
   2509 
   2510   /// \brief Read a source range, advancing Idx.
   2511   SourceRange readSourceRange() {
   2512     return Reader->ReadSourceRange(*F, Record, Idx);
   2513   }
   2514 
   2515   /// \brief Read an integral value, advancing Idx.
   2516   llvm::APInt readAPInt() {
   2517     return Reader->ReadAPInt(Record, Idx);
   2518   }
   2519 
   2520   /// \brief Read a signed integral value, advancing Idx.
   2521   llvm::APSInt readAPSInt() {
   2522     return Reader->ReadAPSInt(Record, Idx);
   2523   }
   2524 
   2525   /// \brief Read a floating-point value, advancing Idx.
   2526   llvm::APFloat readAPFloat(const llvm::fltSemantics &Sem) {
   2527     return Reader->ReadAPFloat(Record, Sem,Idx);
   2528   }
   2529 
   2530   /// \brief Read a string, advancing Idx.
   2531   std::string readString() {
   2532     return Reader->ReadString(Record, Idx);
   2533   }
   2534 
   2535   /// \brief Read a path, advancing Idx.
   2536   std::string readPath() {
   2537     return Reader->ReadPath(*F, Record, Idx);
   2538   }
   2539 
   2540   /// \brief Read a version tuple, advancing Idx.
   2541   VersionTuple readVersionTuple() {
   2542     return ASTReader::ReadVersionTuple(Record, Idx);
   2543   }
   2544 
   2545   /// \brief Reads attributes from the current stream position, advancing Idx.
   2546   void readAttributes(AttrVec &Attrs) {
   2547     return Reader->ReadAttributes(*this, Attrs);
   2548   }
   2549 
   2550   /// \brief Reads a token out of a record, advancing Idx.
   2551   Token readToken() {
   2552     return Reader->ReadToken(*F, Record, Idx);
   2553   }
   2554 
   2555   void recordSwitchCaseID(SwitchCase *SC, unsigned ID) {
   2556     Reader->RecordSwitchCaseID(SC, ID);
   2557   }
   2558 
   2559   /// \brief Retrieve the switch-case statement with the given ID.
   2560   SwitchCase *getSwitchCaseWithID(unsigned ID) {
   2561     return Reader->getSwitchCaseWithID(ID);
   2562   }
   2563 };
   2564 
   2565 /// \brief Helper class that saves the current stream position and
   2566 /// then restores it when destroyed.
   2567 struct SavedStreamPosition {
   2568   explicit SavedStreamPosition(llvm::BitstreamCursor &Cursor)
   2569     : Cursor(Cursor), Offset(Cursor.GetCurrentBitNo()) { }
   2570 
   2571   ~SavedStreamPosition() {
   2572     Cursor.JumpToBit(Offset);
   2573   }
   2574 
   2575 private:
   2576   llvm::BitstreamCursor &Cursor;
   2577   uint64_t Offset;
   2578 };
   2579 
   2580 inline void PCHValidator::Error(const char *Msg) {
   2581   Reader.Error(Msg);
   2582 }
   2583 
   2584 } // end namespace clang
   2585 
   2586 #endif
   2587