Browse Source

Ensure pointers are of the same type in LLVM ICmp

gingerBill 4 years ago
parent
commit
2d0e2625ac
1 changed files with 9 additions and 1 deletions
  1. 9 1
      src/llvm_backend.cpp

+ 9 - 1
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) {