authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-24 12:27:59-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-24 12:27:59-07:00
log8583fd7f9f96887fe685354662b1fc076ebeb031
treef919b325871f0251429461bff039d9e7714bbae6
parent8ad75a9bf3a7fa9782bf17165fa6d7dc842efb51

add codegen for pointer comparison

see #145

2 files changed, 14 insertions(+), 1 deletions(-)

src/codegen.cpp+3-1
......@@ -1480,7 +1480,9 @@ static LLVMValueRef gen_cmp_expr(CodeGen *g, AstNode *node) {
14801480 } else {
14811481 zig_unreachable();
14821482 }
1483 } else if (op1_type->id == TypeTableEntryIdPureError) {
1483 } else if (op1_type->id == TypeTableEntryIdPureError ||
1484 op1_type->id == TypeTableEntryIdPointer)
1485 {
14841486 LLVMIntPredicate pred = cmp_op_to_int_predicate(node->data.bin_op_expr.bin_op, false);
14851487 return LLVMBuildICmp(g->builder, pred, val1, val2, "");
14861488 } else {
test/self_hosted.zig+11
......@@ -1322,3 +1322,14 @@ fn pass_slice_of_empty_struct_to_fn() {
13221322fn test_pass_slice_of_empty_struct_to_fn(slice: []EmptyStruct2) -> isize {
13231323 slice.len
13241324}
1325
1326
1327#attribute("test")
1328fn pointer_comparison() {
1329 const a = ([]u8)("a");
1330 const b = &a;
1331 assert(ptr_eql(b, b));
1332}
1333fn ptr_eql(a: &[]u8, b: &[]u8) -> bool {
1334 a == b
1335}