From f763000dc918c2367ebc181645eb48db896205d8 Mon Sep 17 00:00:00 2001 From: Luuk de Gram Date: Thu, 20 Jan 2022 19:44:28 +0100 Subject: Fix abi size of optional slices Previously, optional slices returned the pointer size as abi size. We now account for slices to calculate the correct size which is abi-alignment + slice ABI size. --- src/type.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/type.zig') diff --git a/src/type.zig b/src/type.zig index f62c94c469..77ff171776 100644 --- a/src/type.zig +++ b/src/type.zig @@ -2157,7 +2157,7 @@ pub const Type = extern union { const child_type = self.optionalChild(&buf); if (!child_type.hasCodeGenBits()) return 1; - if (child_type.zigTypeTag() == .Pointer and !child_type.isCPtr()) + if (child_type.zigTypeTag() == .Pointer and !child_type.isCPtr() and !child_type.isSlice()) return @divExact(target.cpu.arch.ptrBitWidth(), 8); // Optional types are represented as a struct with the child type as the first @@ -2344,7 +2344,7 @@ pub const Type = extern union { const child_type = ty.optionalChild(&buf); if (!child_type.hasCodeGenBits()) return 8; - if (child_type.zigTypeTag() == .Pointer and !child_type.isCPtr()) + if (child_type.zigTypeTag() == .Pointer and !child_type.isCPtr() and !child_type.isSlice()) return target.cpu.arch.ptrBitWidth(); // Optional types are represented as a struct with the child type as the first -- cgit v1.2.3