@@ -394,7 +394,7 @@ static const unsigned long dispatchSwiftObjectType = 1;
394394
395395#if !SWIFT_CONCURRENCY_EMBEDDED
396396
397- FullMetadata<DispatchClassMetadata> jobHeapMetadata = {
397+ static FullMetadata<DispatchClassMetadata> jobHeapMetadata = {
398398 {
399399 {
400400 /* type layout*/ nullptr ,
@@ -433,6 +433,17 @@ static FullMetadata<DispatchClassMetadata> taskHeapMetadata = {
433433 }
434434};
435435
436+
437+ const void *const swift::_swift_concurrency_debug_jobMetadata =
438+ static_cast <Metadata *>(&jobHeapMetadata);
439+ const void *const swift::_swift_concurrency_debug_asyncTaskMetadata =
440+ static_cast <Metadata *>(&taskHeapMetadata);
441+
442+ const HeapMetadata *swift::jobHeapMetadataPtr =
443+ static_cast <HeapMetadata *>(&jobHeapMetadata);
444+ const HeapMetadata *swift::taskHeapMetadataPtr =
445+ static_cast <HeapMetadata *>(&taskHeapMetadata);
446+
436447#else // SWIFT_CONCURRENCY_EMBEDDED
437448
438449// This matches the embedded class metadata layout in IRGen and in
@@ -451,8 +462,6 @@ static EmbeddedClassMetadata taskHeapMetadata = {
451462 0 , &destroyTask, 0 ,
452463};
453464
454- #endif
455-
456465const void *const swift::_swift_concurrency_debug_jobMetadata =
457466 (Metadata *)(&jobHeapMetadata);
458467const void *const swift::_swift_concurrency_debug_asyncTaskMetadata =
@@ -463,6 +472,8 @@ const HeapMetadata *swift::jobHeapMetadataPtr =
463472const HeapMetadata *swift::taskHeapMetadataPtr =
464473 (HeapMetadata *)(&taskHeapMetadata);
465474
475+ #endif
476+
466477static void completeTaskImpl (AsyncTask *task,
467478 AsyncContext *context,
468479 SwiftError *error) {
@@ -986,13 +997,11 @@ swift_task_create_commonImpl(size_t rawTaskCreateFlags,
986997 // Initialize the refcount bits to "immortal", so that
987998 // ARC operations don't have any effect on the task.
988999 task = new (allocation)
989- AsyncTask (reinterpret_cast <ClassMetadata *>(&taskHeapMetadata),
990- InlineRefCounts::Immortal, jobFlags, function, initialContext,
991- captureCurrentVoucher);
992- } else {
993- task = new (allocation)
994- AsyncTask (reinterpret_cast <ClassMetadata *>(&taskHeapMetadata), jobFlags,
1000+ AsyncTask (taskHeapMetadataPtr, InlineRefCounts::Immortal, jobFlags,
9951001 function, initialContext, captureCurrentVoucher);
1002+ } else {
1003+ task = new (allocation) AsyncTask (taskHeapMetadataPtr, jobFlags, function,
1004+ initialContext, captureCurrentVoucher);
9961005 }
9971006
9981007 // Initialize the child fragment if applicable.
0 commit comments