clang: clang::VariableArrayType Class Reference (original) (raw)
Represents a C array with a specified size that is not an integer-constant-expression. More...
Public Member Functions
Expr *
getSizeExpr () const
getBracketsRange () const
getLBracketLoc () const
getRBracketLoc () const
isSugared () const
desugar () const
void
Profile (llvm::FoldingSetNodeID &ID)
Public Member Functions inherited from clang::ArrayType
getElementType () const
getSizeModifier () const
getIndexTypeQualifiers () const
getIndexTypeCVRQualifiers () const
Public Member Functions inherited from clang::Type
Type &
operator= (const Type &)=delete
Type &
getTypeClass () const
isFromAST () const
Whether this type comes from an AST file.
containsUnexpandedParameterPack () const
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templates.
isCanonicalUnqualified () const
Determines if this type would be canonical if it had no further qualification.
getLocallyUnqualifiedSingleStepDesugaredType () const
Pull a single level of sugar off of this locally-unqualified type.
isSizelessType () const
As an extension, we classify types as one of "sized" or "sizeless"; every type is one or the other.
isSizelessBuiltinType () const
isSizelessVectorType () const
Returns true for all scalable vector types.
isSVESizelessBuiltinType () const
Returns true for SVE scalable vector types.
isRVVSizelessBuiltinType () const
Returns true for RVV scalable vector types.
isWebAssemblyExternrefType () const
Check if this is a WebAssembly Externref Type.
isWebAssemblyTableType () const
Returns true if this is a WebAssembly table type: either an array of reference types, or a pointer to a reference type (which can only be created by array to pointer decay).
isSveVLSBuiltinType () const
Determines if this is a sizeless type supported by the 'arm_sve_vector_bits' type attribute, which can be applied to a single SVE vector or predicate, excluding tuple types such as svint32x4_t.
getSveEltType (const ASTContext &Ctx) const
Returns the representative type for the element of an SVE builtin type.
isRVVVLSBuiltinType () const
Determines if this is a sizeless type supported by the 'riscv_rvv_vector_bits' type attribute, which can be applied to a single RVV vector or mask.
getRVVEltType (const ASTContext &Ctx) const
Returns the representative type for the element of an RVV builtin type.
getSizelessVectorEltType (const ASTContext &Ctx) const
Returns the representative type for the element of a sizeless vector builtin type.
isIncompleteType (NamedDecl **Def=nullptr) const
Types are partitioned into 3 broad categories (C99 6.2.5p1): object types, function types, and incomplete types.
isIncompleteOrObjectType () const
Return true if this is an incomplete or object type, in other words, not a function type.
isObjectType () const
Determine whether this type is an object type.
isLiteralType (const ASTContext &Ctx) const
Return true if this is a literal type (C++11 [basic.types]p10)
isStructuralType () const
Determine if this type is a structural type, per C++20 [temp.param]p7.
isStandardLayoutType () const
Test if this type is a standard-layout type.
isBuiltinType () const
Helper methods to distinguish type categories.
isSpecificBuiltinType (unsigned K) const
Test for a particular builtin type.
isPlaceholderType () const
Test for a type which does not represent an actual type-system type but is instead used as a placeholder for various convenient purposes within Clang.
const BuiltinType *
getAsPlaceholderType () const
isSpecificPlaceholderType (unsigned K) const
Test for a specific placeholder type.
isNonOverloadPlaceholderType () const
Test for a placeholder type other than Overload; see BuiltinType::isNonOverloadPlaceholderType.
isIntegerType () const
isIntegerType() does not include complex integers (a GCC extension).
isEnumeralType () const
isScopedEnumeralType () const
Determine whether this type is a scoped enumeration type.
isBooleanType () const
isCharType () const
isWideCharType () const
isChar8Type () const
isChar16Type () const
isChar32Type () const
isAnyCharacterType () const
Determine whether this type is any of the built-in character types.
isIntegralType (const ASTContext &Ctx) const
Determine whether this type is an integral type.
isIntegralOrEnumerationType () const
Determine whether this type is an integral or enumeration type.
isIntegralOrUnscopedEnumerationType () const
Determine whether this type is an integral or unscoped enumeration type.
isUnscopedEnumerationType () const
isRealFloatingType () const
Floating point categories.
isComplexType () const
isComplexType() does not include complex integers (a GCC extension).
isAnyComplexType () const
isFloatingType () const
isHalfType () const
isFloat16Type () const
isFloat32Type () const
isDoubleType () const
isBFloat16Type () const
isFloat128Type () const
isIbm128Type () const
isRealType () const
isArithmeticType () const
isVoidType () const
isScalarType () const
isAggregateType () const
Determines whether the type is a C++ aggregate type or C aggregate or union type.
isFundamentalType () const
Tests whether the type is categorized as a fundamental type.
isCompoundType () const
Tests whether the type is categorized as a compound type.
isFunctionType () const
isFunctionNoProtoType () const
isFunctionProtoType () const
isPointerType () const
isPointerOrReferenceType () const
isSignableType () const
isAnyPointerType () const
isCountAttributedType () const
isBlockPointerType () const
isVoidPointerType () const
isReferenceType () const
isLValueReferenceType () const
isRValueReferenceType () const
isObjectPointerType () const
isFunctionPointerType () const
isFunctionReferenceType () const
isMemberPointerType () const
isMemberFunctionPointerType () const
isMemberDataPointerType () const
isArrayType () const
isConstantArrayType () const
isIncompleteArrayType () const
isVariableArrayType () const
isArrayParameterType () const
isDependentSizedArrayType () const
isRecordType () const
isClassType () const
isStructureType () const
isStructureTypeWithFlexibleArrayMember () const
isObjCBoxableRecordType () const
isInterfaceType () const
isStructureOrClassType () const
isUnionType () const
isComplexIntegerType () const
isVectorType () const
isExtVectorType () const
isExtVectorBoolType () const
isSubscriptableVectorType () const
isMatrixType () const
isConstantMatrixType () const
isDependentAddressSpaceType () const
isObjCObjectPointerType () const
isObjCRetainableType () const
isObjCLifetimeType () const
Returns true if objects of this type have lifetime semantics under ARC.
isObjCIndirectLifetimeType () const
isObjCNSObjectType () const
isObjCIndependentClassType () const
isObjCObjectType () const
isObjCQualifiedInterfaceType () const
isObjCQualifiedIdType () const
isObjCQualifiedClassType () const
isObjCObjectOrInterfaceType () const
isObjCIdType () const
isDecltypeType () const
isObjCInertUnsafeUnretainedType () const
Was this type written with the special inert-in-ARC __unsafe_unretained qualifier?
isObjCIdOrObjectKindOfType (const ASTContext &ctx, const ObjCObjectType *&bound) const
Whether the type is Objective-C 'id' or a __kindof type of an object type, e.g., __kindof NSView * or __kindof id .
isObjCClassType () const
isObjCClassOrClassKindOfType () const
Whether the type is Objective-C 'Class' or a __kindof type of an Class type, e.g., __kindof Class .
isBlockCompatibleObjCPointerType (ASTContext &ctx) const
isObjCSelType () const
isObjCBuiltinType () const
isObjCARCBridgableType () const
Determine whether the given type T is a "bridgable" Objective-C type, which is either an Objective-C object pointer type or an.
isCARCBridgableType () const
Determine whether the given type T is a "bridgeable" C type.
isTemplateTypeParmType () const
isNullPtrType () const
isNothrowT () const
isAlignValT () const
isStdByteType () const
isAtomicType () const
isUndeducedAutoType () const
isTypedefNameType () const
Determines whether this type is written as a typedef-name.
isImageType () const
isSamplerT () const
isEventT () const
isClkEventT () const
isQueueT () const
isReserveIDT () const
isOCLIntelSubgroupAVCType () const
isOCLExtOpaqueType () const
isPipeType () const
isBitIntType () const
isOpenCLSpecificType () const
isHLSLSpecificType () const
isHLSLBuiltinIntangibleType () const
isHLSLAttributedResourceType () const
isHLSLIntangibleType () const
isObjCARCImplicitlyUnretainedType () const
Determines if this type, which must satisfy isObjCLifetimeType(), is implicitly __unsafe_unretained rather than implicitly __strong.
isCUDADeviceBuiltinSurfaceType () const
Check if the type is the CUDA device builtin surface type.
isCUDADeviceBuiltinTextureType () const
Check if the type is the CUDA device builtin texture type.
getObjCARCImplicitLifetime () const
Return the implicit lifetime for this type, which must not be dependent.
getScalarTypeKind () const
Given that this is a scalar type, classify it.
getDependence () const
containsErrors () const
Whether this type is an error type.
isDependentType () const
Whether this type is a dependent type, meaning that its definition somehow depends on a template parameter (C++ [temp.dep.type]).
isInstantiationDependentType () const
Determine whether this type is an instantiation-dependent type, meaning that the type involves a template parameter (even if the definition does not actually depend on the type substituted for that template parameter).
isUndeducedType () const
Determine whether this type is an undeduced type, meaning that it somehow involves a C++11 'auto' type or similar which has not yet been deduced.
isVariablyModifiedType () const
Whether this type is a variably-modified type (C99 6.7.5).
hasSizedVLAType () const
Whether this type involves a variable-length array type with a definite size.
hasUnnamedOrLocalType () const
Whether this type is or contains a local or unnamed type.
isOverloadableType () const
Determines whether this is a type for which one can define an overloaded operator.
isElaboratedTypeSpecifier () const
Determine wither this type is a C++ elaborated-type-specifier.
canDecayToPointerType () const
Determines whether this type can decay to a pointer type.
hasPointerRepresentation () const
Whether this type is represented natively as a pointer.
hasObjCPointerRepresentation () const
Whether this type can represent an objective pointer type for the purpose of GC'ability.
hasIntegerRepresentation () const
Determine whether this type has an integer representation of some sort, e.g., it is an integer type or a vector.
hasSignedIntegerRepresentation () const
Determine whether this type has an signed integer representation of some sort, e.g., it is an signed integer type or a vector.
hasUnsignedIntegerRepresentation () const
Determine whether this type has an unsigned integer representation of some sort, e.g., it is an unsigned integer type or a vector.
hasFloatingRepresentation () const
Determine whether this type has a floating-point representation of some sort, e.g., it is a floating-point type or a vector thereof.
const RecordType *
getAsStructureType () const
const RecordType *
getAsUnionType () const
NOTE: getAs*ArrayType are methods on ASTContext.
const ComplexType *
getAsComplexIntegerType () const
const ObjCObjectType *
getAsObjCInterfaceType () const
const ObjCObjectPointerType *
getAsObjCInterfacePointerType () const
const ObjCObjectPointerType *
getAsObjCQualifiedIdType () const
const ObjCObjectPointerType *
getAsObjCQualifiedClassType () const
const ObjCObjectType *
getAsObjCQualifiedInterfaceType () const
getAsCXXRecordDecl () const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or because it is the injected-class-name type of a class template or class template partial specialization.
getAsRecordDecl () const
Retrieves the RecordDecl this type refers to.
TagDecl *
getAsTagDecl () const
Retrieves the TagDecl that this type refers to, either because the type is a TagType or because it is the injected-class-name type of a class template or class template partial specialization.
const CXXRecordDecl *
getPointeeCXXRecordDecl () const
If this is a pointer or reference to a RecordType, return the CXXRecordDecl that the type refers to.
getContainedDeducedType () const
Get the DeducedType whose type will be deduced for a variable with an initializer of this type.
AutoType *
getContainedAutoType () const
Get the AutoType whose type will be deduced for a variable with an initializer of this type.
hasAutoForTrailingReturnType () const
Determine whether this type was written with a leading 'auto' corresponding to a trailing return type (possibly for a nested function type within a pointer to function type or similar).
template<typename T >
const T *
getAs () const
Member-template getAs'.
template<typename T >
const T *
getAsAdjusted () const
Member-template getAsAdjusted.
const ArrayType *
getAsArrayTypeUnsafe () const
A variant of getAs<> for array types which silently discards qualifiers from the outermost type.
template<typename T >
const T *
castAs () const
Member-template castAs.
const ArrayType *
castAsArrayTypeUnsafe () const
A variant of castAs<> for array type which silently discards qualifiers from the outermost type.
hasAttr (attr::Kind AK) const
Determine whether this type had the specified attribute applied to it (looking through top-level type sugar).
const Type *
getBaseElementTypeUnsafe () const
Get the base element type of this type, potentially discarding type qualifiers.
const Type *
getArrayElementTypeNoTypeQual () const
If this is an array type, return the element type of the array, potentially with type qualifiers missing.
const Type *
getPointeeOrArrayElementType () const
If this is a pointer type, return the pointee type.
getPointeeType () const
If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee.
const Type *
getUnqualifiedDesugaredType () const
Return the specified type with any "sugar" removed from the type, removing any typedefs, typeofs, etc., as well as any qualifiers.
isSignedIntegerType () const
Return true if this is an integer type that is signed, according to C99 6.2.5p4 [char, signed char, short, int, long..], or an enum decl which has a signed representation.
isUnsignedIntegerType () const
Return true if this is an integer type that is unsigned, according to C99 6.2.5p6 [which returns true for _Bool], or an enum decl which has an unsigned representation.
isSignedIntegerOrEnumerationType () const
Determines whether this is an integer type that is signed or an enumeration types whose underlying type is a signed integer type.
isUnsignedIntegerOrEnumerationType () const
Determines whether this is an integer type that is unsigned or an enumeration types whose underlying type is a unsigned integer type.
isFixedPointType () const
Return true if this is a fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.
isFixedPointOrIntegerType () const
Return true if this is a fixed point or integer type.
isConvertibleToFixedPointType () const
Return true if this can be converted to (or from) a fixed point type.
isSaturatedFixedPointType () const
Return true if this is a saturated fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.
isUnsaturatedFixedPointType () const
Return true if this is a saturated fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.
isSignedFixedPointType () const
Return true if this is a fixed point type that is signed according to ISO/IEC JTC1 SC22 WG14 N1169.
isUnsignedFixedPointType () const
Return true if this is a fixed point type that is unsigned according to ISO/IEC JTC1 SC22 WG14 N1169.
isConstantSizeType () const
Return true if this is not a variable sized type, according to the rules of C99 6.7.5p3.
isSpecifierType () const
Returns true if this type can be represented by some set of type specifiers.
getLinkage () const
Determine the linkage of this type.
getVisibility () const
Determine the visibility of this type.
isVisibilityExplicit () const
Return true if the visibility was explicitly set is the code.
getLinkageAndVisibility () const
Determine the linkage and visibility of this type.
isLinkageValid () const
True if the computed linkage is valid.
std::optional< NullabilityKind >
getNullability () const
Determine the nullability of the given type.
canHaveNullability (bool ResultIfUnknown=true) const
Determine whether the given type can have a nullability specifier applied to it, i.e., if it is any kind of pointer type.
std::optional< ArrayRef< QualType > >
getObjCSubstitutions (const DeclContext *dc) const
Retrieve the set of substitutions required when accessing a member of the Objective-C receiver type that is declared in the given context.
acceptsObjCTypeParams () const
Determines if this is an ObjC interface type that may accept type parameters.
const char *
getTypeClassName () const
getCanonicalTypeInternal () const
getCanonicalTypeUnqualified () const
void
dump () const
void
dump (llvm::raw_ostream &OS, const ASTContext &Context) const
template<>
const TypedefType *
getAs () const
This will check for a TypedefType by removing any existing sugar until it reaches a TypedefType or a non-sugared type.
Additional Inherited Members
Public Types inherited from clang::Type
enum
enum
ScalarTypeKind {
STK_CPointer, STK_BlockPointer, STK_ObjCObjectPointer, STK_MemberPointer,
STK_Bool, STK_Integral, STK_Floating, STK_IntegralComplex,
STK_FloatingComplex, STK_FixedPoint
}
Static Public Attributes inherited from clang::Type
static constexpr int
FunctionTypeNumParamsWidth = 16
static constexpr int
FunctionTypeNumParamsLimit = (1 << 16) - 1
Protected Types inherited from clang::Type
enum
{ NumArrayTypeBits = NumTypeBits + 6 }
enum
{ NumTypeWithKeywordBits = NumTypeBits + 8 }
Protected Member Functions inherited from clang::ArrayType
ArrayType (TypeClass tc, QualType et, QualType can, ArraySizeModifier sm, unsigned tq, const Expr *sz=nullptr)
Protected Member Functions inherited from clang::Type
Type (TypeClass tc, QualType canon, TypeDependence Dependence)
Type *
this_ ()
void
setDependence (TypeDependence D)
void
addDependence (TypeDependence D)
Protected Attributes inherited from clang::Type
union {
TypeBitfields TypeBits
ArrayTypeBitfields ArrayTypeBits
ConstantArrayTypeBitfields ConstantArrayTypeBits
AttributedTypeBitfields AttributedTypeBits
AutoTypeBitfields AutoTypeBits
BuiltinTypeBitfields BuiltinTypeBits
FunctionTypeBitfields FunctionTypeBits
ObjCObjectTypeBitfields ObjCObjectTypeBits
ReferenceTypeBitfields ReferenceTypeBits
TypeWithKeywordBitfields TypeWithKeywordBits
ElaboratedTypeBitfields ElaboratedTypeBits
VectorTypeBitfields VectorTypeBits
TemplateTypeParmTypeBitfields TemplateTypeParmTypeBits
SubstTemplateTypeParmTypeBitfields SubstTemplateTypeParmTypeBits
SubstTemplateTypeParmPackTypeBitfields SubstTemplateTypeParmPackTypeBits
TemplateSpecializationTypeBitfields TemplateSpecializationTypeBits
DependentTemplateSpecializationTypeBitfields DependentTemplateSpecializationTypeBits
PackExpansionTypeBitfields PackExpansionTypeBits
CountAttributedTypeBitfields CountAttributedTypeBits
};
Represents a C array with a specified size that is not an integer-constant-expression.
For example, 'int s[x+foo()]'. Since the size expression is an arbitrary expression, we store it as such.
Note: VariableArrayType's aren't uniqued (since the expressions aren't) and should not be: two lexically equivalent variable array types could mean different things, for example, these variables do not have the same type dynamically:
void foo(int x) { int Y[x]; ++x; int Z[x]; }