clang: clang::InitializationSequence Class Reference (original) (raw)

Describes the sequence of initializations required to initialize a given object or reference with a set of arguments. More...

#include "[clang/Sema/Initialization.h](Initialization%5F8h%5Fsource.html)"

Classes
class Step
A single step in the initialization sequence. More...
Public Types
enum SequenceKind { FailedSequence = 0 , DependentSequence, NormalSequence }
Describes the kind of initialization sequence computed. More...
enum StepKind { SK_ResolveAddressOfOverloadedFunction, SK_CastDerivedToBasePRValue, SK_CastDerivedToBaseXValue, SK_CastDerivedToBaseLValue, SK_BindReference, SK_BindReferenceToTemporary, SK_ExtraneousCopyToTemporary, SK_FinalCopy, SK_UserConversion, SK_QualificationConversionPRValue, SK_QualificationConversionXValue, SK_QualificationConversionLValue, SK_FunctionReferenceConversion, SK_AtomicConversion, SK_ConversionSequence, SK_ConversionSequenceNoNarrowing, SK_ListInitialization, SK_UnwrapInitList, SK_RewrapInitList, SK_ConstructorInitialization, SK_ConstructorInitializationFromList, SK_ZeroInitialization, SK_CAssignment, SK_StringInit, SK_ObjCObjectConversion, SK_ArrayLoopIndex, SK_ArrayLoopInit, SK_ArrayInit, SK_GNUArrayInit, SK_ParenthesizedArrayInit, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore, SK_ProduceObjCObject, SK_StdInitializerList, SK_StdInitializerListConstructorCall, SK_OCLSamplerInit, SK_OCLZeroOpaqueType, SK_ParenthesizedListInit }
Describes the kind of a particular step in an initialization sequence. More...
enum FailureKind { FK_TooManyInitsForReference, FK_ParenthesizedListInitForReference, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayNeedsInitListOrWideStringLiteral, FK_NarrowStringIntoWideCharArray, FK_WideStringIntoCharArray, FK_IncompatWideStringIntoWideChar, FK_PlainStringIntoUTF8Char, FK_UTF8StringIntoPlainChar, FK_ArrayTypeMismatch, FK_NonConstantArrayInit, FK_AddressOfOverloadFailed, FK_ReferenceInitOverloadFailed, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToBitfield, FK_NonConstLValueReferenceBindingToVectorElement, FK_NonConstLValueReferenceBindingToMatrixElement, FK_NonConstLValueReferenceBindingToUnrelated, FK_RValueReferenceBindingToLValue, FK_ReferenceInitDropsQualifiers, FK_ReferenceAddrspaceMismatchTemporary, FK_ReferenceInitFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_TooManyInitsForScalar, FK_ParenthesizedListInitForScalar, FK_ReferenceBindingToInitList, FK_InitListBadDestinationType, FK_UserConversionOverloadFailed, FK_ConstructorOverloadFailed, FK_ListConstructorOverloadFailed, FK_DefaultInitOfConst, FK_Incomplete, FK_VariableLengthArrayHasInitializer, FK_ListInitializationFailed, FK_PlaceholderType, FK_AddressOfUnaddressableFunction, FK_ExplicitConstructor, FK_ParenthesizedListInitFailed, FK_DesignatedInitForNonAggregate }
Describes why initialization failed. More...
using step_iterator = SmallVectorImpl< Step >::const_iterator
using step_range = llvm::iterator_range< step_iterator >
Public Member Functions
void SetZeroInitializationFixit (const std::string &Fixit, SourceLocation L)
Call for initializations are invalid but that would be valid zero initialzations if Fixit was applied.
InitializationSequence (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, bool TopLevelOfInitList=false, bool TreatUnavailableAsInvalid=true)
Try to perform initialization of the given entity, creating a record of the steps required to perform the initialization.
void InitializeFrom (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, bool TopLevelOfInitList, bool TreatUnavailableAsInvalid)
~InitializationSequence ()
ExprResult Perform (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType=nullptr)
Perform the actual initialization of the given entity based on the computed initialization sequence.
bool Diagnose (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef< Expr * > Args)
Diagnose an potentially-invalid initialization sequence.
enum SequenceKind getKind () const
Determine the kind of initialization sequence computed.
void setSequenceKind (enum SequenceKind SK)
Set the kind of sequence computed.
operator bool () const
Determine whether the initialization sequence is valid.
bool Failed () const
Determine whether the initialization sequence is invalid.
step_iterator step_begin () const
step_iterator step_end () const
step_range steps () const
bool isDirectReferenceBinding () const
Determine whether this initialization is a direct reference binding (C++ [dcl.init.ref]).
bool isAmbiguous () const
Determine whether this initialization failed due to an ambiguity.
bool isConstructorInitialization () const
Determine whether this initialization is direct call to a constructor.
void AddAddressOverloadResolutionStep (FunctionDecl *Function, DeclAccessPair Found, bool HadMultipleCandidates)
Add a new step in the initialization that resolves the address of an overloaded function to a specific function declaration.
void AddDerivedToBaseCastStep (QualType BaseType, ExprValueKind Category)
Add a new step in the initialization that performs a derived-to- base cast.
void AddReferenceBindingStep (QualType T, bool BindingTemporary)
Add a new step binding a reference to an object.
void AddExtraneousCopyToTemporary (QualType T)
Add a new step that makes an extraneous copy of the input to a temporary of the same class type.
void AddFinalCopy (QualType T)
Add a new step that makes a copy of the input to an object of the given type, as the final step in class copy-initialization.
void AddUserConversionStep (FunctionDecl *Function, DeclAccessPair FoundDecl, QualType T, bool HadMultipleCandidates)
Add a new step invoking a conversion function, which is either a constructor or a conversion function.
void AddQualificationConversionStep (QualType Ty, ExprValueKind Category)
Add a new step that performs a qualification conversion to the given type.
void AddFunctionReferenceConversionStep (QualType Ty)
Add a new step that performs a function reference conversion to the given type.
void AddAtomicConversionStep (QualType Ty)
Add a new step that performs conversion from non-atomic to atomic type.
void AddConversionSequenceStep (const ImplicitConversionSequence &ICS, QualType T, bool TopLevelOfInitList=false)
Add a new step that applies an implicit conversion sequence.
void AddListInitializationStep (QualType T)
Add a list-initialization step.
void AddConstructorInitializationStep (DeclAccessPair FoundDecl, CXXConstructorDecl *Constructor, QualType T, bool HadMultipleCandidates, bool FromInitList, bool AsInitList)
Add a constructor-initialization step.
void AddZeroInitializationStep (QualType T)
Add a zero-initialization step.
void AddCAssignmentStep (QualType T)
Add a C assignment step.
void AddStringInitStep (QualType T)
Add a string init step.
void AddObjCObjectConversionStep (QualType T)
Add an Objective-C object conversion step, which is always a no-op.
void AddArrayInitLoopStep (QualType T, QualType EltTy)
Add an array initialization loop step.
void AddArrayInitStep (QualType T, bool IsGNUExtension)
Add an array initialization step.
void AddParenthesizedArrayInitStep (QualType T)
Add a parenthesized array initialization step.
void AddPassByIndirectCopyRestoreStep (QualType T, bool shouldCopy)
Add a step to pass an object by indirect copy-restore.
void AddProduceObjCObjectStep (QualType T)
Add a step to "produce" an Objective-C object (by retaining it).
void AddStdInitializerListConstructionStep (QualType T)
Add a step to construct a std::initializer_list object from an initializer list.
void AddOCLSamplerInitStep (QualType T)
Add a step to initialize an OpenCL sampler from an integer constant.
void AddOCLZeroOpaqueTypeStep (QualType T)
Add a step to initialzie an OpenCL opaque type (event_t, queue_t, etc.) from a zero constant.
void AddParenthesizedListInitStep (QualType T)
void AddUnwrapInitListInitStep (InitListExpr *Syntactic)
Only used when initializing structured bindings from an array with direct-list-initialization.
void RewrapReferenceInitList (QualType T, InitListExpr *Syntactic)
Add steps to unwrap a initializer list for a reference around a single element and rewrap it at the end.
void SetFailed (FailureKind Failure)
Note that this initialization sequence failed.
void SetOverloadFailure (FailureKind Failure, OverloadingResult Result)
Note that this initialization sequence failed due to failed overload resolution.
OverloadCandidateSet & getFailedCandidateSet ()
Retrieve a reference to the candidate set when overload resolution fails.
OverloadingResult getFailedOverloadResult () const
Get the overloading result, for when the initialization sequence failed due to a bad overload.
void setIncompleteTypeFailure (QualType IncompleteType)
Note that this initialization sequence failed due to an incomplete type.
FailureKind getFailureKind () const
Determine why initialization failed.
void dump (raw_ostream &OS) const
Dump a representation of this initialization sequence to the given stream, for debugging purposes.
void dump () const
Dump a representation of this initialization sequence to standard error, for debugging purposes.

