| author | |
| committer | |
| log | 5b742785100bb2662f6fc0ee11ac84b2fed9be9e |
| tree | 5f92621ee91b0f64f8541faa7393ed6d210aec22 |
| parent | 9d0b8a27b64c23ca42c15160abea0dd12077332e |
3 files changed, 16 insertions(+), 7 deletions(-)
src/codegen.zig+16-4| ... | @@ -684,10 +684,22 @@ fn lowerParentPtr( | ... | @@ -684,10 +684,22 @@ fn lowerParentPtr( |
| 684 | .struct_type, | 684 | .struct_type, |
| 685 | .anon_struct_type, | 685 | .anon_struct_type, |
| 686 | .union_type, | 686 | .union_type, |
| 687 | => @as(u32, @intCast(base_type.toType().structFieldOffset( | 687 | => switch (base_type.toType().containerLayout(mod)) { |
| 688 | @as(u32, @intCast(field.index)), | 688 | .Auto, .Extern => @intCast(base_type.toType().structFieldOffset( |
| 689 | mod, | 689 | @intCast(field.index), |
| 690 | ))), | 690 | mod, |
| 691 | )), | ||
| 692 | .Packed => if (mod.typeToStruct(base_type.toType())) |struct_obj| | ||
| 693 | math.divExact(u16, struct_obj.packedFieldBitOffset( | ||
| 694 | mod, | ||
| 695 | @intCast(field.index), | ||
| 696 | ), 8) catch |err| switch (err) { | ||
| 697 | error.UnexpectedRemainder => 0, | ||
| 698 | error.DivisionByZero => unreachable, | ||
| 699 | } | ||
| 700 | else | ||
| 701 | 0, | ||
| 702 | }, | ||
| 691 | else => unreachable, | 703 | else => unreachable, |
| 692 | }), | 704 | }), |
| 693 | ); | 705 | ); |
test/behavior/packed-struct.zig-2| ... | @@ -376,7 +376,6 @@ test "load pointer from packed struct" { | ... | @@ -376,7 +376,6 @@ test "load pointer from packed struct" { |
| 376 | } | 376 | } |
| 377 | 377 | ||
| 378 | test "@intFromPtr on a packed struct field" { | 378 | test "@intFromPtr on a packed struct field" { |
| 379 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | ||
| 380 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 379 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 381 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | 380 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 382 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 381 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | @@ -608,7 +607,6 @@ test "pointer to container level packed struct field" { | ... | @@ -608,7 +607,6 @@ test "pointer to container level packed struct field" { |
| 608 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 607 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 609 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | 608 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 610 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 609 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 611 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | ||
| 612 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 610 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 613 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 611 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 614 | 612 |
test/behavior/struct.zig-1| ... | @@ -1077,7 +1077,6 @@ test "packed struct with undefined initializers" { | ... | @@ -1077,7 +1077,6 @@ test "packed struct with undefined initializers" { |
| 1077 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 1077 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1078 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 1078 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1079 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1079 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1080 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 1081 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1080 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1082 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 1081 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 1083 | 1082 |