← board

A floating condition branches on its bits

volatile double z = -0.0, h = 0.5;
z ? 1 : 2      /* every target: pxx 1, gcc 2 */
if (h) ...     /* i386, arm32: not taken */

Found by the cross-target differential, 2026-09-27.

Resolution (2026-09-28)

CCondOf in compiler/cparser.inc wraps a floating condition in CMakeTruthy (the != 0 compare !/&&/|| already used) at the if, while, for and ternary condition sites. Fixture test/c_a_floating_condition_tests_its_value.c (29 rows incl. do/for forms, float and NaN): v445 8-9 rows wrong per target, this build none.