Undid my yesterday patch which is not needed with an upcoming patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81549 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2009-09-11 18:46:22 +00:00
Родитель 6cc1518b9f
Коммит 8664ad5cbd
2 изменённых файлов: 25 добавлений и 53 удалений

Просмотреть файл

@ -858,9 +858,6 @@ public:
void AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
Expr *From, QualType ToType,
OverloadCandidateSet &CandidateSet);
void AddAllConversionCandidate(CXXRecordDecl *ClassDecl, Expr *From,
QualType ToType, bool AllowExplicit,
OverloadCandidateSet &CandidateSet);
void AddSurrogateCandidate(CXXConversionDecl *Conversion,
const FunctionProtoType *Proto,
Expr *Object, Expr **Args, unsigned NumArgs,

Просмотреть файл

@ -1331,52 +1331,6 @@ static void GetFunctionAndTemplate(AnyFunctionDecl Orig, T *&Function,
Function = cast<T>(Orig);
}
void
Sema::AddAllConversionCandidate(CXXRecordDecl *ClassDecl, Expr *From,
QualType ToType, bool AllowExplicit,
OverloadCandidateSet &CandidateSet) {
for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
CXXRecordDecl *BaseClassDecl
= cast<CXXRecordDecl>(VBase->getType()->getAs<RecordType>()->getDecl());
AddAllConversionCandidate(BaseClassDecl, From, ToType, AllowExplicit,
CandidateSet);
}
for (CXXRecordDecl::base_class_iterator Base =
ClassDecl->bases_begin(),
E = ClassDecl->bases_end(); Base != E; ++Base) {
if (Base->isVirtual())
continue;
CXXRecordDecl *BaseClassDecl
= cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
AddAllConversionCandidate(BaseClassDecl, From, ToType, AllowExplicit,
CandidateSet);
}
OverloadedFunctionDecl *Conversions
= ClassDecl->getConversionFunctions();
for (OverloadedFunctionDecl::function_iterator Func
= Conversions->function_begin();
Func != Conversions->function_end(); ++Func) {
CXXConversionDecl *Conv;
FunctionTemplateDecl *ConvTemplate;
GetFunctionAndTemplate(*Func, Conv, ConvTemplate);
if (ConvTemplate)
Conv = dyn_cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
else
Conv = dyn_cast<CXXConversionDecl>(*Func);
if (AllowExplicit || !Conv->isExplicit()) {
if (ConvTemplate)
AddTemplateConversionCandidate(ConvTemplate, From, ToType,
CandidateSet);
else
AddConversionCandidate(Conv, From, ToType, CandidateSet);
}
}
}
/// 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
@ -1451,10 +1405,31 @@ bool Sema::IsUserDefinedConversion(Expr *From, QualType ToType,
} else if (const RecordType *FromRecordType
= From->getType()->getAs<RecordType>()) {
if (CXXRecordDecl *FromRecordDecl
= dyn_cast<CXXRecordDecl>(FromRecordType->getDecl()))
// Add all of the conversion functions as candidates.
AddAllConversionCandidate(FromRecordDecl, From, ToType, AllowExplicit,
CandidateSet);
= dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
// Add all of the conversion functions as candidates.
// FIXME: Look for conversions in base classes!
OverloadedFunctionDecl *Conversions
= FromRecordDecl->getConversionFunctions();
for (OverloadedFunctionDecl::function_iterator Func
= Conversions->function_begin();
Func != Conversions->function_end(); ++Func) {
CXXConversionDecl *Conv;
FunctionTemplateDecl *ConvTemplate;
GetFunctionAndTemplate(*Func, Conv, ConvTemplate);
if (ConvTemplate)
Conv = dyn_cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
else
Conv = dyn_cast<CXXConversionDecl>(*Func);
if (AllowExplicit || !Conv->isExplicit()) {
if (ConvTemplate)
AddTemplateConversionCandidate(ConvTemplate, From, ToType,
CandidateSet);
else
AddConversionCandidate(Conv, From, ToType, CandidateSet);
}
}
}
}
OverloadCandidateSet::iterator Best;