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

SourceRange

getBracketsRange () const

SourceLocation

getLBracketLoc () const

SourceLocation

getRBracketLoc () const

bool

isSugared () const

QualType

desugar () const

void

Profile (llvm::FoldingSetNodeID &ID)

- Public Member Functions inherited from clang::ArrayType

QualType

getElementType () const

ArraySizeModifier

getSizeModifier () const

Qualifiers

getIndexTypeQualifiers () const

unsigned

getIndexTypeCVRQualifiers () const

- Public Member Functions inherited from clang::Type

Type (const Type &)=delete

Type (Type &&)=delete

Type &

operator= (const Type &)=delete

Type &

operator= (Type &&)=delete

TypeClass

getTypeClass () const

bool

isFromAST () const

Whether this type comes from an AST file.

bool

containsUnexpandedParameterPack () const

Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templates.

bool

isCanonicalUnqualified () const

Determines if this type would be canonical if it had no further qualification.

QualType

getLocallyUnqualifiedSingleStepDesugaredType () const

Pull a single level of sugar off of this locally-unqualified type.

bool

isSizelessType () const

As an extension, we classify types as one of "sized" or "sizeless"; every type is one or the other.

bool

isSizelessBuiltinType () const

bool

isSizelessVectorType () const

Returns true for all scalable vector types.

bool

isSVESizelessBuiltinType () const

Returns true for SVE scalable vector types.

bool

isRVVSizelessBuiltinType () const

Returns true for RVV scalable vector types.

bool

isWebAssemblyExternrefType () const

Check if this is a WebAssembly Externref Type.

bool

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).

bool

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.

QualType

getSveEltType (const ASTContext &Ctx) const

Returns the representative type for the element of an SVE builtin type.

bool

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.

QualType

getRVVEltType (const ASTContext &Ctx) const

Returns the representative type for the element of an RVV builtin type.

QualType

getSizelessVectorEltType (const ASTContext &Ctx) const

Returns the representative type for the element of a sizeless vector builtin type.

bool

isIncompleteType (NamedDecl **Def=nullptr) const

Types are partitioned into 3 broad categories (C99 6.2.5p1): object types, function types, and incomplete types.

bool

isIncompleteOrObjectType () const

Return true if this is an incomplete or object type, in other words, not a function type.

bool

isObjectType () const

Determine whether this type is an object type.

bool

isLiteralType (const ASTContext &Ctx) const

Return true if this is a literal type (C++11 [basic.types]p10)

bool

isStructuralType () const

Determine if this type is a structural type, per C++20 [temp.param]p7.

bool

isStandardLayoutType () const

Test if this type is a standard-layout type.

bool

isBuiltinType () const

Helper methods to distinguish type categories.

bool

isSpecificBuiltinType (unsigned K) const

Test for a particular builtin type.

bool

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

bool

isSpecificPlaceholderType (unsigned K) const

Test for a specific placeholder type.

bool

isNonOverloadPlaceholderType () const

Test for a placeholder type other than Overload; see BuiltinType::isNonOverloadPlaceholderType.

bool

isIntegerType () const

isIntegerType() does not include complex integers (a GCC extension).

bool

isEnumeralType () const

bool

isScopedEnumeralType () const

Determine whether this type is a scoped enumeration type.

bool

isBooleanType () const

bool

isCharType () const

bool

isWideCharType () const

bool

isChar8Type () const

bool

isChar16Type () const

bool

isChar32Type () const

bool

isAnyCharacterType () const

Determine whether this type is any of the built-in character types.

bool

isIntegralType (const ASTContext &Ctx) const

Determine whether this type is an integral type.

bool

isIntegralOrEnumerationType () const

Determine whether this type is an integral or enumeration type.

bool

isIntegralOrUnscopedEnumerationType () const

Determine whether this type is an integral or unscoped enumeration type.

bool

isUnscopedEnumerationType () const

bool

isRealFloatingType () const

Floating point categories.

bool

isComplexType () const

isComplexType() does not include complex integers (a GCC extension).

bool

isAnyComplexType () const

bool

isFloatingType () const

bool

isHalfType () const

bool

isFloat16Type () const

bool

