// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -std=c++20 -fsyntax-only -verify -Wunreachable-code #include "Inputs/std-coroutine.h" extern void abort(void) __attribute__((__noreturn__)); struct task { struct promise_type { std::suspend_always initial_suspend(); std::suspend_always final_suspend() noexcept; void return_void(); std::suspend_always yield_value(int) { return {}; } task get_return_object(); void unhandled_exception(); struct Awaiter { bool await_ready(); void await_suspend(auto); int await_resume(); }; auto await_transform(const int& x) { return Awaiter{}; } }; }; task test1() { abort(); co_yield 1; } task test2() { abort(); 1; // expected-warning {{code will never be executed}} co_yield 1; } task test3() { abort(); co_return; } task test4() { abort(); 1; // expected-warning {{code will never be executed}} co_return; } task test5() { abort(); co_await 1; } task test6() { abort(); 1; // expected-warning {{code will never be executed}} co_await 3; } task test7() { // coroutine statements are not considered unreachable. co_await 1; abort(); co_await 2; } task test8() { // coroutine statements are not considered unreachable. abort(); co_return; 1 + 1; // expected-warning {{code will never be executed}} } task test9() { abort(); // This warning is emitted on the declaration itself, rather the coroutine substmt. int x = co_await 1; // expected-warning {{code will never be executed}} }