diff --git a/src/compiler/llvm_codegen_expr.c b/src/compiler/llvm_codegen_expr.c index db9079de3..92c9ed141 100644 --- a/src/compiler/llvm_codegen_expr.c +++ b/src/compiler/llvm_codegen_expr.c @@ -3277,6 +3277,11 @@ void gencontext_emit_binary(GenContext *c, BEValue *be_value, Expr *expr, BEValu UNREACHABLE } assert(val); + if (lhs.type == type_bool) + { + llvm_value_set_bool(be_value, val); + return; + } llvm_value_set(be_value, val, expr->type); } diff --git a/src/version.h b/src/version.h index 52321bb2a..500fc2709 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define COMPILER_VERSION "0.3.6" \ No newline at end of file +#define COMPILER_VERSION "0.3.7" \ No newline at end of file diff --git a/test/test_suite/expressions/bit_op_on_bool.c3t b/test/test_suite/expressions/bit_op_on_bool.c3t new file mode 100644 index 000000000..cd084d32c --- /dev/null +++ b/test/test_suite/expressions/bit_op_on_bool.c3t @@ -0,0 +1,14 @@ +// #target: macos-x64 +module bitop; + +fn bool is_newline_codepoint(uint codepoint) { + return (bool)((codepoint == 0x00_00_24_24) | (codepoint == 0x00_00_2B_92)); +} + +/* #expect: bitop.ll + + %eq = icmp eq i32 %0, 9252 + %eq1 = icmp eq i32 %0, 11154 + %or = or i1 %eq, %eq1 + %1 = zext i1 %or to i8 + ret i8 %1 diff --git a/test/test_suite2/expressions/bit_op_on_bool.c3t b/test/test_suite2/expressions/bit_op_on_bool.c3t new file mode 100644 index 000000000..cd084d32c --- /dev/null +++ b/test/test_suite2/expressions/bit_op_on_bool.c3t @@ -0,0 +1,14 @@ +// #target: macos-x64 +module bitop; + +fn bool is_newline_codepoint(uint codepoint) { + return (bool)((codepoint == 0x00_00_24_24) | (codepoint == 0x00_00_2B_92)); +} + +/* #expect: bitop.ll + + %eq = icmp eq i32 %0, 9252 + %eq1 = icmp eq i32 %0, 11154 + %or = or i1 %eq, %eq1 + %1 = zext i1 %or to i8 + ret i8 %1