authorgravatar for evantypanski@gmail.comEvan Typanski <evantypanski@gmail.com> 2023-01-28 11:53:38-05:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-02-01 21:45:53+02:00
log86ec26b1f00ce9ee2a9d559a1ca0415d05a9b908
treeab11f3eefe6bf344b9e3b27ede61f59835e20cdf
parent3c8d9681946630a1d953cb2c37cad248c7445093

translate-c: Fix types on assign expression bool


2 files changed, 20 insertions(+), 1 deletions(-)

src/translate_c.zig+4-1
......@@ -4519,7 +4519,10 @@ fn transCreateNodeAssign(
45194519 defer block_scope.deinit();
45204520
45214521 const tmp = try block_scope.makeMangledName(c, "tmp");
4522 const rhs_node = try transExpr(c, &block_scope.base, rhs, .used);
4522 var rhs_node = try transExpr(c, &block_scope.base, rhs, .used);
4523 if (!exprIsBooleanType(lhs) and isBoolRes(rhs_node)) {
4524 rhs_node = try Tag.bool_to_int.create(c.arena, rhs_node);
4525 }
45234526 const tmp_decl = try Tag.var_simple.create(c.arena, .{ .name = tmp, .init = rhs_node });
45244527 try block_scope.statements.append(tmp_decl);
45254528
test/translate_c.zig+16
......@@ -3900,4 +3900,20 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
39003900 \\pub const ZERO = @as(c_int, 0);
39013901 \\pub const WORLD = @as(c_int, 0o0000123);
39023902 });
3903
3904 cases.add("Assign expression from bool to int",
3905 \\void foo(void) {
3906 \\ int a;
3907 \\ if (a = 1 > 0) {}
3908 \\}
3909 , &[_][]const u8{
3910 \\pub export fn foo() void {
3911 \\ var a: c_int = undefined;
3912 \\ if ((blk: {
3913 \\ const tmp = @boolToInt(@as(c_int, 1) > @as(c_int, 0));
3914 \\ a = tmp;
3915 \\ break :blk tmp;
3916 \\ }) != 0) {}
3917 \\}
3918 });
39033919}