From 86ec26b1f00ce9ee2a9d559a1ca0415d05a9b908 Mon Sep 17 00:00:00 2001 From: Evan Typanski Date: Sat, 28 Jan 2023 11:53:38 -0500 Subject: [PATCH] translate-c: Fix types on assign expression bool --- src/translate_c.zig | 5 ++++- test/translate_c.zig | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/translate_c.zig b/src/translate_c.zig index 47a21f5b5c..a6715d161c 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -4519,7 +4519,10 @@ fn transCreateNodeAssign( defer block_scope.deinit(); const tmp = try block_scope.makeMangledName(c, "tmp"); - const rhs_node = try transExpr(c, &block_scope.base, rhs, .used); + var rhs_node = try transExpr(c, &block_scope.base, rhs, .used); + if (!exprIsBooleanType(lhs) and isBoolRes(rhs_node)) { + rhs_node = try Tag.bool_to_int.create(c.arena, rhs_node); + } const tmp_decl = try Tag.var_simple.create(c.arena, .{ .name = tmp, .init = rhs_node }); try block_scope.statements.append(tmp_decl); diff --git a/test/translate_c.zig b/test/translate_c.zig index 4ecb6835f5..d2db895a5a 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -3900,4 +3900,20 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub const ZERO = @as(c_int, 0); \\pub const WORLD = @as(c_int, 0o0000123); }); + + cases.add("Assign expression from bool to int", + \\void foo(void) { + \\ int a; + \\ if (a = 1 > 0) {} + \\} + , &[_][]const u8{ + \\pub export fn foo() void { + \\ var a: c_int = undefined; + \\ if ((blk: { + \\ const tmp = @boolToInt(@as(c_int, 1) > @as(c_int, 0)); + \\ a = tmp; + \\ break :blk tmp; + \\ }) != 0) {} + \\} + }); }