• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===--- ASTReader.h - AST File Reader --------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file defines the ASTReader class, which reads AST files.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_FRONTEND_AST_READER_H
15 #define LLVM_CLANG_FRONTEND_AST_READER_H
16 
17 #include "clang/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/FileManager.h"
22 #include "clang/Basic/FileSystemOptions.h"
23 #include "clang/Basic/IdentifierTable.h"
24 #include "clang/Basic/SourceManager.h"
25 #include "clang/Basic/Version.h"
26 #include "clang/Lex/ExternalPreprocessorSource.h"
27 #include "clang/Lex/HeaderSearch.h"
28 #include "clang/Lex/PreprocessingRecord.h"
29 #include "clang/Sema/ExternalSemaSource.h"
30 #include "clang/Serialization/ASTBitCodes.h"
31 #include "clang/Serialization/ContinuousRangeMap.h"
32 #include "clang/Serialization/Module.h"
33 #include "clang/Serialization/ModuleManager.h"
34 #include "llvm/ADT/APFloat.h"
35 #include "llvm/ADT/APInt.h"
36 #include "llvm/ADT/APSInt.h"
37 #include "llvm/ADT/MapVector.h"
38 #include "llvm/ADT/SmallPtrSet.h"
39 #include "llvm/ADT/SmallSet.h"
40 #include "llvm/ADT/SmallVector.h"
41 #include "llvm/ADT/StringRef.h"
42 #include "llvm/ADT/TinyPtrVector.h"
43 #include "llvm/Bitcode/BitstreamReader.h"
44 #include "llvm/Support/DataTypes.h"
45 #include <deque>
46 #include <map>
47 #include <memory>
48 #include <string>
49 #include <utility>
50 #include <vector>
51 
52 namespace llvm {
53   class MemoryBuffer;
54 }
55 
56 namespace clang {
57 
58 class AddrLabelExpr;
59 class ASTConsumer;
60 class ASTContext;
61 class ASTIdentifierIterator;
62 class ASTUnit; // FIXME: Layering violation and egregious hack.
63 class Attr;
64 class Decl;
65 class DeclContext;
66 class DefMacroDirective;
67 class DiagnosticOptions;
68 class NestedNameSpecifier;
69 class CXXBaseSpecifier;
70 class CXXConstructorDecl;
71 class CXXCtorInitializer;
72 class GlobalModuleIndex;
73 class GotoStmt;
74 class MacroDefinition;
75 class MacroDirective;
76 class NamedDecl;
77 class OpaqueValueExpr;
78 class Preprocessor;
79 class PreprocessorOptions;
80 class Sema;
81 class SwitchCase;
82 class ASTDeserializationListener;
83 class ASTWriter;
84 class ASTReader;
85 class ASTDeclReader;
86 class ASTStmtReader;
87 class TypeLocReader;
88 struct HeaderFileInfo;
89 class VersionTuple;
90 class TargetOptions;
91 class LazyASTUnresolvedSet;
92 
93 /// \brief Abstract interface for callback invocations by the ASTReader.
94 ///
95 /// While reading an AST file, the ASTReader will call the methods of the
96 /// listener to pass on specific information. Some of the listener methods can
97 /// return true to indicate to the ASTReader that the information (and
98 /// consequently the AST file) is invalid.
99 class ASTReaderListener {
100 public:
101   virtual ~ASTReaderListener();
102 
103   /// \brief Receives the full Clang version information.
104   ///
105   /// \returns true to indicate that the version is invalid. Subclasses should
106   /// generally defer to this implementation.
ReadFullVersionInformation(StringRef FullVersion)107   virtual bool ReadFullVersionInformation(StringRef FullVersion) {
108     return FullVersion != getClangFullRepositoryVersion();
109   }
110 
ReadModuleName(StringRef ModuleName)111   virtual void ReadModuleName(StringRef ModuleName) {}
ReadModuleMapFile(StringRef ModuleMapPath)112   virtual void ReadModuleMapFile(StringRef ModuleMapPath) {}
113 
114   /// \brief Receives the language options.
115   ///
116   /// \returns true to indicate the options are invalid or false otherwise.
ReadLanguageOptions(const LangOptions & LangOpts,bool Complain)117   virtual bool ReadLanguageOptions(const LangOptions &LangOpts,
118                                    bool Complain) {
119     return false;
120   }
121 
122   /// \brief Receives the target options.
123   ///
124   /// \returns true to indicate the target options are invalid, or false
125   /// otherwise.
ReadTargetOptions(const TargetOptions & TargetOpts,bool Complain)126   virtual bool ReadTargetOptions(const TargetOptions &TargetOpts,
127                                  bool Complain) {
128     return false;
129   }
130 
131   /// \brief Receives the diagnostic options.
132   ///
133   /// \returns true to indicate the diagnostic options are invalid, or false
134   /// otherwise.
135   virtual bool
ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,bool Complain)136   ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
137                         bool Complain) {
138     return false;
139   }
140 
141   /// \brief Receives the file system options.
142   ///
143   /// \returns true to indicate the file system options are invalid, or false
144   /// otherwise.
ReadFileSystemOptions(const FileSystemOptions & FSOpts,bool Complain)145   virtual bool ReadFileSystemOptions(const FileSystemOptions &FSOpts,
146                                      bool Complain) {
147     return false;
148   }
149 
150   /// \brief Receives the header search options.
151   ///
152   /// \returns true to indicate the header search options are invalid, or false
153   /// otherwise.
ReadHeaderSearchOptions(const HeaderSearchOptions & HSOpts,bool Complain)154   virtual bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
155                                        bool Complain) {
156     return false;
157   }
158 
159   /// \brief Receives the preprocessor options.
160   ///
161   /// \param SuggestedPredefines Can be filled in with the set of predefines
162   /// that are suggested by the preprocessor options. Typically only used when
163   /// loading a precompiled header.
164   ///
165   /// \returns true to indicate the preprocessor options are invalid, or false
166   /// otherwise.
ReadPreprocessorOptions(const PreprocessorOptions & PPOpts,bool Complain,std::string & SuggestedPredefines)167   virtual bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
168                                        bool Complain,
169                                        std::string &SuggestedPredefines) {
170     return false;
171   }
172 
173   /// \brief Receives __COUNTER__ value.
ReadCounter(const serialization::ModuleFile & M,unsigned Value)174   virtual void ReadCounter(const serialization::ModuleFile &M,
175                            unsigned Value) {}
176 
177   /// This is called for each AST file loaded.
visitModuleFile(StringRef Filename)178   virtual void visitModuleFile(StringRef Filename) {}
179 
180   /// \brief Returns true if this \c ASTReaderListener wants to receive the
181   /// input files of the AST file via \c visitInputFile, false otherwise.
needsInputFileVisitation()182   virtual bool needsInputFileVisitation() { return false; }
183   /// \brief Returns true if this \c ASTReaderListener wants to receive the
184   /// system input files of the AST file via \c visitInputFile, false otherwise.
needsSystemInputFileVisitation()185   virtual bool needsSystemInputFileVisitation() { return false; }
186   /// \brief if \c needsInputFileVisitation returns true, this is called for
187   /// each non-system input file of the AST File. If
188   /// \c needsSystemInputFileVisitation is true, then it is called for all
189   /// system input files as well.
190   ///
191   /// \returns true to continue receiving the next input file, false to stop.
visitInputFile(StringRef Filename,bool isSystem,bool isOverridden)192   virtual bool visitInputFile(StringRef Filename, bool isSystem,
193                               bool isOverridden) {
194     return true;
195   }
196 };
197 
198 /// \brief Simple wrapper class for chaining listeners.
199 class ChainedASTReaderListener : public ASTReaderListener {
200   std::unique_ptr<ASTReaderListener> First;
201   std::unique_ptr<ASTReaderListener> Second;
202 
203 public:
204   /// Takes ownership of \p First and \p Second.
ChainedASTReaderListener(ASTReaderListener * First,ASTReaderListener * Second)205   ChainedASTReaderListener(ASTReaderListener *First, ASTReaderListener *Second)
206       : First(First), Second(Second) { }
207 
208   bool ReadFullVersionInformation(StringRef FullVersion) override;
209   void ReadModuleName(StringRef ModuleName) override;
210   void ReadModuleMapFile(StringRef ModuleMapPath) override;
211   bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain) override;
212   bool ReadTargetOptions(const TargetOptions &TargetOpts,
213                          bool Complain) override;
214   bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
215                              bool Complain) override;
216   bool ReadFileSystemOptions(const FileSystemOptions &FSOpts,
217                              bool Complain) override;
218 
219   bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
220                                bool Complain) override;
221   bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
222                                bool Complain,
223                                std::string &SuggestedPredefines) override;
224 
225   void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
226   bool needsInputFileVisitation() override;
227   bool needsSystemInputFileVisitation() override;
228   void visitModuleFile(StringRef Filename) override;
229   bool visitInputFile(StringRef Filename, bool isSystem,
230                       bool isOverridden) override;
231 };
232 
233 /// \brief ASTReaderListener implementation to validate the information of
234 /// the PCH file against an initialized Preprocessor.
235 class PCHValidator : public ASTReaderListener {
236   Preprocessor &PP;
237   ASTReader &Reader;
238 
239 public:
PCHValidator(Preprocessor & PP,ASTReader & Reader)240   PCHValidator(Preprocessor &PP, ASTReader &Reader)
241     : PP(PP), Reader(Reader) {}
242 
243   bool ReadLanguageOptions(const LangOptions &LangOpts,
244                            bool Complain) override;
245   bool ReadTargetOptions(const TargetOptions &TargetOpts,
246                          bool Complain) override;
247   bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
248                              bool Complain) override;
249   bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, bool Complain,
250                                std::string &SuggestedPredefines) override;
251   void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
252 
253 private:
254   void Error(const char *Msg);
255 };
256 
257 namespace serialization {
258 
259 class ReadMethodPoolVisitor;
260 
261 namespace reader {
262   class ASTIdentifierLookupTrait;
263   /// \brief The on-disk hash table used for the DeclContext's Name lookup table.
264   typedef llvm::OnDiskIterableChainedHashTable<ASTDeclContextNameLookupTrait>
265     ASTDeclContextNameLookupTable;
266 }
267 
268 } // end namespace serialization
269 
270 /// \brief Reads an AST files chain containing the contents of a translation
271 /// unit.
272 ///
273 /// The ASTReader class reads bitstreams (produced by the ASTWriter
274 /// class) containing the serialized representation of a given
275 /// abstract syntax tree and its supporting data structures. An
276 /// instance of the ASTReader can be attached to an ASTContext object,
277 /// which will provide access to the contents of the AST files.
278 ///
279 /// The AST reader provides lazy de-serialization of declarations, as
280 /// required when traversing the AST. Only those AST nodes that are
281 /// actually required will be de-serialized.
282 class ASTReader
283   : public ExternalPreprocessorSource,
284     public ExternalPreprocessingRecordSource,
285     public ExternalHeaderFileInfoSource,
286     public ExternalSemaSource,
287     public IdentifierInfoLookup,
288     public ExternalIdentifierLookup,
289     public ExternalSLocEntrySource
290 {
291 public:
292   typedef SmallVector<uint64_t, 64> RecordData;
293   typedef SmallVectorImpl<uint64_t> RecordDataImpl;
294 
295   /// \brief The result of reading the control block of an AST file, which
296   /// can fail for various reasons.
297   enum ASTReadResult {
298     /// \brief The control block was read successfully. Aside from failures,
299     /// the AST file is safe to read into the current context.
300     Success,
301     /// \brief The AST file itself appears corrupted.
302     Failure,
303     /// \brief The AST file was missing.
304     Missing,
305     /// \brief The AST file is out-of-date relative to its input files,
306     /// and needs to be regenerated.
307     OutOfDate,
308     /// \brief The AST file was written by a different version of Clang.
309     VersionMismatch,
310     /// \brief The AST file was writtten with a different language/target
311     /// configuration.
312     ConfigurationMismatch,
313     /// \brief The AST file has errors.
314     HadErrors
315   };
316 
317   /// \brief Types of AST files.
318   friend class PCHValidator;
319   friend class ASTDeclReader;
320   friend class ASTStmtReader;
321   friend class ASTIdentifierIterator;
322   friend class serialization::reader::ASTIdentifierLookupTrait;
323   friend class TypeLocReader;
324   friend class ASTWriter;
325   friend class ASTUnit; // ASTUnit needs to remap source locations.
326   friend class serialization::ReadMethodPoolVisitor;
327 
328   typedef serialization::ModuleFile ModuleFile;
329   typedef serialization::ModuleKind ModuleKind;
330   typedef serialization::ModuleManager ModuleManager;
331 
332   typedef ModuleManager::ModuleIterator ModuleIterator;
333   typedef ModuleManager::ModuleConstIterator ModuleConstIterator;
334   typedef ModuleManager::ModuleReverseIterator ModuleReverseIterator;
335 
336 private:
337   /// \brief The receiver of some callbacks invoked by ASTReader.
338   std::unique_ptr<ASTReaderListener> Listener;
339 
340   /// \brief The receiver of deserialization events.
341   ASTDeserializationListener *DeserializationListener;
342   bool OwnsDeserializationListener;
343 
344   SourceManager &SourceMgr;
345   FileManager &FileMgr;
346   DiagnosticsEngine &Diags;
347 
348   /// \brief The semantic analysis object that will be processing the
349   /// AST files and the translation unit that uses it.
350   Sema *SemaObj;
351 
352   /// \brief The preprocessor that will be loading the source file.
353   Preprocessor &PP;
354 
355   /// \brief The AST context into which we'll read the AST files.
356   ASTContext &Context;
357 
358   /// \brief The AST consumer.
359   ASTConsumer *Consumer;
360 
361   /// \brief The module manager which manages modules and their dependencies
362   ModuleManager ModuleMgr;
363 
364   /// \brief The location where the module file will be considered as
365   /// imported from. For non-module AST types it should be invalid.
366   SourceLocation CurrentImportLoc;
367 
368   /// \brief The global module index, if loaded.
369   std::unique_ptr<GlobalModuleIndex> GlobalIndex;
370 
371   /// \brief A map of global bit offsets to the module that stores entities
372   /// at those bit offsets.
373   ContinuousRangeMap<uint64_t, ModuleFile*, 4> GlobalBitOffsetsMap;
374 
375   /// \brief A map of negated SLocEntryIDs to the modules containing them.
376   ContinuousRangeMap<unsigned, ModuleFile*, 64> GlobalSLocEntryMap;
377 
378   typedef ContinuousRangeMap<unsigned, ModuleFile*, 64> GlobalSLocOffsetMapType;
379 
380   /// \brief A map of reversed (SourceManager::MaxLoadedOffset - SLocOffset)
381   /// SourceLocation offsets to the modules containing them.
382   GlobalSLocOffsetMapType GlobalSLocOffsetMap;
383 
384   /// \brief Types that have already been loaded from the chain.
385   ///
386   /// When the pointer at index I is non-NULL, the type with
387   /// ID = (I + 1) << FastQual::Width has already been loaded
388   std::vector<QualType> TypesLoaded;
389 
390   typedef ContinuousRangeMap<serialization::TypeID, ModuleFile *, 4>
391     GlobalTypeMapType;
392 
393   /// \brief Mapping from global type IDs to the module in which the
394   /// type resides along with the offset that should be added to the
395   /// global type ID to produce a local ID.
396   GlobalTypeMapType GlobalTypeMap;
397 
398   /// \brief Declarations that have already been loaded from the chain.
399   ///
400   /// When the pointer at index I is non-NULL, the declaration with ID
401   /// = I + 1 has already been loaded.
402   std::vector<Decl *> DeclsLoaded;
403 
404   typedef ContinuousRangeMap<serialization::DeclID, ModuleFile *, 4>
405     GlobalDeclMapType;
406 
407   /// \brief Mapping from global declaration IDs to the module in which the
408   /// declaration resides.
409   GlobalDeclMapType GlobalDeclMap;
410 
411   typedef std::pair<ModuleFile *, uint64_t> FileOffset;
412   typedef SmallVector<FileOffset, 2> FileOffsetsTy;
413   typedef llvm::DenseMap<serialization::DeclID, FileOffsetsTy>
414       DeclUpdateOffsetsMap;
415 
416   /// \brief Declarations that have modifications residing in a later file
417   /// in the chain.
418   DeclUpdateOffsetsMap DeclUpdateOffsets;
419 
420   /// \brief Declaration updates for already-loaded declarations that we need
421   /// to apply once we finish processing an import.
422   llvm::SmallVector<std::pair<serialization::GlobalDeclID, Decl*>, 16>
423       PendingUpdateRecords;
424 
425   struct ReplacedDeclInfo {
426     ModuleFile *Mod;
427     uint64_t Offset;
428     unsigned RawLoc;
429 
ReplacedDeclInfoReplacedDeclInfo430     ReplacedDeclInfo() : Mod(nullptr), Offset(0), RawLoc(0) {}
ReplacedDeclInfoReplacedDeclInfo431     ReplacedDeclInfo(ModuleFile *Mod, uint64_t Offset, unsigned RawLoc)
432       : Mod(Mod), Offset(Offset), RawLoc(RawLoc) {}
433   };
434 
435   typedef llvm::DenseMap<serialization::DeclID, ReplacedDeclInfo>
436       DeclReplacementMap;
437   /// \brief Declarations that have been replaced in a later file in the chain.
438   DeclReplacementMap ReplacedDecls;
439 
440   struct FileDeclsInfo {
441     ModuleFile *Mod;
442     ArrayRef<serialization::LocalDeclID> Decls;
443 
FileDeclsInfoFileDeclsInfo444     FileDeclsInfo() : Mod(nullptr) {}
FileDeclsInfoFileDeclsInfo445     FileDeclsInfo(ModuleFile *Mod, ArrayRef<serialization::LocalDeclID> Decls)
446       : Mod(Mod), Decls(Decls) {}
447   };
448 
449   /// \brief Map from a FileID to the file-level declarations that it contains.
450   llvm::DenseMap<FileID, FileDeclsInfo> FileDeclIDs;
451 
452   // Updates for visible decls can occur for other contexts than just the
453   // TU, and when we read those update records, the actual context will not
454   // be available yet (unless it's the TU), so have this pending map using the
455   // ID as a key. It will be realized when the context is actually loaded.
456   typedef
457     SmallVector<std::pair<serialization::reader::ASTDeclContextNameLookupTable *,
458                           ModuleFile*>, 1> DeclContextVisibleUpdates;
459   typedef llvm::DenseMap<serialization::DeclID, DeclContextVisibleUpdates>
460       DeclContextVisibleUpdatesPending;
461 
462   /// \brief Updates to the visible declarations of declaration contexts that
463   /// haven't been loaded yet.
464   DeclContextVisibleUpdatesPending PendingVisibleUpdates;
465 
466   /// \brief The set of C++ or Objective-C classes that have forward
467   /// declarations that have not yet been linked to their definitions.
468   llvm::SmallPtrSet<Decl *, 4> PendingDefinitions;
469 
470   typedef llvm::MapVector<Decl *, uint64_t,
471                           llvm::SmallDenseMap<Decl *, unsigned, 4>,
472                           SmallVector<std::pair<Decl *, uint64_t>, 4> >
473     PendingBodiesMap;
474 
475   /// \brief Functions or methods that have bodies that will be attached.
476   PendingBodiesMap PendingBodies;
477 
478   /// \brief Read the records that describe the contents of declcontexts.
479   bool ReadDeclContextStorage(ModuleFile &M,
480                               llvm::BitstreamCursor &Cursor,
481                               const std::pair<uint64_t, uint64_t> &Offsets,
482                               serialization::DeclContextInfo &Info);
483 
484   /// \brief A vector containing identifiers that have already been
485   /// loaded.
486   ///
487   /// If the pointer at index I is non-NULL, then it refers to the
488   /// IdentifierInfo for the identifier with ID=I+1 that has already
489   /// been loaded.
490   std::vector<IdentifierInfo *> IdentifiersLoaded;
491 
492   typedef ContinuousRangeMap<serialization::IdentID, ModuleFile *, 4>
493     GlobalIdentifierMapType;
494 
495   /// \brief Mapping from global identifier IDs to the module in which the
496   /// identifier resides along with the offset that should be added to the
497   /// global identifier ID to produce a local ID.
498   GlobalIdentifierMapType GlobalIdentifierMap;
499 
500   /// \brief A vector containing macros that have already been
501   /// loaded.
502   ///
503   /// If the pointer at index I is non-NULL, then it refers to the
504   /// MacroInfo for the identifier with ID=I+1 that has already
505   /// been loaded.
506   std::vector<MacroInfo *> MacrosLoaded;
507 
508   typedef ContinuousRangeMap<serialization::MacroID, ModuleFile *, 4>
509     GlobalMacroMapType;
510 
511   /// \brief Mapping from global macro IDs to the module in which the
512   /// macro resides along with the offset that should be added to the
513   /// global macro ID to produce a local ID.
514   GlobalMacroMapType GlobalMacroMap;
515 
516   /// \brief A vector containing submodules that have already been loaded.
517   ///
518   /// This vector is indexed by the Submodule ID (-1). NULL submodule entries
519   /// indicate that the particular submodule ID has not yet been loaded.
520   SmallVector<Module *, 2> SubmodulesLoaded;
521 
522   typedef ContinuousRangeMap<serialization::SubmoduleID, ModuleFile *, 4>
523     GlobalSubmoduleMapType;
524 
525   /// \brief Mapping from global submodule IDs to the module file in which the
526   /// submodule resides along with the offset that should be added to the
527   /// global submodule ID to produce a local ID.
528   GlobalSubmoduleMapType GlobalSubmoduleMap;
529 
530   /// \brief Information on a macro definition or undefinition that is visible
531   /// at the end of a submodule.
532   struct ModuleMacroInfo;
533 
534   /// \brief An entity that has been hidden.
535   class HiddenName {
536   public:
537     enum NameKind {
538       Declaration,
539       Macro
540     } Kind;
541 
542   private:
543     union {
544       Decl *D;
545       ModuleMacroInfo *MMI;
546     };
547 
548     IdentifierInfo *Id;
549 
550   public:
HiddenName(Decl * D)551     HiddenName(Decl *D) : Kind(Declaration), D(D), Id() { }
552 
HiddenName(IdentifierInfo * II,ModuleMacroInfo * MMI)553     HiddenName(IdentifierInfo *II, ModuleMacroInfo *MMI)
554       : Kind(Macro), MMI(MMI), Id(II) { }
555 
getKind()556     NameKind getKind() const { return Kind; }
557 
getDecl()558     Decl *getDecl() const {
559       assert(getKind() == Declaration && "Hidden name is not a declaration");
560       return D;
561     }
562 
getMacro()563     std::pair<IdentifierInfo *, ModuleMacroInfo *> getMacro() const {
564       assert(getKind() == Macro && "Hidden name is not a macro!");
565       return std::make_pair(Id, MMI);
566     }
567   };
568 
569   typedef llvm::SmallDenseMap<IdentifierInfo*,
570                               ModuleMacroInfo*> HiddenMacrosMap;
571 
572   /// \brief A set of hidden declarations.
573   struct HiddenNames {
574     SmallVector<Decl*, 2> HiddenDecls;
575     HiddenMacrosMap HiddenMacros;
576   };
577 
578   typedef llvm::DenseMap<Module *, HiddenNames> HiddenNamesMapType;
579 
580   /// \brief A mapping from each of the hidden submodules to the deserialized
581   /// declarations in that submodule that could be made visible.
582   HiddenNamesMapType HiddenNamesMap;
583 
584 
585   /// \brief A module import, export, or conflict that hasn't yet been resolved.
586   struct UnresolvedModuleRef {
587     /// \brief The file in which this module resides.
588     ModuleFile *File;
589 
590     /// \brief The module that is importing or exporting.
591     Module *Mod;
592 
593     /// \brief The kind of module reference.
594     enum { Import, Export, Conflict } Kind;
595 
596     /// \brief The local ID of the module that is being exported.
597     unsigned ID;
598 
599     /// \brief Whether this is a wildcard export.
600     unsigned IsWildcard : 1;
601 
602     /// \brief String data.
603     StringRef String;
604   };
605 
606   /// \brief The set of module imports and exports that still need to be
607   /// resolved.
608   SmallVector<UnresolvedModuleRef, 2> UnresolvedModuleRefs;
609 
610   /// \brief A vector containing selectors that have already been loaded.
611   ///
612   /// This vector is indexed by the Selector ID (-1). NULL selector
613   /// entries indicate that the particular selector ID has not yet
614   /// been loaded.
615   SmallVector<Selector, 16> SelectorsLoaded;
616 
617   typedef ContinuousRangeMap<serialization::SelectorID, ModuleFile *, 4>
618     GlobalSelectorMapType;
619 
620   /// \brief Mapping from global selector IDs to the module in which the
621 
622   /// global selector ID to produce a local ID.
623   GlobalSelectorMapType GlobalSelectorMap;
624 
625   /// \brief The generation number of the last time we loaded data from the
626   /// global method pool for this selector.
627   llvm::DenseMap<Selector, unsigned> SelectorGeneration;
628 
629   struct PendingMacroInfo {
630     ModuleFile *M;
631 
632     struct ModuleMacroDataTy {
633       uint32_t MacID;
634       serialization::SubmoduleID *Overrides;
635     };
636     struct PCHMacroDataTy {
637       uint64_t MacroDirectivesOffset;
638     };
639 
640     union {
641       ModuleMacroDataTy ModuleMacroData;
642       PCHMacroDataTy PCHMacroData;
643     };
644 
PendingMacroInfoPendingMacroInfo645     PendingMacroInfo(ModuleFile *M,
646                      uint32_t MacID,
647                      serialization::SubmoduleID *Overrides) : M(M) {
648       ModuleMacroData.MacID = MacID;
649       ModuleMacroData.Overrides = Overrides;
650     }
651 
PendingMacroInfoPendingMacroInfo652     PendingMacroInfo(ModuleFile *M, uint64_t MacroDirectivesOffset) : M(M) {
653       PCHMacroData.MacroDirectivesOffset = MacroDirectivesOffset;
654     }
655   };
656 
657   typedef llvm::MapVector<IdentifierInfo *, SmallVector<PendingMacroInfo, 2> >
658     PendingMacroIDsMap;
659 
660   /// \brief Mapping from identifiers that have a macro history to the global
661   /// IDs have not yet been deserialized to the global IDs of those macros.
662   PendingMacroIDsMap PendingMacroIDs;
663 
664   typedef ContinuousRangeMap<unsigned, ModuleFile *, 4>
665     GlobalPreprocessedEntityMapType;
666 
667   /// \brief Mapping from global preprocessing entity IDs to the module in
668   /// which the preprocessed entity resides along with the offset that should be
669   /// added to the global preprocessing entitiy ID to produce a local ID.
670   GlobalPreprocessedEntityMapType GlobalPreprocessedEntityMap;
671 
672   /// \name CodeGen-relevant special data
673   /// \brief Fields containing data that is relevant to CodeGen.
674   //@{
675 
676   /// \brief The IDs of all declarations that fulfill the criteria of
677   /// "interesting" decls.
678   ///
679   /// This contains the data loaded from all EAGERLY_DESERIALIZED_DECLS blocks
680   /// in the chain. The referenced declarations are deserialized and passed to
681   /// the consumer eagerly.
682   SmallVector<uint64_t, 16> EagerlyDeserializedDecls;
683 
684   /// \brief The IDs of all tentative definitions stored in the chain.
685   ///
686   /// Sema keeps track of all tentative definitions in a TU because it has to
687   /// complete them and pass them on to CodeGen. Thus, tentative definitions in
688   /// the PCH chain must be eagerly deserialized.
689   SmallVector<uint64_t, 16> TentativeDefinitions;
690 
691   /// \brief The IDs of all CXXRecordDecls stored in the chain whose VTables are
692   /// used.
693   ///
694   /// CodeGen has to emit VTables for these records, so they have to be eagerly
695   /// deserialized.
696   SmallVector<uint64_t, 64> VTableUses;
697 
698   /// \brief A snapshot of the pending instantiations in the chain.
699   ///
700   /// This record tracks the instantiations that Sema has to perform at the
701   /// end of the TU. It consists of a pair of values for every pending
702   /// instantiation where the first value is the ID of the decl and the second
703   /// is the instantiation location.
704   SmallVector<uint64_t, 64> PendingInstantiations;
705 
706   //@}
707 
708   /// \name DiagnosticsEngine-relevant special data
709   /// \brief Fields containing data that is used for generating diagnostics
710   //@{
711 
712   /// \brief A snapshot of Sema's unused file-scoped variable tracking, for
713   /// generating warnings.
714   SmallVector<uint64_t, 16> UnusedFileScopedDecls;
715 
716   /// \brief A list of all the delegating constructors we've seen, to diagnose
717   /// cycles.
718   SmallVector<uint64_t, 4> DelegatingCtorDecls;
719 
720   /// \brief Method selectors used in a @selector expression. Used for
721   /// implementation of -Wselector.
722   SmallVector<uint64_t, 64> ReferencedSelectorsData;
723 
724   /// \brief A snapshot of Sema's weak undeclared identifier tracking, for
725   /// generating warnings.
726   SmallVector<uint64_t, 64> WeakUndeclaredIdentifiers;
727 
728   /// \brief The IDs of type aliases for ext_vectors that exist in the chain.
729   ///
730   /// Used by Sema for finding sugared names for ext_vectors in diagnostics.
731   SmallVector<uint64_t, 4> ExtVectorDecls;
732 
733   //@}
734 
735   /// \name Sema-relevant special data
736   /// \brief Fields containing data that is used for semantic analysis
737   //@{
738 
739   /// \brief The IDs of all locally scoped extern "C" decls in the chain.
740   ///
741   /// Sema tracks these to validate that the types are consistent across all
742   /// local extern "C" declarations.
743   SmallVector<uint64_t, 16> LocallyScopedExternCDecls;
744 
745   /// \brief The IDs of all dynamic class declarations in the chain.
746   ///
747   /// Sema tracks these because it checks for the key functions being defined
748   /// at the end of the TU, in which case it directs CodeGen to emit the VTable.
749   SmallVector<uint64_t, 16> DynamicClasses;
750 
751   /// \brief The IDs of the declarations Sema stores directly.
752   ///
753   /// Sema tracks a few important decls, such as namespace std, directly.
754   SmallVector<uint64_t, 4> SemaDeclRefs;
755 
756   /// \brief The IDs of the types ASTContext stores directly.
757   ///
758   /// The AST context tracks a few important types, such as va_list, directly.
759   SmallVector<uint64_t, 16> SpecialTypes;
760 
761   /// \brief The IDs of CUDA-specific declarations ASTContext stores directly.
762   ///
763   /// The AST context tracks a few important decls, currently cudaConfigureCall,
764   /// directly.
765   SmallVector<uint64_t, 2> CUDASpecialDeclRefs;
766 
767   /// \brief The floating point pragma option settings.
768   SmallVector<uint64_t, 1> FPPragmaOptions;
769 
770   /// \brief The pragma clang optimize location (if the pragma state is "off").
771   SourceLocation OptimizeOffPragmaLocation;
772 
773   /// \brief The OpenCL extension settings.
774   SmallVector<uint64_t, 1> OpenCLExtensions;
775 
776   /// \brief A list of the namespaces we've seen.
777   SmallVector<uint64_t, 4> KnownNamespaces;
778 
779   /// \brief A list of undefined decls with internal linkage followed by the
780   /// SourceLocation of a matching ODR-use.
781   SmallVector<uint64_t, 8> UndefinedButUsed;
782 
783   // \brief A list of late parsed template function data.
784   SmallVector<uint64_t, 1> LateParsedTemplates;
785 
786   struct ImportedSubmodule {
787     serialization::SubmoduleID ID;
788     SourceLocation ImportLoc;
789 
ImportedSubmoduleImportedSubmodule790     ImportedSubmodule(serialization::SubmoduleID ID, SourceLocation ImportLoc)
791       : ID(ID), ImportLoc(ImportLoc) {}
792   };
793 
794   /// \brief A list of modules that were imported by precompiled headers or
795   /// any other non-module AST file.
796   SmallVector<ImportedSubmodule, 2> ImportedModules;
797   //@}
798 
799   /// \brief The directory that the PCH we are reading is stored in.
800   std::string CurrentDir;
801 
802   /// \brief The system include root to be used when loading the
803   /// precompiled header.
804   std::string isysroot;
805 
806   /// \brief Whether to disable the normal validation performed on precompiled
807   /// headers when they are loaded.
808   bool DisableValidation;
809 
810   /// \brief Whether to accept an AST file with compiler errors.
811   bool AllowASTWithCompilerErrors;
812 
813   /// \brief Whether to accept an AST file that has a different configuration
814   /// from the current compiler instance.
815   bool AllowConfigurationMismatch;
816 
817   /// \brief Whether validate system input files.
818   bool ValidateSystemInputs;
819 
820   /// \brief Whether we are allowed to use the global module index.
821   bool UseGlobalIndex;
822 
823   /// \brief Whether we have tried loading the global module index yet.
824   bool TriedLoadingGlobalIndex;
825 
826   typedef llvm::DenseMap<unsigned, SwitchCase *> SwitchCaseMapTy;
827   /// \brief Mapping from switch-case IDs in the chain to switch-case statements
828   ///
829   /// Statements usually don't have IDs, but switch cases need them, so that the
830   /// switch statement can refer to them.
831   SwitchCaseMapTy SwitchCaseStmts;
832 
833   SwitchCaseMapTy *CurrSwitchCaseStmts;
834 
835   /// \brief The number of source location entries de-serialized from
836   /// the PCH file.
837   unsigned NumSLocEntriesRead;
838 
839   /// \brief The number of source location entries in the chain.
840   unsigned TotalNumSLocEntries;
841 
842   /// \brief The number of statements (and expressions) de-serialized
843   /// from the chain.
844   unsigned NumStatementsRead;
845 
846   /// \brief The total number of statements (and expressions) stored
847   /// in the chain.
848   unsigned TotalNumStatements;
849 
850   /// \brief The number of macros de-serialized from the chain.
851   unsigned NumMacrosRead;
852 
853   /// \brief The total number of macros stored in the chain.
854   unsigned TotalNumMacros;
855 
856   /// \brief The number of lookups into identifier tables.
857   unsigned NumIdentifierLookups;
858 
859   /// \brief The number of lookups into identifier tables that succeed.
860   unsigned NumIdentifierLookupHits;
861 
862   /// \brief The number of selectors that have been read.
863   unsigned NumSelectorsRead;
864 
865   /// \brief The number of method pool entries that have been read.
866   unsigned NumMethodPoolEntriesRead;
867 
868   /// \brief The number of times we have looked up a selector in the method
869   /// pool.
870   unsigned NumMethodPoolLookups;
871 
872   /// \brief The number of times we have looked up a selector in the method
873   /// pool and found something.
874   unsigned NumMethodPoolHits;
875 
876   /// \brief The number of times we have looked up a selector in the method
877   /// pool within a specific module.
878   unsigned NumMethodPoolTableLookups;
879 
880   /// \brief The number of times we have looked up a selector in the method
881   /// pool within a specific module and found something.
882   unsigned NumMethodPoolTableHits;
883 
884   /// \brief The total number of method pool entries in the selector table.
885   unsigned TotalNumMethodPoolEntries;
886 
887   /// Number of lexical decl contexts read/total.
888   unsigned NumLexicalDeclContextsRead, TotalLexicalDeclContexts;
889 
890   /// Number of visible decl contexts read/total.
891   unsigned NumVisibleDeclContextsRead, TotalVisibleDeclContexts;
892 
893   /// Total size of modules, in bits, currently loaded
894   uint64_t TotalModulesSizeInBits;
895 
896   /// \brief Number of Decl/types that are currently deserializing.
897   unsigned NumCurrentElementsDeserializing;
898 
899   /// \brief Set true while we are in the process of passing deserialized
900   /// "interesting" decls to consumer inside FinishedDeserializing().
901   /// This is used as a guard to avoid recursively repeating the process of
902   /// passing decls to consumer.
903   bool PassingDeclsToConsumer;
904 
905   /// Number of CXX base specifiers currently loaded
906   unsigned NumCXXBaseSpecifiersLoaded;
907 
908   /// \brief The set of identifiers that were read while the AST reader was
909   /// (recursively) loading declarations.
910   ///
911   /// The declarations on the identifier chain for these identifiers will be
912   /// loaded once the recursive loading has completed.
913   llvm::MapVector<IdentifierInfo *, SmallVector<uint32_t, 4> >
914     PendingIdentifierInfos;
915 
916   /// \brief The generation number of each identifier, which keeps track of
917   /// the last time we loaded information about this identifier.
918   llvm::DenseMap<IdentifierInfo *, unsigned> IdentifierGeneration;
919 
920   /// \brief Contains declarations and definitions that will be
921   /// "interesting" to the ASTConsumer, when we get that AST consumer.
922   ///
923   /// "Interesting" declarations are those that have data that may
924   /// need to be emitted, such as inline function definitions or
925   /// Objective-C protocols.
926   std::deque<Decl *> InterestingDecls;
927 
928   /// \brief The set of redeclarable declarations that have been deserialized
929   /// since the last time the declaration chains were linked.
930   llvm::SmallPtrSet<Decl *, 16> RedeclsDeserialized;
931 
932   /// \brief The list of redeclaration chains that still need to be
933   /// reconstructed.
934   ///
935   /// Each element is the global declaration ID of the first declaration in
936   /// the chain. Elements in this vector should be unique; use
937   /// PendingDeclChainsKnown to ensure uniqueness.
938   SmallVector<serialization::DeclID, 16> PendingDeclChains;
939 
940   /// \brief Keeps track of the elements added to PendingDeclChains.
941   llvm::SmallSet<serialization::DeclID, 16> PendingDeclChainsKnown;
942 
943   /// \brief The list of canonical declarations whose redeclaration chains
944   /// need to be marked as incomplete once we're done deserializing things.
945   SmallVector<Decl *, 16> PendingIncompleteDeclChains;
946 
947   /// \brief The Decl IDs for the Sema/Lexical DeclContext of a Decl that has
948   /// been loaded but its DeclContext was not set yet.
949   struct PendingDeclContextInfo {
950     Decl *D;
951     serialization::GlobalDeclID SemaDC;
952     serialization::GlobalDeclID LexicalDC;
953   };
954 
955   /// \brief The set of Decls that have been loaded but their DeclContexts are
956   /// not set yet.
957   ///
958   /// The DeclContexts for these Decls will be set once recursive loading has
959   /// been completed.
960   std::deque<PendingDeclContextInfo> PendingDeclContextInfos;
961 
962   /// \brief The set of NamedDecls that have been loaded, but are members of a
963   /// context that has been merged into another context where the corresponding
964   /// declaration is either missing or has not yet been loaded.
965   ///
966   /// We will check whether the corresponding declaration is in fact missing
967   /// once recursing loading has been completed.
968   llvm::SmallVector<NamedDecl *, 16> PendingOdrMergeChecks;
969 
970   /// \brief Record definitions in which we found an ODR violation.
971   llvm::SmallDenseMap<CXXRecordDecl *, llvm::TinyPtrVector<CXXRecordDecl *>, 2>
972       PendingOdrMergeFailures;
973 
974   /// \brief DeclContexts in which we have diagnosed an ODR violation.
975   llvm::SmallPtrSet<DeclContext*, 2> DiagnosedOdrMergeFailures;
976 
977   /// \brief The set of Objective-C categories that have been deserialized
978   /// since the last time the declaration chains were linked.
979   llvm::SmallPtrSet<ObjCCategoryDecl *, 16> CategoriesDeserialized;
980 
981   /// \brief The set of Objective-C class definitions that have already been
982   /// loaded, for which we will need to check for categories whenever a new
983   /// module is loaded.
984   SmallVector<ObjCInterfaceDecl *, 16> ObjCClassesLoaded;
985 
986   /// \brief A mapping from a primary context for a declaration chain to the
987   /// other declarations of that entity that also have name lookup tables.
988   /// Used when we merge together two class definitions that have different
989   /// sets of declared special member functions.
990   llvm::DenseMap<const DeclContext*, SmallVector<const DeclContext*, 2>>
991       MergedLookups;
992 
993   typedef llvm::DenseMap<Decl *, SmallVector<serialization::DeclID, 2> >
994     MergedDeclsMap;
995 
996   /// \brief A mapping from canonical declarations to the set of additional
997   /// (global, previously-canonical) declaration IDs that have been merged with
998   /// that canonical declaration.
999   MergedDeclsMap MergedDecls;
1000 
1001   typedef llvm::DenseMap<serialization::GlobalDeclID,
1002                          SmallVector<serialization::DeclID, 2> >
1003     StoredMergedDeclsMap;
1004 
1005   /// \brief A mapping from canonical declaration IDs to the set of additional
1006   /// declaration IDs that have been merged with that canonical declaration.
1007   ///
1008   /// This is the deserialized representation of the entries in MergedDecls.
1009   /// When we query entries in MergedDecls, they will be augmented with entries
1010   /// from StoredMergedDecls.
1011   StoredMergedDeclsMap StoredMergedDecls;
1012 
1013   /// \brief Combine the stored merged declarations for the given canonical
1014   /// declaration into the set of merged declarations.
1015   ///
1016   /// \returns An iterator into MergedDecls that corresponds to the position of
1017   /// the given canonical declaration.
1018   MergedDeclsMap::iterator
1019   combineStoredMergedDecls(Decl *Canon, serialization::GlobalDeclID CanonID);
1020 
1021   /// \brief A mapping from DeclContexts to the semantic DeclContext that we
1022   /// are treating as the definition of the entity. This is used, for instance,
1023   /// when merging implicit instantiations of class templates across modules.
1024   llvm::DenseMap<DeclContext *, DeclContext *> MergedDeclContexts;
1025 
1026   /// \brief A mapping from canonical declarations of enums to their canonical
1027   /// definitions. Only populated when using modules in C++.
1028   llvm::DenseMap<EnumDecl *, EnumDecl *> EnumDefinitions;
1029 
1030   /// \brief When reading a Stmt tree, Stmt operands are placed in this stack.
1031   SmallVector<Stmt *, 16> StmtStack;
1032 
1033   /// \brief What kind of records we are reading.
1034   enum ReadingKind {
1035     Read_None, Read_Decl, Read_Type, Read_Stmt
1036   };
1037 
1038   /// \brief What kind of records we are reading.
1039   ReadingKind ReadingKind;
1040 
1041   /// \brief RAII object to change the reading kind.
1042   class ReadingKindTracker {
1043     ASTReader &Reader;
1044     enum ReadingKind PrevKind;
1045 
1046     ReadingKindTracker(const ReadingKindTracker &) LLVM_DELETED_FUNCTION;
1047     void operator=(const ReadingKindTracker &) LLVM_DELETED_FUNCTION;
1048 
1049   public:
ReadingKindTracker(enum ReadingKind newKind,ASTReader & reader)1050     ReadingKindTracker(enum ReadingKind newKind, ASTReader &reader)
1051       : Reader(reader), PrevKind(Reader.ReadingKind) {
1052       Reader.ReadingKind = newKind;
1053     }
1054 
~ReadingKindTracker()1055     ~ReadingKindTracker() { Reader.ReadingKind = PrevKind; }
1056   };
1057 
1058   /// \brief Suggested contents of the predefines buffer, after this
1059   /// PCH file has been processed.
1060   ///
1061   /// In most cases, this string will be empty, because the predefines
1062   /// buffer computed to build the PCH file will be identical to the
1063   /// predefines buffer computed from the command line. However, when
1064   /// there are differences that the PCH reader can work around, this
1065   /// predefines buffer may contain additional definitions.
1066   std::string SuggestedPredefines;
1067 
1068   /// \brief Reads a statement from the specified cursor.
1069   Stmt *ReadStmtFromStream(ModuleFile &F);
1070 
1071   struct InputFileInfo {
1072     std::string Filename;
1073     off_t StoredSize;
1074     time_t StoredTime;
1075     bool Overridden;
1076   };
1077 
1078   /// \brief Reads the stored information about an input file.
1079   InputFileInfo readInputFileInfo(ModuleFile &F, unsigned ID);
1080   /// \brief A convenience method to read the filename from an input file.
1081   std::string getInputFileName(ModuleFile &F, unsigned ID);
1082 
1083   /// \brief Retrieve the file entry and 'overridden' bit for an input
1084   /// file in the given module file.
1085   serialization::InputFile getInputFile(ModuleFile &F, unsigned ID,
1086                                         bool Complain = true);
1087 
1088   /// \brief Get a FileEntry out of stored-in-PCH filename, making sure we take
1089   /// into account all the necessary relocations.
1090   const FileEntry *getFileEntry(StringRef filename);
1091 
1092   void MaybeAddSystemRootToFilename(ModuleFile &M, std::string &Filename);
1093 
1094   struct ImportedModule {
1095     ModuleFile *Mod;
1096     ModuleFile *ImportedBy;
1097     SourceLocation ImportLoc;
1098 
ImportedModuleImportedModule1099     ImportedModule(ModuleFile *Mod,
1100                    ModuleFile *ImportedBy,
1101                    SourceLocation ImportLoc)
1102       : Mod(Mod), ImportedBy(ImportedBy), ImportLoc(ImportLoc) { }
1103   };
1104 
1105   ASTReadResult ReadASTCore(StringRef FileName, ModuleKind Type,
1106                             SourceLocation ImportLoc, ModuleFile *ImportedBy,
1107                             SmallVectorImpl<ImportedModule> &Loaded,
1108                             off_t ExpectedSize, time_t ExpectedModTime,
1109                             unsigned ClientLoadCapabilities);
1110   ASTReadResult ReadControlBlock(ModuleFile &F,
1111                                  SmallVectorImpl<ImportedModule> &Loaded,
1112                                  const ModuleFile *ImportedBy,
1113                                  unsigned ClientLoadCapabilities);
1114   ASTReadResult ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities);
1115   bool ParseLineTable(ModuleFile &F, SmallVectorImpl<uint64_t> &Record);
1116   bool ReadSourceManagerBlock(ModuleFile &F);
1117   llvm::BitstreamCursor &SLocCursorForID(int ID);
1118   SourceLocation getImportLocation(ModuleFile *F);
1119   ASTReadResult ReadSubmoduleBlock(ModuleFile &F,
1120                                    unsigned ClientLoadCapabilities);
1121   static bool ParseLanguageOptions(const RecordData &Record, bool Complain,
1122                                    ASTReaderListener &Listener);
1123   static bool ParseTargetOptions(const RecordData &Record, bool Complain,
1124                                  ASTReaderListener &Listener);
1125   static bool ParseDiagnosticOptions(const RecordData &Record, bool Complain,
1126                                      ASTReaderListener &Listener);
1127   static bool ParseFileSystemOptions(const RecordData &Record, bool Complain,
1128                                      ASTReaderListener &Listener);
1129   static bool ParseHeaderSearchOptions(const RecordData &Record, bool Complain,
1130                                        ASTReaderListener &Listener);
1131   static bool ParsePreprocessorOptions(const RecordData &Record, bool Complain,
1132                                        ASTReaderListener &Listener,
1133                                        std::string &SuggestedPredefines);
1134 
1135   struct RecordLocation {
RecordLocationRecordLocation1136     RecordLocation(ModuleFile *M, uint64_t O)
1137       : F(M), Offset(O) {}
1138     ModuleFile *F;
1139     uint64_t Offset;
1140   };
1141 
1142   QualType readTypeRecord(unsigned Index);
1143   void readExceptionSpec(ModuleFile &ModuleFile,
1144                          SmallVectorImpl<QualType> &ExceptionStorage,
1145                          FunctionProtoType::ExtProtoInfo &EPI,
1146                          const RecordData &Record, unsigned &Index);
1147   RecordLocation TypeCursorForIndex(unsigned Index);
1148   void LoadedDecl(unsigned Index, Decl *D);
1149   Decl *ReadDeclRecord(serialization::DeclID ID);
1150   void markIncompleteDeclChain(Decl *Canon);
1151   RecordLocation DeclCursorForID(serialization::DeclID ID,
1152                                  unsigned &RawLocation);
1153   void loadDeclUpdateRecords(serialization::DeclID ID, Decl *D);
1154   void loadPendingDeclChain(serialization::GlobalDeclID ID);
1155   void loadObjCCategories(serialization::GlobalDeclID ID, ObjCInterfaceDecl *D,
1156                           unsigned PreviousGeneration = 0);
1157 
1158   RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
1159   uint64_t getGlobalBitOffset(ModuleFile &M, uint32_t LocalOffset);
1160 
1161   /// \brief Returns the first preprocessed entity ID that begins or ends after
1162   /// \arg Loc.
1163   serialization::PreprocessedEntityID
1164   findPreprocessedEntity(SourceLocation Loc, bool EndsAfter) const;
1165 
1166   /// \brief Find the next module that contains entities and return the ID
1167   /// of the first entry.
1168   ///
1169   /// \param SLocMapI points at a chunk of a module that contains no
1170   /// preprocessed entities or the entities it contains are not the
1171   /// ones we are looking for.
1172   serialization::PreprocessedEntityID
1173     findNextPreprocessedEntity(
1174                         GlobalSLocOffsetMapType::const_iterator SLocMapI) const;
1175 
1176   /// \brief Returns (ModuleFile, Local index) pair for \p GlobalIndex of a
1177   /// preprocessed entity.
1178   std::pair<ModuleFile *, unsigned>
1179     getModulePreprocessedEntity(unsigned GlobalIndex);
1180 
1181   /// \brief Returns (begin, end) pair for the preprocessed entities of a
1182   /// particular module.
1183   std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator>
1184     getModulePreprocessedEntities(ModuleFile &Mod) const;
1185 
1186   class ModuleDeclIterator {
1187     ASTReader *Reader;
1188     ModuleFile *Mod;
1189     const serialization::LocalDeclID *Pos;
1190 
1191   public:
1192     typedef const Decl *value_type;
1193     typedef value_type&         reference;
1194     typedef value_type*         pointer;
1195 
ModuleDeclIterator()1196     ModuleDeclIterator() : Reader(nullptr), Mod(nullptr), Pos(nullptr) { }
1197 
ModuleDeclIterator(ASTReader * Reader,ModuleFile * Mod,const serialization::LocalDeclID * Pos)1198     ModuleDeclIterator(ASTReader *Reader, ModuleFile *Mod,
1199                        const serialization::LocalDeclID *Pos)
1200       : Reader(Reader), Mod(Mod), Pos(Pos) { }
1201 
1202     value_type operator*() const {
1203       return Reader->GetDecl(Reader->getGlobalDeclID(*Mod, *Pos));
1204     }
1205 
1206     ModuleDeclIterator &operator++() {
1207       ++Pos;
1208       return *this;
1209     }
1210 
1211     ModuleDeclIterator operator++(int) {
1212       ModuleDeclIterator Prev(*this);
1213       ++Pos;
1214       return Prev;
1215     }
1216 
1217     ModuleDeclIterator &operator--() {
1218       --Pos;
1219       return *this;
1220     }
1221 
1222     ModuleDeclIterator operator--(int) {
1223       ModuleDeclIterator Prev(*this);
1224       --Pos;
1225       return Prev;
1226     }
1227 
1228     friend bool operator==(const ModuleDeclIterator &LHS,
1229                            const ModuleDeclIterator &RHS) {
1230       assert(LHS.Reader == RHS.Reader && LHS.Mod == RHS.Mod);
1231       return LHS.Pos == RHS.Pos;
1232     }
1233 
1234     friend bool operator!=(const ModuleDeclIterator &LHS,
1235                            const ModuleDeclIterator &RHS) {
1236       assert(LHS.Reader == RHS.Reader && LHS.Mod == RHS.Mod);
1237       return LHS.Pos != RHS.Pos;
1238     }
1239   };
1240 
1241   std::pair<ModuleDeclIterator, ModuleDeclIterator>
1242     getModuleFileLevelDecls(ModuleFile &Mod);
1243 
1244   void PassInterestingDeclsToConsumer();
1245   void PassInterestingDeclToConsumer(Decl *D);
1246 
1247   void finishPendingActions();
1248 
1249   void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
1250 
addPendingDeclContextInfo(Decl * D,serialization::GlobalDeclID SemaDC,serialization::GlobalDeclID LexicalDC)1251   void addPendingDeclContextInfo(Decl *D,
1252                                  serialization::GlobalDeclID SemaDC,
1253                                  serialization::GlobalDeclID LexicalDC) {
1254     assert(D);
1255     PendingDeclContextInfo Info = { D, SemaDC, LexicalDC };
1256     PendingDeclContextInfos.push_back(Info);
1257   }
1258 
1259   /// \brief Produce an error diagnostic and return true.
1260   ///
1261   /// This routine should only be used for fatal errors that have to
1262   /// do with non-routine failures (e.g., corrupted AST file).
1263   void Error(StringRef Msg);
1264   void Error(unsigned DiagID, StringRef Arg1 = StringRef(),
1265              StringRef Arg2 = StringRef());
1266 
1267   ASTReader(const ASTReader &) LLVM_DELETED_FUNCTION;
1268   void operator=(const ASTReader &) LLVM_DELETED_FUNCTION;
1269 public:
1270   /// \brief Load the AST file and validate its contents against the given
1271   /// Preprocessor.
1272   ///
1273   /// \param PP the preprocessor associated with the context in which this
1274   /// precompiled header will be loaded.
1275   ///
1276   /// \param Context the AST context that this precompiled header will be
1277   /// loaded into.
1278   ///
1279   /// \param isysroot If non-NULL, the system include path specified by the
1280   /// user. This is only used with relocatable PCH files. If non-NULL,
1281   /// a relocatable PCH file will use the default path "/".
1282   ///
1283   /// \param DisableValidation If true, the AST reader will suppress most
1284   /// of its regular consistency checking, allowing the use of precompiled
1285   /// headers that cannot be determined to be compatible.
1286   ///
1287   /// \param AllowASTWithCompilerErrors If true, the AST reader will accept an
1288   /// AST file the was created out of an AST with compiler errors,
1289   /// otherwise it will reject it.
1290   ///
1291   /// \param AllowConfigurationMismatch If true, the AST reader will not check
1292   /// for configuration differences between the AST file and the invocation.
1293   ///
1294   /// \param ValidateSystemInputs If true, the AST reader will validate
1295   /// system input files in addition to user input files. This is only
1296   /// meaningful if \p DisableValidation is false.
1297   ///
1298   /// \param UseGlobalIndex If true, the AST reader will try to load and use
1299   /// the global module index.
1300   ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot = "",
1301             bool DisableValidation = false,
1302             bool AllowASTWithCompilerErrors = false,
1303             bool AllowConfigurationMismatch = false,
1304             bool ValidateSystemInputs = false,
1305             bool UseGlobalIndex = true);
1306 
1307   ~ASTReader();
1308 
getSourceManager()1309   SourceManager &getSourceManager() const { return SourceMgr; }
getFileManager()1310   FileManager &getFileManager() const { return FileMgr; }
1311 
1312   /// \brief Flags that indicate what kind of AST loading failures the client
1313   /// of the AST reader can directly handle.
1314   ///
1315   /// When a client states that it can handle a particular kind of failure,
1316   /// the AST reader will not emit errors when producing that kind of failure.
1317   enum LoadFailureCapabilities {
1318     /// \brief The client can't handle any AST loading failures.
1319     ARR_None = 0,
1320     /// \brief The client can handle an AST file that cannot load because it
1321     /// is missing.
1322     ARR_Missing = 0x1,
1323     /// \brief The client can handle an AST file that cannot load because it
1324     /// is out-of-date relative to its input files.
1325     ARR_OutOfDate = 0x2,
1326     /// \brief The client can handle an AST file that cannot load because it
1327     /// was built with a different version of Clang.
1328     ARR_VersionMismatch = 0x4,
1329     /// \brief The client can handle an AST file that cannot load because it's
1330     /// compiled configuration doesn't match that of the context it was
1331     /// loaded into.
1332     ARR_ConfigurationMismatch = 0x8
1333   };
1334 
1335   /// \brief Load the AST file designated by the given file name.
1336   ///
1337   /// \param FileName The name of the AST file to load.
1338   ///
1339   /// \param Type The kind of AST being loaded, e.g., PCH, module, main file,
1340   /// or preamble.
1341   ///
1342   /// \param ImportLoc the location where the module file will be considered as
1343   /// imported from. For non-module AST types it should be invalid.
1344   ///
1345   /// \param ClientLoadCapabilities The set of client load-failure
1346   /// capabilities, represented as a bitset of the enumerators of
1347   /// LoadFailureCapabilities.
1348   ASTReadResult ReadAST(const std::string &FileName, ModuleKind Type,
1349                         SourceLocation ImportLoc,
1350                         unsigned ClientLoadCapabilities);
1351 
1352   /// \brief Make the entities in the given module and any of its (non-explicit)
1353   /// submodules visible to name lookup.
1354   ///
1355   /// \param Mod The module whose names should be made visible.
1356   ///
1357   /// \param NameVisibility The level of visibility to give the names in the
1358   /// module.  Visibility can only be increased over time.
1359   ///
1360   /// \param ImportLoc The location at which the import occurs.
1361   ///
1362   /// \param Complain Whether to complain about conflicting module imports.
1363   void makeModuleVisible(Module *Mod,
1364                          Module::NameVisibilityKind NameVisibility,
1365                          SourceLocation ImportLoc,
1366                          bool Complain);
1367 
1368   /// \brief Make the names within this set of hidden names visible.
1369   void makeNamesVisible(const HiddenNames &Names, Module *Owner);
1370 
1371   /// \brief Set the AST callbacks listener.
setListener(ASTReaderListener * listener)1372   void setListener(ASTReaderListener *listener) {
1373     Listener.reset(listener);
1374   }
1375 
1376   /// \brief Add an AST callbak listener.
1377   ///
1378   /// Takes ownership of \p L.
addListener(ASTReaderListener * L)1379   void addListener(ASTReaderListener *L) {
1380     if (Listener)
1381       L = new ChainedASTReaderListener(L, Listener.release());
1382     Listener.reset(L);
1383   }
1384 
1385   /// \brief Set the AST deserialization listener.
1386   void setDeserializationListener(ASTDeserializationListener *Listener,
1387                                   bool TakeOwnership = false);
1388 
1389   /// \brief Determine whether this AST reader has a global index.
hasGlobalIndex()1390   bool hasGlobalIndex() const { return (bool)GlobalIndex; }
1391 
1392   /// \brief Return global module index.
getGlobalIndex()1393   GlobalModuleIndex *getGlobalIndex() { return GlobalIndex.get(); }
1394 
1395   /// \brief Reset reader for a reload try.
resetForReload()1396   void resetForReload() { TriedLoadingGlobalIndex = false; }
1397 
1398   /// \brief Attempts to load the global index.
1399   ///
1400   /// \returns true if loading the global index has failed for any reason.
1401   bool loadGlobalIndex();
1402 
1403   /// \brief Determine whether we tried to load the global index, but failed,
1404   /// e.g., because it is out-of-date or does not exist.
1405   bool isGlobalIndexUnavailable() const;
1406 
1407   /// \brief Initializes the ASTContext
1408   void InitializeContext();
1409 
1410   /// \brief Update the state of Sema after loading some additional modules.
1411   void UpdateSema();
1412 
1413   /// \brief Add in-memory (virtual file) buffer.
addInMemoryBuffer(StringRef & FileName,llvm::MemoryBuffer * Buffer)1414   void addInMemoryBuffer(StringRef &FileName, llvm::MemoryBuffer *Buffer) {
1415     ModuleMgr.addInMemoryBuffer(FileName, Buffer);
1416   }
1417 
1418   /// \brief Finalizes the AST reader's state before writing an AST file to
1419   /// disk.
1420   ///
1421   /// This operation may undo temporary state in the AST that should not be
1422   /// emitted.
1423   void finalizeForWriting();
1424 
1425   /// \brief Retrieve the module manager.
getModuleManager()1426   ModuleManager &getModuleManager() { return ModuleMgr; }
1427 
1428   /// \brief Retrieve the preprocessor.
getPreprocessor()1429   Preprocessor &getPreprocessor() const { return PP; }
1430 
1431   /// \brief Retrieve the name of the original source file name for the primary
1432   /// module file.
getOriginalSourceFile()1433   StringRef getOriginalSourceFile() {
1434     return ModuleMgr.getPrimaryModule().OriginalSourceFileName;
1435   }
1436 
1437   /// \brief Retrieve the name of the original source file name directly from
1438   /// the AST file, without actually loading the AST file.
1439   static std::string getOriginalSourceFile(const std::string &ASTFileName,
1440                                            FileManager &FileMgr,
1441                                            DiagnosticsEngine &Diags);
1442 
1443   /// \brief Read the control block for the named AST file.
1444   ///
1445   /// \returns true if an error occurred, false otherwise.
1446   static bool readASTFileControlBlock(StringRef Filename,
1447                                       FileManager &FileMgr,
1448                                       ASTReaderListener &Listener);
1449 
1450   /// \brief Determine whether the given AST file is acceptable to load into a
1451   /// translation unit with the given language and target options.
1452   static bool isAcceptableASTFile(StringRef Filename,
1453                                   FileManager &FileMgr,
1454                                   const LangOptions &LangOpts,
1455                                   const TargetOptions &TargetOpts,
1456                                   const PreprocessorOptions &PPOpts);
1457 
1458   /// \brief Returns the suggested contents of the predefines buffer,
1459   /// which contains a (typically-empty) subset of the predefines
1460   /// build prior to including the precompiled header.
getSuggestedPredefines()1461   const std::string &getSuggestedPredefines() { return SuggestedPredefines; }
1462 
1463   /// \brief Read a preallocated preprocessed entity from the external source.
1464   ///
1465   /// \returns null if an error occurred that prevented the preprocessed
1466   /// entity from being loaded.
1467   PreprocessedEntity *ReadPreprocessedEntity(unsigned Index) override;
1468 
1469   /// \brief Returns a pair of [Begin, End) indices of preallocated
1470   /// preprocessed entities that \p Range encompasses.
1471   std::pair<unsigned, unsigned>
1472       findPreprocessedEntitiesInRange(SourceRange Range) override;
1473 
1474   /// \brief Optionally returns true or false if the preallocated preprocessed
1475   /// entity with index \p Index came from file \p FID.
1476   Optional<bool> isPreprocessedEntityInFileID(unsigned Index,
1477                                               FileID FID) override;
1478 
1479   /// \brief Read the header file information for the given file entry.
1480   HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) override;
1481 
1482   void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag);
1483 
1484   /// \brief Returns the number of source locations found in the chain.
getTotalNumSLocs()1485   unsigned getTotalNumSLocs() const {
1486     return TotalNumSLocEntries;
1487   }
1488 
1489   /// \brief Returns the number of identifiers found in the chain.
getTotalNumIdentifiers()1490   unsigned getTotalNumIdentifiers() const {
1491     return static_cast<unsigned>(IdentifiersLoaded.size());
1492   }
1493 
1494   /// \brief Returns the number of macros found in the chain.
getTotalNumMacros()1495   unsigned getTotalNumMacros() const {
1496     return static_cast<unsigned>(MacrosLoaded.size());
1497   }
1498 
1499   /// \brief Returns the number of types found in the chain.
getTotalNumTypes()1500   unsigned getTotalNumTypes() const {
1501     return static_cast<unsigned>(TypesLoaded.size());
1502   }
1503 
1504   /// \brief Returns the number of declarations found in the chain.
getTotalNumDecls()1505   unsigned getTotalNumDecls() const {
1506     return static_cast<unsigned>(DeclsLoaded.size());
1507   }
1508 
1509   /// \brief Returns the number of submodules known.
getTotalNumSubmodules()1510   unsigned getTotalNumSubmodules() const {
1511     return static_cast<unsigned>(SubmodulesLoaded.size());
1512   }
1513 
1514   /// \brief Returns the number of selectors found in the chain.
getTotalNumSelectors()1515   unsigned getTotalNumSelectors() const {
1516     return static_cast<unsigned>(SelectorsLoaded.size());
1517   }
1518 
1519   /// \brief Returns the number of preprocessed entities known to the AST
1520   /// reader.
getTotalNumPreprocessedEntities()1521   unsigned getTotalNumPreprocessedEntities() const {
1522     unsigned Result = 0;
1523     for (ModuleConstIterator I = ModuleMgr.begin(),
1524         E = ModuleMgr.end(); I != E; ++I) {
1525       Result += (*I)->NumPreprocessedEntities;
1526     }
1527 
1528     return Result;
1529   }
1530 
1531   /// \brief Returns the number of C++ base specifiers found in the chain.
getTotalNumCXXBaseSpecifiers()1532   unsigned getTotalNumCXXBaseSpecifiers() const {
1533     return NumCXXBaseSpecifiersLoaded;
1534   }
1535 
1536   /// \brief Reads a TemplateArgumentLocInfo appropriate for the
1537   /// given TemplateArgument kind.
1538   TemplateArgumentLocInfo
1539   GetTemplateArgumentLocInfo(ModuleFile &F, TemplateArgument::ArgKind Kind,
1540                              const RecordData &Record, unsigned &Idx);
1541 
1542   /// \brief Reads a TemplateArgumentLoc.
1543   TemplateArgumentLoc
1544   ReadTemplateArgumentLoc(ModuleFile &F,
1545                           const RecordData &Record, unsigned &Idx);
1546 
1547   const ASTTemplateArgumentListInfo*
1548   ReadASTTemplateArgumentListInfo(ModuleFile &F,
1549                                   const RecordData &Record, unsigned &Index);
1550 
1551   /// \brief Reads a declarator info from the given record.
1552   TypeSourceInfo *GetTypeSourceInfo(ModuleFile &F,
1553                                     const RecordData &Record, unsigned &Idx);
1554 
1555   /// \brief Resolve a type ID into a type, potentially building a new
1556   /// type.
1557   QualType GetType(serialization::TypeID ID);
1558 
1559   /// \brief Resolve a local type ID within a given AST file into a type.
1560   QualType getLocalType(ModuleFile &F, unsigned LocalID);
1561 
1562   /// \brief Map a local type ID within a given AST file into a global type ID.
1563   serialization::TypeID getGlobalTypeID(ModuleFile &F, unsigned LocalID) const;
1564 
1565   /// \brief Read a type from the current position in the given record, which
1566   /// was read from the given AST file.
readType(ModuleFile & F,const RecordData & Record,unsigned & Idx)1567   QualType readType(ModuleFile &F, const RecordData &Record, unsigned &Idx) {
1568     if (Idx >= Record.size())
1569       return QualType();
1570 
1571     return getLocalType(F, Record[Idx++]);
1572   }
1573 
1574   /// \brief Map from a local declaration ID within a given module to a
1575   /// global declaration ID.
1576   serialization::DeclID getGlobalDeclID(ModuleFile &F,
1577                                       serialization::LocalDeclID LocalID) const;
1578 
1579   /// \brief Returns true if global DeclID \p ID originated from module \p M.
1580   bool isDeclIDFromModule(serialization::GlobalDeclID ID, ModuleFile &M) const;
1581 
1582   /// \brief Retrieve the module file that owns the given declaration, or NULL
1583   /// if the declaration is not from a module file.
1584   ModuleFile *getOwningModuleFile(const Decl *D);
1585 
1586   /// \brief Get the best name we know for the module that owns the given
1587   /// declaration, or an empty string if the declaration is not from a module.
1588   std::string getOwningModuleNameForDiagnostic(const Decl *D);
1589 
1590   /// \brief Returns the source location for the decl \p ID.
1591   SourceLocation getSourceLocationForDeclID(serialization::GlobalDeclID ID);
1592 
1593   /// \brief Resolve a declaration ID into a declaration, potentially
1594   /// building a new declaration.
1595   Decl *GetDecl(serialization::DeclID ID);
1596   Decl *GetExternalDecl(uint32_t ID) override;
1597 
1598   /// \brief Resolve a declaration ID into a declaration. Return 0 if it's not
1599   /// been loaded yet.
1600   Decl *GetExistingDecl(serialization::DeclID ID);
1601 
1602   /// \brief Reads a declaration with the given local ID in the given module.
GetLocalDecl(ModuleFile & F,uint32_t LocalID)1603   Decl *GetLocalDecl(ModuleFile &F, uint32_t LocalID) {
1604     return GetDecl(getGlobalDeclID(F, LocalID));
1605   }
1606 
1607   /// \brief Reads a declaration with the given local ID in the given module.
1608   ///
1609   /// \returns The requested declaration, casted to the given return type.
1610   template<typename T>
GetLocalDeclAs(ModuleFile & F,uint32_t LocalID)1611   T *GetLocalDeclAs(ModuleFile &F, uint32_t LocalID) {
1612     return cast_or_null<T>(GetLocalDecl(F, LocalID));
1613   }
1614 
1615   /// \brief Map a global declaration ID into the declaration ID used to
1616   /// refer to this declaration within the given module fule.
1617   ///
1618   /// \returns the global ID of the given declaration as known in the given
1619   /// module file.
1620   serialization::DeclID
1621   mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
1622                                   serialization::DeclID GlobalID);
1623 
1624   /// \brief Reads a declaration ID from the given position in a record in the
1625   /// given module.
1626   ///
1627   /// \returns The declaration ID read from the record, adjusted to a global ID.
1628   serialization::DeclID ReadDeclID(ModuleFile &F, const RecordData &Record,
1629                                    unsigned &Idx);
1630 
1631   /// \brief Reads a declaration from the given position in a record in the
1632   /// given module.
ReadDecl(ModuleFile & F,const RecordData & R,unsigned & I)1633   Decl *ReadDecl(ModuleFile &F, const RecordData &R, unsigned &I) {
1634     return GetDecl(ReadDeclID(F, R, I));
1635   }
1636 
1637   /// \brief Reads a declaration from the given position in a record in the
1638   /// given module.
1639   ///
1640   /// \returns The declaration read from this location, casted to the given
1641   /// result type.
1642   template<typename T>
ReadDeclAs(ModuleFile & F,const RecordData & R,unsigned & I)1643   T *ReadDeclAs(ModuleFile &F, const RecordData &R, unsigned &I) {
1644     return cast_or_null<T>(GetDecl(ReadDeclID(F, R, I)));
1645   }
1646 
1647   /// \brief If any redeclarations of \p D have been imported since it was
1648   /// last checked, this digs out those redeclarations and adds them to the
1649   /// redeclaration chain for \p D.
1650   void CompleteRedeclChain(const Decl *D) override;
1651 
1652   /// \brief Read a CXXBaseSpecifiers ID form the given record and
1653   /// return its global bit offset.
1654   uint64_t readCXXBaseSpecifiers(ModuleFile &M, const RecordData &Record,
1655                                  unsigned &Idx);
1656 
1657   CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
1658 
1659   /// \brief Resolve the offset of a statement into a statement.
1660   ///
1661   /// This operation will read a new statement from the external
1662   /// source each time it is called, and is meant to be used via a
1663   /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
1664   Stmt *GetExternalDeclStmt(uint64_t Offset) override;
1665 
1666   /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
1667   /// specified cursor.  Read the abbreviations that are at the top of the block
1668   /// and then leave the cursor pointing into the block.
1669   bool ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor, unsigned BlockID);
1670 
1671   /// \brief Finds all the visible declarations with a given name.
1672   /// The current implementation of this method just loads the entire
1673   /// lookup table as unmaterialized references.
1674   bool FindExternalVisibleDeclsByName(const DeclContext *DC,
1675                                       DeclarationName Name) override;
1676 
1677   /// \brief Read all of the declarations lexically stored in a
1678   /// declaration context.
1679   ///
1680   /// \param DC The declaration context whose declarations will be
1681   /// read.
1682   ///
1683   /// \param Decls Vector that will contain the declarations loaded
1684   /// from the external source. The caller is responsible for merging
1685   /// these declarations with any declarations already stored in the
1686   /// declaration context.
1687   ///
1688   /// \returns true if there was an error while reading the
1689   /// declarations for this declaration context.
1690   ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC,
1691                                 bool (*isKindWeWant)(Decl::Kind),
1692                                 SmallVectorImpl<Decl*> &Decls) override;
1693 
1694   /// \brief Get the decls that are contained in a file in the Offset/Length
1695   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
1696   /// a range.
1697   void FindFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
1698                            SmallVectorImpl<Decl *> &Decls) override;
1699 
1700   /// \brief Notify ASTReader that we started deserialization of
1701   /// a decl or type so until FinishedDeserializing is called there may be
1702   /// decls that are initializing. Must be paired with FinishedDeserializing.
StartedDeserializing()1703   void StartedDeserializing() override { ++NumCurrentElementsDeserializing; }
1704 
1705   /// \brief Notify ASTReader that we finished the deserialization of
1706   /// a decl or type. Must be paired with StartedDeserializing.
1707   void FinishedDeserializing() override;
1708 
1709   /// \brief Function that will be invoked when we begin parsing a new
1710   /// translation unit involving this external AST source.
1711   ///
1712   /// This function will provide all of the external definitions to
1713   /// the ASTConsumer.
1714   void StartTranslationUnit(ASTConsumer *Consumer) override;
1715 
1716   /// \brief Print some statistics about AST usage.
1717   void PrintStats() override;
1718 
1719   /// \brief Dump information about the AST reader to standard error.
1720   void dump();
1721 
1722   /// Return the amount of memory used by memory buffers, breaking down
1723   /// by heap-backed versus mmap'ed memory.
1724   void getMemoryBufferSizes(MemoryBufferSizes &sizes) const override;
1725 
1726   /// \brief Initialize the semantic source with the Sema instance
1727   /// being used to perform semantic analysis on the abstract syntax
1728   /// tree.
1729   void InitializeSema(Sema &S) override;
1730 
1731   /// \brief Inform the semantic consumer that Sema is no longer available.
ForgetSema()1732   void ForgetSema() override { SemaObj = nullptr; }
1733 
1734   /// \brief Retrieve the IdentifierInfo for the named identifier.
1735   ///
1736   /// This routine builds a new IdentifierInfo for the given identifier. If any
1737   /// declarations with this name are visible from translation unit scope, their
1738   /// declarations will be deserialized and introduced into the declaration
1739   /// chain of the identifier.
1740   virtual IdentifierInfo *get(const char *NameStart, const char *NameEnd);
get(StringRef Name)1741   IdentifierInfo *get(StringRef Name) override {
1742     return get(Name.begin(), Name.end());
1743   }
1744 
1745   /// \brief Retrieve an iterator into the set of all identifiers
1746   /// in all loaded AST files.
1747   IdentifierIterator *getIdentifiers() override;
1748 
1749   /// \brief Load the contents of the global method pool for a given
1750   /// selector.
1751   void ReadMethodPool(Selector Sel) override;
1752 
1753   /// \brief Load the set of namespaces that are known to the external source,
1754   /// which will be used during typo correction.
1755   void ReadKnownNamespaces(
1756                          SmallVectorImpl<NamespaceDecl *> &Namespaces) override;
1757 
1758   void ReadUndefinedButUsed(
1759                llvm::DenseMap<NamedDecl *, SourceLocation> &Undefined) override;
1760 
1761   void ReadTentativeDefinitions(
1762                             SmallVectorImpl<VarDecl *> &TentativeDefs) override;
1763 
1764   void ReadUnusedFileScopedDecls(
1765                        SmallVectorImpl<const DeclaratorDecl *> &Decls) override;
1766 
1767   void ReadDelegatingConstructors(
1768                          SmallVectorImpl<CXXConstructorDecl *> &Decls) override;
1769 
1770   void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) override;
1771 
1772   void ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) override;
1773 
1774   void ReadLocallyScopedExternCDecls(
1775                                   SmallVectorImpl<NamedDecl *> &Decls) override;
1776 
1777   void ReadReferencedSelectors(
1778           SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) override;
1779 
1780   void ReadWeakUndeclaredIdentifiers(
1781           SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WI) override;
1782 
1783   void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) override;
1784 
1785   void ReadPendingInstantiations(
1786                  SmallVectorImpl<std::pair<ValueDecl *,
1787                                            SourceLocation> > &Pending) override;
1788 
1789   void ReadLateParsedTemplates(
1790                          llvm::DenseMap<const FunctionDecl *,
1791                                         LateParsedTemplate *> &LPTMap) override;
1792 
1793   /// \brief Load a selector from disk, registering its ID if it exists.
1794   void LoadSelector(Selector Sel);
1795 
1796   void SetIdentifierInfo(unsigned ID, IdentifierInfo *II);
1797   void SetGloballyVisibleDecls(IdentifierInfo *II,
1798                                const SmallVectorImpl<uint32_t> &DeclIDs,
1799                                SmallVectorImpl<Decl *> *Decls = nullptr);
1800 
1801   /// \brief Report a diagnostic.
1802   DiagnosticBuilder Diag(unsigned DiagID);
1803 
1804   /// \brief Report a diagnostic.
1805   DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID);
1806 
1807   IdentifierInfo *DecodeIdentifierInfo(serialization::IdentifierID ID);
1808 
GetIdentifierInfo(ModuleFile & M,const RecordData & Record,unsigned & Idx)1809   IdentifierInfo *GetIdentifierInfo(ModuleFile &M, const RecordData &Record,
1810                                     unsigned &Idx) {
1811     return DecodeIdentifierInfo(getGlobalIdentifierID(M, Record[Idx++]));
1812   }
1813 
GetIdentifier(serialization::IdentifierID ID)1814   IdentifierInfo *GetIdentifier(serialization::IdentifierID ID) override {
1815     // Note that we are loading an identifier.
1816     Deserializing AnIdentifier(this);
1817 
1818     return DecodeIdentifierInfo(ID);
1819   }
1820 
1821   IdentifierInfo *getLocalIdentifier(ModuleFile &M, unsigned LocalID);
1822 
1823   serialization::IdentifierID getGlobalIdentifierID(ModuleFile &M,
1824                                                     unsigned LocalID);
1825 
1826   ModuleMacroInfo *getModuleMacro(const PendingMacroInfo &PMInfo);
1827 
1828   void resolvePendingMacro(IdentifierInfo *II, const PendingMacroInfo &PMInfo);
1829 
1830   void installPCHMacroDirectives(IdentifierInfo *II,
1831                                  ModuleFile &M, uint64_t Offset);
1832 
1833   void installImportedMacro(IdentifierInfo *II, ModuleMacroInfo *MMI,
1834                             Module *Owner);
1835 
1836   typedef llvm::TinyPtrVector<DefMacroDirective *> AmbiguousMacros;
1837   llvm::DenseMap<IdentifierInfo*, AmbiguousMacros> AmbiguousMacroDefs;
1838 
1839   void
1840   removeOverriddenMacros(IdentifierInfo *II, AmbiguousMacros &Ambig,
1841                          ArrayRef<serialization::SubmoduleID> Overrides);
1842 
1843   AmbiguousMacros *
1844   removeOverriddenMacros(IdentifierInfo *II,
1845                          ArrayRef<serialization::SubmoduleID> Overrides);
1846 
1847   /// \brief Retrieve the macro with the given ID.
1848   MacroInfo *getMacro(serialization::MacroID ID);
1849 
1850   /// \brief Retrieve the global macro ID corresponding to the given local
1851   /// ID within the given module file.
1852   serialization::MacroID getGlobalMacroID(ModuleFile &M, unsigned LocalID);
1853 
1854   /// \brief Read the source location entry with index ID.
1855   bool ReadSLocEntry(int ID) override;
1856 
1857   /// \brief Retrieve the module import location and module name for the
1858   /// given source manager entry ID.
1859   std::pair<SourceLocation, StringRef> getModuleImportLoc(int ID) override;
1860 
1861   /// \brief Retrieve the global submodule ID given a module and its local ID
1862   /// number.
1863   serialization::SubmoduleID
1864   getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID);
1865 
1866   /// \brief Retrieve the submodule that corresponds to a global submodule ID.
1867   ///
1868   Module *getSubmodule(serialization::SubmoduleID GlobalID);
1869 
1870   /// \brief Retrieve the module that corresponds to the given module ID.
1871   ///
1872   /// Note: overrides method in ExternalASTSource
1873   Module *getModule(unsigned ID) override;
1874 
1875   /// \brief Retrieve a selector from the given module with its local ID
1876   /// number.
1877   Selector getLocalSelector(ModuleFile &M, unsigned LocalID);
1878 
1879   Selector DecodeSelector(serialization::SelectorID Idx);
1880 
1881   Selector GetExternalSelector(serialization::SelectorID ID) override;
1882   uint32_t GetNumExternalSelectors() override;
1883 
ReadSelector(ModuleFile & M,const RecordData & Record,unsigned & Idx)1884   Selector ReadSelector(ModuleFile &M, const RecordData &Record, unsigned &Idx) {
1885     return getLocalSelector(M, Record[Idx++]);
1886   }
1887 
1888   /// \brief Retrieve the global selector ID that corresponds to this
1889   /// the local selector ID in a given module.
1890   serialization::SelectorID getGlobalSelectorID(ModuleFile &F,
1891                                                 unsigned LocalID) const;
1892 
1893   /// \brief Read a declaration name.
1894   DeclarationName ReadDeclarationName(ModuleFile &F,
1895                                       const RecordData &Record, unsigned &Idx);
1896   void ReadDeclarationNameLoc(ModuleFile &F,
1897                               DeclarationNameLoc &DNLoc, DeclarationName Name,
1898                               const RecordData &Record, unsigned &Idx);
1899   void ReadDeclarationNameInfo(ModuleFile &F, DeclarationNameInfo &NameInfo,
1900                                const RecordData &Record, unsigned &Idx);
1901 
1902   void ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
1903                          const RecordData &Record, unsigned &Idx);
1904 
1905   NestedNameSpecifier *ReadNestedNameSpecifier(ModuleFile &F,
1906                                                const RecordData &Record,
1907                                                unsigned &Idx);
1908 
1909   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc(ModuleFile &F,
1910                                                     const RecordData &Record,
1911                                                     unsigned &Idx);
1912 
1913   /// \brief Read a template name.
1914   TemplateName ReadTemplateName(ModuleFile &F, const RecordData &Record,
1915                                 unsigned &Idx);
1916 
1917   /// \brief Read a template argument.
1918   TemplateArgument ReadTemplateArgument(ModuleFile &F,
1919                                         const RecordData &Record,unsigned &Idx);
1920 
1921   /// \brief Read a template parameter list.
1922   TemplateParameterList *ReadTemplateParameterList(ModuleFile &F,
1923                                                    const RecordData &Record,
1924                                                    unsigned &Idx);
1925 
1926   /// \brief Read a template argument array.
1927   void
1928   ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
1929                            ModuleFile &F, const RecordData &Record,
1930                            unsigned &Idx);
1931 
1932   /// \brief Read a UnresolvedSet structure.
1933   void ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
1934                          const RecordData &Record, unsigned &Idx);
1935 
1936   /// \brief Read a C++ base specifier.
1937   CXXBaseSpecifier ReadCXXBaseSpecifier(ModuleFile &F,
1938                                         const RecordData &Record,unsigned &Idx);
1939 
1940   /// \brief Read a CXXCtorInitializer array.
1941   std::pair<CXXCtorInitializer **, unsigned>
1942   ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
1943                           unsigned &Idx);
1944 
1945   /// \brief Read a source location from raw form.
ReadSourceLocation(ModuleFile & ModuleFile,unsigned Raw)1946   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile, unsigned Raw) const {
1947     SourceLocation Loc = SourceLocation::getFromRawEncoding(Raw);
1948     assert(ModuleFile.SLocRemap.find(Loc.getOffset()) != ModuleFile.SLocRemap.end() &&
1949            "Cannot find offset to remap.");
1950     int Remap = ModuleFile.SLocRemap.find(Loc.getOffset())->second;
1951     return Loc.getLocWithOffset(Remap);
1952   }
1953 
1954   /// \brief Read a source location.
ReadSourceLocation(ModuleFile & ModuleFile,const RecordDataImpl & Record,unsigned & Idx)1955   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile,
1956                                     const RecordDataImpl &Record,
1957                                     unsigned &Idx) {
1958     return ReadSourceLocation(ModuleFile, Record[Idx++]);
1959   }
1960 
1961   /// \brief Read a source range.
1962   SourceRange ReadSourceRange(ModuleFile &F,
1963                               const RecordData &Record, unsigned &Idx);
1964 
1965   /// \brief Read an integral value
1966   llvm::APInt ReadAPInt(const RecordData &Record, unsigned &Idx);
1967 
1968   /// \brief Read a signed integral value
1969   llvm::APSInt ReadAPSInt(const RecordData &Record, unsigned &Idx);
1970 
1971   /// \brief Read a floating-point value
1972   llvm::APFloat ReadAPFloat(const RecordData &Record,
1973                             const llvm::fltSemantics &Sem, unsigned &Idx);
1974 
1975   // \brief Read a string
1976   static std::string ReadString(const RecordData &Record, unsigned &Idx);
1977 
1978   /// \brief Read a version tuple.
1979   static VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx);
1980 
1981   CXXTemporary *ReadCXXTemporary(ModuleFile &F, const RecordData &Record,
1982                                  unsigned &Idx);
1983 
1984   /// \brief Reads attributes from the current stream position.
1985   void ReadAttributes(ModuleFile &F, AttrVec &Attrs,
1986                       const RecordData &Record, unsigned &Idx);
1987 
1988   /// \brief Reads a statement.
1989   Stmt *ReadStmt(ModuleFile &F);
1990 
1991   /// \brief Reads an expression.
1992   Expr *ReadExpr(ModuleFile &F);
1993 
1994   /// \brief Reads a sub-statement operand during statement reading.
ReadSubStmt()1995   Stmt *ReadSubStmt() {
1996     assert(ReadingKind == Read_Stmt &&
1997            "Should be called only during statement reading!");
1998     // Subexpressions are stored from last to first, so the next Stmt we need
1999     // is at the back of the stack.
2000     assert(!StmtStack.empty() && "Read too many sub-statements!");
2001     return StmtStack.pop_back_val();
2002   }
2003 
2004   /// \brief Reads a sub-expression operand during statement reading.
2005   Expr *ReadSubExpr();
2006 
2007   /// \brief Reads a token out of a record.
2008   Token ReadToken(ModuleFile &M, const RecordDataImpl &Record, unsigned &Idx);
2009 
2010   /// \brief Reads the macro record located at the given offset.
2011   MacroInfo *ReadMacroRecord(ModuleFile &F, uint64_t Offset);
2012 
2013   /// \brief Determine the global preprocessed entity ID that corresponds to
2014   /// the given local ID within the given module.
2015   serialization::PreprocessedEntityID
2016   getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const;
2017 
2018   /// \brief Add a macro to resolve imported from a module.
2019   ///
2020   /// \param II The name of the macro.
2021   /// \param M The module file.
2022   /// \param GMacID The global macro ID that is associated with this identifier.
2023   void addPendingMacroFromModule(IdentifierInfo *II,
2024                                  ModuleFile *M,
2025                                  serialization::GlobalMacroID GMacID,
2026                                  ArrayRef<serialization::SubmoduleID>);
2027 
2028   /// \brief Add a macro to deserialize its macro directive history from a PCH.
2029   ///
2030   /// \param II The name of the macro.
2031   /// \param M The module file.
2032   /// \param MacroDirectivesOffset Offset of the serialized macro directive
2033   /// history.
2034   void addPendingMacroFromPCH(IdentifierInfo *II,
2035                               ModuleFile *M, uint64_t MacroDirectivesOffset);
2036 
2037   /// \brief Read the set of macros defined by this external macro source.
2038   void ReadDefinedMacros() override;
2039 
2040   /// \brief Update an out-of-date identifier.
2041   void updateOutOfDateIdentifier(IdentifierInfo &II) override;
2042 
2043   /// \brief Note that this identifier is up-to-date.
2044   void markIdentifierUpToDate(IdentifierInfo *II);
2045 
2046   /// \brief Load all external visible decls in the given DeclContext.
2047   void completeVisibleDeclsMap(const DeclContext *DC) override;
2048 
2049   /// \brief Retrieve the AST context that this AST reader supplements.
getContext()2050   ASTContext &getContext() { return Context; }
2051 
2052   // \brief Contains declarations that were loaded before we have
2053   // access to a Sema object.
2054   SmallVector<NamedDecl *, 16> PreloadedDecls;
2055 
2056   /// \brief Retrieve the semantic analysis object used to analyze the
2057   /// translation unit in which the precompiled header is being
2058   /// imported.
getSema()2059   Sema *getSema() { return SemaObj; }
2060 
2061   /// \brief Retrieve the identifier table associated with the
2062   /// preprocessor.
2063   IdentifierTable &getIdentifierTable();
2064 
2065   /// \brief Record that the given ID maps to the given switch-case
2066   /// statement.
2067   void RecordSwitchCaseID(SwitchCase *SC, unsigned ID);
2068 
2069   /// \brief Retrieve the switch-case statement with the given ID.
2070   SwitchCase *getSwitchCaseWithID(unsigned ID);
2071 
2072   void ClearSwitchCaseIDs();
2073 
2074   /// \brief Cursors for comments blocks.
2075   SmallVector<std::pair<llvm::BitstreamCursor,
2076                         serialization::ModuleFile *>, 8> CommentsCursors;
2077 
2078   //RIDErief Loads comments ranges.
2079   void ReadComments() override;
2080 };
2081 
2082 /// \brief Helper class that saves the current stream position and
2083 /// then restores it when destroyed.
2084 struct SavedStreamPosition {
SavedStreamPositionSavedStreamPosition2085   explicit SavedStreamPosition(llvm::BitstreamCursor &Cursor)
2086     : Cursor(Cursor), Offset(Cursor.GetCurrentBitNo()) { }
2087 
~SavedStreamPositionSavedStreamPosition2088   ~SavedStreamPosition() {
2089     Cursor.JumpToBit(Offset);
2090   }
2091 
2092 private:
2093   llvm::BitstreamCursor &Cursor;
2094   uint64_t Offset;
2095 };
2096 
Error(const char * Msg)2097 inline void PCHValidator::Error(const char *Msg) {
2098   Reader.Error(Msg);
2099 }
2100 
2101 } // end namespace clang
2102 
2103 #endif
2104