1const expectEqual = @import("std").testing.expectEqual;
2
3var foo: u8 align(4) = 100;
4
5test "global variable alignment" {
6 try expectEqual(4, @typeInfo(@TypeOf(&foo)).pointer.attrs.@"align");
7 try expectEqual(*align(4) u8, @TypeOf(&foo));
8 const as_pointer_to_array: *align(4) [1]u8 = &foo;
9 const as_slice: []align(4) u8 = as_pointer_to_array;
10 const as_unaligned_slice: []u8 = as_slice;
11 try expectEqual(100, as_unaligned_slice[0]);
12}
13
14fn derp() align(@sizeOf(usize) * 2) i32 {
15 return 1234;
16}
17fn noop1() align(1) void {}
18fn noop4() align(4) void {}
19
20test "function alignment" {
21 try expectEqual(1234, derp());
22 try expectEqual(fn () i32, @TypeOf(derp));
23 try expectEqual(*align(@sizeOf(usize) * 2) const fn () i32, @TypeOf(&derp));
24
25 noop1();
26 try expectEqual(fn () void, @TypeOf(noop1));
27 try expectEqual(*align(1) const fn () void, @TypeOf(&noop1));
28
29 noop4();
30 try expectEqual(fn () void, @TypeOf(noop4));
31 try expectEqual(*align(4) const fn () void, @TypeOf(&noop4));
32}
33
34// test