diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-12-23 09:45:08 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-23 09:45:08 -0800 |
| commit | bb0f7d55e8c50e379fa9bdcb8758d89d08e0cc1f (patch) | |
| tree | a32c2299fce64c4c2364038743fe4d21355f7faa /src | |
| parent | 1b0e913e0fcc63b48778be300b0705ceb1fd84f1 (diff) | |
| parent | 5c2897e89fd4730cf18a78d23524bd74cef93962 (diff) | |
| download | zig-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')
| -rw-r--r-- | src/Sema.zig | 12 | ||||
| -rw-r--r-- | src/link/C.zig | 2 |
2 files changed, 9 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 { diff --git a/src/link/C.zig b/src/link/C.zig index a8721a0c02..85d13bf7ec 100644 --- a/src/link/C.zig +++ b/src/link/C.zig @@ -136,6 +136,8 @@ pub fn deinit(self: *C) void { self.string_bytes.deinit(gpa); self.fwd_decl_buf.deinit(gpa); self.code_buf.deinit(gpa); + self.lazy_fwd_decl_buf.deinit(gpa); + self.lazy_code_buf.deinit(gpa); } pub fn freeDecl(self: *C, decl_index: InternPool.DeclIndex) void { |
