clang 22.0.0git
ASTBitCodes.h
Go to the documentation of this file.
1//===- ASTBitCodes.h - Enum values for the PCH bitcode format ---*- 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 header defines Bitcode enum values for Clang serialized AST files.
10//
11// The enum values defined in this file should be considered permanent. If
12// new features are added, they should have values added at the end of the
13// respective lists.
14//
15//===----------------------------------------------------------------------===//
16
17#ifndef LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
18#define LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
19
20#include "clang/AST/DeclID.h"
22#include "clang/AST/Type.h"
27#include "llvm/ADT/DenseMapInfo.h"
28#include "llvm/Bitstream/BitCodes.h"
29#include "llvm/Support/MathExtras.h"
30#include <cassert>
31#include <cstdint>
32
33namespace clang {
34namespace serialization {
35
36/// AST file major version number supported by this version of
37/// Clang.
38///
39/// Whenever the AST file format changes in a way that makes it
40/// incompatible with previous versions (such that a reader
41/// designed for the previous version could not support reading
42/// the new version), this number should be increased.
43///
44/// Version 4 of AST files also requires that the version control branch and
45/// revision match exactly, since there is no backward compatibility of
46/// AST files at this time.
47const unsigned VERSION_MAJOR = 35;
48
49/// AST file minor version number supported by this version of
50/// Clang.
51///
52/// Whenever the AST format changes in a way that is still
53/// compatible with previous versions (such that a reader designed
54/// for the previous version could still support reading the new
55/// version by ignoring new kinds of subblocks), this number
56/// should be increased.
57const unsigned VERSION_MINOR = 0;
58
59/// An ID number that refers to an identifier in an AST file.
60///
61/// The ID numbers of identifiers are consecutive (in order of discovery)
62/// and start at 1. 0 is reserved for NULL.
63using IdentifierID = uint64_t;
64
65/// The number of predefined identifier IDs.
66const unsigned int NUM_PREDEF_IDENT_IDS = 1;
67
68/// An ID number that refers to a declaration in an AST file. See the comments
69/// in DeclIDBase for details.
71
72/// An ID number that refers to a type in an AST file.
73///
74/// The ID of a type is partitioned into three parts:
75/// - the lower three bits are used to store the const/volatile/restrict
76/// qualifiers (as with QualType).
77/// - the next 29 bits provide a type index in the corresponding
78/// module file.
79/// - the upper 32 bits provide a module file index.
80///
81/// The type index values are partitioned into two
82/// sets. The values below NUM_PREDEF_TYPE_IDs are predefined type
83/// IDs (based on the PREDEF_TYPE_*_ID constants), with 0 as a
84/// placeholder for "no type". The module file index for predefined
85/// types are always 0 since they don't belong to any modules.
86/// Values from NUM_PREDEF_TYPE_IDs are other types that have
87/// serialized representations.
88using TypeID = uint64_t;
89/// Same with TypeID except that the LocalTypeID is only meaningful
90/// with the corresponding ModuleFile.
91///
92/// FIXME: Make TypeID and LocalTypeID a class to improve the type
93/// safety.
95
96/// A type index; the type ID with the qualifier bits removed.
97/// Keep structure alignment 32-bit since the blob is assumed as 32-bit
98/// aligned.
99class TypeIdx {
100 uint32_t ModuleFileIndex = 0;
101 uint32_t Idx = 0;
102
103public:
104 TypeIdx() = default;
105
106 explicit TypeIdx(uint32_t ModuleFileIdx, uint32_t Idx)
107 : ModuleFileIndex(ModuleFileIdx), Idx(Idx) {}
108
109 uint32_t getModuleFileIndex() const { return ModuleFileIndex; }
110
111 uint64_t getValue() const { return ((uint64_t)ModuleFileIndex << 32) | Idx; }
112
113 TypeID asTypeID(unsigned FastQuals) const {
114 if (Idx == uint32_t(-1))
115 return TypeID(-1);
116
117 unsigned Index = (Idx << Qualifiers::FastWidth) | FastQuals;
118 return ((uint64_t)ModuleFileIndex << 32) | Index;
119 }
120
122 if (ID == TypeID(-1))
123 return TypeIdx(0, -1);
124
125 return TypeIdx(ID >> 32, (ID & llvm::maskTrailingOnes<TypeID>(32)) >>
127 }
128};
129
130static_assert(alignof(TypeIdx) == 4);
131
132/// A structure for putting "fast"-unqualified QualTypes into a
133/// DenseMap. This uses the standard pointer hash function.
135 static bool isEqual(QualType A, QualType B) { return A == B; }
136
138 return QualType::getFromOpaquePtr((void *)1);
139 }
140
142 return QualType::getFromOpaquePtr((void *)2);
143 }
144
145 static unsigned getHashValue(QualType T) {
146 assert(!T.getLocalFastQualifiers() &&
147 "hash invalid for types with fast quals");
148 uintptr_t v = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
149 return (unsigned(v) >> 4) ^ (unsigned(v) >> 9);
150 }
151};
152
153/// An ID number that refers to a macro in an AST file.
154using MacroID = uint32_t;
155
156/// A global ID number that refers to a macro in an AST file.
157using GlobalMacroID = uint32_t;
158
159/// A local to a module ID number that refers to a macro in an
160/// AST file.
161using LocalMacroID = uint32_t;
162
163/// The number of predefined macro IDs.
164const unsigned int NUM_PREDEF_MACRO_IDS = 1;
165
166/// An ID number that refers to an ObjC selector in an AST file.
167using SelectorID = uint32_t;
168
169/// The number of predefined selector IDs.
170const unsigned int NUM_PREDEF_SELECTOR_IDS = 1;
171
172/// An ID number that refers to a set of CXXBaseSpecifiers in an
173/// AST file.
174using CXXBaseSpecifiersID = uint32_t;
175
176/// An ID number that refers to a list of CXXCtorInitializers in an
177/// AST file.
178using CXXCtorInitializersID = uint32_t;
179
180/// An ID number that refers to an entity in the detailed
181/// preprocessing record.
182using PreprocessedEntityID = uint32_t;
183
184/// An ID number that refers to a submodule in a module file.
185using SubmoduleID = uint32_t;
186
187/// The number of predefined submodule IDs.
188const unsigned int NUM_PREDEF_SUBMODULE_IDS = 1;
189
190/// 32 aligned uint64_t in the AST file. Use splitted 64-bit integer into
191/// low/high parts to keep structure alignment 32-bit (it is important
192/// because blobs in bitstream are 32-bit aligned). This structure is
193/// serialized "as is" to the AST file.
195 uint32_t BitLow = 0;
196 uint32_t BitHigh = 0;
197
198public:
199 UnalignedUInt64() = default;
200 UnalignedUInt64(uint64_t BitOffset) { set(BitOffset); }
201
202 void set(uint64_t Offset) {
203 BitLow = Offset;
204 BitHigh = Offset >> 32;
205 }
206
207 uint64_t get() const { return BitLow | (uint64_t(BitHigh) << 32); }
208};
209
210/// Source range/offset of a preprocessed entity.
212 using RawLocEncoding = SourceLocationEncoding::RawLocEncoding;
213
214 /// Raw source location of beginning of range.
215 UnalignedUInt64 Begin;
216
217 /// Raw source location of end of range.
218 UnalignedUInt64 End;
219
220 /// Offset in the AST file relative to ModuleFile::MacroOffsetsBase.
221 uint32_t BitOffset;
222
223public:
224 PPEntityOffset(RawLocEncoding Begin, RawLocEncoding End, uint32_t BitOffset)
225 : Begin(Begin), End(End), BitOffset(BitOffset) {}
226
227 RawLocEncoding getBegin() const { return Begin.get(); }
228 RawLocEncoding getEnd() const { return End.get(); }
229
230 uint32_t getOffset() const { return BitOffset; }
231};
232
233/// Source range of a skipped preprocessor region
235 using RawLocEncoding = SourceLocationEncoding::RawLocEncoding;
236
237 /// Raw source location of beginning of range.
238 UnalignedUInt64 Begin;
239 /// Raw source location of end of range.
240 UnalignedUInt64 End;
241
242public:
243 PPSkippedRange(RawLocEncoding Begin, RawLocEncoding End)
244 : Begin(Begin), End(End) {}
245
246 RawLocEncoding getBegin() const { return Begin.get(); }
247 RawLocEncoding getEnd() const { return End.get(); }
248};
249
250/// Source location and bit offset of a declaration. Keep
251/// structure alignment 32-bit since the blob is assumed as 32-bit aligned.
253 using RawLocEncoding = SourceLocationEncoding::RawLocEncoding;
254
255 /// Raw source location.
256 UnalignedUInt64 RawLoc;
257
258 /// Offset relative to the start of the DECLTYPES_BLOCK block.
259 UnalignedUInt64 BitOffset;
260
261public:
262 DeclOffset() = default;
263 DeclOffset(RawLocEncoding RawLoc, uint64_t BitOffset,
264 uint64_t DeclTypesBlockStartOffset)
265 : RawLoc(RawLoc) {
266 setBitOffset(BitOffset, DeclTypesBlockStartOffset);
267 }
268
269 void setRawLoc(RawLocEncoding Loc) { RawLoc = Loc; }
270
271 RawLocEncoding getRawLoc() const { return RawLoc.get(); }
272
273 void setBitOffset(uint64_t Offset, const uint64_t DeclTypesBlockStartOffset) {
274 BitOffset.set(Offset - DeclTypesBlockStartOffset);
275 }
276
277 uint64_t getBitOffset(const uint64_t DeclTypesBlockStartOffset) const {
278 return BitOffset.get() + DeclTypesBlockStartOffset;
279 }
280};
281
282// The unaligned decl ID used in the Blobs of bistreams.
284 llvm::support::detail::packed_endian_specific_integral<
285 serialization::DeclID, llvm::endianness::native,
286 llvm::support::unaligned>;
287
288/// The number of predefined preprocessed entity IDs.
289const unsigned int NUM_PREDEF_PP_ENTITY_IDS = 1;
290
291/// Describes the various kinds of blocks that occur within
292/// an AST file.
294 /// The AST block, which acts as a container around the
295 /// full AST block.
296 AST_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
297
298 /// The block containing information about the source
299 /// manager.
301
302 /// The block containing information about the
303 /// preprocessor.
305
306 /// The block containing the definitions of all of the
307 /// types and decls used within the AST file.
309
310 /// The block containing the detailed preprocessing record.
312
313 /// The block containing the submodule structure.
315
316 /// The block containing comments.
318
319 /// The control block, which contains all of the
320 /// information that needs to be validated prior to committing
321 /// to loading the AST file.
323
324 /// The block of input files, which were used as inputs
325 /// to create this AST file.
326 ///
327 /// This block is part of the control block.
329
330 /// The block of configuration options, used to check that
331 /// a module is being used in a configuration compatible with the
332 /// configuration in which it was built.
333 ///
334 /// This block is part of the control block.
336
337 /// A block containing a module file extension.
339
340 /// A block with unhashed content.
341 ///
342 /// These records should not change the \a ASTFileSignature. See \a
343 /// UnhashedControlBlockRecordTypes for the list of records.
345};
346
347/// Record types that occur within the control block.
349 /// AST file metadata, including the AST file version number
350 /// and information about the compiler used to build this AST file.
352
353 /// Record code for another AST file imported by this AST file.
355
356 /// Record code for the original file that was used to
357 /// generate the AST file, including both its file ID and its
358 /// name.
360
361 /// Record code for file ID of the file or buffer that was used to
362 /// generate the AST file.
364
365 /// Offsets into the input-files block where input files
366 /// reside.
368
369 /// Record code for the module name.
371
372 /// Record code for the module map file that was used to build this
373 /// AST file.
375
376 /// Record code for the module build directory.
378};
379
380/// Record types that occur within the options block inside
381/// the control block.
383 /// Record code for the language options table.
384 ///
385 /// The record with this code contains the contents of the
386 /// LangOptions structure. We serialize the entire contents of
387 /// the structure, and let the reader decide which options are
388 /// actually important to check.
390
391 /// Record code for the target options table.
393
394 /// Record code for the filesystem options table.
396
397 /// Record code for the headers search options table.
399
400 /// Record code for the preprocessor options table.
402
403 /// Record code for the codegen options table.
405};
406
407/// Record codes for the unhashed control block.
409 /// Record code for the signature that identifiers this AST file.
411
412 /// Record code for the content hash of the AST block.
414
415 /// Record code for the diagnostic options table.
417
418 /// Record code for the headers search paths.
420
421 /// Record code for \#pragma diagnostic mappings.
423
424 /// Record code for the indices of used header search entries.
426
427 /// Record code for the indices of used VFSs.
429};
430
431/// Record code for extension blocks.
433 /// Metadata describing this particular extension.
435
436 /// The first record ID allocated to the extensions themselves.
438};
439
440/// Record types that occur within the input-files block
441/// inside the control block.
443 /// An input file.
445
446 /// The input file content hash
448};
449
450/// Record types that occur within the AST block itself.
452 /// Record code for the offsets of each type.
453 ///
454 /// The TYPE_OFFSET constant describes the record that occurs
455 /// within the AST block. The record itself is an array of offsets that
456 /// point into the declarations and types block (identified by
457 /// DECLTYPES_BLOCK_ID). The index into the array is based on the ID
458 /// of a type. For a given type ID @c T, the lower three bits of
459 /// @c T are its qualifiers (const, volatile, restrict), as in
460 /// the QualType class. The upper bits, after being shifted and
461 /// subtracting NUM_PREDEF_TYPE_IDS, are used to index into the
462 /// TYPE_OFFSET block to determine the offset of that type's
463 /// corresponding record within the DECLTYPES_BLOCK_ID block.
465
466 /// Record code for the offsets of each decl.
467 ///
468 /// The DECL_OFFSET constant describes the record that occurs
469 /// within the block identified by DECL_OFFSETS_BLOCK_ID within
470 /// the AST block. The record itself is an array of offsets that
471 /// point into the declarations and types block (identified by
472 /// DECLTYPES_BLOCK_ID). The declaration ID is an index into this
473 /// record, after subtracting one to account for the use of
474 /// declaration ID 0 for a NULL declaration pointer. Index 0 is
475 /// reserved for the translation unit declaration.
477
478 /// Record code for the table of offsets of each
479 /// identifier ID.
480 ///
481 /// The offset table contains offsets into the blob stored in
482 /// the IDENTIFIER_TABLE record. Each offset points to the
483 /// NULL-terminated string that corresponds to that identifier.
485
486 /// This is so that older clang versions, before the introduction
487 /// of the control block, can read and reject the newer PCH format.
488 /// *DON'T CHANGE THIS NUMBER*.
490
491 /// Record code for the identifier table.
492 ///
493 /// The identifier table is a simple blob that contains
494 /// NULL-terminated strings for all of the identifiers
495 /// referenced by the AST file. The IDENTIFIER_OFFSET table
496 /// contains the mapping from identifier IDs to the characters
497 /// in this blob. Note that the starting offsets of all of the
498 /// identifiers are odd, so that, when the identifier offset
499 /// table is loaded in, we can use the low bit to distinguish
500 /// between offsets (for unresolved identifier IDs) and
501 /// IdentifierInfo pointers (for already-resolved identifier
502 /// IDs).
504
505 /// Record code for the array of eagerly deserialized decls.
506 ///
507 /// The AST file contains a list of all of the declarations that should be
508 /// eagerly deserialized present within the parsed headers, stored as an
509 /// array of declaration IDs. These declarations will be
510 /// reported to the AST consumer after the AST file has been
511 /// read, since their presence can affect the semantics of the
512 /// program (e.g., for code generation).
514
515 /// Record code for the set of non-builtin, special
516 /// types.
517 ///
518 /// This record contains the type IDs for the various type nodes
519 /// that are constructed during semantic analysis (e.g.,
520 /// __builtin_va_list). The SPECIAL_TYPE_* constants provide
521 /// offsets into this record.
523
524 /// Record code for the extra statistics we gather while
525 /// generating an AST file.
527
528 /// Record code for the array of tentative definitions.
530
531 // ID 10 used to be for a list of extern "C" declarations.
532
533 /// Record code for the table of offsets into the
534 /// Objective-C method pool.
536
537 /// Record code for the Objective-C method pool,
539
540 /// The value of the next __COUNTER__ to dispense.
541 /// [PP_COUNTER_VALUE, Val]
543
544 /// Record code for the table of offsets into the block
545 /// of source-location information.
547
548 // ID 15 used to be for source location entry preloads.
549
550 /// Record code for the set of ext_vector type names.
552
553 /// Record code for the array of unused file scoped decls.
555
556 /// Record code for the table of offsets to entries in the
557 /// preprocessing record.
559
560 /// Record code for the array of VTable uses.
562
563 // ID 20 used to be for a list of dynamic classes.
564
565 /// Record code for referenced selector pool.
567
568 /// Record code for an update to the TU's lexically contained
569 /// declarations.
571
572 // ID 23 used to be for a list of local redeclarations.
573
574 /// Record code for declarations that Sema keeps references of.
576
577 /// Record code for weak undeclared identifiers.
579
580 /// Record code for pending implicit instantiations.
582
583 // ID 27 used to be for a list of replacement decls.
584
585 /// Record code for an update to a decl context's lookup table.
586 ///
587 /// In practice, this should only be used for the TU and namespaces.
589
590 /// Record for offsets of DECL_UPDATES records for declarations
591 /// that were modified after being deserialized and need updates.
593
594 // ID 30 used to be a decl update record. These are now in the DECLTYPES
595 // block.
596
597 // ID 31 used to be a list of offsets to DECL_CXX_BASE_SPECIFIERS records.
598
599 // ID 32 used to be the code for \#pragma diagnostic mappings.
600
601 /// Record code for special CUDA declarations.
603
604 /// Record code for header search information.
606
607 /// Record code for floating point \#pragma options.
609
610 /// Record code for enabled OpenCL extensions.
612
613 /// The list of delegating constructor declarations.
615
616 /// Record code for the set of known namespaces, which are used
617 /// for typo correction.
619
620 /// Record code for the remapping information used to relate
621 /// loaded modules to the various offsets and IDs(e.g., source location
622 /// offests, declaration and type IDs) that are used in that module to
623 /// refer to other modules.
625
626 /// Record code for the source manager line table information,
627 /// which stores information about \#line directives.
629
630 /// Record code for map of Objective-C class definition IDs to the
631 /// ObjC categories in a module that are attached to that class.
633
634 /// Record code for a file sorted array of DeclIDs in a module.
636
637 /// Record code for an array of all of the (sub)modules that were
638 /// imported by the AST file.
640
641 // ID 44 used to be a table of merged canonical declarations.
642 // ID 45 used to be a list of declaration IDs of local redeclarations.
643
644 /// Record code for the array of Objective-C categories (including
645 /// extensions).
646 ///
647 /// This array can only be interpreted properly using the Objective-C
648 /// categories map.
650
651 /// Record code for the table of offsets of each macro ID.
652 ///
653 /// The offset table contains offsets into the blob stored in
654 /// the preprocessor block. Each offset points to the corresponding
655 /// macro definition.
657
658 /// A list of "interesting" identifiers. Only used in C++ (where we
659 /// don't normally do lookups into the serialized identifier table). These
660 /// are eagerly deserialized.
662
663 /// Record code for undefined but used functions and variables that
664 /// need a definition in this TU.
666
667 /// Record code for late parsed template functions.
669
670 /// Record code for \#pragma optimize options.
672
673 /// Record code for potentially unused local typedef names.
675
676 // ID 53 used to be a table of constructor initializer records.
677
678 /// Delete expressions that will be analyzed later.
680
681 /// Record code for \#pragma ms_struct options.
683
684 /// Record code for \#pragma ms_struct options.
686
687 /// Number of unmatched #pragma clang cuda_force_host_device begin
688 /// directives we've seen.
690
691 /// Record code for types associated with OpenCL extensions.
693
694 /// Record code for declarations associated with OpenCL extensions.
696
698
699 /// Record code for \#pragma align/pack options.
701
702 /// The stack of open #ifs/#ifdefs recorded in a preamble.
704
705 /// A table of skipped ranges within the preprocessing record.
707
708 /// Record code for the Decls to be checked for deferred diags.
710
711 /// Record code for \#pragma float_control options.
713
714 /// ID 66 used to be the list of included files.
715
716 /// Record code for an unterminated \#pragma clang assume_nonnull begin
717 /// recorded in a preamble.
719
720 /// Record code for lexical and visible block for delayed namespace in
721 /// reduced BMI.
723
724 /// Record code for \#pragma clang unsafe_buffer_usage begin/end
726
727 /// Record code for vtables to emit.
729
730 /// Record code for related declarations that have to be deserialized together
731 /// from the same module.
733
734 /// Record code for Sema's vector of functions/blocks with effects to
735 /// be verified.
737
738 /// Record code for updated specialization
740
742
744
746
748};
749
750/// Record types used within a source manager block.
752 /// Describes a source location entry (SLocEntry) for a
753 /// file.
755
756 /// Describes a source location entry (SLocEntry) for a
757 /// buffer.
759
760 /// Describes a blob that contains the data for a buffer
761 /// entry. This kind of record always directly follows a
762 /// SM_SLOC_BUFFER_ENTRY record or a SM_SLOC_FILE_ENTRY with an
763 /// overridden buffer.
765
766 /// Describes a zlib-compressed blob that contains the data for
767 /// a buffer entry.
769
770 /// Describes a source location entry (SLocEntry) for a
771 /// macro expansion.
773};
774
775/// Record types used within a preprocessor block.
777 // The macros in the PP section are a PP_MACRO_* instance followed by a
778 // list of PP_TOKEN instances for each token in the definition.
779
780 /// An object-like macro definition.
781 /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
783
784 /// A function-like macro definition.
785 /// [PP_MACRO_FUNCTION_LIKE, <ObjectLikeStuff>, IsC99Varargs,
786 /// IsGNUVarars, NumArgs, ArgIdentInfoID* ]
788
789 /// Describes one token.
790 /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
792
793 /// The macro directives history for a particular identifier.
795
796 /// A macro directive exported by a module.
797 /// [PP_MODULE_MACRO, SubmoduleID, MacroID, (Overridden SubmoduleID)*]
799};
800
801/// Record types used within a preprocessor detail block.
803 /// Describes a macro expansion within the preprocessing record.
805
806 /// Describes a macro definition within the preprocessing record.
808
809 /// Describes an inclusion directive within the preprocessing
810 /// record.
812};
813
814/// Record types used within a submodule description block.
816 /// Metadata for submodules as a whole.
818
819 /// Defines the major attributes of a submodule, including its
820 /// name and parent.
822
823 /// Specifies the umbrella header used to create this module,
824 /// if any.
826
827 /// Specifies a header that falls into this (sub)module.
829
830 /// Specifies a top-level header that falls into this (sub)module.
832
833 /// Specifies an umbrella directory.
835
836 /// Specifies the submodules that are imported by this
837 /// submodule.
839
840 /// Specifies the submodules that are re-exported from this
841 /// submodule.
843
844 /// Specifies a required feature.
846
847 /// Specifies a header that has been explicitly excluded
848 /// from this submodule.
850
851 /// Specifies a library or framework to link against.
853
854 /// Specifies a configuration macro for this module.
856
857 /// Specifies a conflict with another module.
859
860 /// Specifies a header that is private to this submodule.
862
863 /// Specifies a header that is part of the module but must be
864 /// textually included.
866
867 /// Specifies a header that is private to this submodule but
868 /// must be textually included.
870
871 /// Specifies some declarations with initializers that must be
872 /// emitted to initialize the module.
874
875 /// Specifies the name of the module that will eventually
876 /// re-export the entities in this module.
878
879 /// Specifies affecting modules that were not imported.
881};
882
883/// Record types used within a comments block.
885
886/// \defgroup ASTAST AST file AST constants
887///
888/// The constants in this group describe various components of the
889/// abstract syntax tree within an AST file.
890///
891/// @{
892
893/// Predefined type IDs.
894///
895/// These type IDs correspond to predefined types in the AST
896/// context, such as built-in types (int) and special place-holder
897/// types (the <overload> and <dependent> type markers). Such
898/// types are never actually serialized, since they will be built
899/// by the AST context when it is created.
901 /// The NULL type.
903
904 /// The void type.
906
907 /// The 'bool' or '_Bool' type.
909
910 /// The 'char' type, when it is unsigned.
912
913 /// The 'unsigned char' type.
915
916 /// The 'unsigned short' type.
918
919 /// The 'unsigned int' type.
921
922 /// The 'unsigned long' type.
924
925 /// The 'unsigned long long' type.
927
928 /// The 'char' type, when it is signed.
930
931 /// The 'signed char' type.
933
934 /// The C++ 'wchar_t' type.
936
937 /// The (signed) 'short' type.
939
940 /// The (signed) 'int' type.
942
943 /// The (signed) 'long' type.
945
946 /// The (signed) 'long long' type.
948
949 /// The 'float' type.
951
952 /// The 'double' type.
954
955 /// The 'long double' type.
957
958 /// The placeholder type for overloaded function sets.
960
961 /// The placeholder type for dependent types.
963
964 /// The '__uint128_t' type.
966
967 /// The '__int128_t' type.
969
970 /// The type of 'nullptr'.
972
973 /// The C++ 'char16_t' type.
975
976 /// The C++ 'char32_t' type.
978
979 /// The ObjC 'id' type.
981
982 /// The ObjC 'Class' type.
984
985 /// The ObjC 'SEL' type.
987
988 /// The 'unknown any' placeholder type.
990
991 /// The placeholder type for bound member functions.
993
994 /// The "auto" deduction type.
996
997 /// The "auto &&" deduction type.
999
1000 /// The OpenCL 'half' / ARM NEON __fp16 type.
1002
1003 /// ARC's unbridged-cast placeholder type.
1005
1006 /// The pseudo-object placeholder type.
1008
1009 /// The placeholder type for builtin functions.
1011
1012 /// OpenCL event type.
1014
1015 /// OpenCL clk event type.
1017
1018 /// OpenCL sampler type.
1020
1021 /// OpenCL queue type.
1023
1024 /// OpenCL reserve_id type.
1026
1027 /// The placeholder type for an array section.
1029
1030 /// The '__float128' type
1032
1033 /// The '_Float16' type
1035
1036 /// The C++ 'char8_t' type.
1038
1039 /// \brief The 'short _Accum' type
1041
1042 /// \brief The '_Accum' type
1044
1045 /// \brief The 'long _Accum' type
1047
1048 /// \brief The 'unsigned short _Accum' type
1050
1051 /// \brief The 'unsigned _Accum' type
1053
1054 /// \brief The 'unsigned long _Accum' type
1056
1057 /// \brief The 'short _Fract' type
1059
1060 /// \brief The '_Fract' type
1062
1063 /// \brief The 'long _Fract' type
1065
1066 /// \brief The 'unsigned short _Fract' type
1068
1069 /// \brief The 'unsigned _Fract' type
1071
1072 /// \brief The 'unsigned long _Fract' type
1074
1075 /// \brief The '_Sat short _Accum' type
1077
1078 /// \brief The '_Sat _Accum' type
1080
1081 /// \brief The '_Sat long _Accum' type
1083
1084 /// \brief The '_Sat unsigned short _Accum' type
1086
1087 /// \brief The '_Sat unsigned _Accum' type
1089
1090 /// \brief The '_Sat unsigned long _Accum' type
1092
1093 /// \brief The '_Sat short _Fract' type
1095
1096 /// \brief The '_Sat _Fract' type
1098
1099 /// \brief The '_Sat long _Fract' type
1101
1102 /// \brief The '_Sat unsigned short _Fract' type
1104
1105 /// \brief The '_Sat unsigned _Fract' type
1107
1108 /// \brief The '_Sat unsigned long _Fract' type
1110
1111 /// The placeholder type for OpenMP array shaping operation.
1113
1114 /// The placeholder type for OpenMP iterator expression.
1116
1117 /// A placeholder type for incomplete matrix index operations.
1119
1120 /// \brief The '__bf16' type
1122
1123 /// \brief The '__ibm128' type
1125
1126/// OpenCL image types with auto numeration
1127#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
1128 PREDEF_TYPE_##Id##_ID,
1129#include "clang/Basic/OpenCLImageTypes.def"
1130/// \brief OpenCL extension types with auto numeration
1131#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) PREDEF_TYPE_##Id##_ID,
1132#include "clang/Basic/OpenCLExtensionTypes.def"
1133// \brief SVE types with auto numeration
1134#define SVE_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
1135#include "clang/Basic/AArch64ACLETypes.def"
1136// \brief PowerPC MMA types with auto numeration
1137#define PPC_VECTOR_TYPE(Name, Id, Size) PREDEF_TYPE_##Id##_ID,
1138#include "clang/Basic/PPCTypes.def"
1139// \brief RISC-V V types with auto numeration
1140#define RVV_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
1141#include "clang/Basic/RISCVVTypes.def"
1142// \brief WebAssembly reference types with auto numeration
1143#define WASM_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
1144#include "clang/Basic/WebAssemblyReferenceTypes.def"
1145// \brief AMDGPU types with auto numeration
1146#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) PREDEF_TYPE_##Id##_ID,
1147#include "clang/Basic/AMDGPUTypes.def"
1148// \brief HLSL intangible types with auto numeration
1149#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) PREDEF_TYPE_##Id##_ID,
1150#include "clang/Basic/HLSLIntangibleTypes.def"
1151
1152 /// The placeholder type for unresolved templates.
1154 // Sentinel value. Considered a predefined type but not useable as one.
1156};
1157
1158/// The number of predefined type IDs that are reserved for
1159/// the PREDEF_TYPE_* constants.
1160///
1161/// Type IDs for non-predefined types will start at
1162/// NUM_PREDEF_TYPE_IDs.
1163const unsigned NUM_PREDEF_TYPE_IDS = 513;
1164
1165// Ensure we do not overrun the predefined types we reserved
1166// in the enum PredefinedTypeIDs above.
1168 "Too many enumerators in PredefinedTypeIDs. Review the value of "
1169 "NUM_PREDEF_TYPE_IDS");
1170
1171/// Record codes for each kind of type.
1172///
1173/// These constants describe the type records that can occur within a
1174/// block identified by DECLTYPES_BLOCK_ID in the AST file. Each
1175/// constant describes a record for a specific type class in the
1176/// AST. Note that DeclCode values share this code space.
1178#define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
1179 TYPE_##CODE_ID = CODE_VALUE,
1180#include "clang/Serialization/TypeBitCodes.def"
1181
1182 /// An ExtQualType record.
1184};
1185
1186/// The type IDs for special types constructed by semantic
1187/// analysis.
1188///
1189/// The constants in this enumeration are indices into the
1190/// SPECIAL_TYPES record.
1192 /// CFConstantString type
1194
1195 /// C FILE typedef type
1197
1198 /// C jmp_buf typedef type
1200
1201 /// C sigjmp_buf typedef type
1203
1204 /// Objective-C "id" redefinition type
1206
1207 /// Objective-C "Class" redefinition type
1209
1210 /// Objective-C "SEL" redefinition type
1212
1213 /// C ucontext_t typedef type
1215};
1216
1217/// The number of special type IDs.
1218const unsigned NumSpecialTypeIDs = 8;
1219
1220/// Record of updates for a declaration that was modified after
1221/// being deserialized. This can occur within DECLTYPES_BLOCK_ID.
1222const unsigned int DECL_UPDATES = 49;
1223
1224/// Record code for a list of local redeclarations of a declaration.
1225/// This can occur within DECLTYPES_BLOCK_ID.
1226const unsigned int LOCAL_REDECLARATIONS = 50;
1227
1228/// Record codes for each kind of declaration.
1229///
1230/// These constants describe the declaration records that can occur within
1231/// a declarations block (identified by DECLTYPES_BLOCK_ID). Each
1232/// constant describes a record for a specific declaration class
1233/// in the AST. Note that TypeCode values share this code space.
1235 /// A TypedefDecl record.
1237 /// A TypeAliasDecl record.
1238
1240
1241 /// An EnumDecl record.
1243
1244 /// A RecordDecl record.
1246
1247 /// An EnumConstantDecl record.
1249
1250 /// A FunctionDecl record.
1252
1253 /// A ObjCMethodDecl record.
1255
1256 /// A ObjCInterfaceDecl record.
1258
1259 /// A ObjCProtocolDecl record.
1261
1262 /// A ObjCIvarDecl record.
1264
1265 /// A ObjCAtDefsFieldDecl record.
1267
1268 /// A ObjCCategoryDecl record.
1270
1271 /// A ObjCCategoryImplDecl record.
1273
1274 /// A ObjCImplementationDecl record.
1276
1277 /// A ObjCCompatibleAliasDecl record.
1279
1280 /// A ObjCPropertyDecl record.
1282
1283 /// A ObjCPropertyImplDecl record.
1285
1286 /// A FieldDecl record.
1288
1289 /// A MSPropertyDecl record.
1291
1292 /// A MSGuidDecl record.
1294
1295 /// A TemplateParamObjectDecl record.
1297
1298 /// A VarDecl record.
1300
1301 /// An ImplicitParamDecl record.
1303
1304 /// A ParmVarDecl record.
1306
1307 /// A DecompositionDecl record.
1309
1310 /// A BindingDecl record.
1312
1313 /// A FileScopeAsmDecl record.
1315
1316 /// A TopLevelStmtDecl record.
1318
1319 /// A BlockDecl record.
1321
1322 /// A OutlinedFunctionDecl record.
1324
1325 /// A CapturedDecl record.
1327
1328 /// A record that stores the set of declarations that are
1329 /// lexically stored within a given DeclContext.
1330 ///
1331 /// The record itself is a blob that is an array of declaration IDs,
1332 /// in the order in which those declarations were added to the
1333 /// declaration context. This data is used when iterating over
1334 /// the contents of a DeclContext, e.g., via
1335 /// DeclContext::decls_begin() and DeclContext::decls_end().
1337
1338 /// A record that stores the set of declarations that are
1339 /// visible from a given DeclContext.
1340 ///
1341 /// The record itself stores a set of mappings, each of which
1342 /// associates a declaration name with one or more declaration
1343 /// IDs. This data is used when performing qualified name lookup
1344 /// into a DeclContext via DeclContext::lookup.
1346
1347 /// A record containing the set of declarations that are
1348 /// only visible from DeclContext in the same module.
1350
1351 /// A record that stores the set of declarations that are only visible
1352 /// to the TU.
1354
1355 /// A LabelDecl record.
1357
1358 /// A NamespaceDecl record.
1360
1361 /// A NamespaceAliasDecl record.
1363
1364 /// A UsingDecl record.
1366
1367 /// A UsingEnumDecl record.
1369
1370 /// A UsingPackDecl record.
1372
1373 /// A UsingShadowDecl record.
1375
1376 /// A ConstructorUsingShadowDecl record.
1378
1379 /// A UsingDirecitveDecl record.
1381
1382 /// An UnresolvedUsingValueDecl record.
1384
1385 /// An UnresolvedUsingTypenameDecl record.
1387
1388 /// A LinkageSpecDecl record.
1390
1391 /// An ExportDecl record.
1393
1394 /// A CXXRecordDecl record.
1396
1397 /// A CXXDeductionGuideDecl record.
1399
1400 /// A CXXMethodDecl record.
1402
1403 /// A CXXConstructorDecl record.
1405
1406 /// A CXXDestructorDecl record.
1408
1409 /// A CXXConversionDecl record.
1411
1412 /// An AccessSpecDecl record.
1414
1415 /// A FriendDecl record.
1417
1418 /// A FriendTemplateDecl record.
1420
1421 /// A ClassTemplateDecl record.
1423
1424 /// A ClassTemplateSpecializationDecl record.
1426
1427 /// A ClassTemplatePartialSpecializationDecl record.
1429
1430 /// A VarTemplateDecl record.
1432
1433 /// A VarTemplateSpecializationDecl record.
1435
1436 /// A VarTemplatePartialSpecializationDecl record.
1438
1439 /// A FunctionTemplateDecl record.
1441
1442 /// A TemplateTypeParmDecl record.
1444
1445 /// A NonTypeTemplateParmDecl record.
1447
1448 /// A TemplateTemplateParmDecl record.
1450
1451 /// A TypeAliasTemplateDecl record.
1453
1454 /// \brief A ConceptDecl record.
1456
1457 /// An UnresolvedUsingIfExistsDecl record.
1459
1460 /// \brief A StaticAssertDecl record.
1462
1463 /// A record containing CXXBaseSpecifiers.
1465
1466 /// A record containing CXXCtorInitializers.
1468
1469 /// A IndirectFieldDecl record.
1471
1472 /// A NonTypeTemplateParmDecl record that stores an expanded
1473 /// non-type template parameter pack.
1475
1476 /// A TemplateTemplateParmDecl record that stores an expanded
1477 /// template template parameter pack.
1479
1480 /// An ImportDecl recording a module import.
1482
1483 /// An OMPThreadPrivateDecl record.
1485
1486 /// An OMPRequiresDecl record.
1488
1489 /// An OMPAllocateDcl record.
1491
1492 /// An EmptyDecl record.
1494
1495 /// An LifetimeExtendedTemporaryDecl record.
1497
1498 /// A RequiresExprBodyDecl record.
1500
1501 /// An ObjCTypeParamDecl record.
1503
1504 /// An OMPCapturedExprDecl record.
1506
1507 /// A PragmaCommentDecl record.
1509
1510 /// A PragmaDetectMismatchDecl record.
1512
1513 /// An OMPDeclareMapperDecl record.
1515
1516 /// An OMPDeclareReductionDecl record.
1518
1519 /// A UnnamedGlobalConstantDecl record.
1521
1522 /// A HLSLBufferDecl record.
1524
1525 /// An ImplicitConceptSpecializationDecl record.
1527
1528 // A decls specialization record.
1530
1531 // A decls specialization record.
1533
1534 // An OpenACCDeclareDecl record.
1536
1537 // An OpenACCRoutineDecl record.
1539
1541};
1542
1543/// Record codes for each kind of statement or expression.
1544///
1545/// These constants describe the records that describe statements
1546/// or expressions. These records occur within type and declarations
1547/// block, so they begin with record values of 128. Each constant
1548/// describes a record for a specific statement or expression class in the
1549/// AST.
1551 /// A marker record that indicates that we are at the end
1552 /// of an expression.
1554
1555 /// A NULL expression.
1557
1558 /// A reference to a previously [de]serialized Stmt record.
1560
1561 /// A NullStmt record.
1563
1564 /// A CompoundStmt record.
1566
1567 /// A CaseStmt record.
1569
1570 /// A DefaultStmt record.
1572
1573 /// A LabelStmt record.
1575
1576 /// An AttributedStmt record.
1578
1579 /// An IfStmt record.
1581
1582 /// A SwitchStmt record.
1584
1585 /// A WhileStmt record.
1587
1588 /// A DoStmt record.
1590
1591 /// A ForStmt record.
1593
1594 /// A GotoStmt record.
1596
1597 /// An IndirectGotoStmt record.
1599
1600 /// A ContinueStmt record.
1602
1603 /// A BreakStmt record.
1605
1606 /// A ReturnStmt record.
1608
1609 /// A DeclStmt record.
1611
1612 /// A CapturedStmt record.
1614
1615 /// A SYCLKernelCallStmt record.
1617
1618 /// A GCC-style AsmStmt record.
1620
1621 /// A MS-style AsmStmt record.
1623
1624 /// A constant expression context.
1626
1627 /// A PredefinedExpr record.
1629
1630 /// A DeclRefExpr record.
1632
1633 /// An IntegerLiteral record.
1635
1636 /// A FloatingLiteral record.
1638
1639 /// An ImaginaryLiteral record.
1641
1642 /// A StringLiteral record.
1644
1645 /// A CharacterLiteral record.
1647
1648 /// A ParenExpr record.
1650
1651 /// A ParenListExpr record.
1653
1654 /// A UnaryOperator record.
1656
1657 /// An OffsetOfExpr record.
1659
1660 /// A SizefAlignOfExpr record.
1662
1663 /// An ArraySubscriptExpr record.
1665
1666 /// An MatrixSubscriptExpr record.
1668
1669 /// A CallExpr record.
1671
1672 /// A MemberExpr record.
1674
1675 /// A BinaryOperator record.
1677
1678 /// A CompoundAssignOperator record.
1680
1681 /// A ConditionOperator record.
1683
1684 /// An ImplicitCastExpr record.
1686
1687 /// A CStyleCastExpr record.
1689
1690 /// A CompoundLiteralExpr record.
1692
1693 /// An ExtVectorElementExpr record.
1695
1696 /// An InitListExpr record.
1698
1699 /// A DesignatedInitExpr record.
1701
1702 /// A DesignatedInitUpdateExpr record.
1704
1705 /// An NoInitExpr record.
1707
1708 /// An ArrayInitLoopExpr record.
1710
1711 /// An ArrayInitIndexExpr record.
1713
1714 /// An ImplicitValueInitExpr record.
1716
1717 /// A VAArgExpr record.
1719
1720 /// An AddrLabelExpr record.
1722
1723 /// A StmtExpr record.
1725
1726 /// A ChooseExpr record.
1728
1729 /// A GNUNullExpr record.
1731
1732 /// A SourceLocExpr record.
1734
1735 /// A EmbedExpr record.
1737
1738 /// A ShuffleVectorExpr record.
1740
1741 /// A ConvertVectorExpr record.
1743
1744 /// BlockExpr
1746
1747 /// A GenericSelectionExpr record.
1749
1750 /// A PseudoObjectExpr record.
1752
1753 /// An AtomicExpr record.
1755
1756 /// A RecoveryExpr record.
1758
1759 // Objective-C
1760
1761 /// An ObjCStringLiteral record.
1763
1767
1768 /// An ObjCEncodeExpr record.
1770
1771 /// An ObjCSelectorExpr record.
1773
1774 /// An ObjCProtocolExpr record.
1776
1777 /// An ObjCIvarRefExpr record.
1779
1780 /// An ObjCPropertyRefExpr record.
1782
1783 /// An ObjCSubscriptRefExpr record.
1785
1786 /// UNUSED
1788
1789 /// An ObjCMessageExpr record.
1791
1792 /// An ObjCIsa Expr record.
1794
1795 /// An ObjCIndirectCopyRestoreExpr record.
1797
1798 /// An ObjCForCollectionStmt record.
1800
1801 /// An ObjCAtCatchStmt record.
1803
1804 /// An ObjCAtFinallyStmt record.
1806
1807 /// An ObjCAtTryStmt record.
1809
1810 /// An ObjCAtSynchronizedStmt record.
1812
1813 /// An ObjCAtThrowStmt record.
1815
1816 /// An ObjCAutoreleasePoolStmt record.
1818
1819 /// An ObjCBoolLiteralExpr record.
1821
1822 /// An ObjCAvailabilityCheckExpr record.
1824
1825 // C++
1826
1827 /// A CXXCatchStmt record.
1829
1830 /// A CXXTryStmt record.
1832 /// A CXXForRangeStmt record.
1833
1835
1836 /// A CXXOperatorCallExpr record.
1838
1839 /// A CXXMemberCallExpr record.
1841
1842 /// A CXXRewrittenBinaryOperator record.
1844
1845 /// A CXXConstructExpr record.
1847
1848 /// A CXXInheritedCtorInitExpr record.
1850
1851 /// A CXXTemporaryObjectExpr record.
1853
1854 /// A CXXStaticCastExpr record.
1856
1857 /// A CXXDynamicCastExpr record.
1859
1860 /// A CXXReinterpretCastExpr record.
1862
1863 /// A CXXConstCastExpr record.
1865
1866 /// A CXXAddrspaceCastExpr record.
1868
1869 /// A CXXFunctionalCastExpr record.
1871
1872 /// A BuiltinBitCastExpr record.
1874
1875 /// A UserDefinedLiteral record.
1877
1878 /// A CXXStdInitializerListExpr record.
1880
1881 /// A CXXBoolLiteralExpr record.
1883
1884 /// A CXXParenListInitExpr record.
1886
1887 EXPR_CXX_NULL_PTR_LITERAL, // CXXNullPtrLiteralExpr
1888 EXPR_CXX_TYPEID_EXPR, // CXXTypeidExpr (of expr).
1889 EXPR_CXX_TYPEID_TYPE, // CXXTypeidExpr (of type).
1890 EXPR_CXX_THIS, // CXXThisExpr
1891 EXPR_CXX_THROW, // CXXThrowExpr
1892 EXPR_CXX_DEFAULT_ARG, // CXXDefaultArgExpr
1893 EXPR_CXX_DEFAULT_INIT, // CXXDefaultInitExpr
1894 EXPR_CXX_BIND_TEMPORARY, // CXXBindTemporaryExpr
1895
1896 EXPR_CXX_SCALAR_VALUE_INIT, // CXXScalarValueInitExpr
1897 EXPR_CXX_NEW, // CXXNewExpr
1898 EXPR_CXX_DELETE, // CXXDeleteExpr
1899 EXPR_CXX_PSEUDO_DESTRUCTOR, // CXXPseudoDestructorExpr
1900
1901 EXPR_EXPR_WITH_CLEANUPS, // ExprWithCleanups
1902
1903 EXPR_CXX_DEPENDENT_SCOPE_MEMBER, // CXXDependentScopeMemberExpr
1904 EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, // DependentScopeDeclRefExpr
1905 EXPR_CXX_UNRESOLVED_CONSTRUCT, // CXXUnresolvedConstructExpr
1906 EXPR_CXX_UNRESOLVED_MEMBER, // UnresolvedMemberExpr
1907 EXPR_CXX_UNRESOLVED_LOOKUP, // UnresolvedLookupExpr
1908
1909 EXPR_CXX_EXPRESSION_TRAIT, // ExpressionTraitExpr
1910 EXPR_CXX_NOEXCEPT, // CXXNoexceptExpr
1911
1912 EXPR_OPAQUE_VALUE, // OpaqueValueExpr
1913 EXPR_BINARY_CONDITIONAL_OPERATOR, // BinaryConditionalOperator
1914 EXPR_TYPE_TRAIT, // TypeTraitExpr
1915 EXPR_ARRAY_TYPE_TRAIT, // ArrayTypeTraitIntExpr
1916
1917 EXPR_PACK_EXPANSION, // PackExpansionExpr
1918 EXPR_PACK_INDEXING, // PackIndexingExpr
1919 EXPR_SIZEOF_PACK, // SizeOfPackExpr
1920 EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, // SubstNonTypeTemplateParmExpr
1921 EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK, // SubstNonTypeTemplateParmPackExpr
1922 EXPR_FUNCTION_PARM_PACK, // FunctionParmPackExpr
1923 EXPR_MATERIALIZE_TEMPORARY, // MaterializeTemporaryExpr
1924 EXPR_CXX_FOLD, // CXXFoldExpr
1925 EXPR_CONCEPT_SPECIALIZATION, // ConceptSpecializationExpr
1926 EXPR_REQUIRES, // RequiresExpr
1927
1928 // CUDA
1929 EXPR_CUDA_KERNEL_CALL, // CUDAKernelCallExpr
1930
1931 // OpenCL
1932 EXPR_ASTYPE, // AsTypeExpr
1933
1934 // Microsoft
1935 EXPR_CXX_PROPERTY_REF_EXPR, // MSPropertyRefExpr
1936 EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR, // MSPropertySubscriptExpr
1937 EXPR_CXX_UUIDOF_EXPR, // CXXUuidofExpr (of expr).
1938 EXPR_CXX_UUIDOF_TYPE, // CXXUuidofExpr (of type).
1939 STMT_SEH_LEAVE, // SEHLeaveStmt
1940 STMT_SEH_EXCEPT, // SEHExceptStmt
1941 STMT_SEH_FINALLY, // SEHFinallyStmt
1942 STMT_SEH_TRY, // SEHTryStmt
1943
1944 // OpenMP directives
2025
2026 // ARC
2027 EXPR_OBJC_BRIDGED_CAST, // ObjCBridgedCastExpr
2028
2029 STMT_MS_DEPENDENT_EXISTS, // MSDependentExistsStmt
2030 EXPR_LAMBDA, // LambdaExpr
2036
2037 // FixedPointLiteral
2039
2040 // SYCLUniqueStableNameExpr
2042
2043 // OpenACC Constructs/Exprs
2059
2060 // HLSL Constructs
2062
2063};
2064
2065/// The kinds of designators that can occur in a
2066/// DesignatedInitExpr.
2068 /// Field designator where only the field name is known.
2070
2071 /// Field designator where the field has been resolved to
2072 /// a declaration.
2074
2075 /// Array designator.
2077
2078 /// GNU array range designator.
2080};
2081
2082/// The different kinds of data that can occur in a
2083/// CtorInitializer.
2090
2091/// Kinds of cleanup objects owned by ExprWithCleanups.
2093
2094/// Describes the categories of an Objective-C class.
2096 // The ID of the definition. Use unaligned_decl_id_t to keep
2097 // ObjCCategoriesInfo 32-bit aligned.
2099
2100 // Offset into the array of category lists.
2101 unsigned Offset;
2102
2105 : DefinitionID(ID.getRawValue()), Offset(Offset) {}
2106
2108
2109 friend bool operator<(const ObjCCategoriesInfo &X,
2110 const ObjCCategoriesInfo &Y) {
2111 return X.getDefinitionID() < Y.getDefinitionID();
2112 }
2113
2114 friend bool operator>(const ObjCCategoriesInfo &X,
2115 const ObjCCategoriesInfo &Y) {
2116 return X.getDefinitionID() > Y.getDefinitionID();
2117 }
2118
2119 friend bool operator<=(const ObjCCategoriesInfo &X,
2120 const ObjCCategoriesInfo &Y) {
2121 return X.getDefinitionID() <= Y.getDefinitionID();
2122 }
2123
2124 friend bool operator>=(const ObjCCategoriesInfo &X,
2125 const ObjCCategoriesInfo &Y) {
2126 return X.getDefinitionID() >= Y.getDefinitionID();
2127 }
2128};
2129
2130static_assert(alignof(ObjCCategoriesInfo) <= 4);
2131static_assert(std::is_standard_layout_v<ObjCCategoriesInfo> &&
2132 std::is_trivial_v<ObjCCategoriesInfo>);
2133
2134/// A key used when looking up entities by \ref DeclarationName.
2135///
2136/// Different \ref DeclarationNames are mapped to different keys, but the
2137/// same key can occasionally represent multiple names (for names that
2138/// contain types, in particular).
2140 using NameKind = unsigned;
2141
2142 NameKind Kind = 0;
2143 uint64_t Data = 0;
2144
2145public:
2148 DeclarationNameKey(NameKind Kind, uint64_t Data) : Kind(Kind), Data(Data) {}
2149
2150 NameKind getKind() const { return Kind; }
2151
2153 assert(Kind == DeclarationName::Identifier ||
2156 return (IdentifierInfo *)Data;
2157 }
2158
2160 assert(Kind == DeclarationName::ObjCZeroArgSelector ||
2163 return Selector(Data);
2164 }
2165
2170
2171 /// Compute a fingerprint of this key for use in on-disk hash table.
2172 unsigned getHash() const;
2173
2174 friend bool operator==(const DeclarationNameKey &A,
2175 const DeclarationNameKey &B) {
2176 return A.Kind == B.Kind && A.Data == B.Data;
2177 }
2178};
2179
2180/// @}
2181
2182} // namespace serialization
2183} // namespace clang
2184
2185namespace llvm {
2186
2187template <> struct DenseMapInfo<clang::serialization::DeclarationNameKey> {
2191
2195
2196 static unsigned
2198 return Key.getHash();
2199 }
2200
2203 return L == R;
2204 }
2205};
2206
2207} // namespace llvm
2208
2209#endif // LLVM_CLANG_SERIALIZATION_ASTBITCODES_H
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
#define X(type, name)
Definition Value.h:97
Defines an enumeration for C++ overloaded operators.
Defines the clang::SourceLocation class and associated facilities.
C Language Family Type Representation.
uint64_t DeclID
An ID number that refers to a declaration in an AST file.
Definition DeclID.h:108
The name of a declaration.
One of these records is kept for each identifier that is lexed.
A (possibly-)qualified type.
Definition TypeBase.h:937
static QualType getFromOpaquePtr(const void *Ptr)
Definition TypeBase.h:986
@ FastWidth
The width of the "fast" qualifier mask.
Definition TypeBase.h:376
Smart pointer class that efficiently represents Objective-C method names.
DeclOffset(RawLocEncoding RawLoc, uint64_t BitOffset, uint64_t DeclTypesBlockStartOffset)
RawLocEncoding getRawLoc() const
void setBitOffset(uint64_t Offset, const uint64_t DeclTypesBlockStartOffset)
uint64_t getBitOffset(const uint64_t DeclTypesBlockStartOffset) const
void setRawLoc(RawLocEncoding Loc)
A key used when looking up entities by DeclarationName.
unsigned getHash() const
Compute a fingerprint of this key for use in on-disk hash table.
friend bool operator==(const DeclarationNameKey &A, const DeclarationNameKey &B)
OverloadedOperatorKind getOperatorKind() const
DeclarationNameKey(NameKind Kind, uint64_t Data)
IdentifierInfo * getIdentifier() const
RawLocEncoding getBegin() const
PPEntityOffset(RawLocEncoding Begin, RawLocEncoding End, uint32_t BitOffset)
PPSkippedRange(RawLocEncoding Begin, RawLocEncoding End)
RawLocEncoding getBegin() const
uint32_t getModuleFileIndex() const
TypeIdx(uint32_t ModuleFileIdx, uint32_t Idx)
static TypeIdx fromTypeID(TypeID ID)
TypeID asTypeID(unsigned FastQuals) const
32 aligned uint64_t in the AST file.
PredefinedTypeIDs
Predefined type IDs.
CtorInitializerType
The different kinds of data that can occur in a CtorInitializer.
const unsigned int LOCAL_REDECLARATIONS
Record code for a list of local redeclarations of a declaration.
CleanupObjectKind
Kinds of cleanup objects owned by ExprWithCleanups.
const unsigned NUM_PREDEF_TYPE_IDS
The number of predefined type IDs that are reserved for the PREDEF_TYPE_* constants.
DeclCode
Record codes for each kind of declaration.
const unsigned NumSpecialTypeIDs
The number of special type IDs.
TypeCode
Record codes for each kind of type.
SpecialTypeIDs
The type IDs for special types constructed by semantic analysis.
StmtCode
Record codes for each kind of statement or expression.
DesignatorTypes
The kinds of designators that can occur in a DesignatedInitExpr.
const unsigned int DECL_UPDATES
Record of updates for a declaration that was modified after being deserialized.
@ PREDEF_TYPE_LONG_ACCUM_ID
The 'long _Accum' type.
@ PREDEF_TYPE_SAMPLER_ID
OpenCL sampler type.
@ PREDEF_TYPE_INT128_ID
The '__int128_t' type.
@ PREDEF_TYPE_CHAR32_ID
The C++ 'char32_t' type.
@ PREDEF_TYPE_SAT_SHORT_ACCUM_ID
The '_Sat short _Accum' type.
@ PREDEF_TYPE_IBM128_ID
The '__ibm128' type.
@ PREDEF_TYPE_SHORT_FRACT_ID
The 'short _Fract' type.
@ PREDEF_TYPE_AUTO_RREF_DEDUCT
The "auto &&" deduction type.
@ PREDEF_TYPE_BOUND_MEMBER
The placeholder type for bound member functions.
@ PREDEF_TYPE_LONGLONG_ID
The (signed) 'long long' type.
@ PREDEF_TYPE_FRACT_ID
The '_Fract' type.
@ PREDEF_TYPE_ARC_UNBRIDGED_CAST
ARC's unbridged-cast placeholder type.
@ PREDEF_TYPE_USHORT_FRACT_ID
The 'unsigned short _Fract' type.
@ PREDEF_TYPE_SAT_ULONG_FRACT_ID
The '_Sat unsigned long _Fract' type.
@ PREDEF_TYPE_BOOL_ID
The 'bool' or '_Bool' type.
@ PREDEF_TYPE_SAT_LONG_ACCUM_ID
The '_Sat long _Accum' type.
@ PREDEF_TYPE_SAT_LONG_FRACT_ID
The '_Sat long _Fract' type.
@ PREDEF_TYPE_SAT_SHORT_FRACT_ID
The '_Sat short _Fract' type.
@ PREDEF_TYPE_CHAR_U_ID
The 'char' type, when it is unsigned.
@ PREDEF_TYPE_RESERVE_ID_ID
OpenCL reserve_id type.
@ PREDEF_TYPE_SAT_ACCUM_ID
The '_Sat _Accum' type.
@ PREDEF_TYPE_BUILTIN_FN
The placeholder type for builtin functions.
@ PREDEF_TYPE_SHORT_ACCUM_ID
The 'short _Accum' type.
@ PREDEF_TYPE_FLOAT_ID
The 'float' type.
@ PREDEF_TYPE_QUEUE_ID
OpenCL queue type.
@ PREDEF_TYPE_INT_ID
The (signed) 'int' type.
@ PREDEF_TYPE_OBJC_SEL
The ObjC 'SEL' type.
@ PREDEF_TYPE_BFLOAT16_ID
The '__bf16' type.
@ PREDEF_TYPE_WCHAR_ID
The C++ 'wchar_t' type.
@ PREDEF_TYPE_UCHAR_ID
The 'unsigned char' type.
@ PREDEF_TYPE_UACCUM_ID
The 'unsigned _Accum' type.
@ PREDEF_TYPE_SCHAR_ID
The 'signed char' type.
@ PREDEF_TYPE_CHAR_S_ID
The 'char' type, when it is signed.
@ PREDEF_TYPE_NULLPTR_ID
The type of 'nullptr'.
@ PREDEF_TYPE_ULONG_FRACT_ID
The 'unsigned long _Fract' type.
@ PREDEF_TYPE_FLOAT16_ID
The '_Float16' type.
@ PREDEF_TYPE_UINT_ID
The 'unsigned int' type.
@ PREDEF_TYPE_FLOAT128_ID
The '__float128' type.
@ PREDEF_TYPE_OBJC_ID
The ObjC 'id' type.
@ PREDEF_TYPE_CHAR16_ID
The C++ 'char16_t' type.
@ PREDEF_TYPE_ARRAY_SECTION
The placeholder type for an array section.
@ PREDEF_TYPE_ULONGLONG_ID
The 'unsigned long long' type.
@ PREDEF_TYPE_SAT_UFRACT_ID
The '_Sat unsigned _Fract' type.
@ PREDEF_TYPE_USHORT_ID
The 'unsigned short' type.
@ PREDEF_TYPE_SHORT_ID
The (signed) 'short' type.
@ PREDEF_TYPE_OMP_ARRAY_SHAPING
The placeholder type for OpenMP array shaping operation.
@ PREDEF_TYPE_DEPENDENT_ID
The placeholder type for dependent types.
@ PREDEF_TYPE_LONGDOUBLE_ID
The 'long double' type.
@ PREDEF_TYPE_DOUBLE_ID
The 'double' type.
@ PREDEF_TYPE_UINT128_ID
The '__uint128_t' type.
@ PREDEF_TYPE_HALF_ID
The OpenCL 'half' / ARM NEON __fp16 type.
@ PREDEF_TYPE_VOID_ID
The void type.
@ PREDEF_TYPE_SAT_USHORT_FRACT_ID
The '_Sat unsigned short _Fract' type.
@ PREDEF_TYPE_ACCUM_ID
The '_Accum' type.
@ PREDEF_TYPE_SAT_FRACT_ID
The '_Sat _Fract' type.
@ PREDEF_TYPE_NULL_ID
The NULL type.
@ PREDEF_TYPE_USHORT_ACCUM_ID
The 'unsigned short _Accum' type.
@ PREDEF_TYPE_CHAR8_ID
The C++ 'char8_t' type.
@ PREDEF_TYPE_UFRACT_ID
The 'unsigned _Fract' type.
@ PREDEF_TYPE_OVERLOAD_ID
The placeholder type for overloaded function sets.
@ PREDEF_TYPE_INCOMPLETE_MATRIX_IDX
A placeholder type for incomplete matrix index operations.
@ PREDEF_TYPE_UNRESOLVED_TEMPLATE
The placeholder type for unresolved templates.
@ PREDEF_TYPE_SAT_USHORT_ACCUM_ID
The '_Sat unsigned short _Accum' type.
@ PREDEF_TYPE_LONG_ID
The (signed) 'long' type.
@ PREDEF_TYPE_SAT_ULONG_ACCUM_ID
The '_Sat unsigned long _Accum' type.
@ PREDEF_TYPE_LONG_FRACT_ID
The 'long _Fract' type.
@ PREDEF_TYPE_UNKNOWN_ANY
The 'unknown any' placeholder type.
@ PREDEF_TYPE_OMP_ITERATOR
The placeholder type for OpenMP iterator expression.
@ PREDEF_TYPE_PSEUDO_OBJECT
The pseudo-object placeholder type.
@ PREDEF_TYPE_OBJC_CLASS
The ObjC 'Class' type.
@ PREDEF_TYPE_ULONG_ID
The 'unsigned long' type.
@ PREDEF_TYPE_SAT_UACCUM_ID
The '_Sat unsigned _Accum' type.
@ PREDEF_TYPE_CLK_EVENT_ID
OpenCL clk event type.
@ PREDEF_TYPE_EVENT_ID
OpenCL event type.
@ PREDEF_TYPE_ULONG_ACCUM_ID
The 'unsigned long _Accum' type.
@ PREDEF_TYPE_AUTO_DEDUCT
The "auto" deduction type.
@ DECL_EMPTY
An EmptyDecl record.
@ DECL_CAPTURED
A CapturedDecl record.
@ DECL_CXX_BASE_SPECIFIERS
A record containing CXXBaseSpecifiers.
@ DECL_CXX_RECORD
A CXXRecordDecl record.
@ DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION
A VarTemplatePartialSpecializationDecl record.
@ DECL_OMP_ALLOCATE
An OMPAllocateDcl record.
@ DECL_MS_PROPERTY
A MSPropertyDecl record.
@ DECL_OMP_DECLARE_MAPPER
An OMPDeclareMapperDecl record.
@ DECL_TOP_LEVEL_STMT_DECL
A TopLevelStmtDecl record.
@ DECL_REQUIRES_EXPR_BODY
A RequiresExprBodyDecl record.
@ DECL_STATIC_ASSERT
A StaticAssertDecl record.
@ DECL_INDIRECTFIELD
A IndirectFieldDecl record.
@ DECL_TEMPLATE_TEMPLATE_PARM
A TemplateTemplateParmDecl record.
@ DECL_IMPORT
An ImportDecl recording a module import.
@ DECL_UNNAMED_GLOBAL_CONSTANT
A UnnamedGlobalConstantDecl record.
@ DECL_ACCESS_SPEC
An AccessSpecDecl record.
@ DECL_OBJC_TYPE_PARAM
An ObjCTypeParamDecl record.
@ DECL_OBJC_CATEGORY_IMPL
A ObjCCategoryImplDecl record.
@ DECL_ENUM_CONSTANT
An EnumConstantDecl record.
@ DECL_PARM_VAR
A ParmVarDecl record.
@ DECL_TYPEDEF
A TypedefDecl record.
@ DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK
A TemplateTemplateParmDecl record that stores an expanded template template parameter pack.
@ DECL_HLSL_BUFFER
A HLSLBufferDecl record.
@ DECL_NAMESPACE_ALIAS
A NamespaceAliasDecl record.
@ DECL_TYPEALIAS
A TypeAliasDecl record.
@ DECL_FUNCTION_TEMPLATE
A FunctionTemplateDecl record.
@ DECL_MS_GUID
A MSGuidDecl record.
@ DECL_UNRESOLVED_USING_TYPENAME
An UnresolvedUsingTypenameDecl record.
@ DECL_CLASS_TEMPLATE_SPECIALIZATION
A ClassTemplateSpecializationDecl record.
@ DECL_FILE_SCOPE_ASM
A FileScopeAsmDecl record.
@ DECL_CXX_CONSTRUCTOR
A CXXConstructorDecl record.
@ DECL_CXX_CONVERSION
A CXXConversionDecl record.
@ DECL_FIELD
A FieldDecl record.
@ DECL_LINKAGE_SPEC
A LinkageSpecDecl record.
@ DECL_CONTEXT_TU_LOCAL_VISIBLE
A record that stores the set of declarations that are only visible to the TU.
@ DECL_NAMESPACE
A NamespaceDecl record.
@ DECL_NON_TYPE_TEMPLATE_PARM
A NonTypeTemplateParmDecl record.
@ DECL_USING_PACK
A UsingPackDecl record.
@ DECL_FUNCTION
A FunctionDecl record.
@ DECL_USING_DIRECTIVE
A UsingDirecitveDecl record.
@ DECL_RECORD
A RecordDecl record.
@ DECL_CONTEXT_LEXICAL
A record that stores the set of declarations that are lexically stored within a given DeclContext.
@ DECL_OUTLINEDFUNCTION
A OutlinedFunctionDecl record.
@ DECL_BLOCK
A BlockDecl record.
@ DECL_UNRESOLVED_USING_VALUE
An UnresolvedUsingValueDecl record.
@ DECL_TYPE_ALIAS_TEMPLATE
A TypeAliasTemplateDecl record.
@ DECL_CXX_CTOR_INITIALIZERS
A record containing CXXCtorInitializers.
@ DECL_OBJC_CATEGORY
A ObjCCategoryDecl record.
@ DECL_VAR
A VarDecl record.
@ DECL_UNRESOLVED_USING_IF_EXISTS
An UnresolvedUsingIfExistsDecl record.
@ DECL_USING
A UsingDecl record.
@ DECL_OBJC_PROTOCOL
A ObjCProtocolDecl record.
@ DECL_TEMPLATE_TYPE_PARM
A TemplateTypeParmDecl record.
@ DECL_VAR_TEMPLATE_SPECIALIZATION
A VarTemplateSpecializationDecl record.
@ DECL_OBJC_IMPLEMENTATION
A ObjCImplementationDecl record.
@ DECL_LABEL
A LabelDecl record.
@ DECL_OBJC_COMPATIBLE_ALIAS
A ObjCCompatibleAliasDecl record.
@ DECL_CONSTRUCTOR_USING_SHADOW
A ConstructorUsingShadowDecl record.
@ DECL_USING_ENUM
A UsingEnumDecl record.
@ DECL_FRIEND_TEMPLATE
A FriendTemplateDecl record.
@ DECL_PRAGMA_DETECT_MISMATCH
A PragmaDetectMismatchDecl record.
@ DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK
A NonTypeTemplateParmDecl record that stores an expanded non-type template parameter pack.
@ DECL_OBJC_AT_DEFS_FIELD
A ObjCAtDefsFieldDecl record.
@ DECL_IMPLICIT_PARAM
An ImplicitParamDecl record.
@ DECL_FRIEND
A FriendDecl record.
@ DECL_CXX_METHOD
A CXXMethodDecl record.
@ DECL_EXPORT
An ExportDecl record.
@ DECL_BINDING
A BindingDecl record.
@ DECL_PRAGMA_COMMENT
A PragmaCommentDecl record.
@ DECL_ENUM
An EnumDecl record.
@ DECL_CONTEXT_MODULE_LOCAL_VISIBLE
A record containing the set of declarations that are only visible from DeclContext in the same module...
@ DECL_DECOMPOSITION
A DecompositionDecl record.
@ DECL_OMP_DECLARE_REDUCTION
An OMPDeclareReductionDecl record.
@ DECL_OMP_THREADPRIVATE
An OMPThreadPrivateDecl record.
@ DECL_OBJC_METHOD
A ObjCMethodDecl record.
@ DECL_CXX_DESTRUCTOR
A CXXDestructorDecl record.
@ DECL_OMP_CAPTUREDEXPR
An OMPCapturedExprDecl record.
@ DECL_CLASS_TEMPLATE
A ClassTemplateDecl record.
@ DECL_USING_SHADOW
A UsingShadowDecl record.
@ DECL_CONCEPT
A ConceptDecl record.
@ DECL_CXX_DEDUCTION_GUIDE
A CXXDeductionGuideDecl record.
@ DECL_OMP_REQUIRES
An OMPRequiresDecl record.
@ DECL_OBJC_IVAR
A ObjCIvarDecl record.
@ DECL_OBJC_PROPERTY
A ObjCPropertyDecl record.
@ DECL_TEMPLATE_PARAM_OBJECT
A TemplateParamObjectDecl record.
@ DECL_OBJC_INTERFACE
A ObjCInterfaceDecl record.
@ DECL_VAR_TEMPLATE
A VarTemplateDecl record.
@ DECL_LIFETIME_EXTENDED_TEMPORARY
An LifetimeExtendedTemporaryDecl record.
@ DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION
A ClassTemplatePartialSpecializationDecl record.
@ DECL_IMPLICIT_CONCEPT_SPECIALIZATION
An ImplicitConceptSpecializationDecl record.
@ DECL_CONTEXT_VISIBLE
A record that stores the set of declarations that are visible from a given DeclContext.
@ DECL_OBJC_PROPERTY_IMPL
A ObjCPropertyImplDecl record.
@ TYPE_EXT_QUAL
An ExtQualType record.
@ SPECIAL_TYPE_OBJC_SEL_REDEFINITION
Objective-C "SEL" redefinition type.
@ SPECIAL_TYPE_UCONTEXT_T
C ucontext_t typedef type.
@ SPECIAL_TYPE_JMP_BUF
C jmp_buf typedef type.
@ SPECIAL_TYPE_FILE
C FILE typedef type.
@ SPECIAL_TYPE_SIGJMP_BUF
C sigjmp_buf typedef type.
@ SPECIAL_TYPE_OBJC_CLASS_REDEFINITION
Objective-C "Class" redefinition type.
@ SPECIAL_TYPE_CF_CONSTANT_STRING
CFConstantString type.
@ SPECIAL_TYPE_OBJC_ID_REDEFINITION
Objective-C "id" redefinition type.
@ EXPR_DESIGNATED_INIT
A DesignatedInitExpr record.
@ EXPR_COMPOUND_LITERAL
A CompoundLiteralExpr record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_OBJC_IVAR_REF_EXPR
An ObjCIvarRefExpr record.
@ EXPR_MEMBER
A MemberExpr record.
@ EXPR_CXX_TEMPORARY_OBJECT
A CXXTemporaryObjectExpr record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_COMPOUND_ASSIGN_OPERATOR
A CompoundAssignOperator record.
@ EXPR_CXX_STATIC_CAST
A CXXStaticCastExpr record.
@ EXPR_OBJC_STRING_LITERAL
An ObjCStringLiteral record.
@ EXPR_VA_ARG
A VAArgExpr record.
@ EXPR_OBJC_ISA
An ObjCIsa Expr record.
@ EXPR_CXX_OPERATOR_CALL
A CXXOperatorCallExpr record.
@ STMT_OBJC_AT_TRY
An ObjCAtTryStmt record.
@ STMT_DO
A DoStmt record.
@ STMT_OBJC_CATCH
An ObjCAtCatchStmt record.
@ STMT_IF
An IfStmt record.
@ EXPR_STRING_LITERAL
A StringLiteral record.
@ EXPR_OBJC_AVAILABILITY_CHECK
An ObjCAvailabilityCheckExpr record.
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_DIRECTIVE
@ EXPR_MATRIX_SUBSCRIPT
An MatrixSubscriptExpr record.
@ EXPR_PSEUDO_OBJECT
A PseudoObjectExpr record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ EXPR_IMPLICIT_CAST
An ImplicitCastExpr record.
@ STMT_CAPTURED
A CapturedStmt record.
@ STMT_OMP_TARGET_PARALLEL_FOR_SIMD_DIRECTIVE
@ STMT_GCCASM
A GCC-style AsmStmt record.
@ EXPR_IMAGINARY_LITERAL
An ImaginaryLiteral record.
@ STMT_WHILE
A WhileStmt record.
@ EXPR_CONVERT_VECTOR
A ConvertVectorExpr record.
@ EXPR_OBJC_SUBSCRIPT_REF_EXPR
An ObjCSubscriptRefExpr record.
@ EXPR_STMT
A StmtExpr record.
@ EXPR_CXX_REINTERPRET_CAST
A CXXReinterpretCastExpr record.
@ EXPR_DESIGNATED_INIT_UPDATE
A DesignatedInitUpdateExpr record.
@ STMT_OBJC_AT_SYNCHRONIZED
An ObjCAtSynchronizedStmt record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ EXPR_BUILTIN_BIT_CAST
A BuiltinBitCastExpr record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
@ STMT_SYCLKERNELCALL
A SYCLKernelCallStmt record.
@ EXPR_CHARACTER_LITERAL
A CharacterLiteral record.
@ EXPR_OBJC_ENCODE
An ObjCEncodeExpr record.
@ EXPR_CSTYLE_CAST
A CStyleCastExpr record.
@ EXPR_OBJC_BOOL_LITERAL
An ObjCBoolLiteralExpr record.
@ EXPR_EXT_VECTOR_ELEMENT
An ExtVectorElementExpr record.
@ EXPR_ATOMIC
An AtomicExpr record.
@ EXPR_OFFSETOF
An OffsetOfExpr record.
@ STMT_RETURN
A ReturnStmt record.
@ STMT_OBJC_FOR_COLLECTION
An ObjCForCollectionStmt record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE
@ EXPR_ARRAY_INIT_LOOP
An ArrayInitLoopExpr record.
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_DIRECTIVE
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_SIMD_DIRECTIVE
@ STMT_CONTINUE
A ContinueStmt record.
@ EXPR_PREDEFINED
A PredefinedExpr record.
@ EXPR_CXX_BOOL_LITERAL
A CXXBoolLiteralExpr record.
@ EXPR_PAREN_LIST
A ParenListExpr record.
@ EXPR_CXX_PAREN_LIST_INIT
A CXXParenListInitExpr record.
@ STMT_COMPOUND
A CompoundStmt record.
@ STMT_FOR
A ForStmt record.
@ STMT_ATTRIBUTED
An AttributedStmt record.
@ STMT_OMP_TARGET_TEAMS_GENERIC_LOOP_DIRECTIVE
@ EXPR_CXX_REWRITTEN_BINARY_OPERATOR
A CXXRewrittenBinaryOperator record.
@ STMT_GOTO
A GotoStmt record.
@ EXPR_NO_INIT
An NoInitExpr record.
@ EXPR_OBJC_PROTOCOL_EXPR
An ObjCProtocolExpr record.
@ EXPR_ARRAY_INIT_INDEX
An ArrayInitIndexExpr record.
@ EXPR_CXX_CONSTRUCT
A CXXConstructExpr record.
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_CXX_DYNAMIC_CAST
A CXXDynamicCastExpr record.
@ STMT_CXX_TRY
A CXXTryStmt record.
@ EXPR_GENERIC_SELECTION
A GenericSelectionExpr record.
@ EXPR_OBJC_INDIRECT_COPY_RESTORE
An ObjCIndirectCopyRestoreExpr record.
@ EXPR_CXX_INHERITED_CTOR_INIT
A CXXInheritedCtorInitExpr record.
@ EXPR_CALL
A CallExpr record.
@ EXPR_GNU_NULL
A GNUNullExpr record.
@ EXPR_OBJC_PROPERTY_REF_EXPR
An ObjCPropertyRefExpr record.
@ EXPR_CXX_CONST_CAST
A CXXConstCastExpr record.
@ STMT_REF_PTR
A reference to a previously [de]serialized Stmt record.
@ EXPR_OBJC_MESSAGE_EXPR
An ObjCMessageExpr record.
@ STMT_CASE
A CaseStmt record.
@ EXPR_CONSTANT
A constant expression context.
@ STMT_STOP
A marker record that indicates that we are at the end of an expression.
@ STMT_MSASM
A MS-style AsmStmt record.
@ EXPR_CONDITIONAL_OPERATOR
A ConditionOperator record.
@ EXPR_BINARY_OPERATOR
A BinaryOperator record.
@ EXPR_CXX_STD_INITIALIZER_LIST
A CXXStdInitializerListExpr record.
@ EXPR_SHUFFLE_VECTOR
A ShuffleVectorExpr record.
@ STMT_OBJC_FINALLY
An ObjCAtFinallyStmt record.
@ EXPR_OBJC_SELECTOR_EXPR
An ObjCSelectorExpr record.
@ EXPR_FLOATING_LITERAL
A FloatingLiteral record.
@ STMT_NULL_PTR
A NULL expression.
@ STMT_DEFAULT
A DefaultStmt record.
@ EXPR_CHOOSE
A ChooseExpr record.
@ STMT_NULL
A NullStmt record.
@ EXPR_DECL_REF
A DeclRefExpr record.
@ EXPR_INIT_LIST
An InitListExpr record.
@ EXPR_IMPLICIT_VALUE_INIT
An ImplicitValueInitExpr record.
@ STMT_OBJC_AUTORELEASE_POOL
An ObjCAutoreleasePoolStmt record.
@ EXPR_RECOVERY
A RecoveryExpr record.
@ EXPR_PAREN
A ParenExpr record.
@ STMT_OMP_TARGET_PARALLEL_GENERIC_LOOP_DIRECTIVE
@ STMT_LABEL
A LabelStmt record.
@ EXPR_CXX_FUNCTIONAL_CAST
A CXXFunctionalCastExpr record.
@ EXPR_USER_DEFINED_LITERAL
A UserDefinedLiteral record.
@ EXPR_INTEGER_LITERAL
An IntegerLiteral record.
@ EXPR_SOURCE_LOC
A SourceLocExpr record.
@ EXPR_CXX_MEMBER_CALL
A CXXMemberCallExpr record.
@ STMT_SWITCH
A SwitchStmt record.
@ STMT_DECL
A DeclStmt record.
@ EXPR_OBJC_KVC_REF_EXPR
UNUSED.
@ EXPR_SIZEOF_ALIGN_OF
A SizefAlignOfExpr record.
@ STMT_BREAK
A BreakStmt record.
@ STMT_OBJC_AT_THROW
An ObjCAtThrowStmt record.
@ EXPR_ADDR_LABEL
An AddrLabelExpr record.
@ STMT_CXX_FOR_RANGE
A CXXForRangeStmt record.
@ EXPR_CXX_ADDRSPACE_CAST
A CXXAddrspaceCastExpr record.
@ EXPR_ARRAY_SUBSCRIPT
An ArraySubscriptExpr record.
@ EXPR_UNARY_OPERATOR
A UnaryOperator record.
@ STMT_CXX_CATCH
A CXXCatchStmt record.
@ EXPR_BUILTIN_PP_EMBED
A EmbedExpr record.
@ STMT_INDIRECT_GOTO
An IndirectGotoStmt record.
@ DESIG_ARRAY_RANGE
GNU array range designator.
@ DESIG_FIELD_NAME
Field designator where only the field name is known.
@ DESIG_FIELD_DECL
Field designator where the field has been resolved to a declaration.
@ DESIG_ARRAY
Array designator.
uint32_t GlobalMacroID
A global ID number that refers to a macro in an AST file.
ExtensionBlockRecordTypes
Record code for extension blocks.
@ EXTENSION_METADATA
Metadata describing this particular extension.
@ FIRST_EXTENSION_RECORD_ID
The first record ID allocated to the extensions themselves.
uint32_t CXXCtorInitializersID
An ID number that refers to a list of CXXCtorInitializers in an AST file.
SubmoduleRecordTypes
Record types used within a submodule description block.
@ SUBMODULE_EXCLUDED_HEADER
Specifies a header that has been explicitly excluded from this submodule.
@ SUBMODULE_TOPHEADER
Specifies a top-level header that falls into this (sub)module.
@ SUBMODULE_PRIVATE_TEXTUAL_HEADER
Specifies a header that is private to this submodule but must be textually included.
@ SUBMODULE_HEADER
Specifies a header that falls into this (sub)module.
@ SUBMODULE_EXPORT_AS
Specifies the name of the module that will eventually re-export the entities in this module.
@ SUBMODULE_UMBRELLA_DIR
Specifies an umbrella directory.
@ SUBMODULE_UMBRELLA_HEADER
Specifies the umbrella header used to create this module, if any.
@ SUBMODULE_METADATA
Metadata for submodules as a whole.
@ SUBMODULE_REQUIRES
Specifies a required feature.
@ SUBMODULE_PRIVATE_HEADER
Specifies a header that is private to this submodule.
@ SUBMODULE_IMPORTS
Specifies the submodules that are imported by this submodule.
@ SUBMODULE_CONFLICT
Specifies a conflict with another module.
@ SUBMODULE_INITIALIZERS
Specifies some declarations with initializers that must be emitted to initialize the module.
@ SUBMODULE_DEFINITION
Defines the major attributes of a submodule, including its name and parent.
@ SUBMODULE_LINK_LIBRARY
Specifies a library or framework to link against.
@ SUBMODULE_CONFIG_MACRO
Specifies a configuration macro for this module.
@ SUBMODULE_EXPORTS
Specifies the submodules that are re-exported from this submodule.
@ SUBMODULE_TEXTUAL_HEADER
Specifies a header that is part of the module but must be textually included.
@ SUBMODULE_AFFECTING_MODULES
Specifies affecting modules that were not imported.
uint32_t SelectorID
An ID number that refers to an ObjC selector in an AST file.
const unsigned int NUM_PREDEF_IDENT_IDS
The number of predefined identifier IDs.
Definition ASTBitCodes.h:66
OptionsRecordTypes
Record types that occur within the options block inside the control block.
@ FILE_SYSTEM_OPTIONS
Record code for the filesystem options table.
@ TARGET_OPTIONS
Record code for the target options table.
@ PREPROCESSOR_OPTIONS
Record code for the preprocessor options table.
@ HEADER_SEARCH_OPTIONS
Record code for the headers search options table.
@ CODEGEN_OPTIONS
Record code for the codegen options table.
@ LANGUAGE_OPTIONS
Record code for the language options table.
const unsigned int NUM_PREDEF_PP_ENTITY_IDS
The number of predefined preprocessed entity IDs.
uint32_t LocalMacroID
A local to a module ID number that refers to a macro in an AST file.
const unsigned int NUM_PREDEF_SUBMODULE_IDS
The number of predefined submodule IDs.
BlockIDs
Describes the various kinds of blocks that occur within an AST file.
@ SUBMODULE_BLOCK_ID
The block containing the submodule structure.
@ PREPROCESSOR_DETAIL_BLOCK_ID
The block containing the detailed preprocessing record.
@ AST_BLOCK_ID
The AST block, which acts as a container around the full AST block.
@ SOURCE_MANAGER_BLOCK_ID
The block containing information about the source manager.
@ CONTROL_BLOCK_ID
The control block, which contains all of the information that needs to be validated prior to committi...
@ DECLTYPES_BLOCK_ID
The block containing the definitions of all of the types and decls used within the AST file.
@ PREPROCESSOR_BLOCK_ID
The block containing information about the preprocessor.
@ COMMENTS_BLOCK_ID
The block containing comments.
@ UNHASHED_CONTROL_BLOCK_ID
A block with unhashed content.
@ EXTENSION_BLOCK_ID
A block containing a module file extension.
@ OPTIONS_BLOCK_ID
The block of configuration options, used to check that a module is being used in a configuration comp...
@ INPUT_FILES_BLOCK_ID
The block of input files, which were used as inputs to create this AST file.
uint32_t CXXBaseSpecifiersID
An ID number that refers to a set of CXXBaseSpecifiers in an AST file.
CommentRecordTypes
Record types used within a comments block.
DeclIDBase::DeclID DeclID
An ID number that refers to a declaration in an AST file.
Definition ASTBitCodes.h:70
const unsigned VERSION_MINOR
AST file minor version number supported by this version of Clang.
Definition ASTBitCodes.h:57
SourceManagerRecordTypes
Record types used within a source manager block.
@ SM_SLOC_FILE_ENTRY
Describes a source location entry (SLocEntry) for a file.
@ SM_SLOC_BUFFER_BLOB_COMPRESSED
Describes a zlib-compressed blob that contains the data for a buffer entry.
@ SM_SLOC_BUFFER_ENTRY
Describes a source location entry (SLocEntry) for a buffer.
@ SM_SLOC_BUFFER_BLOB
Describes a blob that contains the data for a buffer entry.
@ SM_SLOC_EXPANSION_ENTRY
Describes a source location entry (SLocEntry) for a macro expansion.
const unsigned int NUM_PREDEF_SELECTOR_IDS
The number of predefined selector IDs.
const unsigned VERSION_MAJOR
AST file major version number supported by this version of Clang.
Definition ASTBitCodes.h:47
llvm::support::detail::packed_endian_specific_integral< serialization::DeclID, llvm::endianness::native, llvm::support::unaligned > unaligned_decl_id_t
PreprocessorRecordTypes
Record types used within a preprocessor block.
@ PP_TOKEN
Describes one token.
@ PP_MACRO_FUNCTION_LIKE
A function-like macro definition.
@ PP_MACRO_OBJECT_LIKE
An object-like macro definition.
@ PP_MACRO_DIRECTIVE_HISTORY
The macro directives history for a particular identifier.
@ PP_MODULE_MACRO
A macro directive exported by a module.
ControlRecordTypes
Record types that occur within the control block.
@ MODULE_MAP_FILE
Record code for the module map file that was used to build this AST file.
@ MODULE_DIRECTORY
Record code for the module build directory.
@ ORIGINAL_FILE_ID
Record code for file ID of the file or buffer that was used to generate the AST file.
@ MODULE_NAME
Record code for the module name.
@ ORIGINAL_FILE
Record code for the original file that was used to generate the AST file, including both its file ID ...
@ IMPORT
Record code for another AST file imported by this AST file.
@ INPUT_FILE_OFFSETS
Offsets into the input-files block where input files reside.
@ METADATA
AST file metadata, including the AST file version number and information about the compiler used to b...
UnhashedControlBlockRecordTypes
Record codes for the unhashed control block.
@ DIAGNOSTIC_OPTIONS
Record code for the diagnostic options table.
@ HEADER_SEARCH_ENTRY_USAGE
Record code for the indices of used header search entries.
@ AST_BLOCK_HASH
Record code for the content hash of the AST block.
@ DIAG_PRAGMA_MAPPINGS
Record code for #pragma diagnostic mappings.
@ SIGNATURE
Record code for the signature that identifiers this AST file.
@ HEADER_SEARCH_PATHS
Record code for the headers search paths.
@ VFS_USAGE
Record code for the indices of used VFSs.
InputFileRecordTypes
Record types that occur within the input-files block inside the control block.
@ INPUT_FILE_HASH
The input file content hash.
@ INPUT_FILE
An input file.
uint64_t TypeID
An ID number that refers to a type in an AST file.
Definition ASTBitCodes.h:88
uint32_t MacroID
An ID number that refers to a macro in an AST file.
PreprocessorDetailRecordTypes
Record types used within a preprocessor detail block.
@ PPD_INCLUSION_DIRECTIVE
Describes an inclusion directive within the preprocessing record.
@ PPD_MACRO_EXPANSION
Describes a macro expansion within the preprocessing record.
@ PPD_MACRO_DEFINITION
Describes a macro definition within the preprocessing record.
uint32_t SubmoduleID
An ID number that refers to a submodule in a module file.
const unsigned int NUM_PREDEF_MACRO_IDS
The number of predefined macro IDs.
ASTRecordTypes
Record types that occur within the AST block itself.
@ DECL_UPDATE_OFFSETS
Record for offsets of DECL_UPDATES records for declarations that were modified after being deserializ...
@ STATISTICS
Record code for the extra statistics we gather while generating an AST file.
@ FLOAT_CONTROL_PRAGMA_OPTIONS
Record code for #pragma float_control options.
@ KNOWN_NAMESPACES
Record code for the set of known namespaces, which are used for typo correction.
@ SPECIAL_TYPES
Record code for the set of non-builtin, special types.
@ PENDING_IMPLICIT_INSTANTIATIONS
Record code for pending implicit instantiations.
@ TYPE_OFFSET
Record code for the offsets of each type.
@ DELEGATING_CTORS
The list of delegating constructor declarations.
@ PP_ASSUME_NONNULL_LOC
ID 66 used to be the list of included files.
@ EXT_VECTOR_DECLS
Record code for the set of ext_vector type names.
@ OPENCL_EXTENSIONS
Record code for enabled OpenCL extensions.
@ UPDATE_SPECIALIZATION
Record code for updated specialization.
@ FP_PRAGMA_OPTIONS
Record code for floating point #pragma options.
@ PP_UNSAFE_BUFFER_USAGE
Record code for #pragma clang unsafe_buffer_usage begin/end.
@ CXX_ADDED_TEMPLATE_PARTIAL_SPECIALIZATION
@ DECLS_WITH_EFFECTS_TO_VERIFY
Record code for Sema's vector of functions/blocks with effects to be verified.
@ VTABLE_USES
Record code for the array of VTable uses.
@ LATE_PARSED_TEMPLATE
Record code for late parsed template functions.
@ DECLS_TO_CHECK_FOR_DEFERRED_DIAGS
Record code for the Decls to be checked for deferred diags.
@ DECL_OFFSET
Record code for the offsets of each decl.
@ SOURCE_MANAGER_LINE_TABLE
Record code for the source manager line table information, which stores information about #line direc...
@ PP_COUNTER_VALUE
The value of the next COUNTER to dispense.
@ DELETE_EXPRS_TO_ANALYZE
Delete expressions that will be analyzed later.
@ RELATED_DECLS_MAP
Record code for related declarations that have to be deserialized together from the same module.
@ UPDATE_VISIBLE
Record code for an update to a decl context's lookup table.
@ CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH
Number of unmatched pragma clang cuda_force_host_device begin directives we've seen.
@ MACRO_OFFSET
Record code for the table of offsets of each macro ID.
@ PPD_ENTITIES_OFFSETS
Record code for the table of offsets to entries in the preprocessing record.
@ OPENCL_EXTENSION_DECLS
Record code for declarations associated with OpenCL extensions.
@ VTABLES_TO_EMIT
Record code for vtables to emit.
@ IDENTIFIER_OFFSET
Record code for the table of offsets of each identifier ID.
@ OBJC_CATEGORIES
Record code for the array of Objective-C categories (including extensions).
@ METHOD_POOL
Record code for the Objective-C method pool,.
@ DELAYED_NAMESPACE_LEXICAL_VISIBLE_RECORD
Record code for lexical and visible block for delayed namespace in reduced BMI.
@ PP_CONDITIONAL_STACK
The stack of open ifs/ifdefs recorded in a preamble.
@ REFERENCED_SELECTOR_POOL
Record code for referenced selector pool.
@ SOURCE_LOCATION_OFFSETS
Record code for the table of offsets into the block of source-location information.
@ WEAK_UNDECLARED_IDENTIFIERS
Record code for weak undeclared identifiers.
@ UNDEFINED_BUT_USED
Record code for undefined but used functions and variables that need a definition in this TU.
@ FILE_SORTED_DECLS
Record code for a file sorted array of DeclIDs in a module.
@ MSSTRUCT_PRAGMA_OPTIONS
Record code for #pragma ms_struct options.
@ TENTATIVE_DEFINITIONS
Record code for the array of tentative definitions.
@ UNUSED_FILESCOPED_DECLS
Record code for the array of unused file scoped decls.
@ ALIGN_PACK_PRAGMA_OPTIONS
Record code for #pragma align/pack options.
@ IMPORTED_MODULES
Record code for an array of all of the (sub)modules that were imported by the AST file.
@ SELECTOR_OFFSETS
Record code for the table of offsets into the Objective-C method pool.
@ UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES
Record code for potentially unused local typedef names.
@ OPENCL_EXTENSION_TYPES
Record code for types associated with OpenCL extensions.
@ EAGERLY_DESERIALIZED_DECLS
Record code for the array of eagerly deserialized decls.
@ INTERESTING_IDENTIFIERS
A list of "interesting" identifiers.
@ HEADER_SEARCH_TABLE
Record code for header search information.
@ OBJC_CATEGORIES_MAP
Record code for map of Objective-C class definition IDs to the ObjC categories in a module that are a...
@ METADATA_OLD_FORMAT
This is so that older clang versions, before the introduction of the control block,...
@ CUDA_SPECIAL_DECL_REFS
Record code for special CUDA declarations.
@ TU_UPDATE_LEXICAL
Record code for an update to the TU's lexically contained declarations.
@ PPD_SKIPPED_RANGES
A table of skipped ranges within the preprocessing record.
@ IDENTIFIER_TABLE
Record code for the identifier table.
@ SEMA_DECL_REFS
Record code for declarations that Sema keeps references of.
@ OPTIMIZE_PRAGMA_OPTIONS
Record code for #pragma optimize options.
@ MODULE_OFFSET_MAP
Record code for the remapping information used to relate loaded modules to the various offsets and ID...
@ POINTERS_TO_MEMBERS_PRAGMA_OPTIONS
Record code for #pragma ms_struct options.
uint32_t PreprocessedEntityID
An ID number that refers to an entity in the detailed preprocessing record.
TypeID LocalTypeID
Same with TypeID except that the LocalTypeID is only meaningful with the corresponding ModuleFile.
Definition ASTBitCodes.h:94
uint64_t IdentifierID
An ID number that refers to an identifier in an AST file.
Definition ASTBitCodes.h:63
The JSON file list parser is used to communicate input to InstallAPI.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
const FunctionProtoType * T
Diagnostic wrappers for TextAPI types for error reporting.
Definition Dominators.h:30
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
friend bool operator<(const ObjCCategoriesInfo &X, const ObjCCategoriesInfo &Y)
friend bool operator>=(const ObjCCategoriesInfo &X, const ObjCCategoriesInfo &Y)
friend bool operator>(const ObjCCategoriesInfo &X, const ObjCCategoriesInfo &Y)
friend bool operator<=(const ObjCCategoriesInfo &X, const ObjCCategoriesInfo &Y)
ObjCCategoriesInfo(LocalDeclID ID, unsigned Offset)
A structure for putting "fast"-unqualified QualTypes into a DenseMap.
static bool isEqual(QualType A, QualType B)
static bool isEqual(const clang::serialization::DeclarationNameKey &L, const clang::serialization::DeclarationNameKey &R)
static clang::serialization::DeclarationNameKey getTombstoneKey()
static clang::serialization::DeclarationNameKey getEmptyKey()
static unsigned getHashValue(const clang::serialization::DeclarationNameKey &Key)