authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-06-20 06:45:45-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-06-20 06:46:53-04:00
log55193cb13bbc69350474f6a66728319b41149274
tree1c16243809e6c1322d008cbc082268e631cfd5d6
parent7c99c30bf406342a45833963ce630bb104aef00e

fix runtime fn ptr equality codegen

closes #1140

2 files changed, 10 insertions(+), 5 deletions(-)

src/codegen.cpp+5-5
...@@ -2246,12 +2246,12 @@ static LLVMValueRef ir_render_bin_op(CodeGen *g, IrExecutable *executable,...@@ -2246,12 +2246,12 @@ static LLVMValueRef ir_render_bin_op(CodeGen *g, IrExecutable *executable,
2246 } else if (type_entry->id == TypeTableEntryIdInt) {2246 } else if (type_entry->id == TypeTableEntryIdInt) {
2247 LLVMIntPredicate pred = cmp_op_to_int_predicate(op_id, type_entry->data.integral.is_signed);2247 LLVMIntPredicate pred = cmp_op_to_int_predicate(op_id, type_entry->data.integral.is_signed);
2248 return LLVMBuildICmp(g->builder, pred, op1_value, op2_value, "");2248 return LLVMBuildICmp(g->builder, pred, op1_value, op2_value, "");
2249 } else if (type_entry->id == TypeTableEntryIdEnum) {2249 } else if (type_entry->id == TypeTableEntryIdEnum ||
2250 LLVMIntPredicate pred = cmp_op_to_int_predicate(op_id, false);2250 type_entry->id == TypeTableEntryIdErrorSet ||
2251 return LLVMBuildICmp(g->builder, pred, op1_value, op2_value, "");
2252 } else if (type_entry->id == TypeTableEntryIdErrorSet ||
2253 type_entry->id == TypeTableEntryIdPointer ||2251 type_entry->id == TypeTableEntryIdPointer ||
2254 type_entry->id == TypeTableEntryIdBool)2252 type_entry->id == TypeTableEntryIdBool ||
2253 type_entry->id == TypeTableEntryIdPromise ||
2254 type_entry->id == TypeTableEntryIdFn)
2255 {2255 {
2256 LLVMIntPredicate pred = cmp_op_to_int_predicate(op_id, false);2256 LLVMIntPredicate pred = cmp_op_to_int_predicate(op_id, false);
2257 return LLVMBuildICmp(g->builder, pred, op1_value, op2_value, "");2257 return LLVMBuildICmp(g->builder, pred, op1_value, op2_value, "");
test/cases/misc.zig+5
...@@ -701,3 +701,8 @@ test "comptime cast fn to ptr" {...@@ -701,3 +701,8 @@ test "comptime cast fn to ptr" {
701 const addr2 = @ptrCast(*const u8, emptyFn);701 const addr2 = @ptrCast(*const u8, emptyFn);
702 comptime assert(addr1 == addr2);702 comptime assert(addr1 == addr2);
703}703}
704
705test "equality compare fn ptrs" {
706 var a = emptyFn;
707 assert(a == a);
708}