name: s-user-umode-diff-broken description: ircd-testkit s_user_umode_diff.rs c_char-rot compile failure — FIXED 2026-06-04, now builds/passes metadata: node_type: memory type: project originSessionId: d966d64d-a5c5-4024-a584-97a3061c7ea8#
RESOLVED 2026-06-04 (commit 568a0655). s_user_umode_diff no longer fails — it builds
and passes on aarch64. Include it in P5 regression batches again.
The bug: the test declared its mode-diff buffers [0i8; 64], so .as_mut_ptr() /
CStr::from_ptr produced *mut i8 / *const i8, but on aarch64 std::os::raw::c_char is
u8 (it's i8 on x86_64), mismatching the *const/*mut c_char extern signatures of
c_send_umode/cref_send_umode (4× E0308 at lines 82-85). Fix: declare the buffers
[0 as c_char; 64] (the file already imports c_char) so they're correct on both
signed-char and unsigned-char targets. Host-portability fix; no behavior change.
General lesson (still applies): when an L1 test takes/returns C char buffers, type the
buffer element as c_char, never a hardcoded i8/u8 — the latter only compiles on one
char-signedness. Sibling host-portability gotcha found the same day: [[support-irc-memcmp-host-gated]].
Related: [[p5-s2s-stats-flake]] (the remaining pre-existing non-regression failure in the P5 gate).