101/101 regression tests pass (+ffi-objc-call-03-selector-sharing).
Test exercises four call sites — three sharing "init" and one
"release" — to pin the multi-site / multi-selector lowering before
1.5 changes how SEL lookups are cached.
Runtime behavior: identical before and after 1.5 (all call sites
hit nil receivers; libobjc returns 0 for void). The improvement is
visible only in the emitted IR — today:
$ ./zig-out/bin/sx ir examples/ffi-objc-call-03-selector-sharing.sx \\
| grep -c "call ptr @sel_registerName"
4
After 1.5 (planned): 2 — one `sel_registerName` per unique selector
string, materialized into a static `OBJC_SELECTOR_REFERENCES_<sel>`
global at module init, then loaded at each call site. Matches the
shape clang produces for `@selector(...)`. Worth re-running the
above grep after 1.5 lands as a manual sanity check.
The IR-shape snapshot harness (auto-diff of `sx ir` output) is
deferred; for now we verify by eye.