aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig12
-rw-r--r--src/link/C.zig2
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 {