| 1 | const expectEqual = @import("std").testing.expectEqual; |
| 2 | |
| 3 | var foo: u8 align(4) = 100; |
| 4 | |
| 5 | test "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 | |
| 14 | fn derp() align(@sizeOf(usize) * 2) i32 { |
| 15 | return 1234; |
| 16 | } |
| 17 | fn noop1() align(1) void {} |
| 18 | fn noop4() align(4) void {} |
| 19 | |
| 20 | test "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 |