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