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