clang API Documentation

Classes | Public Types | Public Member Functions
clang::InitializationSequence Class Reference

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

#include <Initialization.h>

List of all members.

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_CastDerivedToBaseRValue, SK_CastDerivedToBaseXValue, SK_CastDerivedToBaseLValue,
  SK_BindReference, SK_BindReferenceToTemporary, SK_ExtraneousCopyToTemporary, SK_UserConversion,
  SK_QualificationConversionRValue, SK_QualificationConversionXValue, SK_QualificationConversionLValue, SK_ConversionSequence,
  SK_ListInitialization, SK_ListConstructorCall, SK_UnwrapInitList, SK_RewrapInitList,
  SK_ConstructorInitialization, SK_ZeroInitialization, SK_CAssignment, SK_StringInit,
  SK_ObjCObjectConversion, SK_ArrayInit, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore,
  SK_ProduceObjCObject, SK_StdInitializerList
}
 Describes the kind of a particular step in an initialization sequence. More...
enum  FailureKind {
  FK_TooManyInitsForReference, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayTypeMismatch,
  FK_NonConstantArrayInit, FK_AddressOfOverloadFailed, FK_ReferenceInitOverloadFailed, FK_NonConstLValueReferenceBindingToTemporary,
  FK_NonConstLValueReferenceBindingToUnrelated, FK_RValueReferenceBindingToLValue, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed,
  FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_TooManyInitsForScalar, FK_ReferenceBindingToInitList,
  FK_InitListBadDestinationType, FK_UserConversionOverloadFailed, FK_ConstructorOverloadFailed, FK_ListConstructorOverloadFailed,
  FK_DefaultInitOfConst, FK_Incomplete, FK_VariableLengthArrayHasInitializer, FK_ListInitializationFailed,
  FK_PlaceholderType, FK_InitListElementCopyFailure
}
 Describes why initialization failed. More...
typedef SmallVector< Step, 4 >
::const_iterator 
step_iterator

Public Member Functions

 InitializationSequence (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr **Args, unsigned NumArgs)
 Try to perform initialization of the given entity, creating a record of the steps required to perform the initialization.
 ~InitializationSequence ()
ExprResult Perform (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType=0)
 Perform the actual initialization of the given entity based on the computed initialization sequence.
bool Diagnose (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr **Args, unsigned NumArgs)
 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
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.
bool endsWithNarrowing (ASTContext &Ctx, const Expr *Initializer, bool *isInitializerConstant, APValue *ConstantValue) const
 Returns whether the last step in this initialization sequence is a narrowing conversion, defined by C++0x [dcl.init.list]p7.
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 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 AddConversionSequenceStep (const ImplicitConversionSequence &ICS, QualType T)
 Add a new step that applies an implicit conversion sequence.
void AddListInitializationStep (QualType T)
 Add a list-initialization step.
void AddConstructorInitializationStep (CXXConstructorDecl *Constructor, AccessSpecifier Access, 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 AddArrayInitStep (QualType T)
 Add an 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 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.
OverloadCandidateSetgetFailedCandidateSet ()
 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.
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.

Detailed Description

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

Definition at line 481 of file Initialization.h.


Member Typedef Documentation

typedef SmallVector<Step, 4>::const_iterator clang::InitializationSequence::step_iterator

Definition at line 754 of file Initialization.h.


Member Enumeration Documentation

Describes why initialization failed.

Enumerator:
FK_TooManyInitsForReference 

Too many initializers provided for a reference.

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_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_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_ReferenceInitFailed 

Reference binding failed.

FK_ConversionFailed 

Implicit conversion failed.

FK_ConversionFromPropertyFailed 

Implicit conversion failed.

FK_TooManyInitsForScalar 

Too many initializers for scalar.

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_InitListElementCopyFailure 

Failed to initialize a std::initializer_list because copy construction of some element failed.

Definition at line 608 of file Initialization.h.

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 484 of file Initialization.h.

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_CastDerivedToBaseRValue 

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_UserConversion 

Perform a user-defined conversion, either via a conversion function or via a constructor.

SK_QualificationConversionRValue 

Perform a qualification conversion, producing an rvalue.

SK_QualificationConversionXValue 

Perform a qualification conversion, producing an xvalue.

SK_QualificationConversionLValue 

Perform a qualification conversion, producing an lvalue.

SK_ConversionSequence 

Perform an implicit conversion sequence.

SK_ListInitialization 

Perform list-initialization without a constructor.

SK_ListConstructorCall 

Perform list-initialization with 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_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_ArrayInit 

Array initialization (from an array rvalue). 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.

Definition at line 500 of file Initialization.h.


Constructor & Destructor Documentation

InitializationSequence::InitializationSequence ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr **  Args,
unsigned  NumArgs 
)

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:
Sthe semantic analysis object.
Entitythe entity being initialized.
Kindthe kind of initialization being performed.
Argsthe argument(s) provided for initialization.
NumArgsthe number of arguments provided for initialization.

