authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-10-06 07:51:24-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-10-07 19:16:44-04:00
logebed9316c50b20e12631124d568bf9de8a8b6c11
tree6f9dfb2eb9eb13600c32eaaa665f046ff79ba56a
parent0bcb597164f54aed060414505643696b31b12fc8

Type: fix vector size mismatch vs clang

This operation used to be implied by the old incorrect alignment calculation, but seems to apply even when the alignment is saturated. Closes #37110

2 files changed, 10 insertions(+), 1 deletions(-)

src/Type.zig+4-1
...@@ -1151,7 +1151,10 @@ pub fn abiSize(ty: Type, zcu: *const Zcu) u64 {...@@ -1151,7 +1151,10 @@ pub fn abiSize(ty: Type, zcu: *const Zcu) u64 {
1151 std.zig.target.compilerRtFloatAbi(target, elem_ty.floatBits(target))1151 std.zig.target.compilerRtFloatAbi(target, elem_ty.floatBits(target))
1152 else1152 else
1153 .hard) {1153 .hard) {
1154 .hard => @divCeil(vec.len * elem_ty.bitSize(zcu), 8),1154 .hard => switch (vec.len * elem_ty.bitSize(zcu)) {
1155 0 => return 0,
1156 else => |bits| std.math.ceilPowerOfTwoAssert(u32, @intCast(@divCeil(bits, 8))),
1157 },
1155 .soft => vec.len * elem_ty.abiSize(zcu),1158 .soft => vec.len * elem_ty.abiSize(zcu),
1156 },1159 },
1157 .stage2_c, .stage2_wasm => vec.len * elem_ty.abiSize(zcu),1160 .stage2_c, .stage2_wasm => vec.len * elem_ty.abiSize(zcu),
test/behavior/error.zig+6
...@@ -1138,3 +1138,9 @@ test "@errorCast into other inferred error set" {...@@ -1138,3 +1138,9 @@ test "@errorCast into other inferred error set" {
1138 const non_err: Ies!u32 = @errorCast(@as(error{}!u32, 123));1138 const non_err: Ies!u32 = @errorCast(@as(error{}!u32, 123));
1139 try expect(try non_err == 123);1139 try expect(try non_err == 123);
1140}1140}
1141
1142test "error union with vector type" {
1143 var x: anyerror!@Vector(5, f64) = undefined;
1144 x = error.Expected;
1145 try expect(x == error.Expected);
1146}