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