mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 22:56:05 +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
32 lines
1.2 KiB
C++
32 lines
1.2 KiB
C++
// This file is to test the mixed use of `std::experimental::coroutine_traits` and `std::coroutine_traits`
|
|
// which is similar to coroutine-mixed-exp-namespace. This file tests the relative order of
|
|
// included header wouldn't affect the diagnostic messages.
|
|
// RUN: %clang_cc1 -verify -std=c++20 -fsyntax-only %s
|
|
|
|
#include "Inputs/std-coroutine.h" // First
|
|
#include "Inputs/std-coroutine-exp-namespace.h"
|
|
|
|
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}}
|
|
}
|