From aafff258973fb58f1a964eb050d5602ed8b9f60c Mon Sep 17 00:00:00 2001 From: february cozzocrea <91439207+f-cozzocrea@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:13:11 -0800 Subject: [PATCH] translate-c: float cast from boolean expr fix --- src/translate_c.zig | 2 +- test/cases/run_translated_c/float_from_bool_expr_cast.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 test/cases/run_translated_c/float_from_bool_expr_cast.c diff --git a/src/translate_c.zig b/src/translate_c.zig index a40f788ed6..e6305feec3 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -2388,7 +2388,7 @@ fn transCCast( } if (!cIsFloating(src_type) and cIsFloating(dst_type)) { var rhs = expr; - if (qualTypeIsBoolean(src_type)) rhs = try Tag.int_from_bool.create(c.arena, expr); + if (qualTypeIsBoolean(src_type) or isBoolRes(rhs)) rhs = try Tag.int_from_bool.create(c.arena, expr); // @as(dest_type, @floatFromInt(val)) return Tag.as.create(c.arena, .{ .lhs = dst_node, diff --git a/test/cases/run_translated_c/float_from_bool_expr_cast.c b/test/cases/run_translated_c/float_from_bool_expr_cast.c new file mode 100644 index 0000000000..294e5e1d83 --- /dev/null +++ b/test/cases/run_translated_c/float_from_bool_expr_cast.c @@ -0,0 +1,8 @@ +int main() { + float f = (float)(10.0f > 1.0f); + return 0; +} + +// run-translated-c +// c_frontend=clang +//