| author | |
| committer | |
| log | 86ec26b1f00ce9ee2a9d559a1ca0415d05a9b908 |
| tree | ab11f3eefe6bf344b9e3b27ede61f59835e20cdf |
| parent | 3c8d9681946630a1d953cb2c37cad248c7445093 |
2 files changed, 20 insertions(+), 1 deletions(-)
src/translate_c.zig+4-1| ... | ... | @@ -4519,7 +4519,10 @@ fn transCreateNodeAssign( |
| 4519 | 4519 | defer block_scope.deinit(); |
| 4520 | 4520 | |
| 4521 | 4521 | 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 | } | |
| 4523 | 4526 | const tmp_decl = try Tag.var_simple.create(c.arena, .{ .name = tmp, .init = rhs_node }); |
| 4524 | 4527 | try block_scope.statements.append(tmp_decl); |
| 4525 | 4528 |
test/translate_c.zig+16| ... | ... | @@ -3900,4 +3900,20 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3900 | 3900 | \\pub const ZERO = @as(c_int, 0); |
| 3901 | 3901 | \\pub const WORLD = @as(c_int, 0o0000123); |
| 3902 | 3902 | }); |
| 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 | }); | |
| 3903 | 3919 | } |