clang API Documentation

Enumerations | Functions
SemaOverload.cpp File Reference
#include "clang/Sema/Overload.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/TypeOrdering.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateDeduction.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include <algorithm>
#include <cstdlib>
Include dependency graph for SemaOverload.cpp:

Go to the source code of this file.

Enumerations

enum  {
  ft_default, ft_different_class, ft_parameter_arity, ft_parameter_mismatch,
  ft_return_type, ft_qualifer_mismatch
}
enum  OverloadCandidateKind

Functions

static ExprResult CreateFunctionRefExpr (Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl, bool HadMultipleCandidates, SourceLocation Loc=SourceLocation(), const DeclarationNameLoc &LocInfo=DeclarationNameLoc())
 A convenience routine for creating a decayed reference to a function.
static bool IsStandardConversion (Sema &S, Expr *From, QualType ToType, bool InOverloadResolution, StandardConversionSequence &SCS, bool CStyle, bool AllowObjCWritebackConversion)
static bool IsTransparentUnionStandardConversion (Sema &S, Expr *From, QualType &ToType, bool InOverloadResolution, StandardConversionSequence &SCS, bool CStyle)
static OverloadingResult IsUserDefinedConversion (Sema &S, Expr *From, QualType ToType, UserDefinedConversionSequence &User, OverloadCandidateSet &Conversions, bool AllowExplicit, bool AllowObjCConversionOnExplicit)
static
ImplicitConversionSequence::CompareKind 
CompareStandardConversionSequences (Sema &S, const StandardConversionSequence &SCS1, const StandardConversionSequence &SCS2)
static
ImplicitConversionSequence::CompareKind 
CompareQualificationConversions (Sema &S, const StandardConversionSequence &SCS1, const StandardConversionSequence &SCS2)
static
ImplicitConversionSequence::CompareKind 
CompareDerivedToBaseConversions (Sema &S, const StandardConversionSequence &SCS1, const StandardConversionSequence &SCS2)
static const char * GetImplicitConversionName (ImplicitConversionKind Kind)
static const ExprIgnoreNarrowingConversion (const Expr *Converted)
static bool checkPlaceholderForOverload (Sema &S, Expr *&E, UnbridgedCastsSet *unbridgedCasts=nullptr)
static bool checkArgPlaceholdersForOverload (Sema &S, MultiExprArg Args, UnbridgedCastsSet &unbridged)
static ImplicitConversionSequence TryUserDefinedConversion (Sema &S, Expr *From, QualType ToType, bool SuppressUserConversions, bool AllowExplicit, bool InOverloadResolution, bool CStyle, bool AllowObjCWritebackConversion, bool AllowObjCConversionOnExplicit)
 Tries a user-defined conversion from From to ToType.
static ImplicitConversionSequence TryImplicitConversion (Sema &S, Expr *From, QualType ToType, bool SuppressUserConversions, bool AllowExplicit, bool InOverloadResolution, bool CStyle, bool AllowObjCWritebackConversion, bool AllowObjCConversionOnExplicit)
static bool IsVectorConversion (Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK)
 Determine whether the conversion from FromType to ToType is a valid vector conversion.
static bool tryAtomicConversion (Sema &S, Expr *From, QualType ToType, bool InOverloadResolution, StandardConversionSequence &SCS, bool CStyle)
 
  • Determine whether this is a conversion from a scalar type to an atomic type.

static QualType BuildSimilarlyQualifiedPointerType (const Type *FromPtr, QualType ToPointee, QualType ToType, ASTContext &Context, bool StripObjCLifetime=false)
static bool isNullPointerConstantForConversion (Expr *Expr, bool InOverloadResolution, ASTContext &Context)
static QualType AdoptQualifiers (ASTContext &Context, QualType T, Qualifiers Qs)
 Adopt the given qualifiers for the given type.
static bool isNonTrivialObjCLifetimeConversion (Qualifiers FromQuals, Qualifiers ToQuals)
static bool isFirstArgumentCompatibleWithType (ASTContext &Context, CXXConstructorDecl *Constructor, QualType Type)
static OverloadingResult IsInitializerListConstructorConversion (Sema &S, Expr *From, QualType ToType, CXXRecordDecl *To, UserDefinedConversionSequence &User, OverloadCandidateSet &CandidateSet, bool AllowExplicit)
static
ImplicitConversionSequence::CompareKind 
compareConversionFunctions (Sema &S, FunctionDecl *Function1, FunctionDecl *Function2)
 Compare the user-defined conversion functions or constructors of two user-defined conversion sequences to determine whether any ordering is possible.
static bool hasDeprecatedStringLiteralToCharPtrConversion (const ImplicitConversionSequence &ICS)
static
ImplicitConversionSequence::CompareKind 
CompareImplicitConversionSequences (Sema &S, const ImplicitConversionSequence &ICS1, const ImplicitConversionSequence &ICS2)
static bool hasSimilarType (ASTContext &Context, QualType T1, QualType T2)
static
ImplicitConversionSequence::CompareKind 
compareStandardConversionSubsets (ASTContext &Context, const StandardConversionSequence &SCS1, const StandardConversionSequence &SCS2)
static bool isBetterReferenceBindingKind (const StandardConversionSequence &SCS1, const StandardConversionSequence &SCS2)
 Determine whether one of the given reference bindings is better than the other based on what kind of bindings they are.
static bool isTypeValid (QualType T)
 Determine whether the given type is valid, e.g., it is not an invalid C++ class.
static bool FindConversionForRefInit (Sema &S, ImplicitConversionSequence &ICS, QualType DeclType, SourceLocation DeclLoc, Expr *Init, QualType T2, bool AllowRvalues, bool AllowExplicit)
 Look for a user-defined conversion to an value reference-compatible with DeclType. Return true if something definite is found.
static ImplicitConversionSequence TryReferenceInit (Sema &S, Expr *Init, QualType DeclType, SourceLocation DeclLoc, bool SuppressUserConversions, bool AllowExplicit)
 Compute an implicit conversion sequence for reference initialization.
