blob: 941a64e6379540c668e03a8e79422254eb0cde85 [file] [log] [blame]
// { dg-additional-options "-Wall" }
#include <coroutine>
template <typename _Tp> struct promise;
template <typename _Tp> struct task {
using promise_type = promise<_Tp>;
bool await_ready() noexcept { return false; }
void await_suspend(std::coroutine_handle<> awaiter) noexcept { m_a = awaiter; }
auto await_resume() { return _Tp(); }
std::coroutine_handle<> m_a;
};
template <typename _Tp> struct promise {
auto get_return_object() noexcept { return task<_Tp>(); }
auto initial_suspend() noexcept { return std::suspend_always(); }
auto final_suspend() noexcept { return std::suspend_always(); }
void return_value(_Tp value) noexcept { m_v = value; }
void unhandled_exception() noexcept {}
_Tp m_v;
};
task<int> test_coro(void) {
int r = 0;
#if 1
// this code causes the unexpected warning below
r += co_await task<int>();
#else
// this code causes no warning
auto b = co_await task<int>();
r += b;
#endif
co_return r;
// test1.cpp: In function ‘task<int> test_coro(int)’:
// test1.cpp:36:1: warning: statement has no effect [-Wunused-value]
// 36 | }
// | ^
}
int main(void) {
return 0;
}