Skip to content

Commit

Permalink
checker: extend check assigning mut reference to immutable var in nes…
Browse files Browse the repository at this point in the history
…ted parens (#18442)
  • Loading branch information
ttytm committed Jun 14, 2023
1 parent 77a1f59 commit 34163ae
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 5 deletions.
6 changes: 5 additions & 1 deletion vlib/v/checker/assign.v
Expand Up @@ -733,7 +733,11 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
c.inside_ref_lit = old_inside_ref_lit
if right_node.op == .amp {
expr := if right_node.right is ast.ParExpr {
right_node.right.expr
mut expr_ := right_node.right.expr
for mut expr_ is ast.ParExpr {
expr_ = expr_.expr
}
expr_
} else {
right_node.right
}
Expand Down
@@ -1,7 +1,77 @@
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:11:12: warning: redundant parentheses are used
9 | fn foo() {
10 | mut a := &(a_char)
11 | mut b := &((a_char))
| ~~~~~~~~~~
12 | mut c := &((((a_char))))
13 | println(a)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:11:12: warning: redundant parentheses are used
9 | fn foo() {
10 | mut a := &(a_char)
11 | mut b := &((a_char))
| ~~~~~~~~~~
12 | mut c := &((((a_char))))
13 | println(a)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:12: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:13: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:14: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:12: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:13: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:14: warning: redundant parentheses are used
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ~~~~~~~~~~
13 | println(a)
14 | println(b)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:10:11: error: `a_char` is immutable, cannot have a mutable reference to it
8 |
9 | fn foo() {
10 | mut c := &(a_char)
10 | mut a := &(a_char)
| ^
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:11:11: error: `a_char` is immutable, cannot have a mutable reference to it
9 | fn foo() {
10 | mut a := &(a_char)
11 | mut b := &((a_char))
| ^
12 | mut c := &((((a_char))))
13 | println(a)
vlib/v/checker/tests/assign_immutable_reference_var_with_parenthesis_err.vv:12:11: error: `a_char` is immutable, cannot have a mutable reference to it
10 | mut a := &(a_char)
11 | mut b := &((a_char))
12 | mut c := &((((a_char))))
| ^
11 | println(c)
12 | }
13 | println(a)
14 | println(b)
Expand Up @@ -7,6 +7,10 @@ const a_char = MyChar{
}

fn foo() {
mut c := &(a_char)
mut a := &(a_char)
mut b := &((a_char))
mut c := &((((a_char))))
println(a)
println(b)
println(c)
}

0 comments on commit 34163ae

Please sign in to comment.