From 7d65e4cb1017a843e90500fb73b30e7bdacc55b1 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 8 Oct 2020 17:10:20 +0200 Subject: [PATCH] autofree: fix and test var declarations --- vlib/v/gen/cgen.v | 6 ++++++ vlib/v/tests/valgrind/1.strings_and_arrays.v | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index a49b2649dd..638c490ea7 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -1388,6 +1388,12 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { // return } } + // Autofree tmp arg vars + first_right := assign_stmt.right[0] + af := g.pref.autofree && first_right is ast.CallExpr && !g.is_builtin_mod + if af { + g.autofree_call_pregen(first_right as ast.CallExpr) + } // // json_test failed w/o this check if return_type != table.void_type && return_type != 0 { diff --git a/vlib/v/tests/valgrind/1.strings_and_arrays.v b/vlib/v/tests/valgrind/1.strings_and_arrays.v index 245526fd9e..0fed5e83e3 100644 --- a/vlib/v/tests/valgrind/1.strings_and_arrays.v +++ b/vlib/v/tests/valgrind/1.strings_and_arrays.v @@ -46,6 +46,11 @@ fn str_tmp_expr_advanced() { handle_strings('c' + 'd', add_strings('e' + 'f', 'g')) // both lvl 1 and lvl2 exprs must be freed } +fn str_tmp_expr_advanced_var_decl() { + a := handle_strings('c' + 'd', add_strings('e' + 'f', 'g')) // both lvl 1 and lvl2 exprs must be freed + println(a) +} + struct Foo { a int b string @@ -114,6 +119,7 @@ fn main() { foo() str_tmp_expr() str_tmp_expr_advanced() + str_tmp_expr_advanced_var_decl() str_inter() match_expr() reassign_str()