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

StandardConversionSequence - represents a standard conversion sequence (C++ 13.3.3.1.1). More...

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

Public Member Functions
void setFromType (QualType T)
void setToType (unsigned Idx, QualType T)
void setAllToTypes (QualType T)
QualType getFromType () const
QualType getToType (unsigned Idx) const
void setAsIdentityConversion ()
StandardConversionSequence - Set the standard conversion sequence to the identity conversion.
bool isIdentityConversion () const
ImplicitConversionRank getRank () const
getRank - Retrieve the rank of this standard conversion sequence (C++ 13.3.3.1.1p3).
NarrowingKind getNarrowingKind (ASTContext &Context, const Expr *Converted, APValue &ConstantValue, QualType &ConstantType, bool IgnoreFloatToIntegralConversion=false) const
Check if this standard conversion sequence represents a narrowing conversion, according to C++11 [dcl.init.list]p7.
bool isPointerConversionToBool () const
isPointerConversionToBool - Determines whether this conversion is a conversion of a pointer or pointer-to-member to bool.
bool isPointerConversionToVoidPointer (ASTContext &Context) const
isPointerConversionToVoidPointer - Determines whether this conversion is a conversion of a pointer to a void pointer.
void dump () const
dump - Print this standard conversion sequence to standard error.
Public Attributes
ImplicitConversionKind First: 8
First – The first conversion can be an lvalue-to-rvalue conversion, array-to-pointer conversion, or function-to-pointer conversion.
ImplicitConversionKind Second: 8
Second - The second conversion can be an integral promotion, floating point promotion, integral conversion, floating point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, or boolean conversion.
ImplicitConversionKind Dimension: 8
Dimension - Between the second and third conversion a vector or matrix dimension conversion may occur.
ImplicitConversionKind Third: 8
Third - The third conversion can be a qualification conversion or a function conversion.
unsigned DeprecatedStringLiteralToCharPtr: 1
Whether this is the deprecated conversion of a string literal to a pointer to non-const character data (C++ 4.2p2).
unsigned QualificationIncludesObjCLifetime: 1
Whether the qualification conversion involves a change in the Objective-C lifetime (for automatic reference counting).
unsigned IncompatibleObjC: 1
IncompatibleObjC - Whether this is an Objective-C conversion that we should warn about (if we actually use it).
unsigned ReferenceBinding: 1
ReferenceBinding - True when this is a reference binding (C++ [over.ics.ref]).
unsigned DirectBinding: 1
DirectBinding - True when this is a reference binding that is a direct binding (C++ [dcl.init.ref]).
unsigned IsLvalueReference: 1
Whether this is an lvalue reference binding (otherwise, it's an rvalue reference binding).
unsigned BindsToFunctionLvalue: 1
Whether we're binding to a function lvalue.
unsigned BindsToRvalue: 1
Whether we're binding to an rvalue.
unsigned BindsImplicitObjectArgumentWithoutRefQualifier: 1
Whether this binds an implicit object argument to a non-static member function without a ref-qualifier.
unsigned ObjCLifetimeConversionBinding: 1
Whether this binds a reference to an object with a different Objective-C lifetime qualifier.
void * FromTypePtr
FromType - The type that this conversion is converting from.
void * ToTypePtrs [3]
ToType - The types that this conversion is converting to in each step.
CXXConstructorDecl * CopyConstructor
CopyConstructor - The copy constructor that is used to perform this conversion, when the conversion is actually just the initialization of an object via copy constructor.
DeclAccessPair FoundCopyConstructor

StandardConversionSequence - represents a standard conversion sequence (C++ 13.3.3.1.1).

A standard conversion sequence contains between zero and three conversions. If a particular conversion is not needed, it will be set to the identity conversion (ICK_Identity).

Definition at line 292 of file Overload.h.

dump()

LLVM_DUMP_METHOD void StandardConversionSequence::dump ( ) const

getFromType()

QualType clang::StandardConversionSequence::getFromType ( ) const inline

getNarrowingKind()

Check if this standard conversion sequence represents a narrowing conversion, according to C++11 [dcl.init.list]p7.

Parameters

Ctx The AST context.
Converted The result of applying this standard conversion sequence.
ConstantValue If this is an NK_Constant_Narrowing conversion, the value of the expression prior to the narrowing conversion.
ConstantType If this is an NK_Constant_Narrowing conversion, the type of the expression prior to the narrowing conversion.
IgnoreFloatToIntegralConversion If true type-narrowing conversions from floating point types to integral types should be ignored.

Definition at line 356 of file SemaOverload.cpp.

References clang::Type::getAs(), clang::APValue::getFloat(), clang::ASTContext::getFloatingTypeOrder(), clang::ASTContext::getFloatTypeSemantics(), clang::ASTContext::getIntWidth(), clang::ASTContext::getLangOpts(), getToType(), clang::ICK_Boolean_Conversion, clang::ICK_Complex_Real, clang::ICK_Floating_Conversion, clang::ICK_Floating_Integral, clang::ICK_Floating_Promotion, clang::ICK_Integral_Conversion, IgnoreNarrowingConversion(), clang::Initializer, clang::Type::isComplexType(), clang::APValue::isFloat(), clang::Type::isIntegralOrUnscopedEnumerationType(), clang::Type::isIntegralType(), clang::Type::isRealFloatingType(), clang::Type::isSignedIntegerOrEnumerationType(), clang::NK_Constant_Narrowing, clang::NK_Dependent_Narrowing, clang::NK_Not_Narrowing, clang::NK_Type_Narrowing, clang::NK_Variable_Narrowing, clang::Result, Second, and clang::Expr::EvalResult::Val.

Referenced by BuildConvertedConstantExpression(), CheckC23ConstexprInitConversion(), checkThreeWayNarrowingConversion(), and DiagnoseNarrowingInInitList().

getRank()

getToType()

QualType clang::StandardConversionSequence::getToType ( unsigned Idx) const inline

Definition at line 398 of file Overload.h.

References clang::QualType::getFromOpaquePtr(), and ToTypePtrs.

Referenced by CheckConvertedConstantConversions(), CompareDerivedToBaseConversions(), CompareQualificationConversions(), CompareStandardConversionSequences(), compareStandardConversionSubsets(), getFixedEnumPromtion(), getNarrowingKind(), clang::InitializationSequence::InitializeFrom(), isPointerConversionToBool(), isPointerConversionToVoidPointer(), tryAtomicConversion(), TryListInitialization(), and TryRefInitWithConversionFunction().

isIdentityConversion()

bool clang::StandardConversionSequence::isIdentityConversion ( ) const inline

isPointerConversionToBool()

bool StandardConversionSequence::isPointerConversionToBool ( ) const

isPointerConversionToVoidPointer()

bool StandardConversionSequence::isPointerConversionToVoidPointer ( ASTContext & Context ) const

isPointerConversionToVoidPointer - Determines whether this conversion is a conversion of a pointer to a void pointer.

This is used as part of the ranking of standard conversion sequences (C++ 13.3.3.2p4).

Definition at line 293 of file SemaOverload.cpp.

References First, clang::ASTContext::getArrayDecayedType(), clang::Type::getAs(), getFromType(), clang::Type::getPointeeType(), getToType(), clang::ICK_Array_To_Pointer, clang::ICK_Pointer_Conversion, clang::Type::isAnyPointerType(), clang::Type::isVoidType(), and Second.

Referenced by CompareStandardConversionSequences().

setAllToTypes()

void clang::StandardConversionSequence::setAllToTypes ( QualType T) inline

setAsIdentityConversion()

void StandardConversionSequence::setAsIdentityConversion ( )

StandardConversionSequence - Set the standard conversion sequence to the identity conversion.

Definition at line 235 of file SemaOverload.cpp.

References BindsImplicitObjectArgumentWithoutRefQualifier, BindsToFunctionLvalue, BindsToRvalue, CopyConstructor, DeprecatedStringLiteralToCharPtr, Dimension, DirectBinding, First, clang::ICK_Identity, IsLvalueReference, ObjCLifetimeConversionBinding, QualificationIncludesObjCLifetime, ReferenceBinding, Second, and Third.

Referenced by clang::Sema::AddConversionCandidate(), checkThreeWayNarrowingConversion(), clang::ImplicitConversionSequence::getNullptrToBool(), clang::ImplicitConversionSequence::ImplicitConversionSequence(), clang::InitializationSequence::InitializeFrom(), IsInitializerListConstructorConversion(), IsStandardConversion(), IsUserDefinedConversion(), clang::ImplicitConversionSequence::setAsIdentityConversion(), TryImplicitConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryObjectArgumentInitialization(), and TryUserDefinedConversion().

setFromType()

void clang::StandardConversionSequence::setFromType ( QualType T) inline

Definition at line 381 of file Overload.h.

References FromTypePtr, and clang::T.

Referenced by clang::Sema::AddConversionCandidate(), clang::ImplicitConversionSequence::getNullptrToBool(), IsInitializerListConstructorConversion(), IsStandardConversion(), IsUserDefinedConversion(), clang::ImplicitConversionSequence::setAsIdentityConversion(), TryImplicitConversion(), TryListInitialization(), TryObjectArgumentInitialization(), TryReferenceInit(), and TryUserDefinedConversion().

setToType()

void clang::StandardConversionSequence::setToType ( unsigned Idx, QualType T ) inline

BindsImplicitObjectArgumentWithoutRefQualifier

unsigned clang::StandardConversionSequence::BindsImplicitObjectArgumentWithoutRefQualifier

BindsToFunctionLvalue

unsigned clang::StandardConversionSequence::BindsToFunctionLvalue

BindsToRvalue

unsigned clang::StandardConversionSequence::BindsToRvalue

CopyConstructor

DeprecatedStringLiteralToCharPtr

unsigned clang::StandardConversionSequence::DeprecatedStringLiteralToCharPtr

Dimension

DirectBinding

unsigned clang::StandardConversionSequence::DirectBinding

First

First – The first conversion can be an lvalue-to-rvalue conversion, array-to-pointer conversion, or function-to-pointer conversion.

Definition at line 297 of file Overload.h.

Referenced by clang::Sema::AddConversionCandidate(), CompareDerivedToBaseConversions(), CompareQualificationConversions(), CompareStandardConversionSequences(), dump(), clang::UserDefinedConversionSequence::dump(), clang::ImplicitConversionSequence::getNullptrToBool(), getRank(), clang::InitializationSequence::InitializeFrom(), isPointerConversionToBool(), isPointerConversionToVoidPointer(), IsStandardConversion(), clang::Sema::PerformImplicitConversion(), setAsIdentityConversion(), TryListInitialization(), tryObjCWritebackConversion(), and TryReferenceInit().

FoundCopyConstructor

DeclAccessPair clang::StandardConversionSequence::FoundCopyConstructor

FromTypePtr

void* clang::StandardConversionSequence::FromTypePtr

IncompatibleObjC

unsigned clang::StandardConversionSequence::IncompatibleObjC

IsLvalueReference

unsigned clang::StandardConversionSequence::IsLvalueReference

ObjCLifetimeConversionBinding

unsigned clang::StandardConversionSequence::ObjCLifetimeConversionBinding

QualificationIncludesObjCLifetime

unsigned clang::StandardConversionSequence::QualificationIncludesObjCLifetime

ReferenceBinding

unsigned clang::StandardConversionSequence::ReferenceBinding

Second

Second - The second conversion can be an integral promotion, floating point promotion, integral conversion, floating point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, or boolean conversion.

Definition at line 303 of file Overload.h.

Referenced by clang::Sema::AddConversionCandidate(), CheckConvertedConstantConversions(), checkThreeWayNarrowingConversion(), CompareDerivedToBaseConversions(), CompareQualificationConversions(), CompareStandardConversionSequences(), compareStandardConversionSubsets(), dropPointerConversion(), dump(), clang::UserDefinedConversionSequence::dump(), getFixedEnumPromtion(), getNarrowingKind(), clang::ImplicitConversionSequence::getNullptrToBool(), getRank(), clang::InitializationSequence::InitializeFrom(), isIdentityConversion(), isPointerConversionToVoidPointer(), IsStandardConversion(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::Sema::SelectBestMethod(), setAsIdentityConversion(), tryAtomicConversion(), TryImplicitConversion(), TryListInitialization(), TryObjectArgumentInitialization(), TryReferenceInit(), and TryUserDefinedConversion().

Third

Third - The third conversion can be a qualification conversion or a function conversion.

Definition at line 312 of file Overload.h.

Referenced by CompareQualificationConversions(), compareStandardConversionSubsets(), dropPointerConversion(), dump(), clang::UserDefinedConversionSequence::dump(), getRank(), isIdentityConversion(), IsStandardConversion(), clang::Sema::PerformImplicitConversion(), setAsIdentityConversion(), tryAtomicConversion(), and TryReferenceInit().

ToTypePtrs

void* clang::StandardConversionSequence::ToTypePtrs[3]


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