Skip to content

Commit dc8e72a

Browse files
committed
Prevent potential for condfail with owned task executor parameter
While the new parameter is added in a compatible way where code which does not refer to it will get a defaulted nil value; since we refer to a new parameter name in source, we need to guard it with a language feature -- as old compilers will not have this new name available. This should prevent a potential condfail issue.
1 parent b47b5cc commit dc8e72a

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

include/swift/Basic/Features.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ BASELINE_LANGUAGE_FEATURE(BuiltinBuildTaskExecutorRef, 0, "TaskExecutor-building
150150
BASELINE_LANGUAGE_FEATURE(BuiltinBuildExecutor, 0, "Executor-building builtins")
151151
BASELINE_LANGUAGE_FEATURE(BuiltinBuildComplexEqualityExecutor, 0, "Executor-building for 'complexEquality executor' builtins")
152152
BASELINE_LANGUAGE_FEATURE(BuiltinBuildMainExecutor, 0, "MainActor executor building builtin")
153+
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncTaskOwnedTaskExecutor, 0, "Task create with owned TaskExecutor")
153154
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncTaskInGroup, 0, "Task create in task group builtin with extra flags")
154155
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncTaskInGroupWithExecutor, 0, "Task create in task group builtin with extra flags")
155156
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncDiscardingTaskInGroup, 0, "Task create in discarding task group builtin, accounting for the Void return type")

stdlib/public/Concurrency/Task+TaskExecutor.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,12 +236,16 @@ extension Task where Failure == Never {
236236
addPendingGroupTaskUnconditionally: false,
237237
isDiscardingTask: false)
238238

239+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
239240
let (task, _) = Builtin.createTask(
240241
flags: flags,
241242
initialTaskExecutorConsuming: taskExecutor,
242243
operation: operation)
243244

244245
self._task = task
246+
#else
247+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
248+
#endif
245249
}
246250
}
247251

@@ -292,12 +296,16 @@ extension Task where Failure == Error {
292296
addPendingGroupTaskUnconditionally: false,
293297
isDiscardingTask: false)
294298

299+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
295300
let (task, _) = Builtin.createTask(
296301
flags: flags,
297302
initialTaskExecutorConsuming: taskExecutor,
298303
operation: operation)
299304

300305
self._task = task
306+
#else
307+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
308+
#endif
301309
}
302310
}
303311

@@ -346,13 +354,17 @@ extension Task where Failure == Never {
346354
addPendingGroupTaskUnconditionally: false,
347355
isDiscardingTask: false)
348356

357+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
349358
let (task, _) = Builtin.createTask(
350359
flags: flags,
351360
// initialTaskExecutor: executorBuiltin, deprecated
352361
initialTaskExecutorConsuming: taskExecutor,
353362
operation: operation)
354363

355364
return Task(task)
365+
#else
366+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
367+
#endif
356368
}
357369
}
358370

@@ -401,12 +413,16 @@ extension Task where Failure == Error {
401413
addPendingGroupTaskUnconditionally: false,
402414
isDiscardingTask: false)
403415

416+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
404417
let (task, _) = Builtin.createTask(
405418
flags: flags,
406419
initialTaskExecutorConsuming: taskExecutor,
407420
operation: operation)
408421

409422
return Task(task)
423+
#else
424+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
425+
#endif
410426
}
411427
}
412428

stdlib/public/Concurrency/TaskGroup+TaskExecutor.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,15 @@ extension TaskGroup {
5050
let builtinSerialExecutor =
5151
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
5252

53+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
5354
_ = Builtin.createTask(flags: flags,
5455
initialSerialExecutor: builtinSerialExecutor,
5556
taskGroup: _group,
5657
initialTaskExecutorConsuming: taskExecutor,
5758
operation: operation)
59+
#else
60+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
61+
#endif
5862
}
5963

6064
/// Adds a child task to the group and enqueue it on the specified executor, unless the group has been canceled.
@@ -97,12 +101,16 @@ extension TaskGroup {
97101
let builtinSerialExecutor =
98102
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
99103

104+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
100105
_ = Builtin.createTask(flags: flags,
101106
initialSerialExecutor: builtinSerialExecutor,
102107
taskGroup: _group,
103108
initialTaskExecutorConsuming: taskExecutor,
104109
operation: operation)
105110
return true
111+
#else
112+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
113+
#endif
106114
}
107115
}
108116

@@ -143,11 +151,15 @@ extension ThrowingTaskGroup {
143151
let builtinSerialExecutor =
144152
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
145153

154+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
146155
_ = Builtin.createTask(flags: flags,
147156
initialSerialExecutor: builtinSerialExecutor,
148157
taskGroup: _group,
149158
initialTaskExecutorConsuming: taskExecutor,
150159
operation: operation)
160+
#else
161+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
162+
#endif
151163
}
152164

153165
/// Adds a child task to the group and enqueue it on the specified executor, unless the group has been canceled.
@@ -186,12 +198,16 @@ extension ThrowingTaskGroup {
186198
let builtinSerialExecutor =
187199
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
188200

201+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
189202
_ = Builtin.createTask(flags: flags,
190203
initialSerialExecutor: builtinSerialExecutor,
191204
taskGroup: _group,
192205
initialTaskExecutorConsuming: taskExecutor,
193206
operation: operation)
194207
return true
208+
#else
209+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
210+
#endif
195211
}
196212
}
197213

@@ -232,11 +248,15 @@ extension DiscardingTaskGroup {
232248
let builtinSerialExecutor =
233249
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
234250

251+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
235252
_ = Builtin.createTask(flags: flags,
236253
initialSerialExecutor: builtinSerialExecutor,
237254
taskGroup: _group,
238255
initialTaskExecutorConsuming: taskExecutor,
239256
operation: operation)
257+
#else
258+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
259+
#endif
240260
}
241261

242262
/// Adds a child task to the group and set it up with the passed in task executor preference,
@@ -280,12 +300,16 @@ extension DiscardingTaskGroup {
280300
let builtinSerialExecutor =
281301
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
282302

303+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
283304
_ = Builtin.createTask(flags: flags,
284305
initialSerialExecutor: builtinSerialExecutor,
285306
taskGroup: _group,
286307
initialTaskExecutorConsuming: taskExecutor,
287308
operation: operation)
288309
return true
310+
#else
311+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
312+
#endif
289313
}
290314
}
291315

@@ -326,11 +350,15 @@ extension ThrowingDiscardingTaskGroup {
326350
let builtinSerialExecutor =
327351
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
328352

353+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
329354
_ = Builtin.createTask(flags: flags,
330355
initialSerialExecutor: builtinSerialExecutor,
331356
taskGroup: _group,
332357
initialTaskExecutorConsuming: taskExecutor,
333358
operation: operation)
359+
#else
360+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
361+
#endif
334362
}
335363

336364
/// Adds a child task to the group and set it up with the passed in task executor preference,
@@ -374,12 +402,16 @@ extension ThrowingDiscardingTaskGroup {
374402
let builtinSerialExecutor =
375403
Builtin.extractFunctionIsolation(operation)?.unownedExecutor.executor
376404

405+
#if $BuiltinCreateAsyncTaskOwnedTaskExecutor
377406
_ = Builtin.createTask(flags: flags,
378407
initialSerialExecutor: builtinSerialExecutor,
379408
taskGroup: _group,
380409
initialTaskExecutorConsuming: taskExecutor,
381410
operation: operation)
382411
return true
412+
#else
413+
fatalError("Unsupported Swift compiler, missing support for BuiltinCreateAsyncTaskOwnedTaskExecutor")
414+
#endif
383415
}
384416
}
385417

0 commit comments

Comments
 (0)