-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[coroutine] Suppress unreachable-code warning on coroutine statements. #77454
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
bcfc755
e98da0e
531a5c0
06d766c
c878bbd
2eefc8b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
// 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(); | ||
usx95 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
void unhandled_exception(); | ||
|
||
struct Awaiter { | ||
bool await_ready(); | ||
void await_suspend(auto); | ||
int await_resume(); | ||
}; | ||
auto await_transform(const int& x) { return Awaiter{}; } | ||
Comment on lines
+15
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: (Just to reduce the boilerplate not related to the test itself) we do not need to define a new awaitable here. Maybe just: There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We have a testcase There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh my bad. I thought this was targeting |
||
}; | ||
}; | ||
|
||
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}} | ||
} |
Uh oh!
There was an error while loading. Please reload this page.