зеркало из 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 necessary, copy the returned value into the slot.
|
||||||
if (!resultType->isVoidType() && returnSlot.isNull())
|
if (!resultType->isVoidType() && returnSlot.isNull())
|
||||||
EmitReturnOfRValue(RV, resultType);
|
EmitReturnOfRValue(RV, resultType);
|
||||||
|
else
|
||||||
|
EmitBranchThroughCleanup(ReturnBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeGenFunction::EmitLambdaBlockInvokeBody() {
|
void CodeGenFunction::EmitLambdaBlockInvokeBody() {
|
||||||
|
|
|
@ -80,6 +80,15 @@ int g() {
|
||||||
return [] { return r; } ();
|
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: define internal i32 @"_ZZ1fvEN3$_58__invokeEii"
|
||||||
// CHECK: store i32
|
// CHECK: store i32
|
||||||
// CHECK-NEXT: store i32
|
// CHECK-NEXT: store i32
|
||||||
|
|
Загрузка…
Ссылка в новой задаче