105/105 regression tests pass (+ffi-objc-call-07-fp-hfa-return). Same round-trip pattern as 1.8 — register an Obj-C class at runtime with class_addMethod, IMP returns specific non-zero values, #objc_call reads them back — but for an all-double 32 B HFA instead of a 24 B int aggregate. Locks in the f32-vs-f64 landmine that bit us when we first wrote safeAreaInsets in uikit.sx: the homogeneous-float-aggregate ABI routes 1..4 f32 or f64 fields through v0..v3 (AAPCS64) / xmm0..xmm3 (SysV AMD64) WITHOUT integer coercion. As long as the LLVM call-site function type carries the precise struct (which our `objc_msg_send` arm does), the backend lowers it correctly. This is the smaller cousin of 1.8 — 1.8 needed an emit_llvm code change to make the sret transform work; 1.9 needs no codegen change because HFAs of any size up to v0..v3 stay register-resident. The test just pins that path with a real, value-bearing IMP so a future ABI-rule shake-up has a regression net.
3 lines
67 B
Plaintext
3 lines
67 B
Plaintext
addMethod = true
|
|
insets = (1.500000, 2.500000, 3.500000, 4.500000)
|