зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
eb5758bbfd
Коммит
8f489d692f
|
@ -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
|
Загрузка…
Ссылка в новой задаче