Describes the sequence of initializations required to initialize a given object or reference with a set of arguments.

Definition at line 802 of file Initialization.h.

step_iterator

step_range

FailureKind

Describes why initialization failed.

Enumerator
FK_TooManyInitsForReference Too many initializers provided for a reference.
FK_ParenthesizedListInitForReference Reference initialized from a parenthesized initializer list.
FK_ArrayNeedsInitList Array must be initialized with an initializer list.
FK_ArrayNeedsInitListOrStringLiteral Array must be initialized with an initializer list or a string literal.
FK_ArrayNeedsInitListOrWideStringLiteral Array must be initialized with an initializer list or a wide string literal.
FK_NarrowStringIntoWideCharArray Initializing a wide char array with narrow string literal.
FK_WideStringIntoCharArray Initializing char array with wide string literal.
FK_IncompatWideStringIntoWideChar Initializing wide char array with incompatible wide string literal.
FK_PlainStringIntoUTF8Char Initializing char8_t array with plain string literal.
FK_UTF8StringIntoPlainChar Initializing char array with UTF-8 string literal.
FK_ArrayTypeMismatch Array type mismatch.
FK_NonConstantArrayInit Non-constant array initializer.
FK_AddressOfOverloadFailed Cannot resolve the address of an overloaded function.
FK_ReferenceInitOverloadFailed Overloading due to reference initialization failed.
FK_NonConstLValueReferenceBindingToTemporary Non-const lvalue reference binding to a temporary.
FK_NonConstLValueReferenceBindingToBitfield Non-const lvalue reference binding to a bit-field.
FK_NonConstLValueReferenceBindingToVectorElement Non-const lvalue reference binding to a vector element.
FK_NonConstLValueReferenceBindingToMatrixElement Non-const lvalue reference binding to a matrix element.
FK_NonConstLValueReferenceBindingToUnrelated Non-const lvalue reference binding to an lvalue of unrelated type.
FK_RValueReferenceBindingToLValue Rvalue reference binding to an lvalue.
FK_ReferenceInitDropsQualifiers Reference binding drops qualifiers.
FK_ReferenceAddrspaceMismatchTemporary Reference with mismatching address space binding to temporary.
FK_ReferenceInitFailed Reference binding failed.
FK_ConversionFailed Implicit conversion failed.
FK_ConversionFromPropertyFailed Implicit conversion failed.
FK_TooManyInitsForScalar Too many initializers for scalar.
FK_ParenthesizedListInitForScalar Scalar initialized from a parenthesized initializer list.
FK_ReferenceBindingToInitList Reference initialization from an initializer list.
FK_InitListBadDestinationType Initialization of some unused destination type with an initializer list.
FK_UserConversionOverloadFailed Overloading for a user-defined conversion failed.
FK_ConstructorOverloadFailed Overloading for initialization by constructor failed.
FK_ListConstructorOverloadFailed Overloading for list-initialization by constructor failed.
FK_DefaultInitOfConst Default-initialization of a 'const' object.
FK_Incomplete Initialization of an incomplete type.
FK_VariableLengthArrayHasInitializer Variable-length array must not have an initializer.
FK_ListInitializationFailed List initialization failed at some point.
FK_PlaceholderType Initializer has a placeholder type which cannot be resolved by initialization.
FK_AddressOfUnaddressableFunction Trying to take the address of a function that doesn't support having its address taken.
FK_ExplicitConstructor List-copy-initialization chose an explicit constructor.
FK_ParenthesizedListInitFailed Parenthesized list initialization failed at some point. This is a C++20 feature.
FK_DesignatedInitForNonAggregate

