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