brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · d4f67a7 Raw
51 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -std=c++20 \2// RUN:   -O0 %s -o - | FileCheck %s3// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -std=c++20 \4// RUN:   -fno-inline -O0 %s -o - | FileCheck %s5 6namespace std {7 8struct handle {};9 10struct awaitable {11  bool await_ready() noexcept { return true; }12  // CHECK-NOT: await_suspend13  inline void __attribute__((__always_inline__)) await_suspend(handle) noexcept {}14  bool await_resume() noexcept { return true; }15};16 17template <typename T>18struct coroutine_handle {19  static handle from_address(void *address) noexcept { return {}; }20};21 22template <typename T = void>23struct coroutine_traits {24  struct promise_type {25    awaitable initial_suspend() { return {}; }26    awaitable final_suspend() noexcept { return {}; }27    void return_void() {}28    T get_return_object() { return T(); }29    void unhandled_exception() {}30  };31};32} // namespace std33 34// CHECK-LABEL: @_Z3foov35// CHECK-LABEL: entry:36// CHECK: %ref.tmp.reload.addr = getelementptr37// CHECK: %ref.tmp3.reload.addr = getelementptr38void foo() { co_return; }39 40// Check that bar is not inlined even it's marked as always_inline.41 42// CHECK-LABEL:   define {{.*}} void @_Z3bazv()43// CHECK:         call void @_Z3barv(44__attribute__((__always_inline__)) void bar() {45  co_return;46}47void baz() {48  bar();49  co_return;50}51