aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-16 15:46:43 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-20 20:25:11 +0200
commite5a3eb9777ff165d936b0811f3825eabb8bcd6a4 (patch)
tree15b67ec852dc6b41d1b54a1039bcdd6581aa0449 /src/value.zig
parent44f8714dfb69fac2e8c7a6a35ad9f2abe7c4513a (diff)
downloadzig-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.zig12
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;