static ImplicitConversionSequence TryCopyInitialization (Sema &S, Expr *From, QualType ToType, bool SuppressUserConversions, bool InOverloadResolution, bool AllowObjCWritebackConversion, bool AllowExplicit=false)
static ImplicitConversionSequence TryListConversion (Sema &S, InitListExpr *From, QualType ToType, bool SuppressUserConversions, bool InOverloadResolution, bool AllowObjCWritebackConversion)
static bool TryCopyInitialization (const CanQualType FromQTy, const CanQualType ToQTy, Sema &S, SourceLocation Loc, ExprValueKind FromVK)
static ImplicitConversionSequence TryObjectArgumentInitialization (Sema &S, QualType FromType, Expr::Classification FromClassification, CXXMethodDecl *Method, CXXRecordDecl *ActingContext)
static ImplicitConversionSequence TryContextuallyConvertToBool (Sema &S, Expr *From)
static bool CheckConvertedConstantConversions (Sema &S, StandardConversionSequence &SCS)
static void dropPointerConversion (StandardConversionSequence &SCS)
static ImplicitConversionSequence TryContextuallyConvertToObjCPointer (Sema &S, Expr *From)
static ExprResult diagnoseAmbiguousConversion (Sema &SemaRef, SourceLocation Loc, Expr *From, Sema::ContextualImplicitConverter &Converter, QualType T, UnresolvedSetImpl &ViableConversions)
static bool diagnoseNoViableConversion (Sema &SemaRef, SourceLocation Loc, Expr *&From, Sema::ContextualImplicitConverter &Converter, QualType T, bool HadMultipleCandidates, UnresolvedSetImpl &ExplicitConversions)
static bool recordConversion (Sema &SemaRef, SourceLocation Loc, Expr *&From, Sema::ContextualImplicitConverter &Converter, QualType T, bool HadMultipleCandidates, DeclAccessPair &Found)
static ExprResult finishContextualImplicitConversion (Sema &SemaRef, SourceLocation Loc, Expr *From, Sema::ContextualImplicitConverter &Converter)
static void collectViableConversionCandidates (Sema &SemaRef, Expr *From, QualType ToType, UnresolvedSetImpl &ViableConversions, OverloadCandidateSet &CandidateSet)
static bool IsAcceptableNonMemberOperatorCandidate (ASTContext &Context, FunctionDecl *Fn, ArrayRef< Expr * > Args)
static bool IsNotEnableIfAttr (Attr *A)
static bool isAllowableExplicitConversion (Sema &S, QualType ConvType, QualType ToType, bool AllowObjCPointerConversion)
static void AddBuiltinAssignmentOperatorCandidates (Sema &S, QualType T, ArrayRef< Expr * > Args, OverloadCandidateSet &CandidateSet)
 Helper function for AddBuiltinOperatorCandidates() that adds the volatile- and non-volatile-qualified assignment operators for the given type to the candidate set.
static Qualifiers CollectVRQualifiers (ASTContext &Context, Expr *ArgExpr)
static void DiagnoseBadConversion (Sema &S, OverloadCandidate *Cand, unsigned I)
static bool CheckArityMismatch (Sema &S, OverloadCandidate *Cand, unsigned NumArgs)
static void DiagnoseArityMismatch (Sema &S, Decl *D, unsigned NumFormalArgs)
 General arity mismatch diagnosis over a candidate in a candidate set.
static void DiagnoseArityMismatch (Sema &S, OverloadCandidate *Cand, unsigned NumFormalArgs)
 Arity mismatch diagnosis specific to a function overload candidate.
static TemplateDeclgetDescribedTemplate (Decl *Templated)
static void DiagnoseBadDeduction (Sema &S, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs)
 Diagnose a failed template-argument deduction.
static void DiagnoseBadDeduction (Sema &S, OverloadCandidate *Cand, unsigned NumArgs)
 Diagnose a failed template-argument deduction, for function calls.
static void DiagnoseBadTarget (Sema &S, OverloadCandidate *Cand)
 CUDA: diagnose an invalid call across targets.
static void DiagnoseFailedEnableIfAttr (Sema &S, OverloadCandidate *Cand)
static void NoteFunctionCandidate (Sema &S, OverloadCandidate *Cand, unsigned NumArgs)
static void NoteSurrogateCandidate (Sema &S, OverloadCandidate *Cand)
static void NoteBuiltinOperatorCandidate (Sema &S, StringRef Opc, SourceLocation OpLoc, OverloadCandidate *Cand)
static void NoteAmbiguousUserConversions (Sema &S, SourceLocation OpLoc, OverloadCandidate *Cand)
static SourceLocation GetLocationForCandidate (const OverloadCandidate *Cand)
static unsigned RankDeductionFailure (const DeductionFailureInfo &DFI)
static void CompleteNonViableCandidate (Sema &S, OverloadCandidate *Cand, ArrayRef< Expr * > Args)
static SourceLocation GetLocationForCandidate (const TemplateSpecCandidate *Cand)
static void AddOverloadedCallCandidate (Sema &S, DeclAccessPair FoundDecl, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef< Expr * > Args, OverloadCandidateSet &CandidateSet, bool PartialOverloading, bool KnownValid)
 Add a single candidate to the overload set.
static bool canBeDeclaredInNamespace (const DeclarationName &Name)
static bool DiagnoseTwoPhaseLookup (Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef< Expr * > Args)
static bool DiagnoseTwoPhaseOperatorLookup (Sema &SemaRef, OverloadedOperatorKind Op, SourceLocation OpLoc, ArrayRef< Expr * > Args)
static std::unique_ptr
< CorrectionCandidateCallback
MakeValidator (Sema &SemaRef, MemberExpr *ME, size_t NumArgs, bool HasTemplateArgs, bool AllowTypoCorrection)
static ExprResult BuildRecoveryCallExpr (Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MutableArrayRef< Expr * > Args, SourceLocation RParenLoc, bool EmptyLookup, bool AllowTypoCorrection)
static ExprResult FinishOverloadedCallExpr (Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection)
static bool IsOverloaded (const UnresolvedSetImpl &Functions)

Enumeration Type Documentation

anonymous enum
Enumerator:
ft_default 
ft_different_class 
ft_parameter_arity 
ft_parameter_mismatch 
ft_return_type 
ft_qualifer_mismatch 

Definition at line 2463 of file SemaOverload.cpp.

Definition at line 8456 of file SemaOverload.cpp.


Function Documentation

static void AddBuiltinAssignmentOperatorCandidates ( Sema S,
QualType  T,
ArrayRef< Expr * >  Args,
OverloadCandidateSet CandidateSet 
) [static]

Helper function for AddBuiltinOperatorCandidates() that adds the volatile- and non-volatile-qualified assignment operators for the given type to the candidate set.

Definition at line 6866 of file SemaOverload.cpp.

References clang::Sema::AddBuiltinCandidate(), clang::Sema::Context, clang::ASTContext::getCanonicalType(), clang::ASTContext::getLValueReferenceType(), clang::ASTContext::getVolatileType(), and clang::CanQual< T >::isVolatileQualified().

static void AddOverloadedCallCandidate ( Sema S,
DeclAccessPair  FoundDecl,
TemplateArgumentListInfo ExplicitTemplateArgs,
ArrayRef< Expr * >  Args,
OverloadCandidateSet CandidateSet,
bool  PartialOverloading,
bool  KnownValid 
) [static]
static QualType AdoptQualifiers ( ASTContext Context,
QualType  T,
Qualifiers  Qs 
) [static]
static ExprResult BuildRecoveryCallExpr ( Sema SemaRef,
Scope S,
Expr Fn,
UnresolvedLookupExpr ULE,
SourceLocation  LParenLoc,
MutableArrayRef< Expr * >  Args,
SourceLocation  RParenLoc,
bool  EmptyLookup,
bool  AllowTypoCorrection 
) [static]
static QualType BuildSimilarlyQualifiedPointerType ( const Type FromPtr,
QualType  ToPointee,
QualType  ToType,
ASTContext Context,
bool  StripObjCLifetime = false 
) [static]

