Skip to content

Commit dc8f6a8

Browse files
authored
[clang] coroutine: generate valid mangled name in CodeGenFunction::generateAwaitSuspendWrapper (#89731)
Fixes #89723
1 parent 3ae10fd commit dc8f6a8

File tree

4 files changed

+11
-13
lines changed

4 files changed

+11
-13
lines changed

clang/lib/CodeGen/CGCoroutine.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,8 @@ llvm::Function *
413413
CodeGenFunction::generateAwaitSuspendWrapper(Twine const &CoroName,
414414
Twine const &SuspendPointName,
415415
CoroutineSuspendExpr const &S) {
416-
std::string FuncName = "__await_suspend_wrapper_";
417-
FuncName += CoroName.str();
418-
FuncName += '_';
419-
FuncName += SuspendPointName.str();
416+
std::string FuncName =
417+
(CoroName + ".__await_suspend_wrapper__" + SuspendPointName).str();
420418

421419
ASTContext &C = getContext();
422420

clang/test/CodeGenCoroutines/coro-await.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ extern "C" void f0() {
7373
// ---------------------------
7474
// Call coro.await.suspend
7575
// ---------------------------
76-
// CHECK-NEXT: call void @llvm.coro.await.suspend.void(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @__await_suspend_wrapper_f0_await)
76+
// CHECK-NEXT: call void @llvm.coro.await.suspend.void(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @f0.__await_suspend_wrapper__await)
7777
// -------------------------
7878
// Generate a suspend point:
7979
// -------------------------
@@ -100,7 +100,7 @@ extern "C" void f0() {
100100
// CHECK: call i8 @llvm.coro.suspend(token %[[FINALSP_ID]], i1 true)
101101

102102
// Await suspend wrapper
103-
// CHECK: define{{.*}} @__await_suspend_wrapper_f0_await(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
103+
// CHECK: define{{.*}} @f0.__await_suspend_wrapper__await(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
104104
// CHECK: store ptr %[[AWAITABLE_ARG]], ptr %[[AWAITABLE_TMP:.+]],
105105
// CHECK: store ptr %[[FRAME_ARG]], ptr %[[FRAME_TMP:.+]],
106106
// CHECK: %[[AWAITABLE:.+]] = load ptr, ptr %[[AWAITABLE_TMP]]
@@ -149,7 +149,7 @@ extern "C" void f1(int) {
149149
// ---------------------------
150150
// Call coro.await.suspend
151151
// ---------------------------
152-
// CHECK-NEXT: %[[YES:.+]] = call i1 @llvm.coro.await.suspend.bool(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @__await_suspend_wrapper_f1_yield)
152+
// CHECK-NEXT: %[[YES:.+]] = call i1 @llvm.coro.await.suspend.bool(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @f1.__await_suspend_wrapper__yield)
153153
// -------------------------------------------
154154
// See if await_suspend decided not to suspend
155155
// -------------------------------------------
@@ -162,7 +162,7 @@ extern "C" void f1(int) {
162162
// CHECK: call void @_ZN13suspend_maybe12await_resumeEv(ptr {{[^,]*}} %[[AWAITABLE]])
163163

164164
// Await suspend wrapper
165-
// CHECK: define {{.*}} i1 @__await_suspend_wrapper_f1_yield(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
165+
// CHECK: define {{.*}} i1 @f1.__await_suspend_wrapper__yield(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
166166
// CHECK: store ptr %[[AWAITABLE_ARG]], ptr %[[AWAITABLE_TMP:.+]],
167167
// CHECK: store ptr %[[FRAME_ARG]], ptr %[[FRAME_TMP:.+]],
168168
// CHECK: %[[AWAITABLE:.+]] = load ptr, ptr %[[AWAITABLE_TMP]]
@@ -370,7 +370,7 @@ extern "C" void TestTailcall() {
370370
// ---------------------------
371371
// Call coro.await.suspend
372372
// ---------------------------
373-
// CHECK-NEXT: %[[RESUMED:.+]] = call ptr @llvm.coro.await.suspend.handle(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @__await_suspend_wrapper_TestTailcall_await)
373+
// CHECK-NEXT: %[[RESUMED:.+]] = call ptr @llvm.coro.await.suspend.handle(ptr %[[AWAITABLE]], ptr %[[FRAME]], ptr @TestTailcall.__await_suspend_wrapper__await)
374374
// CHECK-NEXT: call void @llvm.coro.resume(ptr %[[RESUMED]])
375375
// CHECK-NEXT: %[[OUTCOME:.+]] = call i8 @llvm.coro.suspend(token %[[SUSPEND_ID]], i1 false)
376376
// CHECK-NEXT: switch i8 %[[OUTCOME]], label %[[RET_BB:.+]] [
@@ -379,7 +379,7 @@ extern "C" void TestTailcall() {
379379
// CHECK-NEXT: ]
380380

381381
// Await suspend wrapper
382-
// CHECK: define {{.*}} ptr @__await_suspend_wrapper_TestTailcall_await(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
382+
// CHECK: define {{.*}} ptr @TestTailcall.__await_suspend_wrapper__await(ptr {{[^,]*}} %[[AWAITABLE_ARG:.+]], ptr {{[^,]*}} %[[FRAME_ARG:.+]])
383383
// CHECK: store ptr %[[AWAITABLE_ARG]], ptr %[[AWAITABLE_TMP:.+]],
384384
// CHECK: store ptr %[[FRAME_ARG]], ptr %[[FRAME_TMP:.+]],
385385
// CHECK: %[[AWAITABLE:.+]] = load ptr, ptr %[[AWAITABLE_TMP]]

clang/test/CodeGenCoroutines/coro-dwarf.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ void f_coro(int val, MoveOnly moParam, MoveAndCopy mcParam) {
7171
// CHECK: !{{[0-9]+}} = !DILocalVariable(name: "mcParam", arg: 3, scope: ![[SP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, type: !{{[0-9]+}})
7272
// CHECK: !{{[0-9]+}} = !DILocalVariable(name: "__promise",
7373

74-
// CHECK: !{{[0-9]+}} = distinct !DISubprogram(linkageName: "__await_suspend_wrapper__Z6f_coroi8MoveOnly11MoveAndCopy_init"
74+
// CHECK: !{{[0-9]+}} = distinct !DISubprogram(linkageName: "_Z6f_coroi8MoveOnly11MoveAndCopy.__await_suspend_wrapper__init"
7575
// CHECK-NEXT: !{{[0-9]+}} = !DIFile
7676
// CHECK-NEXT: !{{[0-9]+}} = !DISubroutineType
7777
// CHECK-NEXT: !{{[0-9]+}} = !DILocalVariable(arg: 1,
7878
// CHECK-NEXT: !{{[0-9]+}} = !DILocation
7979
// CHECK-NEXT: !{{[0-9]+}} = !DILocalVariable(arg: 2,
8080

81-
// CHECK: !{{[0-9]+}} = distinct !DISubprogram(linkageName: "__await_suspend_wrapper__Z6f_coroi8MoveOnly11MoveAndCopy_final"
81+
// CHECK: !{{[0-9]+}} = distinct !DISubprogram(linkageName: "_Z6f_coroi8MoveOnly11MoveAndCopy.__await_suspend_wrapper__final"
8282
// CHECK-NEXT: !{{[0-9]+}} = !DILocalVariable(arg: 1,
8383
// CHECK-NEXT: !{{[0-9]+}} = !DILocation
8484
// CHECK-NEXT: !{{[0-9]+}} = !DILocalVariable(arg: 2,

clang/test/CodeGenCoroutines/pr65054.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@ MyTask FooBar() {
4848
}
4949

5050
// CHECK-O0: define{{.*}}@_Z6FooBarv.resume
51-
// CHECK-O0: call{{.*}}@__await_suspend_wrapper__Z6FooBarv_await(
51+
// CHECK-O0: call{{.*}}@_Z6FooBarv.__await_suspend_wrapper__await(
5252
// CHECK-O0-NOT: store
5353
// CHECK-O0: ret void

0 commit comments

Comments
 (0)