1*a1ffba8dSChuanqi Xu // Tests that we wouldn't generate an allocation call in global scope with (std::size_t, p0, ..., pn)
2*a1ffba8dSChuanqi Xu // RUN: %clang_cc1 %s -std=c++20 -S -triple x86_64-unknown-linux-gnu -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s
3*a1ffba8dSChuanqi Xu #include "Inputs/coroutine.h"
4*a1ffba8dSChuanqi Xu 
5*a1ffba8dSChuanqi Xu namespace std {
6*a1ffba8dSChuanqi Xu typedef decltype(sizeof(int)) size_t;
7*a1ffba8dSChuanqi Xu }
8*a1ffba8dSChuanqi Xu 
9*a1ffba8dSChuanqi Xu struct Allocator {};
10*a1ffba8dSChuanqi Xu 
11*a1ffba8dSChuanqi Xu struct resumable {
12*a1ffba8dSChuanqi Xu   struct promise_type {
13*a1ffba8dSChuanqi Xu 
get_return_objectresumable::promise_type14*a1ffba8dSChuanqi Xu     resumable get_return_object() { return {}; }
initial_suspendresumable::promise_type15*a1ffba8dSChuanqi Xu     auto initial_suspend() { return std::suspend_always(); }
final_suspendresumable::promise_type16*a1ffba8dSChuanqi Xu     auto final_suspend() noexcept { return std::suspend_always(); }
unhandled_exceptionresumable::promise_type17*a1ffba8dSChuanqi Xu     void unhandled_exception() {}
return_voidresumable::promise_type18*a1ffba8dSChuanqi Xu     void return_void(){};
19*a1ffba8dSChuanqi Xu   };
20*a1ffba8dSChuanqi Xu };
21*a1ffba8dSChuanqi Xu 
22*a1ffba8dSChuanqi Xu void *operator new(std::size_t, void *);
23*a1ffba8dSChuanqi Xu 
f1(void *)24*a1ffba8dSChuanqi Xu resumable f1(void *) {
25*a1ffba8dSChuanqi Xu   co_return;
26*a1ffba8dSChuanqi Xu }
27*a1ffba8dSChuanqi Xu 
28*a1ffba8dSChuanqi Xu // CHECK: coro.alloc:
29*a1ffba8dSChuanqi Xu // CHECK-NEXT: [[SIZE:%.+]] = call [[BITWIDTH:.+]] @llvm.coro.size.[[BITWIDTH]]()
30*a1ffba8dSChuanqi Xu // CHECK-NEXT: call {{.*}} ptr @_Znwm([[BITWIDTH]] noundef [[SIZE]])
31