aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/type.zig4
-rw-r--r--test/behavior/vector.zig14
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);
}