summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/global
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2022-06-20 11:07:21 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2022-06-20 19:52:01 +0000
commit3d73aa660b5e1af5758ae7207ce1c05d7a0458e1 (patch)
treed6ce2e3c0d95ff02388b26e6b7c0cff2f1a2171a /tests/auto/corelib/global
parent7d2488280ee46fd07f31c895b765ee4072fc1a5a (diff)
function_ref test: Don't take reference of temporaries
When assigning the lambdas directly to a function_ref their lifetime is limited to that of the expression. Store them on the stack first to avoid the UB. Fixes: QTBUG-104419 Pick-to: 6.4 Change-Id: I3c85ac683b0bd7768b646dc9d0a1ed4dd173e6f3 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'tests/auto/corelib/global')
-rw-r--r--tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp b/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp
index be83e76f18..6264e6a5ae 100644
--- a/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp
+++ b/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp
@@ -221,16 +221,20 @@ void tst_qxp_function_ref::voidReturning()
bool ok = false; // prevent lambdas from decaying to function pointers
{
- Fi fi = [&](int i) noexcept { return i + int(ok); };
+ auto lambda1 = [&](int i) noexcept { return i + int(ok); };
+ Fi fi = lambda1;
fi(42);
- Fv fv = [&]() noexcept { return int(ok); };
+ auto lambda2 = [&]() noexcept { return int(ok); };
+ Fv fv = lambda2;
fv();
}
{
- Fi fi = [&](int i) { return i + int(ok); };
+ auto lambda1 = [&](int i) { return i + int(ok); };
+ Fi fi = lambda1;
fi(42);
- Fv fv = [&]() { return int(ok); };
+ auto lambda2 = [&]() { return int(ok); };
+ Fv fv = lambda2;
fv();
}
}
@@ -261,7 +265,8 @@ void tst_qxp_function_ref::ctad()
#if 0 // no deduction guides for the non-function-pointer case, so no CTAD for lambdas
{
- qxp::function_ref f = [](int i) -> int { return i; };
+ auto lambda = [](int i) -> int { return i; };
+ qxp::function_ref f = lambda;
static_assert(std::is_same_v<decltype(f),
qxp::function_ref<int(int)>>);
}