From cfcf5cbc166d7cf04790a236fa1b48e73005c525 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Wed, 10 Aug 2022 11:01:14 +0200 Subject: [PATCH] Bump to 0.3.7. Fixes issue with bitoperations on booleans. --- src/compiler/llvm_codegen_expr.c | 5 +++++ src/version.h | 2 +- test/test_suite/expressions/bit_op_on_bool.c3t | 14 ++++++++++++++ test/test_suite2/expressions/bit_op_on_bool.c3t | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/test_suite/expressions/bit_op_on_bool.c3t create mode 100644 test/test_suite2/expressions/bit_op_on_bool.c3t 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