diff --git a/stage0/sema.c b/stage0/sema.c index a78e22ac67..d136583383 100644 --- a/stage0/sema.c +++ b/stage0/sema.c @@ -726,6 +726,16 @@ static AirInstRef semaCoerce( if (src_ty == TYPE_NONE || target_ty == TYPE_NONE) return ref; if (src_ty == IP_INDEX_COMPTIME_INT_TYPE) { + // comptime_int → bool: 0 → false, 1 → true. + // Ported from Sema.zig coerce comptime_int → bool path. + if (target_ty == IP_INDEX_BOOL_TYPE && AIR_REF_IS_IP(ref)) { + InternPoolKey src_key = ipIndexToKey(sema->ip, AIR_REF_TO_IP(ref)); + if (src_key.tag == IP_KEY_INT) { + return AIR_REF_FROM_IP(src_key.data.int_val.value_lo != 0 + ? IP_INDEX_BOOL_TRUE + : IP_INDEX_BOOL_FALSE); + } + } // comptime_int → float type: convert int to float value. // Ported from Sema.zig coerce comptime_int → float path. if ((floatBits(target_ty) > 0