From 2d0e2625aca7cd42030693f797ed56228ad31b4c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 24 Mar 2021 23:01:48 +0000 Subject: [PATCH] Ensure pointers are of the same type in LLVM ICmp --- src/llvm_backend.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 32a74cb53..95f512873 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -10122,7 +10122,15 @@ lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left, lbValue ri case Token_CmpEq: pred = LLVMIntEQ; break; case Token_NotEq: pred = LLVMIntNE; break; } - res.value = LLVMBuildICmp(p->builder, pred, left.value, right.value, ""); + LLVMValueRef lhs = left.value; + LLVMValueRef rhs = right.value; + if (LLVMTypeOf(lhs) != LLVMTypeOf(rhs)) { + if (lb_is_type_kind(LLVMTypeOf(lhs), LLVMPointerTypeKind)) { + rhs = LLVMBuildPointerCast(p->builder, rhs, LLVMTypeOf(lhs), ""); + } + } + + res.value = LLVMBuildICmp(p->builder, pred, lhs, rhs, ""); } else if (is_type_float(a)) { LLVMRealPredicate pred = {}; switch (op_kind) {