Fix a recent regression from the initialization changes.

llvm-svn: 91097
This commit is contained in:
Eli Friedman 2009-12-11 02:42:07 +00:00
parent a17e83e437
commit ad6c2e5b3a
3 changed files with 22 additions and 10 deletions

View File

@ -2001,10 +2001,11 @@ void InitializationSequence::AddReferenceBindingStep(QualType T,
Steps.push_back(S);
}
void InitializationSequence::AddUserConversionStep(FunctionDecl *Function) {
void InitializationSequence::AddUserConversionStep(FunctionDecl *Function,
QualType T) {
Step S;
S.Kind = SK_UserConversion;
S.Type = Function->getResultType().getNonReferenceType();
S.Type = T;
S.Function = Function;
Steps.push_back(S);
}
@ -2209,18 +2210,20 @@ static OverloadingResult TryRefInitWithConversionFunction(Sema &S,
if (OverloadingResult Result
= S.BestViableFunction(CandidateSet, DeclLoc, Best))
return Result;
// Add the user-defined conversion step.
FunctionDecl *Function = Best->Function;
Sequence.AddUserConversionStep(Function);
// Determine whether we need to perform derived-to-base or
// cv-qualification adjustments.
// Compute the returned type of the conversion.
if (isa<CXXConversionDecl>(Function))
T2 = Function->getResultType();
else
T2 = cv1T1;
// Add the user-defined conversion step.
Sequence.AddUserConversionStep(Function, T2.getNonReferenceType());
// Determine whether we need to perform derived-to-base or
// cv-qualification adjustments.
bool NewDerivedToBase = false;
Sema::ReferenceCompareResult NewRefRelationship
= S.CompareReferenceRelationship(DeclLoc, T1, T2.getNonReferenceType(),

View File

@ -511,7 +511,7 @@ public:
/// \brief Add a new step invoking a conversion function, which is either
/// a constructor or a conversion function.
void AddUserConversionStep(FunctionDecl *Function);
void AddUserConversionStep(FunctionDecl *Function, QualType T);
/// \brief Add a new step that performs a qualification conversion to the
/// given type.

View File

@ -0,0 +1,9 @@
// RUN: clang-cc -emit-llvm-only -verify %s
struct XPTParamDescriptor {};
struct nsXPTParamInfo {
nsXPTParamInfo(const XPTParamDescriptor& desc);
};
void a(XPTParamDescriptor *params) {
const nsXPTParamInfo& paramInfo = params[0];
}