BuildSimilarlyQualifiedPointerType - In a pointer conversion from the pointer type FromPtr to a pointer to type ToPointee, with the same type qualifiers as FromPtr has on its pointee type. ToType, if non-empty, will be a pointer to ToType that may or may not have the right set of qualifiers on its pointee.

Conversions to 'id' subsume cv-qualifier conversions.

Definition at line 1894 of file SemaOverload.cpp.

References clang::ASTContext::getCanonicalType(), clang::QualType::getLocalQualifiers(), clang::QualType::getLocalUnqualifiedType(), clang::ASTContext::getObjCObjectPointerType(), clang::Type::getPointeeType(), clang::ASTContext::getPointerType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::Type::getTypeClass(), clang::QualType::getUnqualifiedType(), clang::QualType::isNull(), clang::Type::isObjCIdType(), clang::Type::isObjCQualifiedIdType(), and clang::Qualifiers::removeObjCLifetime().

Referenced by clang::Sema::isObjCPointerConversion(), and clang::Sema::IsPointerConversion().

static bool canBeDeclaredInNamespace ( const DeclarationName Name) [static]

Determine whether a declaration with the specified name could be moved into a different namespace.

Definition at line 10385 of file SemaOverload.cpp.

References clang::DeclarationName::getCXXOverloadedOperator().

Referenced by DiagnoseTwoPhaseLookup().

static bool checkArgPlaceholdersForOverload ( Sema S,
MultiExprArg  Args,
UnbridgedCastsSet &  unbridged 
) [static]

checkArgPlaceholdersForOverload - Check a set of call operands for placeholders.

Definition at line 831 of file SemaOverload.cpp.

References checkPlaceholderForOverload().

Referenced by clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildCallToObjectOfClassType(), and clang::Sema::buildOverloadedCallSet().

static bool CheckArityMismatch ( Sema S,
OverloadCandidate Cand,
unsigned  NumArgs 
) [static]
static bool checkPlaceholderForOverload ( Sema S,
Expr *&  E,
UnbridgedCastsSet *  unbridgedCasts = nullptr 
) [static]
static void collectViableConversionCandidates ( Sema SemaRef,
Expr From,
QualType  ToType,
UnresolvedSetImpl ViableConversions,
OverloadCandidateSet CandidateSet 
) [static]
static Qualifiers CollectVRQualifiers ( ASTContext Context,
Expr ArgExpr 
) [static]
static ImplicitConversionSequence::CompareKind compareConversionFunctions ( Sema S,
FunctionDecl Function1,
FunctionDecl Function2 
) [static]

CompareStandardConversionSequences - Compare two standard conversion sequences to determine whether one is better than the other or if they are indistinguishable (C++ 13.3.3.2p3).

Definition at line 3455 of file SemaOverload.cpp.

References clang::ImplicitConversionSequence::Better, clang::ASTContext::canAssignObjCInterfaces(), CompareDerivedToBaseConversions(), CompareQualificationConversions(), compareStandardConversionSubsets(), clang::Sema::Context, clang::StandardConversionSequence::First, clang::ASTContext::getArrayDecayedType(), clang::Type::getAs(), clang::ASTContext::getCanonicalType(), clang::StandardConversionSequence::getFromType(), clang::Sema::getLangOpts(), clang::Type::getPointeeType(), clang::ASTContext::getQualifiedType(), clang::StandardConversionSequence::getRank(), clang::StandardConversionSequence::getToType(), clang::ASTContext::getTypeSize(), clang::ASTContext::getUnqualifiedArrayType(), clang::QualType::getUnqualifiedType(), clang::ASTContext::hasSameType(), clang::ICK_Array_To_Pointer, clang::ICK_Floating_Integral, clang::ICK_Integral_Conversion, clang::ImplicitConversionSequence::Indistinguishable, isBetterReferenceBindingKind(), clang::Sema::IsDerivedFrom(), clang::QualType::isMoreQualifiedThan(), clang::StandardConversionSequence::isPointerConversionToBool(), clang::StandardConversionSequence::isPointerConversionToVoidPointer(), clang::StandardConversionSequence::ObjCLifetimeConversionBinding, clang::StandardConversionSequence::ReferenceBinding, clang::StandardConversionSequence::Second, and clang::ImplicitConversionSequence::Worse.

Referenced by CompareImplicitConversionSequences(), and clang::isBetterOverloadCandidate().

static void CompleteNonViableCandidate ( Sema S,
OverloadCandidate Cand,
ArrayRef< Expr * >  Args 
) [static]
static ExprResult CreateFunctionRefExpr ( Sema S,
FunctionDecl Fn,
NamedDecl FoundDecl,
bool  HadMultipleCandidates,
SourceLocation  Loc = SourceLocation(),
const DeclarationNameLoc LocInfo = DeclarationNameLoc() 
) [static]
static ExprResult diagnoseAmbiguousConversion ( Sema SemaRef,
SourceLocation  Loc,
Expr From,
Sema::ContextualImplicitConverter Converter,
QualType  T,
UnresolvedSetImpl ViableConversions 
) [static]
static void DiagnoseArityMismatch ( Sema S,
Decl D,
unsigned  NumFormalArgs 
) [static]
static void DiagnoseArityMismatch ( Sema S,
OverloadCandidate Cand,
unsigned  NumFormalArgs 
) [static]

Arity mismatch diagnosis specific to a function overload candidate.

Definition at line 8879 of file SemaOverload.cpp.

References CheckArityMismatch(), DiagnoseArityMismatch(), and clang::OverloadCandidate::Function.

static void DiagnoseBadConversion ( Sema S,
OverloadCandidate Cand,
unsigned  I 
) [static]
static void DiagnoseBadDeduction ( Sema S,
Decl Templated,
DeductionFailureInfo DeductionFailure,
unsigned  NumArgs 
) [static]

Diagnose a failed template-argument deduction.

Definition at line 8896 of file SemaOverload.cpp.

