@@ -394,7 +394,7 @@ static const unsigned long dispatchSwiftObjectType = 1;
394
394
395
395
#if !SWIFT_CONCURRENCY_EMBEDDED
396
396
397
- FullMetadata<DispatchClassMetadata> jobHeapMetadata = {
397
+ static FullMetadata<DispatchClassMetadata> jobHeapMetadata = {
398
398
{
399
399
{
400
400
/* type layout*/ nullptr ,
@@ -433,6 +433,17 @@ static FullMetadata<DispatchClassMetadata> taskHeapMetadata = {
433
433
}
434
434
};
435
435
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
+
436
447
#else // SWIFT_CONCURRENCY_EMBEDDED
437
448
438
449
// This matches the embedded class metadata layout in IRGen and in
@@ -451,8 +462,6 @@ static EmbeddedClassMetadata taskHeapMetadata = {
451
462
0 , &destroyTask, 0 ,
452
463
};
453
464
454
- #endif
455
-
456
465
const void *const swift::_swift_concurrency_debug_jobMetadata =
457
466
(Metadata *)(&jobHeapMetadata);
458
467
const void *const swift::_swift_concurrency_debug_asyncTaskMetadata =
@@ -463,6 +472,8 @@ const HeapMetadata *swift::jobHeapMetadataPtr =
463
472
const HeapMetadata *swift::taskHeapMetadataPtr =
464
473
(HeapMetadata *)(&taskHeapMetadata);
465
474
475
+ #endif
476
+
466
477
static void completeTaskImpl (AsyncTask *task,
467
478
AsyncContext *context,
468
479
SwiftError *error) {
@@ -986,13 +997,11 @@ swift_task_create_commonImpl(size_t rawTaskCreateFlags,
986
997
// Initialize the refcount bits to "immortal", so that
987
998
// ARC operations don't have any effect on the task.
988
999
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,
995
1001
function, initialContext, captureCurrentVoucher);
1002
+ } else {
1003
+ task = new (allocation) AsyncTask (taskHeapMetadataPtr, jobFlags, function,
1004
+ initialContext, captureCurrentVoucher);
996
1005
}
997
1006
998
1007
// Initialize the child fragment if applicable.
0 commit comments