| ... | ... | @@ -290,17 +290,24 @@ test "pointer to array at fixed address" { |
| 290 | 290 | } |
| 291 | 291 | |
| 292 | 292 | test "pointer arithmetic affects the alignment" { |
| 293 | | var arr: [10]u8 align(2) = undefined; |
| 294 | | var x: usize = 1; |
| 295 | | |
| 296 | | const ptr = @as([*]u8, &arr); |
| 297 | | expect(@typeInfo(@TypeOf(ptr)).Pointer.alignment == 2); |
| 298 | | const ptr1 = ptr + 1; |
| 299 | | expect(@typeInfo(@TypeOf(ptr1)).Pointer.alignment == 1); |
| 300 | | const ptr2 = ptr + 4; |
| 301 | | expect(@typeInfo(@TypeOf(ptr2)).Pointer.alignment == 2); |
| 302 | | const ptr3 = ptr + 0; |
| 303 | | expect(@typeInfo(@TypeOf(ptr3)).Pointer.alignment == 2); |
| 304 | | const ptr4 = ptr + x; |
| 305 | | expect(@typeInfo(@TypeOf(ptr4)).Pointer.alignment == 1); |
| 293 | { |
| 294 | var ptr: [*]align(8) u32 = undefined; |
| 295 | var x: usize = 1; |
| 296 | |
| 297 | expect(@typeInfo(@TypeOf(ptr)).Pointer.alignment == 8); |
| 298 | const ptr1 = ptr + 1; // 1 * 4 = 4 -> lcd(4,8) = 4 |
| 299 | expect(@typeInfo(@TypeOf(ptr1)).Pointer.alignment == 4); |
| 300 | const ptr2 = ptr + 4; // 4 * 4 = 16 -> lcd(16,8) = 8 |
| 301 | expect(@typeInfo(@TypeOf(ptr2)).Pointer.alignment == 8); |
| 302 | const ptr3 = ptr + 0; // no-op |
| 303 | expect(@typeInfo(@TypeOf(ptr3)).Pointer.alignment == 8); |
| 304 | const ptr4 = ptr + x; // runtime-known addend |
| 305 | expect(@typeInfo(@TypeOf(ptr4)).Pointer.alignment == 1); |
| 306 | } |
| 307 | { |
| 308 | var ptr: [*]align(8) [3]u8 = undefined; |
| 309 | |
| 310 | const ptr1 = ptr + 17; // 3 * 17 = 51 |
| 311 | expect(@typeInfo(@TypeOf(ptr1)).Pointer.alignment == 1); |
| 312 | } |
| 306 | 313 | } |