From 3e80e22f5d80dab844ecf64331b8b5e1a42fc0ac Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Sat, 21 Mar 2020 20:02:37 +0100 Subject: [PATCH] fix prod build --- vlib/v/gen/cgen.v | 4 ++-- vlib/v/tests/valgrind/1.vv | 18 ++++++++++++++++++ vlib/v/tests/valgrind/valgrind_test.v | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/valgrind/1.vv create mode 100644 vlib/v/tests/valgrind/valgrind_test.v diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 22baf1c405..77aedd0c2d 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -552,7 +552,7 @@ fn (g mut Gen) gen_fn_decl(it ast.FnDecl) { // //////////// if g.autofree && false { scope := g.file.scope.innermost(it.pos.pos - 1) - for i, var in scope.vars { + for _, var in scope.vars { sym := g.table.get_type_symbol(var.typ) if sym.kind == .array && !table.type_is_optional(var.typ) { g.writeln('array_free($var.name); // autofree') @@ -1837,8 +1837,8 @@ fn (g mut Gen) call_expr(it ast.CallExpr) { name = name[3..] } // Generate tmp vars for values that have to be freed. - mut tmps := []string /* + mut tmps := []string for arg in it.args { if arg.typ == table.string_type_idx || is_print { tmp := g.new_tmp_var() diff --git a/vlib/v/tests/valgrind/1.vv b/vlib/v/tests/valgrind/1.vv new file mode 100644 index 0000000000..e965117943 --- /dev/null +++ b/vlib/v/tests/valgrind/1.vv @@ -0,0 +1,18 @@ +import os + +fn return_array(array_arg []string) []int { + s := [1, 2, 3] // escaping array must not be freed + return s +} + +fn foo() { + nums := [1, 2, 3] // local array must be freed + println(nums) +} + +fn main() { + println('start') + foo() + println('end') +} + diff --git a/vlib/v/tests/valgrind/valgrind_test.v b/vlib/v/tests/valgrind/valgrind_test.v new file mode 100644 index 0000000000..9d4ecd2756 --- /dev/null +++ b/vlib/v/tests/valgrind/valgrind_test.v @@ -0,0 +1,15 @@ +import os +import term + +fn test_all() { + $if !linux { + println('Valgrind tests can only be run on Linux.') + exit(1) + } + exe := os.executable() + dir := os.dir(exe) + files := os.ls('$dir/vlib/v/tests/valgrind/') or { + panic(err) + } + println(files) +}