diff options
| author | Jimmi Holst Christensen <jhc@dismail.de> | 2022-01-20 22:46:15 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-01-23 17:23:55 -0500 |
| commit | f1b91bb41b2d810ecabf4c69cad91b24b3846b77 (patch) | |
| tree | 59416bc00443451485832f6d1a1ce4b3d3357c58 /test/behavior/align.zig | |
| parent | 7287c7482a2c694c7c7f56b9f7c1744a7ae7905f (diff) | |
| download | zig-f1b91bb41b2d810ecabf4c69cad91b24b3846b77.tar.gz zig-f1b91bb41b2d810ecabf4c69cad91b24b3846b77.zip | |
c backend: Implement aligning fields and local/global variables
There are some restrictions here.
- We either need C11 or a compiler that supports the aligned attribute
- We cannot provide align less than the type's natural C alignment.
Diffstat (limited to 'test/behavior/align.zig')
| -rw-r--r-- | test/behavior/align.zig | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/test/behavior/align.zig b/test/behavior/align.zig index dfa8d895c5..26a914576c 100644 --- a/test/behavior/align.zig +++ b/test/behavior/align.zig @@ -163,3 +163,21 @@ test "return error union with 128-bit integer" { fn give() anyerror!u128 { return 3; } + +test "page aligned array on stack" { + if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm or + builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; + + // Large alignment value to make it hard to accidentally pass. + var array align(0x1000) = [_]u8{ 1, 2, 3, 4, 5, 6, 7, 8 }; + var number1: u8 align(16) = 42; + var number2: u8 align(16) = 43; + + try expect(@ptrToInt(&array[0]) & 0xFFF == 0); + try expect(array[3] == 4); + + try expect(@truncate(u4, @ptrToInt(&number1)) == 0); + try expect(@truncate(u4, @ptrToInt(&number2)) == 0); + try expect(number1 == 42); + try expect(number2 == 43); +} |