Definition at line 996 of file Initialization.h.

SequenceKind

Describes the kind of initialization sequence computed.

Enumerator
FailedSequence A failed initialization sequence. The failure kind tells what happened.
DependentSequence A dependent initialization, which could not be type-checked due to the presence of dependent types or dependently-typed expressions.
NormalSequence A normal sequence.

Definition at line 805 of file Initialization.h.

StepKind

Describes the kind of a particular step in an initialization sequence.

Enumerator
SK_ResolveAddressOfOverloadedFunction Resolve the address of an overloaded function to a specific function declaration.
SK_CastDerivedToBasePRValue Perform a derived-to-base cast, producing an rvalue.
SK_CastDerivedToBaseXValue Perform a derived-to-base cast, producing an xvalue.
SK_CastDerivedToBaseLValue Perform a derived-to-base cast, producing an lvalue.
SK_BindReference Reference binding to an lvalue.
SK_BindReferenceToTemporary Reference binding to a temporary.
SK_ExtraneousCopyToTemporary An optional copy of a temporary object to another temporary object, which is permitted (but not required) by C++98/03 but not C++0x.
SK_FinalCopy Direct-initialization from a reference-related object in the final stage of class copy-initialization.
SK_UserConversion Perform a user-defined conversion, either via a conversion function or via a constructor.
SK_QualificationConversionPRValue Perform a qualification conversion, producing a prvalue.
SK_QualificationConversionXValue Perform a qualification conversion, producing an xvalue.
SK_QualificationConversionLValue Perform a qualification conversion, producing an lvalue.
SK_FunctionReferenceConversion Perform a function reference conversion, see [dcl.init.ref]p4.
SK_AtomicConversion Perform a conversion adding _Atomic to a type.
SK_ConversionSequence Perform an implicit conversion sequence.
SK_ConversionSequenceNoNarrowing Perform an implicit conversion sequence without narrowing.
SK_ListInitialization Perform list-initialization without a constructor.
SK_UnwrapInitList Unwrap the single-element initializer list for a reference.
SK_RewrapInitList Rewrap the single-element initializer list for a reference.
SK_ConstructorInitialization Perform initialization via a constructor.
SK_ConstructorInitializationFromList Perform initialization via a constructor, taking arguments from a single InitListExpr.
SK_ZeroInitialization Zero-initialize the object.
SK_CAssignment C assignment.
SK_StringInit Initialization by string.
SK_ObjCObjectConversion An initialization that "converts" an Objective-C object (not a point to an object) to another Objective-C object type.
SK_ArrayLoopIndex Array indexing for initialization by elementwise copy.
SK_ArrayLoopInit Array initialization by elementwise copy.
SK_ArrayInit Array initialization (from an array rvalue).
SK_GNUArrayInit Array initialization (from an array rvalue) as a GNU extension.
SK_ParenthesizedArrayInit Array initialization from a parenthesized initializer list. This is a GNU C++ extension.
SK_PassByIndirectCopyRestore Pass an object by indirect copy-and-restore.
SK_PassByIndirectRestore Pass an object by indirect restore.
SK_ProduceObjCObject Produce an Objective-C object pointer.
SK_StdInitializerList Construct a std::initializer_list from an initializer list.
SK_StdInitializerListConstructorCall Perform initialization via a constructor taking a single std::initializer_list argument.
SK_OCLSamplerInit Initialize an OpenCL sampler from an integer.
SK_OCLZeroOpaqueType Initialize an opaque OpenCL type (event_t, queue_t, etc.) with zero.
SK_ParenthesizedListInit Initialize an aggreagate with parenthesized list of values. This is a C++20 feature.

Definition at line 821 of file Initialization.h.

Try to perform initialization of the given entity, creating a record of the steps required to perform the initialization.

The generated initialization sequence will either contain enough information to diagnose

Parameters

