From bcd673081f131f12e000c0dfebc9f1debbac9c6c Mon Sep 17 00:00:00 2001 From: Conor Williams Date: Mon, 19 Jun 2023 19:28:00 +1000 Subject: [PATCH] error due to bad sym-transfer optimisation 2 --- test/source/libfork.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/test/source/libfork.cpp b/test/source/libfork.cpp index 354d0814..81a54120 100644 --- a/test/source/libfork.cpp +++ b/test/source/libfork.cpp @@ -82,15 +82,11 @@ inline constexpr auto v_fib = fn([](auto fib, int &ret, int n) -> lf::task int a, b; - co_await lf::fork(fib)(a, n - 1); - co_await lf::call(fib)(b, n - 2); - - co_await lf::join; - - co_await lf::fork(fib)(a, n - 1); - co_await lf::call(fib)(b, n - 2); - - co_await lf::join; + for (int i = 0; i < 2; i++) { + co_await lf::fork(fib)(a, n - 1); + co_await lf::call(fib)(b, n - 2); + co_await lf::join; + } ret = a + b; }); @@ -178,7 +174,7 @@ inline constexpr auto deep_except_2 = fn([](auto self, int n) -> lf::task<> { inline constexpr auto noop = fn([](auto self) -> lf::task<> { co_return; }); // In some implementations, this could cause a stack overflow if symmetric transfer is not used. -inline constexpr auto sym_stack_overflow = fn([](auto self) -> lf::task { +inline constexpr auto sym_stack_overflow_1 = fn([](auto self) -> lf::task { for (int i = 0; i < 100'000'000; ++i) { co_await lf::call(noop)(); } @@ -189,7 +185,7 @@ inline constexpr auto sym_stack_overflow = fn([](auto self) -> lf::task { template void test(S &schedule) { SECTION("stack-overflow") { - REQUIRE(sync_wait(schedule, sym_stack_overflow)); + REQUIRE(sync_wait(schedule, sym_stack_overflow_1)); } SECTION("Fibonacci") {