From dd6bb5bbd7a954e4674108edc885fe8d00c629cd Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 18 Nov 2025 20:56:53 +0200 Subject: [PATCH] cgen: fix dump(ptr_to_fixed_array_value) - it now returns the argument directly (thanks @tankf33der) (#25764) --- vlib/v/gen/c/dumpexpr.v | 13 ++++--------- vlib/v/gen/c/testdata/dump_fixed_array.c.must_have | 2 ++ vlib/v/gen/c/testdata/dump_fixed_array.vv | 9 +++++++++ 3 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 vlib/v/gen/c/testdata/dump_fixed_array.c.must_have create mode 100644 vlib/v/gen/c/testdata/dump_fixed_array.vv diff --git a/vlib/v/gen/c/dumpexpr.v b/vlib/v/gen/c/dumpexpr.v index 56bde95cf..e7ad84e59 100644 --- a/vlib/v/gen/c/dumpexpr.v +++ b/vlib/v/gen/c/dumpexpr.v @@ -239,23 +239,18 @@ fn (mut g Gen) dump_expr_definitions() { dump_fns.writeln('\tstrings__Builder_write_string(&sb, value);') dump_fns.writeln("\tstrings__Builder_write_rune(&sb, '\\n');") surrounder.builder_write_afters(mut dump_fns) - if is_fixed_arr_ret { + if is_fixed_arr_ret && !is_ptr { tmp_var := g.new_tmp_var() init_str := if dump_sym.is_empty_struct_array() { '{E_STRUCT}' } else { '{0}' } - if typ.is_ptr() { - dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = HEAP(${g.styp(typ.set_nr_muls(0))}, ${init_str});') - dump_fns.writeln('\tmemcpy(${tmp_var}->ret_arr, dump_arg, sizeof(${str_dumparg_type}));') - } else { - dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = ${init_str};') - dump_fns.writeln('\tmemcpy(${tmp_var}.ret_arr, dump_arg, sizeof(${str_dumparg_type}));') - } + dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = ${init_str};') + dump_fns.writeln('\tmemcpy(${tmp_var}.ret_arr, dump_arg, sizeof(${str_dumparg_type}));') dump_fns.writeln('\treturn ${tmp_var};') } else { - dump_fns.writeln('\treturn dump_arg;') + dump_fns.writeln('\treturn dump_arg; /* ${str_dumparg_type} */') } dump_fns.writeln('}') } diff --git a/vlib/v/gen/c/testdata/dump_fixed_array.c.must_have b/vlib/v/gen/c/testdata/dump_fixed_array.c.must_have new file mode 100644 index 000000000..bfc34a9a4 --- /dev/null +++ b/vlib/v/gen/c/testdata/dump_fixed_array.c.must_have @@ -0,0 +1,2 @@ +_v_Array_fixed_u8_2* _v_dump_expr_Array_fixed_u8_2__ptr(string fpath, int line, string sexpr, Array_fixed_u8_2* dump_arg) { +return dump_arg; /* Array_fixed_u8_2* */ diff --git a/vlib/v/gen/c/testdata/dump_fixed_array.vv b/vlib/v/gen/c/testdata/dump_fixed_array.vv new file mode 100644 index 000000000..41baf01f2 --- /dev/null +++ b/vlib/v/gen/c/testdata/dump_fixed_array.vv @@ -0,0 +1,9 @@ +fn main() { + a := &[2]u8{} + dump(a) + println(a) + assert a.len == 2 + + _ := &[2]u8{} + assert true +} -- 2.39.5