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