aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-02-17 17:02:37 +0000
committergingerBill <bill@gingerbill.org>2023-02-17 17:02:37 +0000
commit66f2881a78b717bdb8410956ccbffb679fbccea5 (patch)
treed83e59dd37807ec543eae7df0c1082b17ef74e0c /src/llvm_backend_expr.cpp
parent7d4e9497ebcd610f5fa0ba7756429b8e839588ac (diff)
Allow comparisons between empty `struct{}` and `union{}`
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 480831a68..5bffc7226 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -2210,6 +2210,15 @@ gb_internal lbValue lb_compare_records(lbProcedure *p, TokenKind op_kind, lbValu
lbValue left_ptr = lb_address_from_load_or_generate_local(p, left);
lbValue right_ptr = lb_address_from_load_or_generate_local(p, right);
lbValue res = {};
+ if (type_size_of(type) == 0) {
+ switch (op_kind) {
+ case Token_CmpEq:
+ return lb_const_bool(p->module, t_bool, true);
+ case Token_NotEq:
+ return lb_const_bool(p->module, t_bool, false);
+ }
+ GB_PANIC("invalid operator");
+ }
if (is_type_simple_compare(type)) {
// TODO(bill): Test to see if this is actually faster!!!!
auto args = array_make<lbValue>(permanent_allocator(), 3);