patch to ir-gen conversion function call used in

initializing a reference class.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82664 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2009-09-23 22:34:00 +00:00
Родитель eb5758bbfd
Коммит 8f489d692f
2 изменённых файлов: 40 добавлений и 4 удалений

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

@ -3527,10 +3527,15 @@ Sema::CheckReferenceInit(Expr *&Init, QualType DeclType,
"Expected a direct reference binding!"); "Expected a direct reference binding!");
return false; return false;
} else { } else {
// Perform the conversion. OwningExprResult InitConversion =
// FIXME: Binding to a subobject of the lvalue is going to require more BuildCXXCastArgument(Init->getLocStart(), QualType(),
// AST annotation than this. CastExpr::CK_UserDefinedConversion,
ImpCastExprToType(Init, T1, CastExpr::CK_Unknown, /*isLvalue=*/true); cast<CXXMethodDecl>(Best->Function),
Owned(Init));
Init = InitConversion.takeAs<Expr>();
ImpCastExprToType(Init, T1, CastExpr::CK_UserDefinedConversion,
/*isLvalue=*/true);
} }
break; break;

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

@ -0,0 +1,31 @@
// RUN: clang-cc -triple x86_64-apple-darwin -S %s -o %t-64.s &&
// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s &&
// RUN: clang-cc -triple i386-apple-darwin -S %s -o %t-32.s &&
// RUN: FileCheck -check-prefix LP32 --input-file=%t-32.s %s &&
// RUN: true
struct A {};
struct B
{
operator A&();
};
struct D : public B {
operator A();
};
extern B f();
extern D d();
int main() {
const A& rca = f();
const A& rca2 = d();
}
// CHECK-LP64: call __ZN1BcvR1AEv
// CHECK-LP64: call __ZN1BcvR1AEv
// CHECK-LP32: call L__ZN1BcvR1AEv
// CHECK-LP32: call L__ZN1BcvR1AEv