https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115906
Arsen Arsenović <arsen at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic,
| |ice-on-invalid-code
Status|UNCONFIRMED |NEW
Summary|[coroutines] ICE when |[coroutines] missing
|co_await used as default |diagnostic and ICE when
|argument in function |co_await used as default
|declaration |argument in function
| |declaration
Ever confirmed|0 |1
Last reconfirmed| |2024-07-15
CC| |arsen at gcc dot gnu.org
--- Comment #1 from Arsen Arsenović <arsen at gcc dot gnu.org> ---
testcase:
#include <coroutine>
struct Promise;
struct Handle : std::coroutine_handle<Promise> {
using promise_type = Promise;
};
struct Promise {
Handle get_return_object() noexcept {
return {Handle::from_promise(*this)};
}
std::suspend_never initial_suspend() const noexcept { return {}; }
std::suspend_never final_suspend() const noexcept { return {}; }
void return_void() const noexcept {}
void unhandled_exception() const noexcept {}
};
Handle Coro() {
struct Awaiter : std::suspend_never {
int await_resume() { return 0; }
};
void foo(int = co_await Awaiter{});
co_return;
}
int main() {
Coro();
return 0;
}
(reposted in case the link expires - unmodified compared to #c0)
this code is invalid per https://eel.is/c++draft/expr.await#2 (as iains pointed
out). seems that both we and clang fail to diagnose it.