cgen: fix premature variable release by autofree (#20731)

This commit is contained in:
GGRei 2024-02-05 16:13:14 +01:00 committed by GitHub
parent 4b4646169b
commit e48e28de1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 1 deletions

View File

@ -2970,7 +2970,9 @@ fn (mut g Gen) autofree_scope_vars2(scope &ast.Scope, start_pos int, end_pos int
// continue // continue
// } // }
// if v.pos.pos > end_pos { // if v.pos.pos > end_pos {
if obj.pos.pos > end_pos || (obj.pos.pos < start_pos && obj.pos.line_nr == line_nr) { if obj.pos.pos > end_pos
|| (obj.pos.pos < start_pos && obj.pos.line_nr == line_nr)
|| (end_pos < scope.end_pos && obj.expr is ast.IfExpr) {
// Do not free vars that were declared after this scope // Do not free vars that were declared after this scope
continue continue
} }

View File

@ -0,0 +1,19 @@
fn main() {
out := if temp := f('') {
temp
} else if temp := f('something') {
temp
} else {
return
}
assert out[0] == 104
assert out[1] == 105
}
fn f(s string) ?[]u8 {
if s == '' {
return none
}
return [u8(104), 105]
}