[clang] 4954196 - [NFC] Add test of sized deallocation for coroutines

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 5 23:47:50 PDT 2022


Author: Chuanqi Xu
Date: 2022-09-06T14:44:16+08:00
New Revision: 495419628bbab1a99cfc00d0c44b877bfc8e4a14

URL: https://github.com/llvm/llvm-project/commit/495419628bbab1a99cfc00d0c44b877bfc8e4a14
DIFF: https://github.com/llvm/llvm-project/commit/495419628bbab1a99cfc00d0c44b877bfc8e4a14.diff

LOG: [NFC] Add test of sized deallocation for coroutines

[dcl.fct.def.coroutine]p12 says:

> If both a usual deallocation function with only a pointer parameter
> and a usual deallocation function with both a pointer parameter and a
> size parameter are found, then the selected deallocation function
> shall be the one with two parameters.

However, the sized deallocation function is disabled by default for ABI
reasons. This leads the sentence never get tested and covered. This
commit tries to add a test for it

Added: 
    clang/test/CodeGenCoroutines/coro-dealloc.cpp

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGenCoroutines/coro-dealloc.cpp b/clang/test/CodeGenCoroutines/coro-dealloc.cpp
new file mode 100644
index 0000000000000..1f7d04b3689eb
--- /dev/null
+++ b/clang/test/CodeGenCoroutines/coro-dealloc.cpp
@@ -0,0 +1,35 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++20 \
+// RUN:   -S -emit-llvm %s -o - -disable-llvm-passes \
+// RUN:   -fsized-deallocation \
+// RUN:   | FileCheck %s
+
+#include "Inputs/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) {}
+  };
+};
+
+// Test the compiler will chose sized deallocation correctly.
+// This is only enabled with `-fsized-deallocation` which is off by default.
+void operator delete(void *ptr, std::size_t size) noexcept;
+
+// CHECK: define{{.*}}@_Z1fv
+// CHECK: %[[coro_free:.+]] = call{{.*}}@llvm.coro.free
+// CHECK: coro.free:
+// CHECK: %[[coro_size:.+]] = call{{.*}}@llvm.coro.size
+// CHECK: call{{.*}}void @_ZdlPvm(ptr{{.*}}%[[coro_free]], i64{{.*}}%[[coro_size]])
+
+task f() {
+  co_return 43;
+}


        


More information about the cfe-commits mailing list