diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-12-18 16:24:13 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-18 16:24:13 -0500 |
| commit | aca9c74e80e106309b9783ff251ab0cdd3fb9626 (patch) | |
| tree | 16c65995ac6d3b434af61c4cd61a191b81dd93a0 /src/type.zig | |
| parent | d93edadead45e447e6bc16c0934a3031a06d0fd8 (diff) | |
| parent | 9bb1104e373dec192fb2a22d48b023330ddbaeae (diff) | |
| download | zig-aca9c74e80e106309b9783ff251ab0cdd3fb9626.tar.gz zig-aca9c74e80e106309b9783ff251ab0cdd3fb9626.zip | |
Merge pull request #13914 from Vexu/variadic
implement defining C variadic functions
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/type.zig b/src/type.zig index 41e287829b..349d755779 100644 --- a/src/type.zig +++ b/src/type.zig @@ -3489,7 +3489,10 @@ pub const Type = extern union { return AbiSizeAdvanced{ .scalar = 0 }; } - if (!child_type.hasRuntimeBits()) return AbiSizeAdvanced{ .scalar = 1 }; + if (!(child_type.hasRuntimeBitsAdvanced(false, strat) catch |err| switch (err) { + error.NeedLazy => return AbiSizeAdvanced{ .val = try Value.Tag.lazy_size.create(strat.lazy, ty) }, + else => |e| return e, + })) return AbiSizeAdvanced{ .scalar = 1 }; if (ty.optionalReprIsPayload()) { return abiSizeAdvanced(child_type, target, strat); @@ -3518,7 +3521,10 @@ pub const Type = extern union { // in abiAlignmentAdvanced. const data = ty.castTag(.error_union).?.data; const code_size = abiSize(Type.anyerror, target); - if (!data.payload.hasRuntimeBits()) { + if (!(data.payload.hasRuntimeBitsAdvanced(false, strat) catch |err| switch (err) { + error.NeedLazy => return AbiSizeAdvanced{ .val = try Value.Tag.lazy_size.create(strat.lazy, ty) }, + else => |e| return e, + })) { // Same as anyerror. return AbiSizeAdvanced{ .scalar = code_size }; } |
