@@ -1036,12 +1036,15 @@ getAsyncClosureEntryPointAndContextSize(void *function) {
1036
1036
SWIFT_CC (swift)
1037
1037
void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
1038
1038
OpaqueValue *closureContext,
1039
- const Metadata *futureResultType ) {
1039
+ const Metadata *futureResultTypeMetadata ) {
1040
1040
// Ensure that we're currently in a synchronous context.
1041
1041
if (swift_task_getCurrent ()) {
1042
1042
swift_Concurrency_fatalError (0 , " called runInline within an async context" );
1043
1043
}
1044
1044
1045
+ ResultTypeInfo futureResultType;
1046
+ futureResultType.metadata = futureResultTypeMetadata;
1047
+
1045
1048
// Unpack the asynchronous function pointer.
1046
1049
FutureAsyncSignature::FunctionType *closure;
1047
1050
size_t closureContextSize;
@@ -1073,7 +1076,7 @@ void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
1073
1076
size_t taskCreateFlags = 1 << TaskCreateFlags::Task_IsInlineTask;
1074
1077
1075
1078
auto taskAndContext = swift_task_create_common (
1076
- taskCreateFlags, &option, futureResultType,
1079
+ taskCreateFlags, &option, futureResultType. metadata ,
1077
1080
reinterpret_cast <TaskContinuationFunction *>(closure), closureContext,
1078
1081
/* initialContextSize=*/ closureContextSize);
1079
1082
@@ -1084,8 +1087,7 @@ void swift::swift_task_run_inline(OpaqueValue *result, void *closureAFP,
1084
1087
1085
1088
// Copy the result out to our caller.
1086
1089
auto *futureResult = taskAndContext.Task ->futureFragment ()->getStoragePtr ();
1087
- futureResultType->getValueWitnesses ()->initializeWithCopy (
1088
- result, futureResult, futureResultType);
1090
+ futureResultType.vw_initializeWithCopy (result, futureResult);
1089
1091
1090
1092
// Destroy the task.
1091
1093
taskAndContext.Task ->~AsyncTask ();
0 commit comments