@@ -1036,12 +1036,15 @@ getAsyncClosureEntryPointAndContextSize(void *function) {
10361036SWIFT_CC (swift)
10371037void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
10381038 OpaqueValue *closureContext,
1039- const Metadata *futureResultType ) {
1039+ const Metadata *futureResultTypeMetadata ) {
10401040 // Ensure that we're currently in a synchronous context.
10411041 if (swift_task_getCurrent ()) {
10421042 swift_Concurrency_fatalError (0 , " called runInline within an async context" );
10431043 }
10441044
1045+ ResultTypeInfo futureResultType;
1046+ futureResultType.metadata = futureResultTypeMetadata;
1047+
10451048 // Unpack the asynchronous function pointer.
10461049 FutureAsyncSignature::FunctionType *closure;
10471050 size_t closureContextSize;
@@ -1073,7 +1076,7 @@ void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
10731076 size_t taskCreateFlags = 1 << TaskCreateFlags::Task_IsInlineTask;
10741077
10751078 auto taskAndContext = swift_task_create_common (
1076- taskCreateFlags, &option, futureResultType,
1079+ taskCreateFlags, &option, futureResultType. metadata ,
10771080 reinterpret_cast <TaskContinuationFunction *>(closure), closureContext,
10781081 /* initialContextSize=*/ closureContextSize);
10791082
@@ -1084,8 +1087,7 @@ void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
10841087
10851088 // Copy the result out to our caller.
10861089 auto *futureResult = taskAndContext.Task ->futureFragment ()->getStoragePtr ();
1087- futureResultType->getValueWitnesses ()->initializeWithCopy (
1088- result, futureResult, futureResultType);
1090+ futureResultType.vw_initializeWithCopy (result, futureResult);
10891091
10901092 // Destroy the task.
10911093 taskAndContext.Task ->~AsyncTask ();
0 commit comments