clang  6.0.0svn
Public Member Functions | Public Attributes | List of all members
clang::StandardConversionSequence Class Reference

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

#include "clang/Sema/Overload.h"

Collaboration diagram for clang::StandardConversionSequence:
Collaboration graph
[legend]

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. More...
 
bool isIdentityConversion () const
 
ImplicitConversionRank getRank () const
 getRank - Retrieve the rank of this standard conversion sequence (C++ 13.3.3.1.1p3). More...
 
NarrowingKind getNarrowingKind (ASTContext &Context, const Expr *Converted, APValue &ConstantValue, QualType &ConstantType) const
 Check if this standard conversion sequence represents a narrowing conversion, according to C++11 [dcl.init.list]p7. More...
 
bool isPointerConversionToBool () const
 isPointerConversionToBool - Determines whether this conversion is a conversion of a pointer or pointer-to-member to bool. More...
 
bool isPointerConversionToVoidPointer (ASTContext &Context) const
 isPointerConversionToVoidPointer - Determines whether this conversion is a conversion of a pointer to a void pointer. More...
 
void dump () const
 dump - Print this standard conversion sequence to standard error. More...
 

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. More...
 
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. More...
 
ImplicitConversionKind Third: 8
 Third - The third conversion can be a qualification conversion or a function conversion. More...
 
unsigned DeprecatedStringLiteralToCharPtr: 1
 Whether this is the deprecated conversion of a string literal to a pointer to non-const character data (C++ 4.2p2). More...
 
unsigned QualificationIncludesObjCLifetime: 1
 Whether the qualification conversion involves a change in the Objective-C lifetime (for automatic reference counting). More...
 
unsigned IncompatibleObjC: 1
 IncompatibleObjC - Whether this is an Objective-C conversion that we should warn about (if we actually use it). More...
 
unsigned ReferenceBinding: 1
 ReferenceBinding - True when this is a reference binding (C++ [over.ics.ref]). More...
 
unsigned DirectBinding: 1
 DirectBinding - True when this is a reference binding that is a direct binding (C++ [dcl.init.ref]). More...
 
unsigned IsLvalueReference: 1
 Whether this is an lvalue reference binding (otherwise, it's an rvalue reference binding). More...
 
unsigned BindsToFunctionLvalue: 1
 Whether we're binding to a function lvalue. More...
 
unsigned BindsToRvalue: 1
 Whether we're binding to an rvalue. More...
 
unsigned BindsImplicitObjectArgumentWithoutRefQualifier: 1
 Whether this binds an implicit object argument to a non-static member function without a ref-qualifier. More...
 
unsigned ObjCLifetimeConversionBinding: 1
 Whether this binds a reference to an object with a different Objective-C lifetime qualifier. More...
 
void * FromTypePtr
 FromType - The type that this conversion is converting from. More...
 
void * ToTypePtrs [3]
 ToType - The types that this conversion is converting to in each step. More...
 
CXXConstructorDeclCopyConstructor
 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. More...
 
DeclAccessPair FoundCopyConstructor
 

Detailed Description

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). Note that the three conversions are specified as separate members (rather than in an array) so that we can keep the size of a standard conversion sequence to a single word.

Definition at line 141 of file Overload.h.

Member Function Documentation

◆ dump()

LLVM_DUMP_METHOD void StandardConversionSequence::dump ( ) const

dump - Print this standard conversion sequence to standard error.

Useful for debugging overloading issues.

Definition at line 464 of file SemaOverload.cpp.

References GetImplicitConversionName(), and clang::ICK_Identity.

◆ getFromType()

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

◆ getNarrowingKind()

NarrowingKind StandardConversionSequence::getNarrowingKind ( ASTContext Ctx,
const Expr Converted,
APValue ConstantValue,
QualType ConstantType 
) const

◆ getRank()

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 204 of file SemaOverload.cpp.

References clang::GetConversionRank(), and clang::ICR_Exact_Match.

Referenced by CompareStandardConversionSequences(), and isIdentityConversion().

◆ getToType()

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

◆ isIdentityConversion()

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

Definition at line 236 of file Overload.h.

References getNarrowingKind(), getRank(), clang::ICK_Identity, Second, and Third.

◆ isPointerConversionToBool()

bool StandardConversionSequence::isPointerConversionToBool ( ) const

isPointerConversionToBool - Determines whether this conversion is a conversion of a pointer or pointer-to-member to bool.

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

Definition at line 219 of file SemaOverload.cpp.

References clang::ICK_Array_To_Pointer, clang::ICK_Function_To_Pointer, isBooleanType(), and isPointerConversionToVoidPointer().

Referenced by CompareStandardConversionSequences().

◆ 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 241 of file SemaOverload.cpp.

Referenced by CompareStandardConversionSequences(), and isPointerConversionToBool().

◆ setAllToTypes()

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

◆ setAsIdentityConversion()

void StandardConversionSequence::setAsIdentityConversion ( )

◆ setFromType()

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

◆ setToType()

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

Member Data Documentation

◆ BindsImplicitObjectArgumentWithoutRefQualifier

unsigned clang::StandardConversionSequence::BindsImplicitObjectArgumentWithoutRefQualifier

