You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(perry/ios): perry-ui-ios fails to compile — stale perry_runtime::thread::pin_promise reference #9961
perry-ui-ios fails to compile for an iOS target. foundation_models.rs:108 calls perry_runtime::thread::pin_promise, which no longer exists — it is the only reference to that symbol left in the tree, and it was orphaned when the pinning API moved (last touched by #8700 in August).
error[E0425]: cannot find function `pin_promise` in module `perry_runtime::thread`
--> crates/perry-ui-ios/src/foundation_models.rs:108:37
error: could not compile `perry-ui-ios` (lib) due to 1 previous error
Why it went unnoticed: the crate is #![cfg(target_os = "ios")], so on a macOS host cargo build -p perry-ui-ios compiles it to nothing and the reference is never checked. It only surfaces on an actual iOS target build (--target aarch64-apple-ios-sim).
Fix: pin the cross-thread promise through the current API. The primitive is perry_runtime::gc::pin_object on the promise's GC header; perry_stdlib::common::async_bridge::pin_promise_for_native_resolution(promise_ptr: usize) already wraps exactly this. Route foundation_models.rs to the same mechanism.
CI gap to reconcile: iOS workflows exist (test.yml, simctl-tests.yml). If none of them compiles perry-ui-ios for an iOS target, that is the gate gap that let this land — a compile of this crate for aarch64-apple-ios[-sim] would have caught it. Worth a required build step.
Found while implementing #9954 (TextField padding), which needed an iOS-sim compile to verify.
Fixed by #9963, landed on main via merge train #9972. The train merged as its own branch, so the close-keyword never fired — closing manually, verified on main.
Activity
proggeramlug commentedon Sep 7, 2026
Fixed by #9963, landed on
mainvia merge train #9972. The train merged as its own branch, so the close-keyword never fired — closing manually, verified on main.