Commit f763000dc9

Luuk de Gram <luuk@degram.dev>
2022-01-20 19:44:28
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.
1 parent eb70f6e
Changed files (1)
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