commit 7ef45efd53b7f25a1ebecc0259b00cd01f885a18 (tree)
parent 7795bcd36304d7136a111780486f7ecbf1d3e1ed
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date: Mon, 16 Feb 2026 11:14:11 +0000
astgen.c: boolBinOp: pass coerced_bool_ri and use fullBodyExpr for RHS, matching upstream AstGen.zig
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat:
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/stage0/astgen.c b/stage0/astgen.c
@@ -7541,8 +7541,16 @@ static uint32_t boolBinOp(
uint32_t lhs_node = nd.lhs;
uint32_t rhs_node = nd.rhs;
+ // coerced_bool_ri (AstGen.zig:392).
+ ResultLoc coerced_bool_ri = {
+ .tag = RL_COERCED_TY,
+ .data = ZIR_REF_BOOL_TYPE,
+ .src_node = 0,
+ .ctx = RI_CTX_NONE,
+ };
+
// Evaluate LHS (AstGen.zig:6285).
- uint32_t lhs = expr(gz, scope, lhs_node);
+ uint32_t lhs = exprRl(gz, scope, coerced_bool_ri, lhs_node);
// Reserve the bool_br instruction (payload set later)
// (AstGen.zig:6286).
@@ -7551,9 +7559,10 @@ static uint32_t boolBinOp(
// Evaluate RHS in sub-block (AstGen.zig:6288-6293).
GenZir rhs_scope = makeSubBlock(gz, scope);
- uint32_t rhs = expr(&rhs_scope, &rhs_scope.base, rhs_node);
+ uint32_t rhs
+ = fullBodyExpr(&rhs_scope, &rhs_scope.base, coerced_bool_ri, rhs_node);
- if (!ag->has_compile_errors) {
+ if (!refIsNoReturn(&rhs_scope, rhs)) {
// break_inline from rhs to bool_br (AstGen.zig:6292).
makeBreakInline(&rhs_scope, bool_br, rhs,
(int32_t)rhs_node - (int32_t)rhs_scope.decl_node_index);
diff --git a/stage0/astgen_test.zig b/stage0/astgen_test.zig
@@ -1221,7 +1221,7 @@ const corpus_files = .{
"../test/behavior/bitcast.zig",
"../test/behavior/bitreverse.zig",
"../test/behavior/bit_shifting.zig",
- //"../test/behavior/bool.zig",
+ "../test/behavior/bool.zig",
//"../test/behavior/builtin_functions_returning_void_or_noreturn.zig",
"../test/behavior/byteswap.zig",
"../test/behavior/byval_arg_var.zig",