From 3af720921c6dbc9732d7096169b6e19cf19bf4ed Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 30 Oct 2024 11:56:21 -0300 Subject: [PATCH] checker: fix selector with prefixed `&` structinit (#22689) --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/selector_struct_init_amp_err.out | 7 +++++++ vlib/v/checker/tests/selector_struct_init_amp_err.vv | 8 ++++++++ 3 files changed, 18 insertions(+) create mode 100644 vlib/v/checker/tests/selector_struct_init_amp_err.out create mode 100644 vlib/v/checker/tests/selector_struct_init_amp_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index d16fd0b87..f77d6a53f 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4498,6 +4498,9 @@ fn (mut c Checker) prefix_expr(mut node ast.PrefixExpr) ast.Type { } else if mut node.right is ast.SelectorExpr { if node.right.expr.is_literal() { c.error('cannot take the address of a literal value', node.pos.extend(node.right.pos)) + } else if node.right.expr is ast.StructInit { + c.error('should not create object instance on the heap to simply access a member', + node.pos.extend(node.right.pos)) } right_sym := c.table.sym(right_type) expr_sym := c.table.sym(node.right.expr_type) diff --git a/vlib/v/checker/tests/selector_struct_init_amp_err.out b/vlib/v/checker/tests/selector_struct_init_amp_err.out new file mode 100644 index 000000000..797e60029 --- /dev/null +++ b/vlib/v/checker/tests/selector_struct_init_amp_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/selector_struct_init_amp_err.vv:6:11: error: should not create object instance on the heap to simply access a member + 4 | + 5 | fn test_main() { + 6 | field := &Object{}.a + | ~~~~~~~~~~~ + 7 | assert field == 123 + 8 | } diff --git a/vlib/v/checker/tests/selector_struct_init_amp_err.vv b/vlib/v/checker/tests/selector_struct_init_amp_err.vv new file mode 100644 index 000000000..7386c39ff --- /dev/null +++ b/vlib/v/checker/tests/selector_struct_init_amp_err.vv @@ -0,0 +1,8 @@ +struct Object { + a int = 123 +} + +fn test_main() { + field := &Object{}.a + assert field == 123 +} -- 2.39.5