mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
parent
89953ec83d
commit
4d50bc3f8d
@ -4695,6 +4695,13 @@ fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {
|
||||
|
||||
return slice[0..1];
|
||||
}
|
||||
|
||||
test "peer type resolution: *const T and ?*T" {
|
||||
const a = @intToPtr(*const usize, 0x123456789);
|
||||
const b = @intToPtr(?*usize, 0x123456789);
|
||||
assert(a == b);
|
||||
assert(b == a);
|
||||
}
|
||||
{#code_end#}
|
||||
{#header_close#}
|
||||
{#header_close#}
|
||||
|
||||
17
src/ir.cpp
17
src/ir.cpp
@ -9658,6 +9658,23 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
|
||||
continue;
|
||||
}
|
||||
|
||||
if (prev_type->id == ZigTypeIdOptional &&
|
||||
types_match_const_cast_only(ira, cur_type, prev_type->data.maybe.child_type,
|
||||
source_node, false).id == ConstCastResultIdOk)
|
||||
{
|
||||
prev_inst = cur_inst;
|
||||
any_are_null = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cur_type->id == ZigTypeIdOptional &&
|
||||
types_match_const_cast_only(ira, prev_type, cur_type->data.maybe.child_type,
|
||||
source_node, false).id == ConstCastResultIdOk)
|
||||
{
|
||||
any_are_null = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cur_type->id == ZigTypeIdUndefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -130,3 +130,10 @@ test "initialize const optional C pointer to null" {
|
||||
expect(a == null);
|
||||
comptime expect(a == null);
|
||||
}
|
||||
|
||||
test "compare equality of optional and non-optional pointer" {
|
||||
const a = @intToPtr(*const usize, 0x123456789);
|
||||
const b = @intToPtr(?*usize, 0x123456789);
|
||||
expect(a == b);
|
||||
expect(b == a);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user