S the semantic analysis object.
Entity the entity being initialized.
Kind the kind of initialization being performed.
Args the argument(s) provided for initialization.
TopLevelOfInitList true if we are initializing from an expression at the top level inside an initializer list. This disallows narrowing conversions in C++11 onwards.
TreatUnavailableAsInvalid true if we want to treat unavailable as invalid.

Definition at line 6368 of file SemaInit.cpp.

References InitializeFrom().

~InitializationSequence()

InitializationSequence::~InitializationSequence ( )

AddAddressOverloadResolutionStep()

AddArrayInitLoopStep()

void InitializationSequence::AddArrayInitLoopStep ( QualType T,
QualType EltTy
)

AddArrayInitStep()

void InitializationSequence::AddArrayInitStep ( QualType T,
bool IsGNUExtension
)

AddAtomicConversionStep()

void InitializationSequence::AddAtomicConversionStep ( QualType Ty )

AddCAssignmentStep()

void InitializationSequence::AddCAssignmentStep ( QualType T )

AddConstructorInitializationStep()

AddConversionSequenceStep()

AddDerivedToBaseCastStep()

AddExtraneousCopyToTemporary()

void InitializationSequence::AddExtraneousCopyToTemporary ( QualType T )

Add a new step that makes an extraneous copy of the input to a temporary of the same class type.

This extraneous copy only occurs during reference binding in C++98/03, where we are permitted (but not required) to introduce an extra copy. At a bare minimum, we must check that we could call the copy constructor, and produce a diagnostic if the copy constructor is inaccessible or no copy constructor matches.

Parameters

T The type of the temporary being created.

Definition at line 3936 of file SemaInit.cpp.

References SK_ExtraneousCopyToTemporary, and clang::T.

Referenced by TryReferenceInitializationCore().

AddFinalCopy()

void InitializationSequence::AddFinalCopy ( QualType T )

AddFunctionReferenceConversionStep()

void InitializationSequence::AddFunctionReferenceConversionStep ( QualType Ty )

AddListInitializationStep()

void InitializationSequence::AddListInitializationStep ( QualType T )

AddObjCObjectConversionStep()

void InitializationSequence::AddObjCObjectConversionStep ( QualType T )

AddOCLSamplerInitStep()

void InitializationSequence::AddOCLSamplerInitStep ( QualType T )

AddOCLZeroOpaqueTypeStep()

void InitializationSequence::AddOCLZeroOpaqueTypeStep ( QualType T )

AddParenthesizedArrayInitStep()

void InitializationSequence::AddParenthesizedArrayInitStep ( QualType T )

AddParenthesizedListInitStep()

void InitializationSequence::AddParenthesizedListInitStep ( QualType T )

AddPassByIndirectCopyRestoreStep()

void InitializationSequence::AddPassByIndirectCopyRestoreStep ( QualType T,
bool shouldCopy
)

AddProduceObjCObjectStep()

void InitializationSequence::AddProduceObjCObjectStep ( QualType T )

AddQualificationConversionStep()

AddReferenceBindingStep()

void InitializationSequence::AddReferenceBindingStep ( QualType T,
bool BindingTemporary
)

AddStdInitializerListConstructionStep()

void InitializationSequence::AddStdInitializerListConstructionStep ( QualType T )

AddStringInitStep()

void InitializationSequence::AddStringInitStep ( QualType T )

AddUnwrapInitListInitStep()

void InitializationSequence::AddUnwrapInitListInitStep ( InitListExpr * Syntactic )

AddUserConversionStep()

AddZeroInitializationStep()

void InitializationSequence::AddZeroInitializationStep ( QualType T )

Diagnose()

Diagnose an potentially-invalid initialization sequence.

Returns

true if the initialization sequence was ill-formed, false otherwise.

Definition at line 8725 of file SemaInit.cpp.

