Skip to content

Commit 62ba811

Browse files
authored
tests: cleanup warnings in the autofree code samples in vlib/v/slow_tests/valgrind/ (#23929)
1 parent a80bc23 commit 62ba811

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

vlib/v/slow_tests/valgrind/1.strings_and_arrays.v

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import os
21
import strings
32

43
// This program is built and run via Valgrind to ensure there are no leaks with -autofree
@@ -9,11 +8,13 @@ fn simple() {
98
println(nums_copy)
109
name := 'Peter' // string literals mustn't be freed
1110
str_inter := 'hello, ${name}' // concatenated strings must be freed
11+
println(str_inter)
1212
// nums.free() // this should result in a double free and a CI error
1313
if true {
1414
// test the freeing of local vars in a new scope
1515
nums2 := [4, 5, 6]
1616
str_inter2 := 'hello, ${name}'
17+
println(str_inter2)
1718
println(nums2)
1819
}
1920
arr := return_array([])
@@ -119,6 +120,9 @@ fn reassign_str() {
119120
mut s := 'a' + 'b'
120121
s = 'x' + 'y' // 'a' + 'b' must be freed before the re-assignment
121122
s = s + '!' // old s ref must be copied and freed after the assignment, since s is still used in the right expr
123+
println(z)
124+
println(x)
125+
println(s)
122126
}
123127

124128
struct Foo2 {
@@ -133,8 +137,11 @@ fn reassign_arr() {
133137
mut foo := Foo2{[10, 20, 30]}
134138
foo.nums = [40, 50, 60] // same with struct fields
135139
foo.nums = [70, 80, 90]
140+
println(x)
136141
// TODO: remove this once structs are freed automatically
137-
foo.nums.free()
142+
unsafe {
143+
foo.nums.free()
144+
}
138145
}
139146

140147
fn match_expr() string {
@@ -173,6 +180,7 @@ fn option_str() {
173180
p = opt('query:${q}') or { break }
174181
break
175182
}
183+
println(p)
176184
}
177185

178186
fn return_error_with_freed_expr() !string {
@@ -236,6 +244,7 @@ fn loop_map() {
236244

237245
fn free_map() {
238246
nums := [1, 2, 3]
247+
println(nums)
239248
/*
240249
nums2 := nums.map(it + handle_strings('a' + 'b', 'c'))
241250
println(nums2)
@@ -247,6 +256,7 @@ fn free_inside_opt_block() {
247256
get_string('c' + 'd') // c+d must be freed before a+b
248257
return
249258
}
259+
println(x)
250260
}
251261

252262
fn free_before_return() {
@@ -265,12 +275,15 @@ fn free_before_return_bool() bool {
265275

266276
fn free_before_break() {
267277
s := 'a' + 'b'
278+
println(s)
268279
for {
269280
q := [1, 2, 3]
281+
println(q)
270282
break
271283
}
272284
for {
273285
aa := [1, 2, 3]
286+
println(aa)
274287
if true {
275288
// breaking should free only vars in the closest for loop's scope
276289
// `qq`, not `s`
@@ -279,12 +292,14 @@ fn free_before_break() {
279292
// nested 1
280293
for {
281294
bb := [4, 5, 6]
295+
println(bb)
282296
if true {
283297
break
284298
}
285299
// nested 2
286300
for {
287301
cc := [7, 8, 9]
302+
println(cc)
288303
if true {
289304
if true {
290305
break
@@ -298,6 +313,7 @@ fn free_before_break() {
298313
for {
299314
i++
300315
qq := [1, 2, 3]
316+
println(qq)
301317
if i > 10 {
302318
break
303319
}
@@ -336,6 +352,7 @@ fn get_user2() User {
336352
fn string_array_get() {
337353
s := ['a', 'b', 'c']
338354
x := s[0]
355+
println(x)
339356
println(s)
340357
}
341358

@@ -379,6 +396,7 @@ fn parse_header1(s string) !string {
379396
fn advanced_options() {
380397
s := parse_header0('foo:bar') or { return }
381398
s2 := parse_header1('foo:bar') or { return }
399+
_ := s.len + s2.len // avoid warning for unused variables
382400
// TODO: fix -autofree, so that it adds this free automatically:
383401
unsafe { s2.free() }
384402
}
@@ -400,13 +418,16 @@ fn main() {
400418
if_cond()
401419
addition_with_tmp_expr()
402420
q := if_expr()
421+
println(q)
403422
s := return_if_expr()
423+
println(s)
404424
free_inside_opt_block()
405425
comptime_if()
406426
free_before_return()
407427
free_before_return_bool()
408428
free_before_break()
409429
s2 := return_sb_str()
430+
println(s2)
410431
// free_map()
411432
// loop_map()
412433
advanced_options()

vlib/v/slow_tests/valgrind/2.heap_objects.v

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ struct User {
55

66
fn simple() {
77
user := &User{'Bob', 31}
8+
println(user.name)
89
println('done')
910
}
1011

0 commit comments

Comments
 (0)