isFloat32Type () const

bool

isDoubleType () const

bool

isBFloat16Type () const

bool

isFloat128Type () const

bool

isIbm128Type () const

bool

isRealType () const

bool

isArithmeticType () const

bool

isVoidType () const

bool

isScalarType () const

bool

isAggregateType () const

Determines whether the type is a C++ aggregate type or C aggregate or union type.

bool

isFundamentalType () const

Tests whether the type is categorized as a fundamental type.

bool

isCompoundType () const

Tests whether the type is categorized as a compound type.

bool

isFunctionType () const

bool

isFunctionNoProtoType () const

bool

isFunctionProtoType () const

bool

isPointerType () const

bool

isPointerOrReferenceType () const

bool

isSignableType () const

bool

isAnyPointerType () const

bool

isCountAttributedType () const

bool

isBlockPointerType () const

bool

isVoidPointerType () const

bool

isReferenceType () const

bool

isLValueReferenceType () const

bool

isRValueReferenceType () const

bool

isObjectPointerType () const

bool

isFunctionPointerType () const

bool

isFunctionReferenceType () const

bool

isMemberPointerType () const

bool

isMemberFunctionPointerType () const

bool

isMemberDataPointerType () const

bool

isArrayType () const

bool

isConstantArrayType () const

bool

isIncompleteArrayType () const

bool

isVariableArrayType () const

bool

isArrayParameterType () const

bool

isDependentSizedArrayType () const

bool

isRecordType () const

bool

isClassType () const

bool

isStructureType () const

bool

isStructureTypeWithFlexibleArrayMember () const

bool

isObjCBoxableRecordType () const

bool

isInterfaceType () const

bool

isStructureOrClassType () const

bool

isUnionType () const

bool

isComplexIntegerType () const

bool

isVectorType () const

bool

isExtVectorType () const

bool

isExtVectorBoolType () const

bool

isSubscriptableVectorType () const

bool

isMatrixType () const

bool

isConstantMatrixType () const

bool

isDependentAddressSpaceType () const

bool

isObjCObjectPointerType () const

bool

isObjCRetainableType () const

bool

isObjCLifetimeType () const

Returns true if objects of this type have lifetime semantics under ARC.

bool

isObjCIndirectLifetimeType () const

bool

isObjCNSObjectType () const

bool

isObjCIndependentClassType () const

bool

isObjCObjectType () const

bool

isObjCQualifiedInterfaceType () const

bool

isObjCQualifiedIdType () const

bool

isObjCQualifiedClassType () const

bool

isObjCObjectOrInterfaceType () const

bool

isObjCIdType () const

bool

isDecltypeType () const

bool

isObjCInertUnsafeUnretainedType () const

Was this type written with the special inert-in-ARC __unsafe_unretained qualifier?

bool

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 .

bool

isObjCClassType () const

bool

isObjCClassOrClassKindOfType () const

Whether the type is Objective-C 'Class' or a __kindof type of an Class type, e.g., __kindof Class .

bool

isBlockCompatibleObjCPointerType (ASTContext &ctx) const

bool

isObjCSelType () const

bool

isObjCBuiltinType () const

bool

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.

bool

isCARCBridgableType () const

Determine whether the given type T is a "bridgeable" C type.

bool

isTemplateTypeParmType () const

bool

isNullPtrType () const

bool

isNothrowT () const

bool

isAlignValT () const

bool

isStdByteType () const

bool

isAtomicType () const

bool

isUndeducedAutoType () const

bool

isTypedefNameType () const

Determines whether this type is written as a typedef-name.

bool

isImageType () const

bool

isSamplerT () const

bool

isEventT () const

bool

isClkEventT () const

bool

isQueueT () const

bool

isReserveIDT () const

bool

isOCLIntelSubgroupAVCType () const

bool

isOCLExtOpaqueType () const

bool

isPipeType () const

bool

isBitIntType () const

bool

isOpenCLSpecificType () const

bool

isHLSLSpecificType () const

bool

isHLSLBuiltinIntangibleType () const

bool

isHLSLAttributedResourceType () const

bool

isHLSLIntangibleType () const

bool

isObjCARCImplicitlyUnretainedType () const

