diff options
| -rw-r--r-- | src/type.zig | 4 | ||||
| -rw-r--r-- | test/behavior/vector.zig | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/type.zig b/src/type.zig index 55466efe4a..75a19d6330 100644 --- a/src/type.zig +++ b/src/type.zig @@ -2909,8 +2909,8 @@ pub const Type = extern union { .vector => { const len = ty.arrayLen(); const bits = try bitSizeAdvanced(ty.elemType(), target, sema_kit); - const bytes = (bits + 7) / 8; - const alignment = std.math.ceilPowerOfTwoAssert(u64, bytes * len); + const bytes = ((bits * len) + 7) / 8; + const alignment = std.math.ceilPowerOfTwoAssert(u64, bytes); return AbiAlignmentAdvanced{ .scalar = @intCast(u32, alignment) }; }, diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index e355db5166..a1785fcffb 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -5,6 +5,12 @@ const math = std.math; const expect = std.testing.expect; test "implicit cast vector to array - bool" { + if (builtin.zig_backend == .stage1) { + // Regressed in LLVM 14: + // https://github.com/llvm/llvm-project/issues/55522 + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO @@ -391,6 +397,12 @@ test "initialize vector which is a struct field" { } test "vector comparison operators" { + if (builtin.zig_backend == .stage1) { + // Regressed in LLVM 14: + // https://github.com/llvm/llvm-project/issues/55522 + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO @@ -1051,7 +1063,7 @@ test "@shlWithOverflow" { test "alignment of vectors" { try expect(@alignOf(@Vector(2, u8)) == 2); - try expect(@alignOf(@Vector(2, u1)) == 2); + try expect(@alignOf(@Vector(2, u1)) == 1); try expect(@alignOf(@Vector(1, u1)) == 1); try expect(@alignOf(@Vector(2, u16)) == 4); } |
