mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 11:16:06 +00:00

D115187 exposed CoroutineSuspendExpr's operand, which makes some nodes to show up twice during the traversal, confusing the check for unsequenced operations. Skip the operand since it's already handled as part of the common expression and get rid of the misleading warnings. https://github.com/llvm/llvm-project/issues/56768 Differential Revision: https://reviews.llvm.org/D142077
31 lines
1.1 KiB
C++
31 lines
1.1 KiB
C++
// This file is to test the mixed use of `std::experimental::coroutine*` and `std::coroutine*`
|
|
// wouldn't make the compiler to crash and emit the diagnostic message correctly.
|
|
// RUN: %clang_cc1 -verify -std=c++20 -fsyntax-only %s
|
|
|
|
#include "Inputs/std-coroutine-exp-namespace.h"
|
|
#include "Inputs/std-coroutine.h" // Second
|
|
|
|
struct my_awaitable {
|
|
bool await_ready() noexcept;
|
|
void await_suspend(std::experimental::coroutine_handle<> coro) noexcept;
|
|
void await_resume() noexcept;
|
|
};
|
|
|
|
struct promise_void {
|
|
void get_return_object();
|
|
my_awaitable initial_suspend();
|
|
my_awaitable final_suspend() noexcept;
|
|
void return_void();
|
|
void unhandled_exception();
|
|
};
|
|
|
|
template <>
|
|
struct std::coroutine_traits<void> { using promise_type = promise_void; };
|
|
|
|
void test() {
|
|
co_return; // expected-error {{mixed use of std and std::experimental namespaces for coroutine components}}
|
|
// expected-warning@-1{{support for 'std::experimental::coroutine_traits' will be removed}}
|
|
// expected-note@Inputs/std-coroutine-exp-namespace.h:8 {{'coroutine_traits' declared here}}
|
|
// expected-note@Inputs/std-coroutine.h:18 {{'coroutine_traits' declared here}}
|
|
}
|