Definition at line 3925 of file SemaInit.cpp.

References AddArrayInitStep(), AddCAssignmentStep(), AddConversionSequenceStep(), AddPassByIndirectCopyRestoreStep(), clang::Sema::CheckPlaceholderExpr(), clang::Sema::Context, DependentSequence, clang::InitializedEntity::EK_Parameter, clang::StandardConversionSequence::First, FK_AddressOfOverloadFailed, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayTypeMismatch, FK_ConversionFailed, FK_NonConstantArrayInit, FK_PlaceholderType, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_VariableLengthArrayHasInitializer, clang::ASTContext::getAsArrayType(), clang::InitializedEntity::getDecl(), clang::InitializedEntity::getKind(), clang::InitializationKind::getKind(), clang::Sema::getLangOptions(), clang::StandardConversionSequence::getToType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::Expr::hasAnyTypeDependentArguments(), hasCompatibleArrayTypes(), clang::ASTContext::hasSameUnqualifiedType(), clang::Expr::HasSideEffects(), clang::ICK_Array_To_Pointer, clang::ICK_Lvalue_To_Rvalue, clang::ICK_Writeback_Conversion, clang::Expr::IgnoreParens(), clang::InitializationKind::IK_Copy, clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_Value, clang::ImplicitConversionSequence::isBad(), clang::InitializationKind::isCStyleOrFunctionalCast(), clang::Sema::IsDerivedFrom(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::QualType::isNull(), clang::ImplicitConversionSequence::isStandard(), IsStringInit(), MaybeProduceObjCObject(), NormalSequence, NumArgs, clang::Decl::OBJC_TQ_Out, clang::ASTContext::OverloadTy, Param, clang::Sema::ResolveAddressOfOverloadedFunction(), clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), SetFailed(), setSequenceKind(), clang::ImplicitConversionSequence::setStandard(), clang::ImplicitConversionSequence::Standard, clang::ActionResult< PtrTy, CompressInvalid >::take(), TryConstructorInitialization(), TryDefaultInitialization(), clang::Sema::TryImplicitConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryReferenceInitialization(), TryStringLiteralInitialization(), clang::TryUserDefinedConversion(), and TryValueInitialization().

InitializationSequence::~InitializationSequence ( )

Definition at line 4153 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Destroy().


Member Function Documentation

void InitializationSequence::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.

Parameters:
Functionthe function to which the overloaded function reference resolves.

Definition at line 2474 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Function, clang::ValueDecl::getType(), clang::InitializationSequence::Step::Kind, S, SK_ResolveAddressOfOverloadedFunction, and clang::InitializationSequence::Step::Type.

Referenced by ResolveOverloadedFunctionForReferenceBinding().

void InitializationSequence::AddArrayInitStep ( QualType  T)

Add an array initialization step.

Definition at line 2608 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_ArrayInit, and clang::InitializationSequence::Step::Type.

