PR11009: Fix a FIXME which was leading to an assertion failure with rvalue references.

llvm-svn: 140594
This commit is contained in:
Eli Friedman 2011-09-27 01:11:35 +00:00
parent 9f01f89386
commit f272d40d7c
2 changed files with 9 additions and 4 deletions

View File

@ -4482,7 +4482,6 @@ InitializationSequence::Perform(Sema &S,
FunctionDecl *Fn = Step->Function.Function;
DeclAccessPair FoundFn = Step->Function.FoundDecl;
bool CreatedObject = false;
bool IsLvalue = false;
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Fn)) {
// Build a call to the selected constructor.
ASTOwningVector<Expr*> ConstructorArgs(S);
@ -4520,7 +4519,6 @@ InitializationSequence::Perform(Sema &S,
} else {
// Build a call to the conversion function.
CXXConversionDecl *Conversion = cast<CXXConversionDecl>(Fn);
IsLvalue = Conversion->getResultType()->isLValueReferenceType();
S.CheckMemberOperatorAccess(Kind.getLocation(), CurInit.get(), 0,
FoundFn);
S.DiagnoseUseOfDecl(FoundFn, Kind.getLocation());
@ -4560,11 +4558,10 @@ InitializationSequence::Perform(Sema &S,
}
}
// FIXME: xvalues
CurInit = S.Owned(ImplicitCastExpr::Create(S.Context,
CurInit.get()->getType(),
CastKind, CurInit.get(), 0,
IsLvalue ? VK_LValue : VK_RValue));
CurInit.get()->getValueKind()));
if (RequiresCopy)
CurInit = CopyObject(S, Entity.getType().getNonReferenceType(), Entity,

View File

@ -92,3 +92,11 @@ MoveOnly returningNonEligible() {
else // Construction from different type can't be elided
return i; // expected-error {{no viable conversion from 'int' to 'MoveOnly'}}
}
// PR11009
struct MoveConvertible {
operator int&& () const;
};
void moveConstruct() {
(void)(int)MoveConvertible();
}