Whether this binds an implicit object argument to a non-static member function without a ref-qualifier.

Definition at line 191 of file Overload.h.

Referenced by isBetterReferenceBindingKind(), TryListConversion(), and TryObjectArgumentInitialization().

◆ BindsToFunctionLvalue

unsigned clang::StandardConversionSequence::BindsToFunctionLvalue

Whether we're binding to a function lvalue.

Definition at line 184 of file Overload.h.

Referenced by isBetterReferenceBindingKind(), TryListConversion(), and TryObjectArgumentInitialization().

◆ BindsToRvalue

unsigned clang::StandardConversionSequence::BindsToRvalue

Whether we're binding to an rvalue.

Definition at line 187 of file Overload.h.

Referenced by isBetterReferenceBindingKind(), TryListConversion(), and TryObjectArgumentInitialization().

◆ CopyConstructor

CXXConstructorDecl* clang::StandardConversionSequence::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.

Such conversions are either identity conversions or derived-to-base conversions.

Definition at line 212 of file Overload.h.

Referenced by IsStandardConversion(), TryImplicitConversion(), and TryUserDefinedConversion().

◆ DeprecatedStringLiteralToCharPtr

unsigned clang::StandardConversionSequence::DeprecatedStringLiteralToCharPtr

Whether this is the deprecated conversion of a string literal to a pointer to non-const character data (C++ 4.2p2).

Definition at line 161 of file Overload.h.

Referenced by CompareQualificationConversions(), hasDeprecatedStringLiteralToCharPtrConversion(), and IsStandardConversion().

◆ DirectBinding

unsigned clang::StandardConversionSequence::DirectBinding

DirectBinding - True when this is a reference binding that is a direct binding (C++ [dcl.init.ref]).

Definition at line 177 of file Overload.h.

Referenced by CheckConvertedConstantExpression(), and TryObjectArgumentInitialization().

◆ First

ImplicitConversionKind clang::StandardConversionSequence::First

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

Definition at line 146 of file Overload.h.

Referenced by CompareDerivedToBaseConversions(), CompareQualificationConversions(), CompareStandardConversionSequences(), IsStandardConversion(), and tryObjCWritebackConversion().

◆ FoundCopyConstructor

DeclAccessPair clang::StandardConversionSequence::FoundCopyConstructor

Definition at line 213 of file Overload.h.

Referenced by TryUserDefinedConversion().

◆ FromTypePtr

void* clang::StandardConversionSequence::FromTypePtr

FromType - The type that this conversion is converting from.

This is an opaque pointer that can be translated into a QualType.

Definition at line 200 of file Overload.h.

◆ IncompatibleObjC

unsigned clang::StandardConversionSequence::IncompatibleObjC

IncompatibleObjC - Whether this is an Objective-C conversion that we should warn about (if we actually use it).

Definition at line 169 of file Overload.h.

Referenced by IsStandardConversion().

◆ IsLvalueReference

unsigned clang::StandardConversionSequence::IsLvalueReference

Whether this is an lvalue reference binding (otherwise, it's an rvalue reference binding).

Definition at line 181 of file Overload.h.

Referenced by isBetterReferenceBindingKind(), TryListConversion(), and TryObjectArgumentInitialization().

◆ ObjCLifetimeConversionBinding

unsigned clang::StandardConversionSequence::ObjCLifetimeConversionBinding

Whether this binds a reference to an object with a different Objective-C lifetime qualifier.

Definition at line 195 of file Overload.h.

Referenced by CompareStandardConversionSequences(), and TryListConversion().

◆ QualificationIncludesObjCLifetime

unsigned clang::StandardConversionSequence::QualificationIncludesObjCLifetime

Whether the qualification conversion involves a change in the Objective-C lifetime (for automatic reference counting).

Definition at line 165 of file Overload.h.

Referenced by CompareQualificationConversions(), IsStandardConversion(), and tryAtomicConversion().

◆ ReferenceBinding

unsigned clang::StandardConversionSequence::ReferenceBinding

ReferenceBinding - True when this is a reference binding (C++ [over.ics.ref]).

Definition at line 173 of file Overload.h.

Referenced by CheckConvertedConstantExpression(), CompareStandardConversionSequences(), TryListConversion(), and TryObjectArgumentInitialization().

◆ Second

ImplicitConversionKind clang::StandardConversionSequence::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 152 of file Overload.h.

Referenced by CheckConvertedConstantConversions(), CompareDerivedToBaseConversions(), CompareQualificationConversions(), CompareStandardConversionSequences(), dropPointerConversion(), isIdentityConversion(), IsStandardConversion(), tryAtomicConversion(), TryImplicitConversion(), TryObjectArgumentInitialization(), and TryUserDefinedConversion().

◆ Third

ImplicitConversionKind clang::StandardConversionSequence::Third

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

Definition at line 156 of file Overload.h.

Referenced by CompareQualificationConversions(), dropPointerConversion(), isIdentityConversion(), IsStandardConversion(), and tryAtomicConversion().

◆ ToTypePtrs

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

ToType - The types that this conversion is converting to in each step.

This is an opaque pointer that can be translated into a QualType.

Definition at line 205 of file Overload.h.

Referenced by dropPointerConversion().


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