aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-12-18 16:24:13 -0500
committerGitHub <noreply@github.com>2022-12-18 16:24:13 -0500
commitaca9c74e80e106309b9783ff251ab0cdd3fb9626 (patch)
tree16c65995ac6d3b434af61c4cd61a191b81dd93a0 /src/type.zig
parentd93edadead45e447e6bc16c0934a3031a06d0fd8 (diff)
parent9bb1104e373dec192fb2a22d48b023330ddbaeae (diff)
downloadzig-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.zig10
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 };
}