Determines if this type, which must satisfy isObjCLifetimeType(), is implicitly __unsafe_unretained rather than implicitly __strong.

bool

isCUDADeviceBuiltinSurfaceType () const

Check if the type is the CUDA device builtin surface type.

bool

isCUDADeviceBuiltinTextureType () const

Check if the type is the CUDA device builtin texture type.

Qualifiers::ObjCLifetime

getObjCARCImplicitLifetime () const

Return the implicit lifetime for this type, which must not be dependent.

ScalarTypeKind

getScalarTypeKind () const

Given that this is a scalar type, classify it.

TypeDependence

getDependence () const

bool

containsErrors () const

Whether this type is an error type.

bool

isDependentType () const

Whether this type is a dependent type, meaning that its definition somehow depends on a template parameter (C++ [temp.dep.type]).

bool

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).

bool

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.

bool

isVariablyModifiedType () const

Whether this type is a variably-modified type (C99 6.7.5).

bool

hasSizedVLAType () const

Whether this type involves a variable-length array type with a definite size.

bool

hasUnnamedOrLocalType () const

Whether this type is or contains a local or unnamed type.

bool

isOverloadableType () const

Determines whether this is a type for which one can define an overloaded operator.

bool

isElaboratedTypeSpecifier () const

Determine wither this type is a C++ elaborated-type-specifier.

bool

canDecayToPointerType () const

Determines whether this type can decay to a pointer type.

bool

hasPointerRepresentation () const

Whether this type is represented natively as a pointer.

bool

hasObjCPointerRepresentation () const

Whether this type can represent an objective pointer type for the purpose of GC'ability.

bool

hasIntegerRepresentation () const

Determine whether this type has an integer representation of some sort, e.g., it is an integer type or a vector.

bool

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.

bool

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.

bool

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

CXXRecordDecl *

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.

RecordDecl *

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.

DeducedType *

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.

bool

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.

bool

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.

QualType

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.

bool

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.

bool

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.

bool

isSignedIntegerOrEnumerationType () const

Determines whether this is an integer type that is signed or an enumeration types whose underlying type is a signed integer type.

bool

isUnsignedIntegerOrEnumerationType () const

Determines whether this is an integer type that is unsigned or an enumeration types whose underlying type is a unsigned integer type.

bool

isFixedPointType () const

Return true if this is a fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.

bool

isFixedPointOrIntegerType () const

Return true if this is a fixed point or integer type.

bool

isConvertibleToFixedPointType () const

Return true if this can be converted to (or from) a fixed point type.

bool

isSaturatedFixedPointType () const

Return true if this is a saturated fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.

bool

isUnsaturatedFixedPointType () const

Return true if this is a saturated fixed point type according to ISO/IEC JTC1 SC22 WG14 N1169.

bool

isSignedFixedPointType () const

Return true if this is a fixed point type that is signed according to ISO/IEC JTC1 SC22 WG14 N1169.

bool

isUnsignedFixedPointType () const

Return true if this is a fixed point type that is unsigned according to ISO/IEC JTC1 SC22 WG14 N1169.

bool

isConstantSizeType () const

Return true if this is not a variable sized type, according to the rules of C99 6.7.5p3.

bool

isSpecifierType () const

Returns true if this type can be represented by some set of type specifiers.

Linkage

getLinkage () const

Determine the linkage of this type.

Visibility

getVisibility () const

Determine the visibility of this type.

bool

isVisibilityExplicit () const

Return true if the visibility was explicitly set is the code.

LinkageInfo

getLinkageAndVisibility () const

Determine the linkage and visibility of this type.

bool

isLinkageValid () const

True if the computed linkage is valid.

std::optional< NullabilityKind >

getNullability () const

Determine the nullability of the given type.

bool

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.

bool

acceptsObjCTypeParams () const

Determines if this is an ObjC interface type that may accept type parameters.

const char *

getTypeClassName () const

QualType

getCanonicalTypeInternal () const

CanQualType

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

TypeClass

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

TypeOfBitfields TypeOfBits

TypedefBitfields TypedefBits

UsingBitfields UsingBits

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]; }

Definition at line 3808 of file Type.h.