diff options
| author | garrison hinson-hasty <71951273+garrisonhh@users.noreply.github.com> | 2024-02-20 19:55:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-21 00:55:29 +0000 |
| commit | 955fd65cb1705d8279eb195bdbc69810df1b1d98 (patch) | |
| tree | 6e9936a5031543bc3500fbd9dd124eae2d8b5d80 /src/Sema.zig | |
| parent | ec7293422d28d253ffc3922684f03cecd3f15f4d (diff) | |
| download | zig-955fd65cb1705d8279eb195bdbc69810df1b1d98.tar.gz zig-955fd65cb1705d8279eb195bdbc69810df1b1d98.zip | |
Sema: fix peer type resolution for arrays of coercible elements
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 81ee58b7c2..0a38cf93dc 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -34238,7 +34238,21 @@ fn resolvePeerTypesInner( .peer_idx_b = i, } }; - if (!ty.childType(mod).eql(elem_ty, mod)) { + const peer_elem_ty = ty.childType(mod); + if (!peer_elem_ty.eql(elem_ty, mod)) coerce: { + const peer_elem_coerces_to_elem = + try sema.coerceInMemoryAllowed(block, elem_ty, peer_elem_ty, false, mod.getTarget(), src, src); + if (peer_elem_coerces_to_elem == .ok) { + break :coerce; + } + + const elem_coerces_to_peer_elem = + try sema.coerceInMemoryAllowed(block, peer_elem_ty, elem_ty, false, mod.getTarget(), src, src); + if (elem_coerces_to_peer_elem == .ok) { + elem_ty = peer_elem_ty; + break :coerce; + } + return .{ .conflict = .{ .peer_idx_a = first_arr_idx, .peer_idx_b = i, |
