| ... | @@ -1398,3 +1398,23 @@ test "under-aligned struct field" { | ... | @@ -1398,3 +1398,23 @@ test "under-aligned struct field" { |
| 1398 | const result = std.mem.readIntNative(u64, array[4..12]); | 1398 | const result = std.mem.readIntNative(u64, array[4..12]); |
| 1399 | try expect(result == 1234); | 1399 | try expect(result == 1234); |
| 1400 | } | 1400 | } |
| | 1401 | |
| | 1402 | test "address of zero-bit field is equal to address of only field" { |
| | 1403 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| | 1404 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| | 1405 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| | 1406 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| | 1407 | |
| | 1408 | { |
| | 1409 | const A = struct { b: void = {}, u: u8 }; |
| | 1410 | var a = A{ .u = 0 }; |
| | 1411 | const a_ptr = @fieldParentPtr(A, "b", &a.b); |
| | 1412 | try std.testing.expectEqual(&a, a_ptr); |
| | 1413 | } |
| | 1414 | { |
| | 1415 | const A = struct { u: u8, b: void = {} }; |
| | 1416 | var a = A{ .u = 0 }; |
| | 1417 | const a_ptr = @fieldParentPtr(A, "b", &a.b); |
| | 1418 | try std.testing.expectEqual(&a, a_ptr); |
| | 1419 | } |
| | 1420 | } |