References clang::QualifierCollector::apply(), clang::Sema::Context, clang::Sema::Diag(), DiagnoseArityMismatch(), clang::OverloadExpr::FindResult::Expression, clang::OverloadExpr::find(), clang::TemplateArgument::getAsTemplate(), clang::TemplateName::getAsTemplateDecl(), clang::TemplateArgument::getAsType(), clang::NamedDecl::getDeclName(), getDescribedTemplate(), clang::Sema::getDiagnostics(), clang::DeductionFailureInfo::getExpr(), clang::DeductionFailureInfo::getFirstArg(), clang::TemplateArgument::getKind(), clang::TemplateName::getKind(), clang::Decl::getLocation(), clang::NamedDecl::getName(), clang::OverloadExpr::getName(), clang::DeductionFailureInfo::getSecondArg(), clang::DeductionFailureInfo::getSFINAEDiagnostic(), clang::Sema::getTemplateArgumentBindingsText(), clang::DeductionFailureInfo::getTemplateArgumentList(), clang::DeductionFailureInfo::getTemplateParameter(), clang::TypeDecl::getTypeForDecl(), clang::ASTContext::hasSameType(), clang::DeductionFailureInfo::Result, clang::QualifierCollector::strip(), clang::Sema::TDK_FailedOverloadResolution, clang::Sema::TDK_Incomplete, clang::Sema::TDK_Inconsistent, clang::Sema::TDK_InstantiationDepth, clang::Sema::TDK_InvalidExplicitArguments, clang::Sema::TDK_MiscellaneousDeductionFailure, clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_SubstitutionFailure, clang::Sema::TDK_Success, clang::Sema::TDK_TooFewArguments, clang::Sema::TDK_TooManyArguments, clang::Sema::TDK_Underqualified, clang::TemplateArgument::Template, and clang::TemplateName::Template.

Referenced by DiagnoseBadDeduction(), clang::TemplateSpecCandidate::NoteDeductionFailure(), and NoteFunctionCandidate().

static void DiagnoseBadDeduction ( Sema S,
OverloadCandidate Cand,
unsigned  NumArgs 
) [static]
static void DiagnoseBadTarget ( Sema S,
OverloadCandidate Cand 
) [static]
static void DiagnoseFailedEnableIfAttr ( Sema S,
OverloadCandidate Cand 
) [static]
static bool diagnoseNoViableConversion ( Sema SemaRef,
SourceLocation  Loc,
Expr *&  From,
Sema::ContextualImplicitConverter Converter,
QualType  T,
bool  HadMultipleCandidates,
UnresolvedSetImpl ExplicitConversions 
) [static]
static bool DiagnoseTwoPhaseLookup ( Sema SemaRef,
SourceLocation  FnLoc,
const CXXScopeSpec SS,
LookupResult R,
OverloadCandidateSet::CandidateSetKind  CSK,
TemplateArgumentListInfo ExplicitTemplateArgs,
ArrayRef< Expr * >  Args 
) [static]
static bool DiagnoseTwoPhaseOperatorLookup ( Sema SemaRef,
OverloadedOperatorKind  Op,
SourceLocation  OpLoc,
ArrayRef< Expr * >  Args 
) [static]

Attempt to recover from ill-formed use of a non-dependent operator in a template, where the non-dependent operator was declared after the template was defined.

Returns true if a viable candidate was found and a diagnostic was issued.

Definition at line 10504 of file SemaOverload.cpp.

References clang::Sema::Context, clang::OverloadCandidateSet::CSK_Operator, clang::ASTContext::DeclarationNames, DiagnoseTwoPhaseLookup(), clang::DeclarationNameTable::getCXXOperatorName(), and clang::Sema::LookupOperatorName.

Referenced by clang::Sema::CreateOverloadedBinOp(), and clang::Sema::CreateOverloadedUnaryOp().

static void dropPointerConversion ( StandardConversionSequence SCS) [static]

dropPointerConversions - If the given standard conversion sequence involves any pointer conversions, remove them. This may change the result type of the conversion sequence.

Definition at line 5058 of file SemaOverload.cpp.

References clang::ICK_Identity, clang::ICK_Pointer_Conversion, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::Third, and clang::StandardConversionSequence::ToTypePtrs.

Referenced by TryContextuallyConvertToObjCPointer().

static bool FindConversionForRefInit ( Sema S,
ImplicitConversionSequence ICS,
QualType  DeclType,
SourceLocation  DeclLoc,
Expr Init,
QualType  T2,
bool  AllowRvalues,
bool  AllowExplicit 
) [static]

Look for a user-defined conversion to an value reference-compatible with DeclType. Return true if something definite is found.

Definition at line 4028 of file SemaOverload.cpp.

