зеркало из https://github.com/microsoft/clang-1.git
Make sure the __invoke function for lambdas returns properly. Per bug report on IRC>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170160 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
c9a9177e69
Коммит
50f089a6e1
|
@ -1787,6 +1787,8 @@ void CodeGenFunction::EmitForwardingCallToLambda(const CXXRecordDecl *lambda,
|
|||
// If necessary, copy the returned value into the slot.
|
||||
if (!resultType->isVoidType() && returnSlot.isNull())
|
||||
EmitReturnOfRValue(RV, resultType);
|
||||
else
|
||||
EmitBranchThroughCleanup(ReturnBlock);
|
||||
}
|
||||
|
||||
void CodeGenFunction::EmitLambdaBlockInvokeBody() {
|
||||
|
|
|
@ -80,6 +80,15 @@ int g() {
|
|||
return [] { return r; } ();
|
||||
};
|
||||
|
||||
// CHECK: define internal void @"_ZZ1hvEN3$_78__invokeEv"(%struct.A* noalias sret %agg.result)
|
||||
// CHECK-NEXT: entry:
|
||||
// CHECK-NEXT: call void @"_ZZ1hvENK3$_7clEv"(%struct.A* sret %agg.result,
|
||||
// CHECK-NEXT: ret void
|
||||
struct A { ~A(); };
|
||||
void h() {
|
||||
A (*h)() = [] { return A(); };
|
||||
}
|
||||
|
||||
// CHECK: define internal i32 @"_ZZ1fvEN3$_58__invokeEii"
|
||||
// CHECK: store i32
|
||||
// CHECK-NEXT: store i32
|
||||
|
|
Загрузка…
Ссылка в новой задаче