Referenced by InitializationSequence().

void InitializationSequence::AddCAssignmentStep ( QualType  T)

Add a C assignment step.

Definition at line 2587 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_CAssignment, and clang::InitializationSequence::Step::Type.

Referenced by InitializationSequence().

void InitializationSequence::AddConstructorInitializationStep ( CXXConstructorDecl Constructor,
AccessSpecifier  Access,
QualType  T,
bool  HadMultipleCandidates,
bool  FromInitList,
bool  AsInitList 
)

Add a constructor-initialization step.

  • FromInitList The constructor call is syntactically an initializer list.
  • AsInitList The constructor is called as an init list constructor.

Definition at line 2565 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Function, clang::InitializationSequence::Step::Kind, clang::DeclAccessPair::make(), S, SK_ConstructorInitialization, SK_ListConstructorCall, and clang::InitializationSequence::Step::Type.

Referenced by TryConstructorInitialization(), and TryListConstructionSpecialCases().

void InitializationSequence::AddConversionSequenceStep ( const ImplicitConversionSequence ICS,
QualType  T 
)
void InitializationSequence::AddDerivedToBaseCastStep ( QualType  BaseType,
ExprValueKind  Category 
)

Add a new step in the initialization that performs a derived-to- base cast.

Parameters:
BaseTypethe base type to which we will be casting.
IsLValuetrue if the result of this cast will be treated as an lvalue.

Definition at line 2486 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_CastDerivedToBaseLValue, SK_CastDerivedToBaseRValue, SK_CastDerivedToBaseXValue, clang::InitializationSequence::Step::Type, clang::VK_LValue, clang::VK_RValue, and clang::VK_XValue.

Referenced by TryReferenceInitializationCore(), and TryRefInitWithConversionFunction().

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:
TThe type of the temporary being created.

Definition at line 2506 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_ExtraneousCopyToTemporary, and clang::InitializationSequence::Step::Type.

Referenced by TryReferenceInitializationCore().

void InitializationSequence::AddListInitializationStep ( QualType  T)

Add a list-initialization step.

Definition at line 2556 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_ListInitialization, and clang::InitializationSequence::Step::Type.

Referenced by TryListInitialization().

void InitializationSequence::AddObjCObjectConversionStep ( QualType  T)

Add an Objective-C object conversion step, which is always a no-op.

Definition at line 2601 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_ObjCObjectConversion, and clang::InitializationSequence::Step::Type.

Referenced by TryReferenceInitializationCore(), and TryRefInitWithConversionFunction().

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

Add a step to "produce" an Objective-C object (by retaining it).

Definition at line 2624 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_ProduceObjCObject, and clang::InitializationSequence::Step::Type.

Referenced by MaybeProduceObjCObject().

void InitializationSequence::AddQualificationConversionStep ( QualType  Ty,
ExprValueKind  Category 
)
void InitializationSequence::AddReferenceBindingStep ( QualType  T,
bool  BindingTemporary 
)

Add a new step binding a reference to an object.

Parameters:
BindingTemporaryTrue if we are binding a reference to a temporary object (thereby extending its lifetime); false if we are binding to an lvalue or an lvalue treated as an rvalue.
UnnecessaryCopyTrue if we should check for a copy constructor for a completely unnecessary but

Definition at line 2498 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_BindReference, SK_BindReferenceToTemporary, and clang::InitializationSequence::Step::Type.

Referenced by TryReferenceInitializationCore(), TryReferenceListInitialization(), and TryRefInitWithConversionFunction().

void InitializationSequence::AddStdInitializerListConstructionStep ( QualType  T)

Add a step to construct a std::initializer_list object from an initializer list.

Definition at line 2631 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Kind, S, SK_StdInitializerList, and clang::InitializationSequence::Step::Type.

Referenced by TryListConstructionSpecialCases().

void InitializationSequence::AddStringInitStep ( QualType  T)
void InitializationSequence::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.

