diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 495a401b6b..976c4c6523 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -1909,6 +1909,10 @@ fn (mut g Gen) gen_clone_assignment(val ast.Expr, right_sym table.TypeSymbol, ad } fn (mut g Gen) autofree_scope_vars(pos int) { + if g.is_builtin_mod { + // In `builtin` everything is freed manually. + return + } g.writeln('// autofree_scope_vars($pos)') // eprintln('> free_scope_vars($pos)') scope := g.file.scope.innermost(pos) @@ -1982,6 +1986,10 @@ fn (mut g Gen) autofree_var_call(free_fn_name string, v ast.Var) { if v.is_autofree_tmp && !g.doing_autofree_tmp { return } + if v.name.contains('expr_write_1_') { + // TODO remove this temporary hack + return + } if v.typ.is_ptr() { g.writeln('\t${free_fn_name}(${c_name(v.name)}); // autofreed ptr var') } else { diff --git a/vlib/v/tests/valgrind/1.strings_and_arrays.v b/vlib/v/tests/valgrind/1.strings_and_arrays.v index 9ea52b31dc..1eefd0f20a 100644 --- a/vlib/v/tests/valgrind/1.strings_and_arrays.v +++ b/vlib/v/tests/valgrind/1.strings_and_arrays.v @@ -224,8 +224,8 @@ fn main() { str_replace2() if_cond() addition_with_tmp_expr() - if_expr() - return_if_expr() + q := if_expr() + s := return_if_expr() free_inside_opt_block() // free_map() // loop_map()