clang 20.0.0git
|
StandardConversionSequence - represents a standard conversion sequence (C++ 13.3.3.1.1). More...
#include "clang/Sema/Overload.h"
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.
LLVM_DUMP_METHOD void StandardConversionSequence::dump | ( | ) | const |
dump - Print this standard conversion sequence to standard error.
Useful for debugging overloading issues.
Definition at line 607 of file SemaOverload.cpp.
References CopyConstructor, DirectBinding, First, GetImplicitConversionName(), clang::ICK_Identity, ReferenceBinding, Second, and Third.
Referenced by clang::UserDefinedConversionSequence::dump(), and clang::ImplicitConversionSequence::dump().
|
inline |
Definition at line 394 of file Overload.h.
References FromTypePtr, and clang::QualType::getFromOpaquePtr().
Referenced by CheckConvertedConstantConversions(), CompareDerivedToBaseConversions(), CompareStandardConversionSequences(), getFixedEnumPromtion(), isPointerConversionToBool(), and isPointerConversionToVoidPointer().
NarrowingKind StandardConversionSequence::getNarrowingKind | ( | ASTContext & | Ctx, |
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.
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().
ImplicitConversionRank StandardConversionSequence::getRank | ( | ) | const |
getRank - Retrieve the rank of this standard conversion sequence (C++ 13.3.3.1.1p3).
The rank is the largest rank of each of the implicit conversions.
Definition at line 255 of file SemaOverload.cpp.
References Dimension, First, clang::GetConversionRank(), clang::GetDimensionConversionRank(), clang::ICR_Exact_Match,