From d56276017c551db98aca1f76e5f8fd74fe0bf49f Mon Sep 17 00:00:00 2001 From: Alexey Date: Sat, 4 Apr 2020 13:54:45 +0300 Subject: [PATCH] cgen: fix variadics called with 0 vargs --- vlib/v/gen/cgen.v | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 514286b8e9..22ee9c87ad 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -1981,17 +1981,21 @@ fn (g mut Gen) call_args(args []ast.CallArg, expected_types []table.Type) { if is_variadic { varg_type := expected_types[expected_types.len - 1] struct_name := 'varg_' + g.typ(varg_type).replace('*', '_ptr') - len := args.len - arg_no + variadic_count := args.len - arg_no varg_type_str := int(varg_type).str() - if len > g.variadic_args[varg_type_str] { - g.variadic_args[varg_type_str] = len + if variadic_count > g.variadic_args[varg_type_str] { + g.variadic_args[varg_type_str] = variadic_count } - g.write('($struct_name){.len=$len,.args={') - for j in arg_no .. args.len { - g.ref_or_deref_arg(args[j], varg_type) - if j < args.len - 1 { - g.write(', ') + g.write('($struct_name){.len=$variadic_count,.args={') + if variadic_count > 0 { + for j in arg_no .. args.len { + g.ref_or_deref_arg(args[j], varg_type) + if j < args.len - 1 { + g.write(', ') + } } + } else { + g.write('0') } g.write('}}') }