| author | |
| committer | |
| log | c80609dfecb57a3830583eeeb3e0fce5860d657b |
| tree | d98fff3fdcccd7ab72d38b8ea3c85647e845f61b |
| parent | 20f4216af5dc4d5cb547529a132d8682ce7b7536 |
This conflicts with anon structs which can be in-memory coercible but
are never reordered.
Closes #162422 files changed, 17 insertions(+), 1 deletions(-)
src/Sema.zig+3-1| ... | ... | @@ -33491,7 +33491,9 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void { |
| 33491 | 33491 | return sema.failWithOwnedErrorMsg(msg); |
| 33492 | 33492 | } |
| 33493 | 33493 | |
| 33494 | if (struct_obj.layout == .Auto and mod.backendSupportsFeature(.field_reordering)) { | |
| 33494 | if (struct_obj.layout == .Auto and !struct_obj.is_tuple and | |
| 33495 | mod.backendSupportsFeature(.field_reordering)) | |
| 33496 | { | |
| 33495 | 33497 | const optimized_order = try mod.tmp_hack_arena.allocator().alloc(u32, struct_obj.fields.count()); |
| 33496 | 33498 | |
| 33497 | 33499 | for (struct_obj.fields.values(), 0..) |field, i| { |
test/behavior/tuple.zig+14| ... | ... | @@ -453,3 +453,17 @@ test "tuple pointer is indexable" { |
| 453 | 453 | try expectEqual(@as(u32, 100), (&y)[0]); |
| 454 | 454 | try expectEqual(false, (&y)[1]); |
| 455 | 455 | } |
| 456 | ||
| 457 | test "coerce anon tuple to tuple" { | |
| 458 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | |
| 459 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | |
| 460 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | |
| 461 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO | |
| 462 | ||
| 463 | var x: u8 = 1; | |
| 464 | var y: u16 = 2; | |
| 465 | var t = .{ x, y }; | |
| 466 | var s: struct { u8, u16 } = t; | |
| 467 | try expectEqual(x, s[0]); | |
| 468 | try expectEqual(y, s[1]); | |
| 469 | } |