aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-12-23 02:08:58 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2023-12-23 02:08:58 -0500
commitd312665803c1535da6f36387183bbb2348e4216c (patch)
tree8b818933ed8041d44e2c6dedd634785401478d62 /src/Sema.zig
parent21ae64852a531c36ae3166aa2b6f1fbaaf76c6f9 (diff)
downloadzig-d312665803c1535da6f36387183bbb2348e4216c.tar.gz
zig-d312665803c1535da6f36387183bbb2348e4216c.zip
Sema: ensure `slice_ptr` produces the correct type
Closes #18345
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index dd492e5394..ee9fa5b062 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -24311,7 +24311,8 @@ fn analyzeMinMax(
fn upgradeToArrayPtr(sema: *Sema, block: *Block, ptr: Air.Inst.Ref, len: u64) !Air.Inst.Ref {
const mod = sema.mod;
- const info = sema.typeOf(ptr).ptrInfo(mod);
+ const ptr_ty = sema.typeOf(ptr);
+ const info = ptr_ty.ptrInfo(mod);
if (info.flags.size == .One) {
// Already an array pointer.
return ptr;
@@ -24330,10 +24331,11 @@ fn upgradeToArrayPtr(sema: *Sema, block: *Block, ptr: Air.Inst.Ref, len: u64) !A
.address_space = info.flags.address_space,
},
});
- if (info.flags.size == .Slice) {
- return block.addTyOp(.slice_ptr, new_ty, ptr);
- }
- return block.addBitCast(new_ty, ptr);
+ const non_slice_ptr = if (info.flags.size == .Slice)
+ try block.addTyOp(.slice_ptr, ptr_ty.slicePtrFieldType(mod), ptr)
+ else
+ ptr;
+ return block.addBitCast(new_ty, non_slice_ptr);
}
fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {