From da506aaf6ea731c72daaac649dba788407db0d6c Mon Sep 17 00:00:00 2001 From: february cozzocrea <91439207+f-cozzocrea@users.noreply.github.com> Date: Tue, 16 Jan 2024 08:12:05 -0800 Subject: [PATCH] translate-c: Explicit cast bool from float fix --- src/translate_c.zig | 8 ++++++++ .../run_translated_c/explicit_cast_bool_from_float.c | 10 ++++++++++ 2 files changed, 18 insertions(+) create mode 100644 test/cases/run_translated_c/explicit_cast_bool_from_float.c diff --git a/src/translate_c.zig b/src/translate_c.zig index 5683855d23..6a76246890 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -2380,6 +2380,14 @@ fn transCCast( }); } if (cIsFloating(src_type) and !cIsFloating(dst_type)) { + // bool expression: floating val != 0 + if (qualTypeIsBoolean(dst_type)) { + return Tag.not_equal.create(c.arena, .{ + .lhs = expr, + .rhs = Tag.zero_literal.init(), + }); + } + // @as(dest_type, @intFromFloat(val)) return Tag.as.create(c.arena, .{ .lhs = dst_node, diff --git a/test/cases/run_translated_c/explicit_cast_bool_from_float.c b/test/cases/run_translated_c/explicit_cast_bool_from_float.c new file mode 100644 index 0000000000..c8e8ea7e49 --- /dev/null +++ b/test/cases/run_translated_c/explicit_cast_bool_from_float.c @@ -0,0 +1,10 @@ +#include + +int main() { + float f = 2.0f; + bool b = (bool) f; + return 0; +} + +// run-translated-c +// c_frontends=aro,clang