diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-11-16 15:46:43 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-11-20 20:25:11 +0200 |
| commit | e5a3eb9777ff165d936b0811f3825eabb8bcd6a4 (patch) | |
| tree | 15b67ec852dc6b41d1b54a1039bcdd6581aa0449 /src/value.zig | |
| parent | 44f8714dfb69fac2e8c7a6a35ad9f2abe7c4513a (diff) | |
| download | zig-e5a3eb9777ff165d936b0811f3825eabb8bcd6a4.tar.gz zig-e5a3eb9777ff165d936b0811f3825eabb8bcd6a4.zip | |
Type: make `hasRuntimeBitsAdvanced` take `AbiAlignmentAdvancedStrat`
I wasn't able to create a reduced test case for this but the reasoning
can be seen in `abiAlignmentAdvancedUnion` where if `strat` was lazy
`hasRuntimeBitsAdvanced` would be given `null` instead of `sema`
which would cause eager evaluation when it is not valid or desired.
Diffstat (limited to 'src/value.zig')
| -rw-r--r-- | src/value.zig | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/value.zig b/src/value.zig index 042a960b25..59cf9046f4 100644 --- a/src/value.zig +++ b/src/value.zig @@ -1911,7 +1911,11 @@ pub const Value = extern union { .lazy_align => { const ty = lhs.castTag(.lazy_align).?.data; - if (try ty.hasRuntimeBitsAdvanced(false, opt_sema)) { + const strat: Type.AbiAlignmentAdvancedStrat = if (opt_sema) |sema| .{ .sema = sema } else .eager; + if (ty.hasRuntimeBitsAdvanced(false, strat) catch |err| switch (err) { + error.NeedLazy => unreachable, + else => |e| return e, + }) { return .gt; } else { return .eq; @@ -1919,7 +1923,11 @@ pub const Value = extern union { }, .lazy_size => { const ty = lhs.castTag(.lazy_size).?.data; - if (try ty.hasRuntimeBitsAdvanced(false, opt_sema)) { + const strat: Type.AbiAlignmentAdvancedStrat = if (opt_sema) |sema| .{ .sema = sema } else .eager; + if (ty.hasRuntimeBitsAdvanced(false, strat) catch |err| switch (err) { + error.NeedLazy => unreachable, + else => |e| return e, + }) { return .gt; } else { return .eq; |
