From e86ae7e555a4420b993deea04165e003b95a3e0e Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 15 Apr 2026 05:10:16 +0300 Subject: [PATCH] cgen: fix for loop with sleep and dump using more memory (fixes #25378) --- vlib/v/gen/c/dumpexpr.v | 38 +++++++------------ .../gen/c/testdata/dump_low_alloc.c.must_have | 6 +++ vlib/v/gen/c/testdata/dump_low_alloc.vv | 5 +++ 3 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 vlib/v/gen/c/testdata/dump_low_alloc.c.must_have create mode 100644 vlib/v/gen/c/testdata/dump_low_alloc.vv diff --git a/vlib/v/gen/c/dumpexpr.v b/vlib/v/gen/c/dumpexpr.v index 1f773da50..c9aaebc01 100644 --- a/vlib/v/gen/c/dumpexpr.v +++ b/vlib/v/gen/c/dumpexpr.v @@ -361,7 +361,7 @@ fn (mut g Gen) dump_expr_definitions() { { continue } - mut surrounder := util.new_surrounder(3) + mut surrounder := util.new_surrounder(2) int_str := g.get_str_fn(ast.int_type) surrounder.add('\tstring sline = ${int_str}(line);', '\tbuiltin__string_free(&sline);') if dump_sym.kind == .function && !is_option { @@ -391,32 +391,22 @@ fn (mut g Gen) dump_expr_definitions() { surrounder.add('\tstring value = ${to_string_fn_name}(${prefix}dump_arg);', '\tbuiltin__string_free(&value);') } - surrounder.add(' - strings__Builder sb = strings__new_builder(64); -', ' - string res; - res = strings__Builder_str(&sb); - builtin__eprint(res); - builtin__string_free(&res); - strings__Builder_free(&sb); -') surrounder.builder_write_befores(mut dump_fns) - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, '[');") - dump_fns.writeln('\tstrings__Builder_write_string(&sb, fpath);') - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, ':');") - dump_fns.writeln('\tstrings__Builder_write_string(&sb, sline);') - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, ']');") - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, ' ');") - dump_fns.writeln('\tstrings__Builder_write_string(&sb, sexpr);') - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, ':');") - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, ' ');") + dump_fns.writeln('\tbuiltin__flush_stdout();') + dump_fns.writeln('\tbuiltin__flush_stderr();') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, _S("[").str, _S("[").len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, fpath.str, fpath.len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, _S(":").str, _S(":").len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, sline.str, sline.len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, _S("] ").str, _S("] ").len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, sexpr.str, sexpr.len);') + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, _S(": ").str, _S(": ").len);') if is_ptr { - for i := 0; i < typ.nr_muls(); i++ { - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, '&');") - } + ptr_prefix := '&'.repeat(typ.nr_muls()) + dump_fns.writeln('\tbuiltin___write_buf_to_fd(2, _S("${ptr_prefix}").str, _S("${ptr_prefix}").len);') } - dump_fns.writeln('\tstrings__Builder_write_string(&sb, value);') - dump_fns.writeln("\tstrings__Builder_write_rune(&sb, '\\n');") + dump_fns.writeln('\tbuiltin___writeln_to_fd(2, value);') + dump_fns.writeln('\tbuiltin__flush_stderr();') surrounder.builder_write_afters(mut dump_fns) if is_fixed_arr_ret && !is_ptr { tmp_var := g.new_tmp_var() diff --git a/vlib/v/gen/c/testdata/dump_low_alloc.c.must_have b/vlib/v/gen/c/testdata/dump_low_alloc.c.must_have new file mode 100644 index 000000000..aa7de469f --- /dev/null +++ b/vlib/v/gen/c/testdata/dump_low_alloc.c.must_have @@ -0,0 +1,6 @@ +int _v_dump_expr_int(string fpath, int line, string sexpr, int dump_arg) { +builtin___write_buf_to_fd(2, _S("[").str, _S("[").len); +builtin___write_buf_to_fd(2, sline.str, sline.len); +builtin___writeln_to_fd(2, value); +_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) { +builtin___write_buf_to_fd(2, _S("&").str, _S("&").len); diff --git a/vlib/v/gen/c/testdata/dump_low_alloc.vv b/vlib/v/gen/c/testdata/dump_low_alloc.vv new file mode 100644 index 000000000..93b05feff --- /dev/null +++ b/vlib/v/gen/c/testdata/dump_low_alloc.vv @@ -0,0 +1,5 @@ +fn main() { + dump(123) + a := &[2]u8{} + dump(a) +} -- 2.39.5