From e5a3eb9777ff165d936b0811f3825eabb8bcd6a4 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 16 Nov 2022 15:46:43 +0200 Subject: 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. --- src/value.zig | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/value.zig') 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; -- cgit v1.2.3