clang
15.0.0git
|
Describes an entity that is being initialized. More...
#include "clang/Sema/Initialization.h"
Public Types | |
enum | EntityKind { EK_Variable, EK_Parameter, EK_TemplateParameter, EK_Result, EK_StmtExprResult, EK_Exception, EK_Member, EK_ArrayElement, EK_New, EK_Temporary, EK_Base, EK_Delegating, EK_VectorElement, EK_BlockElement, EK_LambdaToBlockConversionBlockElement, EK_ComplexElement, EK_LambdaCapture, EK_CompoundLiteralInit, EK_RelatedResult, EK_Parameter_CF_Audited, EK_Binding } |
Specifies the kind of entity being initialized. More... | |
Public Member Functions | |
EntityKind | getKind () const |
Determine the kind of initialization. More... | |
const InitializedEntity * | getParent () const |
Retrieve the parent of the entity being initialized, when the initialization itself is occurring within the context of a larger initialization. More... | |
QualType | getType () const |
Retrieve type being initialized. More... | |
TypeSourceInfo * | getTypeSourceInfo () const |
Retrieve complete type-source information for the object being constructed, if known. More... | |
DeclarationName | getName () const |
Retrieve the name of the entity being initialized. More... | |
ValueDecl * | getDecl () const |
Retrieve the variable, parameter, or field being initialized. More... | |
ObjCMethodDecl * | getMethodDecl () const |
Retrieve the ObjectiveC method being initialized. More... | |
bool | allowsNRVO () const |
Determine whether this initialization allows the named return value optimization, which also applies to thrown objects. More... | |
bool | isParameterKind () const |
bool | isParamOrTemplateParamKind () const |
bool | isParameterConsumed () const |
Determine whether this initialization consumes the parameter. More... | |
const CXXBaseSpecifier * | getBaseSpecifier () const |
Retrieve the base specifier. More... | |
bool | isInheritedVirtualBase () const |
Return whether the base is an inherited virtual base. More... | |
bool | isVariableLengthArrayNew () const |
Determine whether this is an array new with an unknown bound. More... | |
bool | isImplicitMemberInitializer () const |
Is this the implicit initialization of a member of a class from a defaulted constructor? More... | |
bool | isDefaultMemberInitializer () const |
Is this the default member initializer of a member (specified inside the class definition)? More... | |
SourceLocation | getReturnLoc () const |
Determine the location of the 'return' keyword when initializing the result of a function call. More... | |
SourceLocation | getThrowLoc () const |
Determine the location of the 'throw' keyword when initializing an exception object. More... | |
unsigned | getElementIndex () const |
If this is an array, vector, or complex number element, get the element's index. More... | |
void | setElementIndex (unsigned Index) |
If this is already the initializer for an array or vector element, sets the element index. More... | |
StringRef | getCapturedVarName () const |
For a lambda capture, return the capture's name. More... | |
SourceLocation | getCaptureLoc () const |
Determine the location of the capture when initializing field from a captured variable in a lambda. More... | |
void | setParameterCFAudited () |
unsigned | allocateManglingNumber () const |
void | dump () const |
Dump a representation of the initialized entity to standard error, for debugging purposes. More... | |
Static Public Member Functions | |
static InitializedEntity | InitializeVariable (VarDecl *Var) |
Create the initialization entity for a variable. More... | |
static InitializedEntity | InitializeParameter (ASTContext &Context, ParmVarDecl *Parm) |
Create the initialization entity for a parameter. More... | |
static InitializedEntity | InitializeParameter (ASTContext &Context, ParmVarDecl *Parm, QualType Type) |
Create the initialization entity for a parameter, but use another type. More... | |
static InitializedEntity | InitializeParameter (ASTContext &Context, QualType Type, bool Consumed) |
Create the initialization entity for a parameter that is only known by its type. More... | |
static InitializedEntity | InitializeTemplateParameter (QualType T, NonTypeTemplateParmDecl *Param) |
Create the initialization entity for a template parameter. More... | |
static InitializedEntity | InitializeResult (SourceLocation ReturnLoc, QualType Type) |
Create the initialization entity for the result of a function. More... | |
static InitializedEntity | InitializeStmtExprResult (SourceLocation ReturnLoc, QualType Type) |
static InitializedEntity | InitializeBlock (SourceLocation BlockVarLoc, QualType Type) |
static InitializedEntity | InitializeLambdaToBlock (SourceLocation BlockVarLoc, QualType Type) |
static InitializedEntity | InitializeException (SourceLocation ThrowLoc, QualType Type) |
Create the initialization entity for an exception object. More... | |
static InitializedEntity | InitializeNew (SourceLocation NewLoc, QualType Type) |
Create the initialization entity for an object allocated via new. More... | |
static InitializedEntity | InitializeTemporary (QualType Type) |
Create the initialization entity for a temporary. More... | |
static InitializedEntity | InitializeTemporary (ASTContext &Context, TypeSourceInfo *TypeInfo) |
Create the initialization entity for a temporary. More... | |
static InitializedEntity | InitializeTemporary (TypeSourceInfo *TypeInfo, QualType Type) |
Create the initialization entity for a temporary. More... | |
static InitializedEntity | InitializeRelatedResult (ObjCMethodDecl *MD, QualType Type) |
Create the initialization entity for a related result. More... | |
static InitializedEntity | InitializeBase (ASTContext &Context, const CXXBaseSpecifier *Base, bool IsInheritedVirtualBase, const InitializedEntity *Parent=nullptr) |
Create the initialization entity for a base class subobject. More... | |
static InitializedEntity | InitializeDelegation (QualType Type) |
Create the initialization entity for a delegated constructor. More... | |
static InitializedEntity | InitializeMember (FieldDecl *Member, const InitializedEntity *Parent=nullptr, bool Implicit=false) |
Create the initialization entity for a member subobject. More... | |
static InitializedEntity | InitializeMember (IndirectFieldDecl *Member, const InitializedEntity *Parent=nullptr, bool Implicit=false) |
Create the initialization entity for a member subobject. More... | |
static InitializedEntity | InitializeMemberFromDefaultMemberInitializer (FieldDecl *Member) |
Create the initialization entity for a default member initializer. More... | |
static InitializedEntity | InitializeElement (ASTContext &Context, unsigned Index, const InitializedEntity &Parent) |
Create the initialization entity for an array element. More... | |
static InitializedEntity | InitializeBinding (VarDecl *Binding) |
Create the initialization entity for a structured binding. More... | |
static InitializedEntity | InitializeLambdaCapture (IdentifierInfo *VarID, QualType FieldType, SourceLocation Loc) |
Create the initialization entity for a lambda capture. More... | |
static InitializedEntity | InitializeCompoundLiteralInit (TypeSourceInfo *TSI) |
Create the entity for a compound literal initializer. More... | |
Describes an entity that is being initialized.
Definition at line 47 of file Initialization.h.
Specifies the kind of entity being initialized.
Definition at line 50 of file Initialization.h.
|
inline |
Definition at line 553 of file Initialization.h.
Referenced by clang::Sema::checkInitializerLifetime().
bool InitializedEntity::allowsNRVO | ( | ) | const |
Determine whether this initialization allows the named return value optimization, which also applies to thrown objects.
Definition at line 3400 of file SemaInit.cpp.
References EK_ArrayElement, EK_Base, EK_Binding, EK_BlockElement, EK_ComplexElement, EK_CompoundLiteralInit, EK_Delegating, EK_Exception, EK_LambdaCapture, EK_LambdaToBlockConversionBlockElement, EK_Member, EK_New, EK_Parameter, EK_Parameter_CF_Audited, EK_RelatedResult, EK_Result, EK_StmtExprResult, EK_TemplateParameter, EK_Temporary, EK_Variable, EK_VectorElement, getKind(), and LocAndNRVO.
LLVM_DUMP_METHOD void InitializedEntity::dump | ( | ) | const |
Dump a representation of the initialized entity to standard error, for debugging purposes.
Definition at line 3477 of file SemaInit.cpp.
|
inline |
Retrieve the base specifier.
Definition at line 477 of file Initialization.h.
References EK_Base, and getKind().
Referenced by clang::Sema::CheckConstructorAccess().
|
inline |
For a lambda capture, return the capture's name.
Definition at line 537 of file Initialization.h.
References EK_LambdaCapture, and getKind().
Referenced by clang::Sema::CheckConstructorAccess().
|
inline |
Determine the location of the capture when initializing field from a captured variable in a lambda.
Definition at line 544 of file Initialization.h.
References EK_LambdaCapture, and getKind().
Referenced by getInitializationLoc().
ValueDecl * InitializedEntity::getDecl | ( | ) | const |
Retrieve the variable, parameter, or field being initialized.
Definition at line 3367 of file SemaInit.cpp.
References EK_ArrayElement, EK_Base, EK_Binding, EK_BlockElement, EK_ComplexElement, EK_CompoundLiteralInit, EK_Delegating, EK_Exception, EK_LambdaCapture, EK_LambdaToBlockConversionBlockElement, EK_Member, EK_New, EK_Parameter, EK_Parameter_CF_Audited, EK_RelatedResult, EK_Result, EK_StmtExprResult, EK_TemplateParameter, EK_Temporary, EK_Variable, EK_VectorElement, getKind(), Parameter, and Variable.
Referenced by canPerformArrayCopy(), clang::Sema::CheckConstructorAccess(), clang::Sema::checkInitializerLifetime(), getAssignmentAction(), and getInitializationLoc().
|
inline |
If this is an array, vector, or complex number element, get the element's index.
Definition at line 522 of file Initialization.h.
References EK_ArrayElement, EK_ComplexElement, EK_VectorElement, getKind(), and Index.
|
inline |
Determine the kind of initialization.
Definition at line 427 of file Initialization.h.
Referenced by allowsNRVO(), canPerformArrayCopy(), clang::Sema::CheckConstructorAccess(), getAssignmentAction(), getBaseSpecifier(), getCapturedVarName(), getCaptureLoc(), getDecl(), getElementIndex(), getEntityLifetime(), getInitializationLoc(), getName(), getReturnLoc(), getThrowLoc(), isDefaultMemberInitializer(), isExplicitTemporary(), isIdiomaticBraceElisionEntity(), isImplicitMemberInitializer(), isInheritedVirtualBase(), isParameterKind(), isParamOrTemplateParamKind(), isVariableLengthArrayNew(), setElementIndex(), shouldBindAsTemporary(), and shouldDestroyEntity().
|
inline |
Retrieve the ObjectiveC method being initialized.
Definition at line 454 of file Initialization.h.
References MethodDecl.
DeclarationName InitializedEntity::getName | ( | ) | const |
Retrieve the name of the entity being initialized.
Definition at line 3330 of file SemaInit.cpp.
References EK_ArrayElement, EK_Base, EK_Binding, EK_BlockElement, EK_ComplexElement, EK_CompoundLiteralInit, EK_Delegating, EK_Exception, EK_LambdaCapture, EK_LambdaToBlockConversionBlockElement, EK_Member, EK_New, EK_Parameter, EK_Parameter_CF_Audited, EK_RelatedResult, EK_Result, EK_StmtExprResult, EK_TemplateParameter, EK_Temporary, EK_Variable, EK_VectorElement, clang::NamedDecl::getDeclName(), getKind(), Parameter, and Variable.
|
inline |
Retrieve the parent of the entity being initialized, when the initialization itself is occurring within the context of a larger initialization.
Definition at line 432 of file Initialization.h.
References Parent.
Referenced by canPerformArrayCopy(), clang::Sema::CheckConstructorAccess(), clang::Sema::checkInitializerLifetime(), getEntityLifetime(), and isIdiomaticBraceElisionEntity().
|
inline |
Determine the location of the 'return' keyword when initializing the result of a function call.
Definition at line 508 of file Initialization.h.
References EK_Result, getKind(), and LocAndNRVO.
Referenced by getInitializationLoc().
|
inline |
Determine the location of the 'throw' keyword when initializing an exception object.
Definition at line 515 of file Initialization.h.
References EK_Exception, getKind(), and LocAndNRVO.
Referenced by getInitializationLoc().
|
inline |
Retrieve type being initialized.
Definition at line 435 of file Initialization.h.
References Type.
Referenced by clang::Sema::CanPerformAggregateInitializationForOverloadResolution(), clang::Sema::CheckConstructorAccess(), clang::Sema::checkInitializerLifetime(), isIdiomaticBraceElisionEntity(), isVariableLengthArrayNew(), and clang::Sema::PerformCopyInitialization().
|
inline |
Retrieve complete type-source information for the object being constructed, if known.
Definition at line 439 of file Initialization.h.
References EK_CompoundLiteralInit, EK_Temporary, and TypeInfo.
|
static |
Create the initialization entity for a base class subobject.
Definition at line 3318 of file SemaInit.cpp.
References Base, EK_Base, and Parent.
Referenced by clang::Sema::BuildBaseInitializer(), and BuildImplicitBaseInitializer().
|
inlinestatic |
Create the initialization entity for a structured binding.
Definition at line 405 of file Initialization.h.
References EK_Binding.
|
inlinestatic |
Definition at line 309 of file Initialization.h.
References EK_BlockElement.
Referenced by clang::Sema::ActOnBlockStmtExpr().
|
inlinestatic |
Create the entity for a compound literal initializer.
Definition at line 419 of file Initialization.h.
Referenced by clang::Sema::BuildCompoundLiteralExpr().
|
inlinestatic |
Create the initialization entity for a delegated constructor.
Definition at line 371 of file Initialization.h.
References EK_Delegating.
Referenced by clang::Sema::BuildDelegatingInitializer().
|
inlinestatic |
Create the initialization entity for an array element.
Definition at line 398 of file Initialization.h.
|
inlinestatic |
Create the initialization entity for an exception object.
Definition at line 321 of file Initialization.h.
References EK_Exception.
Referenced by clang::Sema::BuildCXXThrow().
|
inlinestatic |
Create the initialization entity for a lambda capture.
VarID
The name of the entity being captured, or nullptr for 'this'.
Definition at line 412 of file Initialization.h.
Referenced by clang::Sema::buildLambdaInitCaptureInitialization().
|
inlinestatic |
Definition at line 314 of file Initialization.h.
References EK_LambdaToBlockConversionBlockElement.
Referenced by clang::Sema::BuildBlockForLambdaConversion().
|
inlinestatic |
Create the initialization entity for a member subobject.
Definition at line 377 of file Initialization.h.
References clang::Member, and Parent.
Referenced by BuildImplicitMemberInitializer(), clang::Sema::BuildMemberInitializer(), CollectFieldInitializer(), and clang::Sema::SetIvarInitializers().
|
inlinestatic |
Create the initialization entity for a member subobject.
Definition at line 385 of file Initialization.h.
References clang::Member, and Parent.
|
inlinestatic |
Create the initialization entity for a default member initializer.
Definition at line 393 of file Initialization.h.
References clang::Member.
Referenced by clang::Sema::ActOnFinishCXXInClassMemberInitializer().
|
inlinestatic |
Create the initialization entity for an object allocated via new.
Definition at line 327 of file Initialization.h.
References EK_New.
|
inlinestatic |
Create the initialization entity for a parameter.
Definition at line 253 of file Initialization.h.
Referenced by clang::Sema::BuildAtomicExpr(), clang::Sema::BuildLiteralOperatorCall(), clang::Sema::BuildObjCBoxedExpr(), clang::Sema::BuildObjCNumericLiteral(), clang::Sema::BuildResolvedCallExpr(), clang::Sema::BuildVAArgExpr(), clang::Sema::CheckMessageArgumentTypes(), clang::Sema::checkUnknownAnyArg(), clang::Sema::ConvertParamDefaultArgument(), clang::Sema::CreateOverloadedBinOp(), clang::Sema::CreateOverloadedUnaryOp(), clang::Sema::GatherArgumentsForCall(), and clang::Sema::InstantiateDefaultArgument().
|
inlinestatic |
Create the initialization entity for a parameter, but use another type.
Definition at line 261 of file Initialization.h.
|
inlinestatic |
Create the initialization entity for a parameter that is only known by its type.
Definition at line 276 of file Initialization.h.
|
inlinestatic |
Create the initialization entity for a related result.
Definition at line 357 of file Initialization.h.
Referenced by clang::Sema::BuildReturnStmt().
|
inlinestatic |
Create the initialization entity for the result of a function.
Definition at line 299 of file Initialization.h.
References EK_Result.
Referenced by clang::Sema::ActOnCapScopeReturnStmt(), and clang::Sema::BuildReturnStmt().
|
inlinestatic |
Definition at line 304 of file Initialization.h.
References EK_StmtExprResult.
Referenced by clang::Sema::ActOnStmtExprResult().
|
inlinestatic |
Create the initialization entity for a template parameter.
Definition at line 289 of file Initialization.h.
References EK_TemplateParameter, and Variable.
Referenced by clang::Sema::CheckTemplateArgument().
|
inlinestatic |
Create the initialization entity for a temporary.
Definition at line 337 of file Initialization.h.
|
inlinestatic |
Create the initialization entity for a temporary.
Definition at line 332 of file Initialization.h.
Referenced by clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildObjCBoxedExpr(), ConvertForConditional(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CXXCheckConditionalOperands(), clang::Sema::DefaultArgumentPromotion(), EvaluateBinaryTypeTrait(), TryClassUnification(), clang::Sema::tryConvertExprToType(), and TryStaticImplicitCast().
|
inlinestatic |
Create the initialization entity for a temporary.
Definition at line 349 of file Initialization.h.
|
inlinestatic |
Create the initialization entity for a variable.
Definition at line 248 of file Initialization.h.
Referenced by clang::Sema::ActOnOpenMPFirstprivateClause(), clang::Sema::ActOnUninitializedDecl(), clang::Sema::AddInitializerToDecl(), and clang::Sema::buildCoroutinePromise().
|
inline |
Is this the default member initializer of a member (specified inside the class definition)?
Definition at line 502 of file Initialization.h.
References EK_Member, getKind(), and Variable.
Referenced by getEntityLifetime().
|
inline |
Is this the implicit initialization of a member of a class from a defaulted constructor?
Definition at line 496 of file Initialization.h.
References EK_Member, getKind(), and Variable.
Referenced by canPerformArrayCopy().
|
inline |
Return whether the base is an inherited virtual base.
Definition at line 483 of file Initialization.h.
References EK_Base, and getKind().
Referenced by clang::Sema::CheckConstructorAccess().
|
inline |
Determine whether this initialization consumes the parameter.
Definition at line 471 of file Initialization.h.
References isParameterKind(), and Parameter.
|
inline |
Definition at line 460 of file Initialization.h.
References EK_Parameter, EK_Parameter_CF_Audited, and getKind().
Referenced by isParameterConsumed(), isParamOrTemplateParamKind(), and clang::Sema::PerformCopyInitialization().
|
inline |
Definition at line 465 of file Initialization.h.
References EK_TemplateParameter, getKind(), and isParameterKind().
|
inline |
Determine whether this is an array new with an unknown bound.
Definition at line 489 of file Initialization.h.
|
inline |
If this is already the initializer for an array or vector element, sets the element index.
Definition at line 530 of file Initialization.h.
References EK_ArrayElement, EK_ComplexElement, EK_VectorElement, getKind(), and Index.
|
inline |
Definition at line 549 of file Initialization.h.
References EK_Parameter_CF_Audited.
Referenced by clang::Sema::GatherArgumentsForCall().
llvm::PointerIntPair<const CXXBaseSpecifier *, 1> clang::InitializedEntity::Base |
When Kind == EK_Base, the base specifier that provides the base class.
The integer specifies whether the base is an inherited virtual base.
Definition at line 201 of file Initialization.h.
Referenced by InitializeBase().
struct C clang::InitializedEntity::Capture |
Definition at line 208 of file Initialization.h.
unsigned clang::InitializedEntity::Index |
When Kind == EK_ArrayElement, EK_VectorElement, or EK_ComplexElement, the index of the array or vector element being initialized.
Definition at line 206 of file Initialization.h.
Referenced by getElementIndex(), and setElementIndex().
struct LN clang::InitializedEntity::LocAndNRVO |
Definition at line 196 of file Initialization.h.
Referenced by allowsNRVO(), getReturnLoc(), and getThrowLoc().
ObjCMethodDecl* clang::InitializedEntity::MethodDecl |
When Kind == EK_RelatedResult, the ObjectiveC method where result type was implicitly changed to accommodate ARC semantics.
Definition at line 186 of file Initialization.h.
Referenced by getMethodDecl().
llvm::PointerIntPair<ParmVarDecl *, 1> clang::InitializedEntity::Parameter |
When Kind == EK_Parameter, the ParmVarDecl, with the integer indicating whether the parameter is "consumed".
Definition at line 190 of file Initialization.h.
Referenced by getDecl(), getName(), and isParameterConsumed().
TypeSourceInfo* clang::InitializedEntity::TypeInfo |
When Kind == EK_Temporary or EK_CompoundLiteralInit, the type source information for the temporary.
Definition at line 194 of file Initialization.h.
Referenced by getTypeSourceInfo().
VD clang::InitializedEntity::Variable |
When Kind == EK_Variable, EK_Member, EK_Binding, or EK_TemplateParameter, the variable, binding, or template parameter.
Definition at line 182 of file Initialization.h.
Referenced by getDecl(), getName(), InitializeTemplateParameter(), isDefaultMemberInitializer(), and isImplicitMemberInitializer().