Definition at line 2514 of file SemaInit.cpp.

References clang::InitializationSequence::Step::Function, clang::InitializationSequence::Step::Kind, S, SK_UserConversion, and clang::InitializationSequence::Step::Type.

Referenced by TryRefInitWithConversionFunction(), and TryUserDefinedConversion().

void InitializationSequence::AddZeroInitializationStep ( QualType  T)
bool InitializationSequence::Diagnose ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr **  Args,
unsigned  NumArgs 
)

Diagnose an potentially-invalid initialization sequence.

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

Definition at line 5231 of file SemaInit.cpp.

References clang::OverloadCandidateSet::BestViableFunction(), clang::Sema::Context, clang::Sema::CurContext, clang::Sema::Diag(), clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Member, clang::Sema::EmitRelatedResultTypeNote(), Failed(), FK_AddressOfOverloadFailed, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_DefaultInitOfConst, FK_Incomplete, FK_InitListBadDestinationType, FK_InitListElementCopyFailure, FK_ListConstructorOverloadFailed, FK_ListInitializationFailed, FK_NonConstantArrayInit, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToUnrelated, FK_PlaceholderType, FK_ReferenceBindingToInitList, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed, FK_ReferenceInitOverloadFailed, FK_RValueReferenceBindingToLValue, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UserConversionOverloadFailed, FK_VariableLengthArrayHasInitializer, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::InitializedEntity::getBaseSpecifier(), clang::SourceRange::getBegin(), clang::ASTContext::getConstantArrayType(), clang::InitializedEntity::getDecl(), clang::Expr::getExprLoc(), clang::InitListExpr::getInit(), clang::InitListExpr::getInits(), clang::InitializedEntity::getKind(), clang::InitializationKind::getKind(), clang::Sema::getLangOptions(), clang::Decl::getLocation(), clang::InitializationKind::getLocation(), clang::Stmt::getLocEnd(), clang::Preprocessor::getLocForEndOfToken(), clang::InitializedEntity::getName(), clang::QualType::getNonReferenceType(), clang::InitListExpr::getNumInits(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getSizeType(), clang::Stmt::getSourceRange(), clang::ASTContext::getTagDeclType(), clang::Expr::getType(), clang::CXXBaseSpecifier::getType(), clang::InitializedEntity::getType(), clang::ASTContext::getTypeDeclType(), clang::ASTContext::getTypeSize(), clang::Sema::HandleFunctionTypeMismatch(), clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Direct, clang::InitializedEntity::InitializeElement(), clang::InitializedEntity::InitializeTemporary(), clang::InitializationKind::isCStyleOrFunctionalCast(), clang::Decl::isImplicit(), isInvalid(), clang::Expr::isLValue(), clang::Sema::isStdInitializerList(), clang::QualType::isVolatileQualified(), clang::ArrayType::Normal, clang::OverloadCandidateSet::NoteCandidates(), clang::OCD_AllCandidates, clang::OCD_ViableCandidates, clang::OR_Ambiguous, clang::OR_Deleted, clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::Owned(), clang::Sema::PDiag(), clang::Sema::PerformCopyInitialization(), clang::Sema::PP, clang::Sema::RequireCompleteType(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::SourceRange::setBegin(), and clang::InitializedEntity::setElementIndex().

Referenced by Perform(), clang::Sema::TryCaptureVar(), and TryClassUnification().

void InitializationSequence::dump ( raw_ostream &  OS) const

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

Definition at line 5590 of file SemaInit.cpp.

References DependentSequence, FailedSequence, FK_AddressOfOverloadFailed, FK_ArrayNeedsInitList, FK_ArrayNeedsInitListOrStringLiteral, FK_ArrayTypeMismatch, FK_ConstructorOverloadFailed, FK_ConversionFailed, FK_ConversionFromPropertyFailed, FK_DefaultInitOfConst, FK_Incomplete, FK_InitListBadDestinationType, FK_InitListElementCopyFailure, FK_ListConstructorOverloadFailed, FK_ListInitializationFailed, FK_NonConstantArrayInit, FK_NonConstLValueReferenceBindingToTemporary, FK_NonConstLValueReferenceBindingToUnrelated, FK_PlaceholderType, FK_ReferenceBindingToInitList, FK_ReferenceInitDropsQualifiers, FK_ReferenceInitFailed, FK_ReferenceInitOverloadFailed, FK_RValueReferenceBindingToLValue, FK_TooManyInitsForReference, FK_TooManyInitsForScalar, FK_UserConversionOverloadFailed, FK_VariableLengthArrayHasInitializer, NormalSequence, S, SK_ArrayInit, SK_BindReference, SK_BindReferenceToTemporary, SK_CAssignment, SK_CastDerivedToBaseLValue, SK_CastDerivedToBaseRValue, SK_CastDerivedToBaseXValue, SK_ConstructorInitialization, SK_ConversionSequence, SK_ExtraneousCopyToTemporary, SK_ListConstructorCall, SK_ListInitialization, SK_ObjCObjectConversion, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore, SK_ProduceObjCObject, SK_QualificationConversionLValue, SK_QualificationConversionRValue, SK_QualificationConversionXValue, SK_ResolveAddressOfOverloadedFunction, SK_RewrapInitList, SK_StdInitializerList, SK_StringInit, SK_UnwrapInitList, SK_UserConversion, SK_ZeroInitialization, step_begin(), and step_end().

void InitializationSequence::dump ( ) const

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

Definition at line 5827 of file SemaInit.cpp.

bool clang::InitializationSequence::endsWithNarrowing ( ASTContext Ctx,
const Expr Initializer,
bool *  isInitializerConstant,
APValue ConstantValue 
) const

Returns whether the last step in this initialization sequence is a narrowing conversion, defined by C++0x [dcl.init.list]p7.

If this function returns true, *isInitializerConstant will be set to describe whether *Initializer was a constant expression. If isInitializerConstant is set to true, *ConstantValue will be set to the evaluated value of *Initializer.

bool clang::InitializationSequence::Failed ( ) const [inline]
OverloadCandidateSet& clang::InitializationSequence::getFailedCandidateSet ( ) [inline]

Retrieve a reference to the candidate set when overload resolution fails.

Definition at line 898 of file Initialization.h.

Referenced by TryConstructorInitialization(), tryDiagnoseOverloadedCast(), TryListConstructionSpecialCases(), TryReferenceInitializationCore(), TryRefInitWithConversionFunction(), and TryUserDefinedConversion().

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

Get the overloading result, for when the initialization sequence failed due to a bad overload.

Definition at line 904 of file Initialization.h.

Referenced by tryDiagnoseOverloadedCast().

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

Determine why initialization failed.

Definition at line 909 of file Initialization.h.

References Failed().

Referenced by isAmbiguous(), and tryDiagnoseOverloadedCast().

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

Determine the kind of initialization sequence computed.

Definition at line 743 of file Initialization.h.

Referenced by Perform().

bool InitializationSequence::isAmbiguous ( ) const
bool InitializationSequence::isConstructorInitialization ( ) const

Determine whether this initialization is direct call to a constructor.

Definition at line 2468 of file SemaInit.cpp.

References SK_ConstructorInitialization.

Referenced by TryStaticImplicitCast().

bool InitializationSequence::isDirectReferenceBinding ( ) const

Determine whether this initialization is a direct reference binding (C++ [dcl.init.ref]).

Definition at line 2425 of file SemaInit.cpp.

References SK_BindReference.

Referenced by TryClassUnification().

clang::InitializationSequence::operator bool ( ) const [inline]

Determine whether the initialization sequence is valid.

Definition at line 749 of file Initialization.h.

References Failed().

ExprResult InitializationSequence::Perform ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
MultiExprArg  Args,
QualType ResultType = 0 
)

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

Parameters:
Sthe semantic analysis object.
Entitythe entity being initialized.
Kindthe kind of initialization being performed.
Argsthe argument(s) provided for initialization, ownership of which is transferred into the routine.
ResultTypeif 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 4658 of file SemaInit.cpp.

References Arg, clang::Sema::BasePathInvolvesVirtualBase(), clang::Sema::BuildCXXConstructExpr(), clang::Sema::BuildCXXMemberCallExpr(), clang::Sema::CCK_CStyleCast, clang::Sema::CCK_FunctionalCast, clang::Sema::CCK_ImplicitConversion, clang::Sema::CCK_OtherCast, clang::Sema::CheckAddressOfMemberAccess(), clang::Sema::CheckConstructorAccess(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckDestructorAccess(), clang::Sema::CheckExceptionSpecCompatibility(), checkIndirectCopyRestoreSource(), clang::Sema::CheckMemberOperatorAccess(), clang::Sema::CheckSingleAssignmentConstraints(), CheckStringInit(), clang::Sema::CheckTransparentUnionArgumentConstraints(), clang::CK_ARCProduceObject, clang::CXXConstructExpr::CK_Complete, clang::CK_ConstructorConversion, clang::CK_DerivedToBase, clang::CK_NoOp, clang::CK_ObjCObjectLValueCast, clang::CK_UserDefinedConversion, clang::Sema::Compatible, clang::Sema::CompleteConstructorCall(), clang::Sema::Context, CopyObject(), clang::ImplicitCastExpr::Create(), DependentSequence, clang::Sema::Diag(), Diagnose(), clang::Sema::DiagnoseAssignmentResult(), clang::Sema::DiagnoseUseOfDecl(), clang::InitializedEntity::EK_Member, clang::InitializedEntity::EK_Parameter, clang::ExprError(), clang::Sema::ExprNeedsCleanups, Failed(), clang::Sema::FixOverloadedFunctionReference(), clang::InitializationSequence::Step::Function, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ASTMultiPtr< PtrTy >::get(), clang::DeclAccessPair::getAccess(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getAsIncompleteArrayType(), getAssignmentAction(), clang::SourceRange::getBegin(), clang::Expr::getBitField(), clang::ASTContext::getConstantArrayType(), clang::InitializedEntity::getDecl(), clang::ASTContext::getDependentSizedArrayType(), clang::SourceRange::getEnd(), clang::Expr::getExprLoc(), clang::InitListExpr::getInit(), clang::InitListExpr::getInits(), clang::InitializedEntity::getKind(), clang::InitializationKind::getKind(), getKind(), clang::Sema::getLangOptions(), clang::InitListExpr::getLBraceLoc(), clang::InitializationKind::getLocation(), clang::Stmt::getLocStart(), clang::ASTContext::getLValueReferenceType(), clang::QualType::getNonLValueExprType(), clang::QualType::getNonReferenceType(), clang::InitListExpr::getNumInits(), clang::InitializationKind::getRange(), clang::InitListExpr::getRBraceLoc(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getSizeType(), clang::Stmt::getSourceRange(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::TypeSourceInfo::getType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::ASTContext::getTypeSize(), clang::InitializedEntity::getTypeSourceInfo(), clang::Expr::getValueKind(), clang::ASTContext::hasSameUnqualifiedType(), clang::InitializationSequence::Step::ICS, clang::InitializationKind::IK_Copy, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_Value, clang::Sema::ImpCastExprToType(), clang::InitializedEntity::InitializeElement(), clang::InitializedEntity::InitializeTemporary(), clang::InitializationKind::isCStyleCast(), clang::InitializationKind::isCStyleOrFunctionalCast(), clang::Sema::IsDerivedFrom(), clang::InitializationKind::isExplicitCast(), clang::InitializationKind::isFunctionalCast(), clang::InitializationKind::isImplicitValueInit(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), isReferenceBinding(), clang::ReferenceType::isSpelledAsLValue(), clang::Sema::isStdInitializerList(), clang::QualType::isVolatileQualified(), clang::InitializationSequence::Step::Kind, clang::Sema::LookupDestructor(), clang::Sema::MarkFunctionReferenced(), clang::Sema::MarkVTableUsed(), clang::Sema::MaybeBindToTemporary(), clang::move(), clang::move_arg(), clang::ArrayType::Normal, NumArgs, clang::Sema::Owned(), clang::Sema::PDiag(), PerformConstructorInitialization(), clang::Sema::PerformCopyInitialization(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformObjectArgumentInitialization(), clang::Expr::refersToVectorElement(), clang::ActionResult< PtrTy, CompressInvalid >::release(), clang::ASTMultiPtr< PtrTy >::release(), S, clang::InitializedEntity::setElementIndex(), clang::InitListExpr::setSyntacticForm(), clang::Expr::setType(), clang::Expr::setValueKind(), shouldBindAsTemporary(), shouldDestroyTemporary(), clang::ASTMultiPtr< PtrTy >::size(), SK_ArrayInit, SK_BindReference, SK_BindReferenceToTemporary, SK_CAssignment, SK_CastDerivedToBaseLValue, SK_CastDerivedToBaseRValue, SK_CastDerivedToBaseXValue, SK_ConstructorInitialization, SK_ConversionSequence, SK_ExtraneousCopyToTemporary, SK_ListConstructorCall, SK_ListInitialization, SK_ObjCObjectConversion, SK_PassByIndirectCopyRestore, SK_PassByIndirectRestore, SK_ProduceObjCObject, SK_QualificationConversionLValue, SK_QualificationConversionRValue, SK_QualificationConversionXValue, SK_ResolveAddressOfOverloadedFunction, SK_RewrapInitList, SK_StdInitializerList, SK_StringInit, SK_UnwrapInitList, SK_UserConversion, SK_ZeroInitialization, step_begin(), step_end(), clang::ActionResult< PtrTy, CompressInvalid >::take(), clang::ActionResult< PtrTy, CompressInvalid >::takeAs(), clang::InitializationSequence::Step::Type, clang::VK_LValue, clang::VK_RValue, clang::VK_XValue, and clang::InitializationSequence::Step::WrappingSyntacticList.

Referenced by clang::Sema::BuildCompoundLiteralExpr(), clang::Sema::BuildCXXNew(), clang::Sema::BuildCXXTypeConstructExpr(), clang::Sema::BuildExceptionDeclaration(), BuildImplicitMemberInitializer(), ConvertForConditional(), clang::Sema::FindCompositePointerType(), clang::MultiInitializer::PerformInit(), clang::Sema::TryCaptureVar(), and TryStaticImplicitCast().

void InitializationSequence::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.

Definition at line 2638 of file SemaInit.cpp.

References clang::InitListExpr::getInit(), clang::InitListExpr::getNumInits(), clang::Expr::getType(), S, SK_RewrapInitList, and SK_UnwrapInitList.

Referenced by TryReferenceListInitialization().

void clang::InitializationSequence::SetFailed ( FailureKind  Failure) [inline]
void InitializationSequence::SetOverloadFailure ( FailureKind  Failure,
OverloadingResult  Result 
)

Note that this initialization sequence failed due to failed overload resolution.

Definition at line 2653 of file SemaInit.cpp.

References FailedSequence, and setSequenceKind().

Referenced by TryConstructorInitialization(), TryListConstructionSpecialCases(), TryReferenceInitializationCore(), and TryUserDefinedConversion().

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

Set the kind of sequence computed.

Definition at line 746 of file Initialization.h.

Referenced by InitializationSequence(), and SetOverloadFailure().

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

Definition at line 755 of file Initialization.h.

Referenced by DiagnoseNarrowingInInitList(), dump(), and Perform().

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

Definition at line 756 of file Initialization.h.

Referenced by DiagnoseNarrowingInInitList(), dump(), and Perform().


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