aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-12-23 09:45:08 -0800
committerGitHub <noreply@github.com>2023-12-23 09:45:08 -0800
commitbb0f7d55e8c50e379fa9bdcb8758d89d08e0cc1f (patch)
treea32c2299fce64c4c2364038743fe4d21355f7faa /src/Sema.zig
parent1b0e913e0fcc63b48778be300b0705ceb1fd84f1 (diff)
parent5c2897e89fd4730cf18a78d23524bd74cef93962 (diff)
downloadzig-bb0f7d55e8c50e379fa9bdcb8758d89d08e0cc1f.tar.gz
zig-bb0f7d55e8c50e379fa9bdcb8758d89d08e0cc1f.zip
Merge pull request #18347 from jacobly0/slice_ptr-type
Sema: ensure `slice_ptr` produces the correct type
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 {