
Close https://github.com/llvm/llvm-project/issues/60545. Previously, we would only pass the size parameter to the deallocation function if the type is completely the same. But it is good enough to make them unqualified the smae.
44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
// Tests that the behavior will be good if there are multiple operator delete in the promise_type.
|
|
// RUN: %clang_cc1 %s -std=c++20 %s -fsyntax-only -verify
|
|
// expected-no-diagnostics
|
|
|
|
#include "Inputs/std-coroutine.h"
|
|
|
|
namespace std {
|
|
typedef __SIZE_TYPE__ size_t;
|
|
enum class align_val_t : size_t {};
|
|
}
|
|
|
|
struct task {
|
|
struct promise_type {
|
|
auto initial_suspend() { return std::suspend_always{}; }
|
|
auto final_suspend() noexcept { return std::suspend_always{}; }
|
|
auto get_return_object() { return task{}; }
|
|
void unhandled_exception() {}
|
|
void return_value(int) {}
|
|
|
|
void operator delete(void *ptr, void *meaningless_placeholder);
|
|
void operator delete(void *ptr);
|
|
};
|
|
};
|
|
|
|
task f() {
|
|
co_return 43;
|
|
}
|
|
|
|
// From https://github.com/llvm/llvm-project/issues/60545
|
|
struct generator {
|
|
struct promise_type {
|
|
generator get_return_object();
|
|
std::suspend_always initial_suspend();
|
|
std::suspend_always final_suspend() noexcept;
|
|
void return_void();
|
|
[[noreturn]] void unhandled_exception();
|
|
|
|
static void* operator new(std::size_t size);
|
|
static void operator delete(void* ptr, const std::size_t size);
|
|
};
|
|
};
|
|
|
|
generator goo() { co_return; }
|