Ensure pointers are of the same type in LLVM ICmp

This commit is contained in:
gingerBill
2021-03-24 23:01:48 +00:00
parent 1aecd7f5ff
commit 2d0e2625ac
+9 -1
View File
@@ -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) {