Skip to content

Commit aa57661

Browse files
committed
Sema: allow .ptr on pointer to array
1 parent b63e096 commit aa57661

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src/Sema.zig

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27074,6 +27074,26 @@ fn fieldPtr(
2707427074
if (ip.stringEqlSlice(field_name, "len")) {
2707527075
const int_val = try mod.intValue(Type.usize, inner_ty.arrayLen(mod));
2707627076
return anonDeclRef(sema, int_val.toIntern());
27077+
} else if (ip.stringEqlSlice(field_name, "ptr") and is_pointer_to) {
27078+
const ptr_info = object_ty.ptrInfo(mod);
27079+
const new_ptr_ty = try sema.ptrType(.{
27080+
.child = Type.fromInterned(ptr_info.child).childType(mod).toIntern(),
27081+
.sentinel = if (inner_ty.sentinel(mod)) |s| s.toIntern() else .none,
27082+
.flags = .{
27083+
.size = .Many,
27084+
.alignment = ptr_info.flags.alignment,
27085+
.is_const = ptr_info.flags.is_const,
27086+
.is_volatile = ptr_info.flags.is_volatile,
27087+
.is_allowzero = ptr_info.flags.is_allowzero,
27088+
.address_space = ptr_info.flags.address_space,
27089+
.vector_index = ptr_info.flags.vector_index,
27090+
},
27091+
.packed_offset = ptr_info.packed_offset,
27092+
});
27093+
const result_ty = try sema.ptrType(.{
27094+
.child = new_ptr_ty,
27095+
});
27096+
return sema.coerce(block, result_ty, object_ptr, src);
2707727097
} else {
2707827098
return sema.fail(
2707927099
block,

0 commit comments

Comments
 (0)