References clang::AmbiguousConversionSequence::addConversion(), clang::Sema::AddConversionCandidate(), clang::Sema::AddTemplateConversionCandidate(), clang::UserDefinedConversionSequence::After, clang::ImplicitConversionSequence::Ambiguous, clang::UserDefinedConversionSequence::Before, clang::Sema::CompareReferenceRelationship(), clang::UserDefinedConversionSequence::ConversionFunction, clang::OverloadCandidateSet::CSK_Normal, clang::StandardConversionSequence::DirectBinding, clang::UserDefinedConversionSequence::EllipsisConversion, clang::UserDefinedConversionSequence::FoundConversionFunction, clang::Type::getAs(), clang::Decl::getDeclContext(), clang::QualType::getNonReferenceType(), clang::ReferenceType::getPointeeType(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::QualType::getUnqualifiedType(), clang::UserDefinedConversionSequence::HadMultipleCandidates, clang::Type::isFunctionType(), clang::Type::isLValueReferenceType(), clang::Type::isRecordType(), clang::Type::isRValueReferenceType(), clang::OR_Ambiguous, clang::OR_Deleted, clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::Ref_Incompatible, clang::StandardConversionSequence::ReferenceBinding, clang::ImplicitConversionSequence::setAmbiguous(), clang::ImplicitConversionSequence::setUserDefined(), and clang::ImplicitConversionSequence::UserDefined.

Referenced by TryReferenceInit().

static ExprResult finishContextualImplicitConversion ( Sema SemaRef,
SourceLocation  Loc,
Expr From,
Sema::ContextualImplicitConverter Converter 
) [static]
static ExprResult FinishOverloadedCallExpr ( Sema SemaRef,
Scope S,
Expr Fn,
UnresolvedLookupExpr ULE,
SourceLocation  LParenLoc,
MultiExprArg  Args,
SourceLocation  RParenLoc,
Expr ExecConfig,
OverloadCandidateSet CandidateSet,
OverloadCandidateSet::iterator Best,
OverloadingResult  OverloadResult,
bool  AllowTypoCorrection 
) [static]
static TemplateDecl* getDescribedTemplate ( Decl Templated) [static]

Definition at line 8885 of file SemaOverload.cpp.

Referenced by DiagnoseBadDeduction().

static const char* GetImplicitConversionName ( ImplicitConversionKind  Kind) [static]

GetImplicitConversionName - Return the name of this kind of implicit conversion.

Definition at line 140 of file SemaOverload.cpp.

References clang::ICK_Num_Conversion_Kinds.

Referenced by clang::StandardConversionSequence::dump().

static SourceLocation GetLocationForCandidate ( const OverloadCandidate Cand) [static]
static bool hasSimilarType ( ASTContext Context,
QualType  T1,
QualType  T2 
) [static]
static const Expr* IgnoreNarrowingConversion ( const Expr Converted) [static]

Skip any implicit casts which could be either part of a narrowing conversion or after one in an implicit conversion.

Definition at line 247 of file SemaOverload.cpp.

References clang::CK_FloatingCast, clang::CK_FloatingToBoolean, clang::CK_FloatingToIntegral, clang::CK_IntegralCast, clang::CK_IntegralToBoolean, clang::CK_IntegralToFloating, and clang::CK_NoOp.

Referenced by clang::StandardConversionSequence::getNarrowingKind().

static bool IsAcceptableNonMemberOperatorCandidate ( ASTContext Context,
FunctionDecl Fn,
ArrayRef< Expr * >  Args 
) [static]

IsAcceptableNonMemberOperatorCandidate - Determine whether Fn is an acceptable non-member overloaded operator for a call whose arguments have types T1 (and, if non-empty, T2). This routine implements the check in C++ [over.match.oper]p3b2 concerning enumeration types.

Definition at line 5456 of file SemaOverload.cpp.

References clang::Type::getAs(), clang::QualType::getNonReferenceType(), clang::FunctionProtoType::getNumParams(), clang::FunctionProtoType::getParamType(), clang::ValueDecl::getType(), clang::ASTContext::hasSameUnqualifiedType(), clang::Type::isDependentType(), clang::Type::isEnumeralType(), clang::QualType::isNull(), and clang::Type::isRecordType().

Referenced by clang::Sema::AddOverloadCandidate().

static bool isAllowableExplicitConversion ( Sema S,
QualType  ConvType,
QualType  ToType,
bool  AllowObjCPointerConversion 
) [static]

Determine whether this is an allowable conversion from the result of an explicit conversion operator to the expected type, per C++ [over.match.conv]p1 and [over.match.ref]p1.

Parameters:
ConvTypeThe return type of the conversion function.
ToTypeThe type we are converting to.
AllowObjCPointerConversionAllow a conversion from one Objective-C pointer to another.
Returns:
true if the conversion is allowable, false otherwise.

Definition at line 6108 of file SemaOverload.cpp.

References clang::Sema::Context, clang::QualType::getNonReferenceType(), clang::ASTContext::hasSameUnqualifiedType(), clang::Sema::isObjCPointerConversion(), and clang::Sema::IsQualificationConversion().

Referenced by clang::Sema::AddConversionCandidate().

static bool isBetterReferenceBindingKind ( const StandardConversionSequence SCS1,
const StandardConversionSequence SCS2 
) [static]
static bool isFirstArgumentCompatibleWithType ( ASTContext Context,
CXXConstructorDecl Constructor,
QualType  Type 
) [static]
static OverloadingResult IsInitializerListConstructorConversion ( Sema S,
Expr From,
QualType  ToType,
CXXRecordDecl To,
UserDefinedConversionSequence User,
OverloadCandidateSet CandidateSet,
bool  AllowExplicit 
) [static]
static bool isNonTrivialObjCLifetimeConversion ( Qualifiers  FromQuals,
Qualifiers  ToQuals 
) [static]

Determine whether the lifetime conversion between the two given qualifiers sets is nontrivial.

Definition at line 2763 of file SemaOverload.cpp.

References clang::Qualifiers::getObjCLifetime(), clang::Qualifiers::hasConst(), and clang::Qualifiers::OCL_ExplicitNone.

Referenced by clang::Sema::CompareReferenceRelationship(), and clang::Sema::IsQualificationConversion().

static bool IsNotEnableIfAttr ( Attr A) [static]
static bool isNullPointerConstantForConversion ( Expr Expr,
bool  InOverloadResolution,
ASTContext Context 
) [static]
static bool IsOverloaded ( const UnresolvedSetImpl Functions) [static]
static bool IsStandardConversion ( Sema S,
Expr From,
QualType  ToType,
bool  InOverloadResolution,
StandardConversionSequence SCS,
bool  CStyle,
bool  AllowObjCWritebackConversion 
) [static]

IsStandardConversion - Determines whether there is a standard conversion sequence (C++ [conv], C++ [over.ics.scs]) from the expression From to the type ToType. Standard conversion sequences only consider non-class types; for conversions that involve class types, use TryImplicitConversion. If a conversion exists, SCS will contain the standard conversion sequence required to perform this conversion and this routine will return true. Otherwise, this routine will return false and the value of SCS is unspecified.

Definition at line 1387 of file SemaOverload.cpp.

References clang::ASTContext::BoolTy, clang::Sema::Context, clang::StandardConversionSequence::CopyConstructor, clang::StandardConversionSequence::DeprecatedStringLiteralToCharPtr, clang::Expr::EvaluateKnownConstInt(), clang::Sema::ExtractUnqualifiedFunctionType(), clang::StandardConversionSequence::First, clang::Sema::FixOverloadedFunctionReference(), clang::ASTContext::getArrayDecayedType(), clang::Type::getAs(), clang::Sema::getASTContext(), clang::ASTContext::getCanonicalType(), clang::Sema::getLangOpts(), clang::QualType::getLocalQualifiers(), clang::QualType::getLocalUnqualifiedType(), clang::ASTContext::getMemberPointerType(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getPointerType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::QualType::getUnqualifiedType(), clang::ASTContext::hasSameType(), clang::ASTContext::hasSameUnqualifiedType(), clang::ICK_Array_To_Pointer, clang::ICK_Block_Pointer_Conversion, clang::ICK_Boolean_Conversion, clang::ICK_Compatible_Conversion, clang::ICK_Complex_Conversion, clang::ICK_Complex_Promotion, clang::ICK_Complex_Real, clang::ICK_Floating_Conversion, clang::ICK_Floating_Integral, clang::ICK_Floating_Promotion, clang::ICK_Function_To_Pointer, clang::ICK_Identity, clang::ICK_Integral_Conversion, clang::ICK_Integral_Promotion, clang::ICK_Lvalue_To_Rvalue, clang::ICK_NoReturn_Adjustment, clang::ICK_Pointer_Conversion, clang::ICK_Pointer_Member, clang::ICK_Qualification, clang::ICK_TransparentUnionConversion, clang::ICK_Writeback_Conversion, clang::ICK_Zero_Event_Conversion, clang::Expr::IgnoreParens(), clang::StandardConversionSequence::IncompatibleObjC, clang::Type::isAnyComplexType(), clang::Type::isAnyPointerType(), clang::Type::isArithmeticType(), clang::Type::isArrayType(), clang::Sema::IsBlockPointerConversion(), clang::Type::isBlockPointerType(), clang::Type::isBooleanType(), clang::Sema::IsComplexPromotion(), clang::Type::isEventT(), clang::Sema::IsFloatingPointPromotion(), clang::Type::isFunctionType(), clang::Expr::isGLValue(), clang::Expr::isIntegerConstantExpr(), clang::Type::isIntegralOrUnscopedEnumerationType(), clang::Sema::IsIntegralPromotion(), clang::Type::isIntegralType(), clang::Sema::IsMemberPointerConversion(), clang::Type::isMemberPointerType(), clang::Sema::IsNoReturnConversion(), clang::Type::isNullPtrType(), clang::Sema::isObjCWritebackConversion(), clang::Sema::IsPointerConversion(), clang::Sema::IsQualificationConversion(), clang::Type::isRealFloatingType(), clang::Type::isRecordType(), clang::CXXMethodDecl::isStatic(), clang::Sema::IsStringLiteralToNonConstPointerConversion(), IsTransparentUnionStandardConversion(), IsVectorConversion(), clang::ASTContext::OverloadTy, clang::StandardConversionSequence::QualificationIncludesObjCLifetime, clang::Sema::ResolveAddressOfOverloadedFunction(), clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::StandardConversionSequence::setFromType(), clang::StandardConversionSequence::setToType(), clang::StandardConversionSequence::Third, tryAtomicConversion(), clang::ASTContext::typesAreCompatible(), and clang::UO_AddrOf.

Referenced by IsTransparentUnionStandardConversion(), tryAtomicConversion(), and TryImplicitConversion().

static bool IsTransparentUnionStandardConversion ( Sema S,
Expr From,
QualType ToType,
bool  InOverloadResolution,
StandardConversionSequence SCS,
bool  CStyle 
) [static]
static bool isTypeValid ( QualType  T) [static]

Determine whether the given type is valid, e.g., it is not an invalid C++ class.

Definition at line 3936 of file SemaOverload.cpp.

References clang::Type::getAsCXXRecordDecl(), and Record.

Referenced by clang::Sema::CompareReferenceRelationship().

static OverloadingResult IsUserDefinedConversion ( Sema S,
Expr From,
QualType  ToType,
UserDefinedConversionSequence User,
OverloadCandidateSet CandidateSet,
bool  AllowExplicit,
bool  AllowObjCConversionOnExplicit 
) [static]

Determines whether there is a user-defined conversion sequence (C++ [over.ics.user]) that converts expression From to the type ToType. If such a conversion exists, User will contain the user-defined conversion sequence that performs such a conversion and this routine will return true. Otherwise, this routine returns false and User is unspecified.

Parameters:
AllowExplicittrue if the conversion should consider C++0x "explicit" conversion functions as well as non-explicit conversion functions (C++0x [class.conv.fct]p2).
AllowObjCConversionOnExplicittrue if the conversion should allow an extra Objective-C pointer conversion on uses of explicit constructors. Requires AllowExplicit to also be set.

Definition at line 2985 of file SemaOverload.cpp.

References clang::Sema::AddConversionCandidate(), clang::Sema::AddOverloadCandidate(), clang::Sema::AddTemplateConversionCandidate(), clang::Sema::AddTemplateOverloadCandidate(), clang::UserDefinedConversionSequence::After, clang::UserDefinedConversionSequence::Before, clang::OverloadCandidateSet::BestViableFunction(), clang::OverloadCandidateSet::clear(), clang::Sema::Context, clang::UserDefinedConversionSequence::ConversionFunction, clang::UserDefinedConversionSequence::EllipsisConversion, clang::UserDefinedConversionSequence::FoundConversionFunction, clang::Decl::getAccess(), clang::Type::getAs(), clang::DeclAccessPair::getDecl(), clang::Decl::getDeclContext(), clang::Expr::getExprLoc(), clang::Stmt::getLocStart(), clang::PointerType::getPointeeType(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::Expr::getType(), clang::UserDefinedConversionSequence::HadMultipleCandidates, clang::ASTContext::hasSameUnqualifiedType(), clang::Sema::IsDerivedFrom(), isFirstArgumentCompatibleWithType(), clang::Type::isIncompleteType(), IsInitializerListConstructorConversion(), clang::Decl::isInvalidDecl(), clang::Sema::LookupConstructors(), clang::DeclAccessPair::make(), clang::OR_Ambiguous, clang::OR_Deleted, clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::RequireCompleteType(), clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::StandardConversionSequence::setFromType(), and clang::OverloadCandidateSet::size().

Referenced by clang::Sema::DiagnoseMultipleUserDefinedConversion(), and TryUserDefinedConversion().

static bool IsVectorConversion ( Sema S,
QualType  FromType,
QualType  ToType,
ImplicitConversionKind ICK 
) [static]

Determine whether the conversion from FromType to ToType is a valid vector conversion.

Parameters:
ICKWill be set to the vector conversion kind, if this is a vector conversion.

Definition at line 1334 of file SemaOverload.cpp.

References clang::ASTContext::areCompatibleVectorTypes(), clang::Sema::Context, clang::ASTContext::hasSameUnqualifiedType(), clang::ICK_Vector_Conversion, clang::ICK_Vector_Splat, clang::Type::isArithmeticType(), clang::Type::isExtVectorType(), clang::Sema::isLaxVectorConversion(), and clang::Type::isVectorType().

Referenced by IsStandardConversion().

static std::unique_ptr<CorrectionCandidateCallback> MakeValidator ( Sema SemaRef,
MemberExpr ME,
size_t  NumArgs,
bool  HasTemplateArgs,
bool  AllowTypoCorrection 
) [static]

Definition at line 10532 of file SemaOverload.cpp.

Referenced by BuildRecoveryCallExpr().

static void NoteAmbiguousUserConversions ( Sema S,
SourceLocation  OpLoc,
OverloadCandidate Cand 
) [static]
static void NoteBuiltinOperatorCandidate ( Sema S,
StringRef  Opc,
SourceLocation  OpLoc,
OverloadCandidate Cand 
) [static]
static void NoteFunctionCandidate ( Sema S,
OverloadCandidate Cand,
unsigned  NumArgs 
) [static]

Generates a 'note' diagnostic for an overload candidate. We've already generated a primary error at the call site.

It really does need to be a single diagnostic with its caret pointed at the candidate declaration. Yes, this creates some major challenges of technical writing. Yes, this makes pointing out problems with specific arguments quite awkward. It's still better than generating twenty screens of text for every failed overload.

It would be great to be able to express per-candidate problems more richly for those diagnostic clients that cared, but we'd still have to be just as careful with the default diagnostics.

Definition at line 9173 of file SemaOverload.cpp.

References clang::OverloadCandidate::Conversions, clang::Sema::Diag(), DiagnoseArityMismatch(), DiagnoseBadConversion(), DiagnoseBadDeduction(), DiagnoseBadTarget(), DiagnoseFailedEnableIfAttr(), clang::OverloadCandidate::FailureKind, clang::OverloadCandidate::Function, clang::Decl::getLocation(), clang::OverloadCandidate::IgnoreObjectArgument, clang::ImplicitConversionSequence::isBad(), clang::FunctionDecl::isDeleted(), clang::FunctionDecl::isDeletedAsWritten(), clang::Sema::isFunctionConsideredUnavailable(), clang::Sema::NoteOverloadCandidate(), clang::OverloadCandidate::NumConversions, clang::ovl_fail_bad_conversion, clang::ovl_fail_bad_deduction, clang::ovl_fail_bad_final_conversion, clang::ovl_fail_bad_target, clang::ovl_fail_enable_if, clang::ovl_fail_final_conversion_not_exact, clang::ovl_fail_too_few_arguments, clang::ovl_fail_too_many_arguments, clang::ovl_fail_trivial_conversion, and clang::OverloadCandidate::Viable.

Referenced by clang::OverloadCandidateSet::NoteCandidates().

static void NoteSurrogateCandidate ( Sema S,
OverloadCandidate Cand 
) [static]
static unsigned RankDeductionFailure ( const DeductionFailureInfo DFI) [static]
static bool recordConversion ( Sema SemaRef,
SourceLocation  Loc,
Expr *&  From,
Sema::ContextualImplicitConverter Converter,
QualType  T,
bool  HadMultipleCandidates,
DeclAccessPair Found 
) [static]
static bool tryAtomicConversion ( Sema S,
Expr From,
QualType  ToType,
bool  InOverloadResolution,
StandardConversionSequence SCS,
bool  CStyle 
) [static]

  • Determine whether this is a conversion from a scalar type to an atomic type.

If successful, updates SCS's second and third steps in the conversion sequence to finish the conversion.

Definition at line 2862 of file SemaOverload.cpp.

References clang::Type::getAs(), clang::AtomicType::getValueType(), IsStandardConversion(), clang::StandardConversionSequence::QualificationIncludesObjCLifetime, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setToType(), and clang::StandardConversionSequence::Third.

Referenced by IsStandardConversion().

static ImplicitConversionSequence TryContextuallyConvertToBool ( Sema S,
Expr From 
) [static]

TryContextuallyConvertToBool - Attempt to contextually convert the expression From to bool (C++0x [conv]p3).

Definition at line 4861 of file SemaOverload.cpp.

References clang::ASTContext::BoolTy, clang::Sema::Context, and TryImplicitConversion().

Referenced by clang::Sema::AddBuiltinCandidate(), and clang::Sema::PerformContextuallyConvertToBool().

static ImplicitConversionSequence TryCopyInitialization ( Sema S,
Expr From,
QualType  ToType,
bool  SuppressUserConversions,
bool  InOverloadResolution,
bool  AllowObjCWritebackConversion,
bool  AllowExplicit 
) [static]

TryCopyInitialization - Try to copy-initialize a value of type ToType from the expression From. Return the implicit conversion sequence required to pass this argument, which may be a bad conversion sequence (meaning that the argument cannot be passed to a parameter of this type). If SuppressUserConversions, then we do not permit any user-defined conversion sequences.

Definition at line 4646 of file SemaOverload.cpp.

References clang::Stmt::getLocStart(), clang::Type::isReferenceType(), TryImplicitConversion(), TryListConversion(), and TryReferenceInit().

Referenced by clang::Sema::AddBuiltinCandidate(), clang::Sema::AddConversionCandidate(), clang::Sema::AddOverloadCandidate(), clang::Sema::AddSurrogateCandidate(), CompleteNonViableCandidate(), TryCopyInitialization(), and TryListConversion().

static bool TryCopyInitialization ( const CanQualType  FromQTy,
const CanQualType  ToQTy,
Sema S,
SourceLocation  Loc,
ExprValueKind  FromVK 
) [static]
static ImplicitConversionSequence TryImplicitConversion ( Sema S,
Expr From,
QualType  ToType,
bool  SuppressUserConversions,
bool  AllowExplicit,
bool  InOverloadResolution,
bool  CStyle,
bool  AllowObjCWritebackConversion,
bool  AllowObjCConversionOnExplicit 
) [static]

TryImplicitConversion - Attempt to perform an implicit conversion from the given expression (Expr) to the given type (ToType). This function returns an implicit conversion sequence that can be used to perform the initialization. Given

void f(float f); void g(int i) { f(i); }

this routine would produce an implicit conversion sequence to describe the initialization of f from i, which will be a standard conversion sequence containing an lvalue-to-rvalue conversion (C++ 4.1) followed by a floating-integral conversion (C++ 4.9). Note that this routine only determines how the conversion can be performed; it does not actually perform the conversion. As such, it will not produce any diagnostics if no conversion is available, but will instead return an implicit conversion sequence of kind "BadConversion".

If SuppressUserConversions, then user-defined conversions are not permitted. If AllowExplicit, then explicit user-defined conversions are permitted.

Parameters:
AllowObjCWritebackConversionWhether we allow the Objective-C writeback conversion, which allows __autoreleasing id* parameters to be initialized with __strong id* or __weak id* arguments.

Definition at line 1177 of file SemaOverload.cpp.

References clang::Sema::Context, clang::StandardConversionSequence::CopyConstructor, clang::Type::getAs(), clang::Sema::getLangOpts(), clang::Expr::getType(), clang::ASTContext::hasSameUnqualifiedType(), clang::ICK_Derived_To_Base, clang::Sema::IsDerivedFrom(), IsStandardConversion(), clang::BadConversionSequence::no_conversion, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::ImplicitConversionSequence::setBad(), clang::StandardConversionSequence::setFromType(), clang::ImplicitConversionSequence::setStandard(), clang::ImplicitConversionSequence::Standard, and TryUserDefinedConversion().

Referenced by clang::Sema::CheckSingleAssignmentConstraints(), clang::Sema::PerformImplicitConversion(), TryContextuallyConvertToBool(), TryContextuallyConvertToObjCPointer(), TryCopyInitialization(), clang::Sema::TryImplicitConversion(), and TryReferenceInit().

static ImplicitConversionSequence TryListConversion ( Sema S,
InitListExpr From,
QualType  ToType,
bool  SuppressUserConversions,
bool  InOverloadResolution,
bool  AllowObjCWritebackConversion 
) [static]

TryListConversion - Try to copy-initialize a value of type ToType from the initializer list From.

Definition at line 4443 of file SemaOverload.cpp.

References clang::UserDefinedConversionSequence::After, clang::UserDefinedConversionSequence::Before, clang::StandardConversionSequence::BindsImplicitObjectArgumentWithoutRefQualifier, clang::StandardConversionSequence::BindsToFunctionLvalue, clang::StandardConversionSequence::BindsToRvalue, clang::Sema::CanPerformCopyInitialization(), CompareImplicitConversionSequences(), clang::Sema::CompareReferenceRelationship(), clang::Sema::Context, clang::UserDefinedConversionSequence::ConversionFunction, clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getCanonicalType(), clang::ArrayType::getElementType(), clang::InitListExpr::getInit(), clang::InitListExpr::getLocStart(), clang::InitListExpr::getNumInits(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::InitializedEntity::InitializeParameter(), clang::Type::isAggregateType(), clang::Type::isArrayType(), clang::ImplicitConversionSequence::isBad(), clang::QualType::isConstQualified(), clang::ImplicitConversionSequence::isEllipsis(), clang::ImplicitConversionSequence::isFailure(), clang::StandardConversionSequence::IsLvalueReference, clang::Type::isLValueReferenceType(), clang::QualType::isNull(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Type::isRValueReferenceType(), clang::ImplicitConversionSequence::isStandard(), clang::Sema::isStdInitializerList(), clang::QualType::isVolatileQualified(), clang::BadConversionSequence::lvalue_ref_to_rvalue, clang::BadConversionSequence::no_conversion, clang::StandardConversionSequence::ObjCLifetimeConversionBinding, clang::ASTContext::OverloadTy, clang::Sema::Ref_Related, clang::StandardConversionSequence::ReferenceBinding, clang::Sema::RequireCompleteType(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::ImplicitConversionSequence::setBad(), clang::StandardConversionSequence::setFromType(), clang::ImplicitConversionSequence::setStandard(), clang::ImplicitConversionSequence::setStdInitializerListElement(), clang::ImplicitConversionSequence::setUserDefined(), clang::ImplicitConversionSequence::Standard, TryCopyInitialization(), TryReferenceInit(), TryUserDefinedConversion(), clang::ImplicitConversionSequence::UserDefined, clang::ImplicitConversionSequence::Worse, and X.

Referenced by TryCopyInitialization().

static ImplicitConversionSequence TryObjectArgumentInitialization ( Sema S,
QualType  FromType,
Expr::Classification  FromClassification,
CXXMethodDecl Method,
CXXRecordDecl ActingContext 
) [static]

TryObjectArgumentInitialization - Try to initialize the object parameter of the given member function (Method) from the expression From.

Definition at line 4686 of file SemaOverload.cpp.

References clang::BadConversionSequence::bad_qualifiers, clang::StandardConversionSequence::BindsImplicitObjectArgumentWithoutRefQualifier, clang::StandardConversionSequence::BindsToFunctionLvalue, clang::StandardConversionSequence::BindsToRvalue, clang::Qualifiers::Const, clang::Sema::Context, clang::StandardConversionSequence::DirectBinding, clang::Type::getAs(), clang::ASTContext::getCanonicalType(), clang::ASTContext::getCVRQualifiedType(), clang::QualType::getCVRQualifiers(), clang::QualType::getLocalUnqualifiedType(), clang::Type::getPointeeType(), clang::CXXMethodDecl::getRefQualifier(), clang::ASTContext::getTypeDeclType(), clang::CXXMethodDecl::getTypeQualifiers(), clang::ICK_Derived_To_Base, clang::ICK_Identity, clang::QualType::isAtLeastAsQualifiedAs(), clang::Sema::IsDerivedFrom(), clang::Expr::Classification::isLValue(), clang::StandardConversionSequence::IsLvalueReference, clang::Type::isRecordType(), clang::Expr::Classification::isRValue(), clang::BadConversionSequence::lvalue_ref_to_rvalue, clang::StandardConversionSequence::ReferenceBinding, clang::RQ_LValue, clang::RQ_None, clang::RQ_RValue, clang::BadConversionSequence::rvalue_ref_to_lvalue, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::ImplicitConversionSequence::setBad(), clang::StandardConversionSequence::setFromType(), clang::ImplicitConversionSequence::setStandard(), clang::ImplicitConversionSequence::Standard, clang::BadConversionSequence::unrelated_class, and clang::Qualifiers::Volatile.

Referenced by clang::Sema::AddConversionCandidate(), clang::Sema::AddMethodCandidate(), clang::Sema::AddSurrogateCandidate(), and clang::Sema::PerformObjectArgumentInitialization().

static ImplicitConversionSequence TryReferenceInit ( Sema S,
Expr Init,
QualType  DeclType,
SourceLocation  DeclLoc,
bool  SuppressUserConversions,
bool  AllowExplicit 
) [static]

Compute an implicit conversion sequence for reference initialization.

Definition at line 4157 of file SemaOverload.cpp.

References clang::Expr::Classify(), clang::Sema::CompareReferenceRelationship(), clang::Qualifiers::compatiblyIncludes(), clang::Sema::Context, FindConversionForRefInit(), clang::Type::getAs(), clang::QualType::getAsOpaquePtr(), clang::ASTContext::getCanonicalType(), clang::Sema::getLangOpts(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::ICK_Compatible_Conversion, clang::ICK_Derived_To_Base, clang::ICK_Identity, clang::ICK_Lvalue_To_Rvalue, clang::Type::isArrayType(), clang::QualType::isConstQualified(), clang::Type::isFunctionType(), clang::Expr::Classification::isLValue(), clang::Expr::Classification::isPRValue(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Expr::Classification::isRValue(), clang::Type::isRValueReferenceType(), clang::QualType::isVolatileQualified(), clang::Expr::Classification::isXValue(), clang::BadConversionSequence::lvalue_ref_to_rvalue, clang::BadConversionSequence::no_conversion, clang::ASTContext::OverloadTy, clang::Sema::Ref_Compatible_With_Added_Qualification, clang::Sema::Ref_Incompatible, clang::Sema::Ref_Related, clang::Qualifiers::removeObjCGCAttr(), clang::Qualifiers::removeObjCLifetime(), clang::Sema::RequireCompleteType(), clang::Sema::ResolveAddressOfOverloadedFunction(), clang::ImplicitConversionSequence::setBad(), and TryImplicitConversion().

Referenced by TryCopyInitialization(), and TryListConversion().

static ImplicitConversionSequence TryUserDefinedConversion ( Sema S,
Expr From,
QualType  ToType,
bool  SuppressUserConversions,
bool  AllowExplicit,
bool  InOverloadResolution,
bool  CStyle,
bool  AllowObjCWritebackConversion,
bool  AllowObjCConversionOnExplicit 
) [static]

Tries a user-defined conversion from From to ToType.

Produces an implicit conversion sequence for when a standard conversion is not an option. See TryImplicitConversion for more information.

Definition at line 1082 of file SemaOverload.cpp.

References clang::AmbiguousConversionSequence::addConversion(), clang::ImplicitConversionSequence::Ambiguous, clang::UserDefinedConversionSequence::Before, clang::Sema::Context, clang::UserDefinedConversionSequence::ConversionFunction, clang::StandardConversionSequence::CopyConstructor, clang::OverloadCandidateSet::CSK_Normal, clang::ASTContext::getCanonicalType(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::CanQual< T >::getUnqualifiedType(), clang::QualType::getUnqualifiedType(), clang::ICK_Derived_To_Base, clang::Sema::IsDerivedFrom(), IsUserDefinedConversion(), clang::BadConversionSequence::no_conversion, clang::OR_Ambiguous, clang::OR_Success, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAllToTypes(), clang::ImplicitConversionSequence::setAmbiguous(), clang::StandardConversionSequence::setAsIdentityConversion(), clang::ImplicitConversionSequence::setBad(), clang::StandardConversionSequence::setFromType(), clang::AmbiguousConversionSequence::setFromType(), clang::ImplicitConversionSequence::setStandard(), clang::AmbiguousConversionSequence::setToType(), clang::ImplicitConversionSequence::setUserDefined(), clang::ImplicitConversionSequence::Standard, and clang::ImplicitConversionSequence::UserDefined.

Referenced by TryImplicitConversion(), and TryListConversion().