References clang::OverloadCandidateSet::BestViableFunction(), clang::Type::castAs(), clang::Sema::checkAddressOfFunctionIsAvailable(), clang::OverloadCandidateSet::CompleteCandidates(), clang::Sema::Context, clang::FixItHint::CreateInsertion(), clang::Sema::CurContext, clang::SemaBase::Diag(), diagnoseListInit(), DiagnoseUninitializedReference(), clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Member, clang::InitializedEntity::EK_ParenAggInitMember, clang::InitializedEntity::EK_Result, emitBadConversionNotes(), Failed(), clang::Sema::FixOverloadedFunctionReference(), FK_AddressOfOverloadFailed, FK_AddressOfUnaddressableFunction, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayNeedsInitListOrWideStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_DefaultInitOfConst, FK_DesignatedInitForNonAggregate, FK_ExplicitConstructor, FK_IncompatWideStringIntoWideChar, FK_Incomplete, FK_InitListBadDestinationType, FK_ListConstructorOverloadFailed, FK_ListInitializationFailed, FK_NarrowStringIntoWideCharArray, FK_NonConstantArrayInit, FK_NonConstLValueReferenceBindingToBitfield, FK_NonConstLValueReferenceBindingToMatrixElement, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToUnrelated, FK_NonConstLValueReferenceBindingToVectorElement, FK_ParenthesizedListInitFailed, FK_ParenthesizedListInitForReference, FK_ParenthesizedListInitForScalar, FK_PlaceholderType, FK_PlainStringIntoUTF8Char, FK_ReferenceAddrspaceMismatchTemporary, FK_ReferenceBindingToInitList, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed, FK_ReferenceInitOverloadFailed, FK_RValueReferenceBindingToLValue, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UserConversionOverloadFailed, FK_UTF8StringIntoPlainChar, FK_VariableLengthArrayHasInitializer, FK_WideStringIntoCharArray, clang::Found, clang::Qualifiers::fromCVRMask(), clang::ActionResult< PtrTy, Compress >::get(), clang::Type::getAs(), clang::Sema::getASTContext(), clang::InitializedEntity::getBaseSpecifier(), clang::SourceRange::getBegin(), clang::Stmt::getBeginLoc(), clang::Qualifiers::getCVRQualifiers(), clang::InitializedEntity::getDecl(), clang::NamedDecl::getDeclName(), clang::InitListExpr::getInits(), clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::Sema::getLocForEndOfToken(), clang::InitializedEntity::getName(), clang::QualType::getNonReferenceType(), clang::InitListExpr::getNumInits(), clang::QualType::getQualifiers(), clang::Stmt::getSourceRange(), clang::Sema::getSpecialMember(), clang::StringLiteral::getString(), clang::ASTContext::getTagDeclType(), clang::CXXBaseSpecifier::getType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::ASTContext::getTypeDeclType(), clang::Sema::HandleFunctionTypeMismatch(), clang::Qualifiers::hasQualifiers(), clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Value, int, clang::Qualifiers::isAddressSpaceSupersetOf(), clang::Sema::isImplicitlyDeleted(), clang::Type::isIncompleteType(), clang::Expr::isLValue(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Type::isSignedIntegerType(), clang::QualType::isVolatileQualified(), clang::OverloadCandidateSet::NoteCandidates(), clang::Sema::NoteDeletedFunction(), clang::OCD_AllCandidates, clang::OCD_AmbiguousCandidates, clang::OR_Ambiguous, clang::OR_Deleted, clang::OR_No_Viable_Function, clang::OR_Success, clang::ASTContext::OverloadTy, clang::SemaBase::PDiag(), clang::Sema::RequireCompleteType(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::SourceRange::setBegin(), and TryOrBuildParenListInitialization().

Referenced by Perform(), TryClassUnification(), and TryOrBuildParenListInitialization().

dump() [1/2]

void InitializationSequence::dump ( ) const

Dump a representation of this initialization sequence to standard error, for debugging purposes.

Definition at line 9581 of file SemaInit.cpp.

References dump().

Referenced by dump().

dump() [2/2]

void InitializationSequence::dump ( raw_ostream & OS ) const

Dump a representation of this initialization sequence to the given stream, for debugging purposes.

Definition at line 9231 of file SemaInit.cpp.

References DependentSequence, FailedSequence, FK_AddressOfOverloadFailed, FK_AddressOfUnaddressableFunction, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayNeedsInitListOrWideStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_DefaultInitOfConst, FK_DesignatedInitForNonAggregate, FK_ExplicitConstructor, FK_IncompatWideStringIntoWideChar, FK_Incomplete, FK_InitListBadDestinationType, FK_ListConstructorOverloadFailed, FK_ListInitializationFailed, FK_NarrowStringIntoWideCharArray, FK_NonConstantArrayInit, FK_NonConstLValueReferenceBindingToBitfield, FK_NonConstLValueReferenceBindingToMatrixElement, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToUnrelated, FK_NonConstLValueReferenceBindingToVectorElement, FK_ParenthesizedListInitFailed, FK_ParenthesizedListInitForReference, FK_ParenthesizedListInitForScalar, FK_PlaceholderType, FK_PlainStringIntoUTF8Char, FK_ReferenceAddrspaceMismatchTemporary, FK_ReferenceBindingToInitList, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed, FK_ReferenceInitOverloadFailed, FK_RValueReferenceBindingToLValue, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UserConversionOverloadFailed, FK_UTF8StringIntoPlainChar, FK_VariableLengthArrayHasInitializer, FK_WideStringIntoCharArray, NormalSequence, SK_ArrayInit, SK_ArrayLoopIndex, SK_ArrayLoopInit, SK_AtomicConversion, SK_BindReference, SK_BindReferenceToTemporary, SK_CAssignment, SK_CastDerivedToBaseLValue, SK_CastDerivedToBasePRValue, SK_CastDerivedToBaseXValue, SK_ConstructorInitialization, SK_ConstructorInitializationFromList, SK_ConversionSequence, SK_ConversionSequenceNoNarrowing, SK_ExtraneousCopyToTemporary, SK_FinalCopy, SK_FunctionReferenceConversion, SK_GNUArrayInit, SK_ListInitialization, SK_ObjCObjectConversion, SK_OCLSamplerInit, SK_OCLZeroOpaqueType, SK_ParenthesizedArrayInit, SK_ParenthesizedListInit, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore, SK_ProduceObjCObject, SK_QualificationConversionLValue, SK_QualificationConversionPRValue, SK_QualificationConversionXValue, SK_ResolveAddressOfOverloadedFunction, SK_RewrapInitList, SK_StdInitializerList, SK_StdInitializerListConstructorCall, SK_StringInit, SK_UnwrapInitList, SK_UserConversion, SK_ZeroInitialization, step_begin(), and step_end().

Failed()

bool clang::InitializationSequence::Failed ( ) const inline

getFailedCandidateSet()

getFailedOverloadResult()

OverloadingResult clang::InitializationSequence::getFailedOverloadResult ( ) const inline

getFailureKind()

FailureKind clang::InitializationSequence::getFailureKind ( ) const inline

getKind()

enum SequenceKind clang::InitializationSequence::getKind ( ) const inline

InitializeFrom()

Definition at line 6424 of file SemaInit.cpp.

References AddArrayInitStep(), AddAtomicConversionStep(), AddCAssignmentStep(), AddConversionSequenceStep(), AddListInitializationStep(), AddParenthesizedArrayInitStep(), AddPassByIndirectCopyRestoreStep(), AddZeroInitializationStep(), clang::Atomic, clang::OverloadCandidateSet::BestViableFunction(), canPerformArrayCopy(), clang::SemaObjC::CheckConversionToObjCLiteral(), clang::SemaObjC::CheckObjCBridgeRelatedConversions(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, clang::IntegerLiteral::Create(), DependentSequence, clang::SemaBase::Diag(), E, clang::InitializedEntity::EK_Member, emitUninitializedExplicitInitFields(), Failed(), clang::StandardConversionSequence::First, FK_AddressOfOverloadFailed, FK_AddressOfUnaddressableFunction, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayNeedsInitListOrWideStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_IncompatWideStringIntoWideChar, FK_NarrowStringIntoWideCharArray, FK_NonConstantArrayInit, FK_ParenthesizedListInitForReference, FK_ParenthesizedListInitForScalar, FK_PlaceholderType, FK_PlainStringIntoUTF8Char, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UTF8StringIntoPlainChar, FK_VariableLengthArrayHasInitializer, FK_WideStringIntoCharArray, clang::Found, clang::ActionResult< PtrTy, Compress >::get(), clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::Type::getAsRecordDecl(), clang::Sema::getASTContext(), clang::RecordType::getDecl(), clang::InitializedEntity::getDecl(), clang::ArrayType::getElementType(), getFailedCandidateSet(), getFailureKind(), clang::ASTContext::getIntWidth(), clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::ImplicitConversionSequence::getNullptrToBool(), clang::VectorType::getNumElements(), clang::StandardConversionSequence::getToType(), clang::InitializedEntity::getType(), clang::Expr::getValueKind(), clang::Expr::hasAnyTypeDependentArguments(), hasCompatibleArrayTypes(), clang::ASTContext::hasSameUnqualifiedType(), clang::RecordDecl::hasUninitializedExplicitInitFields(), clang::ICK_Array_To_Pointer, clang::ICK_Lvalue_To_Rvalue, clang::ICK_Writeback_Conversion, clang::InitializationKind::IK_Copy, clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_Value, clang::Initializer, clang::ASTContext::IntTy, clang::Type::isArrayParameterType(), clang::Type::isArrayType(), clang::ImplicitConversionSequence::isBad(), clang::Type::isBooleanType(), clang::Type::isCharType(), clang::Type::isDependentType(), clang::Sema::IsDerivedFrom(), isExprAnUnaddressableFunction(), clang::Type::isExtVectorType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), isLibstdcxxPointerReturnFalseHack(), clang::QualType::isNull(), clang::Type::isNullPtrType(), clang::InitializedEntity::isParameterKind(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::ImplicitConversionSequence::isStandard(), IsStringInit(), IsWideCharCompatible(), MaybeProduceObjCObject(), NormalSequence, clang::Sema::ObjC(), clang::Decl::OBJC_TQ_Out, clang::OR_Deleted, clang::ASTContext::OverloadTy, clang::Sema::ResolveAddressOfOverloadedFunction(), clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), SetFailed(), setSequenceKind(), clang::ImplicitConversionSequence::setStandard(), SIF_IncompatWideStringIntoWideChar, SIF_NarrowStringIntoWideChar, SIF_None, SIF_Other, SIF_PlainStringIntoUTF8Char, SIF_UTF8StringIntoPlainChar, SIF_WideStringIntoChar, clang::ImplicitConversionSequence::Standard, TryArrayCopy(), TryConstructorInitialization(), TryDefaultInitialization(), clang::Sema::TryImplicitConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryOCLSamplerInitialization(), TryOCLZeroOpaqueTypeInitialization(), TryOrBuildParenListInitialization(), TryReferenceInitialization(), TryStringLiteralInitialization(), TryUserDefinedConversion(), and TryValueInitialization().

Referenced by InitializationSequence(), TryArrayCopy(), and TryListInitialization().

isAmbiguous()

bool InitializationSequence::isAmbiguous ( ) const

Determine whether this initialization failed due to an ambiguity.

Definition at line 3835 of file SemaInit.cpp.

References Failed(), FK_AddressOfOverloadFailed, FK_AddressOfUnaddressableFunction, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayNeedsInitListOrWideStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_DefaultInitOfConst, FK_DesignatedInitForNonAggregate, FK_ExplicitConstructor, FK_IncompatWideStringIntoWideChar, FK_Incomplete, FK_InitListBadDestinationType, FK_ListConstructorOverloadFailed, FK_ListInitializationFailed, FK_NarrowStringIntoWideCharArray, FK_NonConstantArrayInit, FK_NonConstLValueReferenceBindingToBitfield, FK_NonConstLValueReferenceBindingToMatrixElement, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToUnrelated, FK_NonConstLValueReferenceBindingToVectorElement, FK_ParenthesizedListInitFailed, FK_ParenthesizedListInitForReference, FK_ParenthesizedListInitForScalar, FK_PlaceholderType, FK_PlainStringIntoUTF8Char, FK_ReferenceAddrspaceMismatchTemporary, FK_ReferenceBindingToInitList, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed, FK_ReferenceInitOverloadFailed, FK_RValueReferenceBindingToLValue, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UserConversionOverloadFailed, FK_UTF8StringIntoPlainChar, FK_VariableLengthArrayHasInitializer, FK_WideStringIntoCharArray, getFailureKind(), and clang::OR_Ambiguous.

Referenced by TryClassUnification().

isConstructorInitialization()

bool InitializationSequence::isConstructorInitialization ( ) const

isDirectReferenceBinding()

bool InitializationSequence::isDirectReferenceBinding ( ) const

operator bool()

clang::InitializationSequence::operator bool ( ) const inlineexplicit

Perform()

Perform the actual initialization of the given entity based on the computed initialization sequence.

Parameters

S the semantic analysis object.
Entity the entity being initialized.
Kind the kind of initialization being performed.
Args the argument(s) provided for initialization, ownership of which is transferred into the routine.
ResultType if non-NULL, will be set to the type of the initialized object, which is the type of the declaration in most cases. However, when the initialized object is a variable of incomplete array type and the initializer is an initializer list, this type will be set to the completed array type.

Returns

an expression that performs the actual object initialization, if the initialization is well-formed. Otherwise, emits diagnostics and returns an invalid expression.

Definition at line 7637 of file SemaInit.cpp.

References clang::Sema::ActOnParenListExpr(), bool, clang::Sema::BuildCXXConstructExpr(), clang::Sema::BuildCXXMemberCallExpr(), clang::Type::castAs(), clang::Sema::checkAddressOfFunctionIsAvailable(), clang::Sema::CheckAddressOfMemberAccess(), CheckC23ConstexprInitConversion(), clang::Sema::CheckConstructorAccess(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckDestructorAccess(), clang::Sema::CheckExceptionSpecCompatibility(), CheckForNullPointerDereference(), checkIndirectCopyRestoreSource(), clang::Sema::checkInitializerLifetime(), clang::Sema::CheckMemberOperatorAccess(), CheckMoveOnConstruction(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::CheckSingleAssignmentConstraints(), CheckStringInit(), clang::Sema::CheckTransparentUnionArgumentConstraints(), clang::Sema::Cleanup, clang::Sema::Compatible, clang::Complete, clang::Sema::CompleteConstructorCall(), clang::Sema::Context, CopyObject(), clang::ImplicitCastExpr::Create(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::FixItHint::CreateInsertion(), clang::Sema::CreateMaterializeTemporaryExpr(), clang::CStyleCast, clang::Sema::CurFPFeatureOverrides(), D, DependentSequence, clang::Destructor, clang::SemaBase::Diag(), Diagnose(), clang::Sema::DiagnoseAssignmentResult(), DiagnoseNarrowingInInitList(), clang::Sema::DiagnoseUseOfDecl(), clang::Sema::DiscardMisalignedMemberAddress(), E, clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Delegating, clang::InitializedEntity::EK_Member, clang::InitializedEntity::EK_Parameter_CF_Audited, clang::InitializedEntity::EK_ParenAggInitMember, clang::InitializedEntity::EK_Result, clang::InitializedEntity::EK_Variable, clang::Expr::EvaluateAsRValue(), clang::Evaluated, clang::ExprError(), Failed(), clang::Sema::FixOverloadedFunctionReference(), clang::InitializationSequence::Step::F::FoundDecl, clang::InitializationSequence::Step::F::Function, clang::InitializationSequence::Step::Function, clang::FunctionalCast, clang::ActionResult< PtrTy, Compress >::get(), clang::QualType::getAddressSpace(), clang::ActionResult< PtrTy, Compress >::getAs(), clang::Type::getAs(), clang::TypeLoc::getAs(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getAsConstantArrayType(), clang::Type::getAsCXXRecordDecl(), clang::ASTContext::getAsIncompleteArrayType(), getAssignmentAction(), clang::SourceRange::getBegin(), clang::DeclaratorDecl::getBeginLoc(), clang::Decl::getBeginLoc(), clang::Stmt::getBeginLoc(), clang::ASTContext::getConstantArrayType(), clang::InitializedEntity::getDecl(), clang::CXXRecordDecl::getDefinition(), clang::ASTContext::getDependentSizedArrayType(), clang::SourceRange::getEnd(), clang::Expr::getExprLoc(), clang::InitListExpr::getInits(), clang::APValue::getInt(), clang::ASTContext::getIntWidth(), clang::InitializedEntity::getKind(), getKind(), clang::Sema::getLangOpts(), clang::InitListExpr::getLBraceLoc(), clang::ASTContext::getLValueReferenceType(), clang::QualType::getNonLValueExprType(), clang::QualType::getNonReferenceType(), clang::InitListExpr::getNumInits(), clang::Expr::getObjectKind(), clang::Sema::getOpenCLOptions(), clang::Type::getPointeeOrArrayElementType(), clang::InitListExpr::getRBraceLoc(), clang::FunctionDecl::getReturnType(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getSizeType(), clang::Stmt::getSourceRange(), clang::MaterializeTemporaryExpr::getStorageDuration(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ValueDecl::getType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::QualType::getTypePtr(), clang::InitializedEntity::getTypeSourceInfo(), clang::QualType::getUnqualifiedType(), clang::Expr::getValueKind(), clang::InitializationSequence::Step::F::HadMultipleCandidates, clang::QualType::hasAddressSpace(), clang::Decl::hasAttr(), clang::ASTContext::hasSameType(), clang::InitializationSequence::Step::ICS, clang::Expr::IgnoreParens(), clang::InitializationKind::IK_Copy, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_DirectList, clang::InitializationKind::IK_Value, clang::Sema::ImpCastExprToType(), clang::Implicit, clang::Init, clang::InitializedEntity::InitializeTemporary(), initializingConstexprVariable(), clang::EnterExpressionEvaluationContext::InitList, clang::Type::isArrayType(), clang::Type::isAtomicType(), clang::OpenCLOptions::isAvailableOption(), clang::Type::isDependentType(), clang::QualType::isDestructedType(), clang::Type::isEventT(), clang::Type::isExtVectorType(), clang::Type::isFunctionProtoType(), clang::Type::isIncompleteArrayType(), clang::Type::isIntegerType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Expr::isLValue(), clang::Type::isLValueReferenceType(), clang::APValue::isNullPointer(), clang::Type::isOCLIntelSubgroupAVCType(), clang::InitializedEntity::isParameterKind(), clang::InitializedEntity::isParamOrTemplateParamKind(), clang::Expr::isPRValue(), clang::Type::isQueueT(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Type::isSamplerT(), clang::ReferenceType::isSpelledAsLValue(), clang::Sema::isStdInitializerList(), clang::InitializationSequence::Step::Kind, Loc, clang::Sema::LookupDestructor(), clang::Sema::MarkFunctionReferenced(), clang::Sema::MaybeBindToTemporary(), clang::Normal, clang::ASTContext::OCLSamplerTy, clang::opencl_global, clang::OtherCast, clang::SemaBase::PDiag(), PerformConstructorInitialization(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformQualificationConversion(), Range, clang::Sema::RequireNonAbstractType(), clang::Result, clang::SD_Automatic, clang::CleanupInfo::setExprNeedsCleanups(), clang::InitListExpr::setSyntacticForm(), clang::Expr::setType(), clang::Expr::setValueKind(), shouldBindAsTemporary(), shouldDestroyEntity(), SK_ArrayInit, SK_ArrayLoopIndex, SK_ArrayLoopInit, SK_AtomicConversion, SK_BindReference, SK_BindReferenceToTemporary, SK_CAssignment, SK_CastDerivedToBaseLValue, SK_CastDerivedToBasePRValue, SK_CastDerivedToBaseXValue, SK_ConstructorInitialization, SK_ConstructorInitializationFromList, SK_ConversionSequence, SK_ConversionSequenceNoNarrowing, SK_ExtraneousCopyToTemporary, SK_FinalCopy, SK_FunctionReferenceConversion, SK_GNUArrayInit, SK_ListInitialization, SK_ObjCObjectConversion, SK_OCLSamplerInit, SK_OCLZeroOpaqueType, SK_ParenthesizedArrayInit, SK_ParenthesizedListInit, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore, SK_ProduceObjCObject, SK_QualificationConversionLValue, SK_QualificationConversionPRValue, SK_QualificationConversionXValue, SK_ResolveAddressOfOverloadedFunction, SK_RewrapInitList, SK_StdInitializerList, SK_StdInitializerListConstructorCall, SK_StringInit, SK_UnwrapInitList, SK_UserConversion, SK_ZeroInitialization, step_begin(), step_end(), clang::T, TryOrBuildParenListInitialization(), clang::InitializationSequence::Step::Type, updateGNUCompoundLiteralRValue(), clang::Expr::EvalResult::Val, clang::VK_LValue, clang::VK_PRValue, clang::VK_XValue, clang::QualType::withConst(), and clang::InitializationSequence::Step::WrappingSyntacticList.

Referenced by clang::SemaOpenMP::ActOnOpenMPFirstprivateClause(), clang::Sema::AddInitializerToDecl(), clang::Sema::BuildBaseInitializer(), clang::Sema::BuildCaptureInit(), clang::Sema::BuildCompoundLiteralExpr(), clang::Sema::buildCoroutinePromise(), clang::Sema::BuildCXXNew(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildDelegatingInitializer(), clang::Sema::BuildExceptionDeclaration(), BuildImplicitBaseInitializer(), clang::Sema::buildLambdaInitCaptureInitialization(), clang::Sema::BuildMemberInitializer(), clang::Sema::CheckTemplateArgument(), ConvertForConditional(), clang::Sema::ConvertParamDefaultArgument(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::FindCompositePointerType(), clang::Sema::tryConvertExprToType(), TryOrBuildParenListInitialization(), and TryStaticImplicitCast().

RewrapReferenceInitList()

SetFailed()

void clang::InitializationSequence::SetFailed ( FailureKind Failure) inline

Note that this initialization sequence failed.

Definition at line 1397 of file Initialization.h.

References FailedSequence, FK_Incomplete, and clang::QualType::isNull().

Referenced by InitializeFrom(), ResolveOverloadedFunctionForReferenceBinding(), setIncompleteTypeFailure(), TryConstructorInitialization(), TryDefaultInitialization(), TryListInitialization(), TryOrBuildParenListInitialization(), TryReferenceInitializationCore(), TryReferenceListInitialization(), and TryValueInitialization().

setIncompleteTypeFailure()

void clang::InitializationSequence::setIncompleteTypeFailure ( QualType IncompleteType) inline

SetOverloadFailure()

setSequenceKind()

void clang::InitializationSequence::setSequenceKind ( enum SequenceKind SK) inline

SetZeroInitializationFixit()

void clang::InitializationSequence::SetZeroInitializationFixit ( const std::string & Fixit, SourceLocation L ) inline

step_begin()

step_iterator clang::InitializationSequence::step_begin ( ) const inline

step_end()

step_iterator clang::InitializationSequence::step_end ( ) const inline

steps()

step_range clang::InitializationSequence::steps ( ) const inline

The documentation for this class was generated from the following files: