BridgeJS: Remove forced capture workaround in async thunk body closures once swiftlang/swift#89715 lands
@krodak y travaille déjà.
Depuis le 10/6/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Tracks removal of the workaround introduced in #760.
Context
A zero-parameter async throws(JSException) export generates a captureless _bjs_makePromise body closure, which lowers via thin_to_thick_function and miscompiles on Wasm (swiftlang/swift#89320): the thrown error is corrupted across the async unwind, trapping in Promise_reject or rejecting with a garbage value. #760 works around this at the codegen level by forcing a capture in the emitted body closure (the capture must also be read in the body, since an unread capture list entry is dropped by capture analysis and the closure stays thin):
let __bjs_capture = 0
return _bjs_makePromise(resolve: Promise_resolve_SS, reject: Promise_reject) { [__bjs_capture] () async throws(JSException) -> String in
_ = __bjs_capture
return try await ping()
}
What to do once the compiler fix ships
The proper fix is swiftlang/swift#89715 (IRGen: fix async typed throws miscompiles on Wasm). Once it is available in the oldest Swift toolchain JavaScriptKit supports:
- Remove
asyncThrowsBodyForcesCaptureand the forced-capture emission fromExportedThunkBuilderinPlugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift. - Regenerate snapshots and the AoT-committed bindings.
- Keep the
zeroArgAsyncThrowsend-to-end regression test as the guard that the reject path still works without the workaround.
- Langage dominant
- Swift
- Étoiles
- 986
- Forks
- 76
- Merge moyen
- 21 h 11 min
- PR mergées (30 j)
- 4
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de swiftwasm/JavaScriptKit
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
swiftwasm/JavaScriptKit#793 ·
-
swiftwasm/JavaScriptKit#785 · 1 personne assignée ·
-
[SwiftBuild] Preserve duplicate archive members when SwiftBuild expands static archives for linking Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
swiftwasm/JavaScriptKit#781 · 3 commentaires ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
swiftwasm/JavaScriptKit#773 ·
-
swiftwasm/JavaScriptKit#767 · 1 personne assignée ·
Toutes les issues de swiftwasm/JavaScriptKit
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
area:general bug P1 security
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
uttrflow/uttrflow-swift#1333 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
maxgoedjen/secretive#840 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
manaflow-ai/cmux#13763 ·