diff --git a/src/translate_c.zig b/src/translate_c.zig index 388fa8841e..17078474e7 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -3130,12 +3130,15 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const clang.CallExpr, r if (fn_ty) |ty| { switch (ty) { .Proto => |fn_proto| { - const param_qt = fn_proto.getParamType(@intCast(c_uint, i)); - if (isBoolRes(call_param) and cIsNativeInt(param_qt)) { - const builtin_node = try rp.c.createBuiltinCall("@boolToInt", 1); - builtin_node.params()[0] = call_param; - builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")"); - call_param = &builtin_node.base; + const param_count = fn_proto.getNumParams(); + if (i < param_count) { + const param_qt = fn_proto.getParamType(@intCast(c_uint, i)); + if (isBoolRes(call_param) and cIsNativeInt(param_qt)) { + const builtin_node = try rp.c.createBuiltinCall("@boolToInt", 1); + builtin_node.params()[0] = call_param; + builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")"); + call_param = &builtin_node.base; + } } }, else => {}, diff --git a/test/run_translated_c.zig b/test/run_translated_c.zig index 1395274251..8e9ddf2d33 100644 --- a/test/run_translated_c.zig +++ b/test/run_translated_c.zig @@ -737,4 +737,13 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void { \\ return 0; \\} , ""); + + cases.add("Variadic function call", + \\#define _NO_CRT_STDIO_INLINE 1 + \\#include + \\int main(void) { + \\ printf("%d %d\n", 1, 2); + \\ return 0; + \\} + , "1 2" ++ nl); }