master
1const std = @import("std");
2const testing = std.testing;
3const builtin = @import("builtin");
4
5fn add(count: c_int, ...) callconv(.c) c_int {
6 var ap = @cVaStart();
7 defer @cVaEnd(&ap);
8 var i: usize = 0;
9 var sum: c_int = 0;
10 while (i < count) : (i += 1) {
11 sum += @cVaArg(&ap, c_int);
12 }
13 return sum;
14}
15
16test "defining a variadic function" {
17 if (builtin.cpu.arch == .aarch64 and builtin.os.tag != .macos) {
18 // https://github.com/ziglang/zig/issues/14096
19 return error.SkipZigTest;
20 }
21 if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) {
22 // https://github.com/ziglang/zig/issues/16961
23 return error.SkipZigTest;
24 }
25 if (builtin.cpu.arch == .s390x) {
26 // https://github.com/ziglang/zig/issues/21350#issuecomment-3543006475
27 return error.SkipZigTest;
28 }
29
30 try std.testing.expectEqual(@as(c_int, 0), add(0));
31 try std.testing.expectEqual(@as(c_int, 1), add(1, @as(c_int, 1)));
32 try std.testing.expectEqual(@as(c_int, 3), add(2, @as(c_int, 1), @as(c_int, 2)));
33}
34
35// test