From 9d56432e55873924b57e5a4bd19624787d065668 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 24 May 2023 21:53:14 -0300 Subject: [PATCH] checker: add missing check for mismatch anon struct to typed struct (#18250) --- vlib/v/checker/assign.v | 3 +++ vlib/v/checker/tests/anon_struct_assign_err.out | 7 +++++++ vlib/v/checker/tests/anon_struct_assign_err.vv | 12 ++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 vlib/v/checker/tests/anon_struct_assign_err.out create mode 100644 vlib/v/checker/tests/anon_struct_assign_err.vv diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index 66bc24f65..fa410fe7e 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -698,6 +698,9 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { } } } + if left_sym.kind == .struct_ && right is ast.StructInit && (right as ast.StructInit).is_anon { + c.error('cannot assign anonymous `struct` to a typed `struct`', right.pos()) + } } // this needs to run after the assign stmt left exprs have been run through checker // so that ident.obj is set diff --git a/vlib/v/checker/tests/anon_struct_assign_err.out b/vlib/v/checker/tests/anon_struct_assign_err.out new file mode 100644 index 000000000..bc6691e50 --- /dev/null +++ b/vlib/v/checker/tests/anon_struct_assign_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/anon_struct_assign_err.vv:9:12: error: cannot assign anonymous `struct` to a typed `struct` + 7 | } + 8 | println(y) + 9 | y = struct { + | ^ + 10 | name: 'Def' + 11 | } diff --git a/vlib/v/checker/tests/anon_struct_assign_err.vv b/vlib/v/checker/tests/anon_struct_assign_err.vv new file mode 100644 index 000000000..ff6edc194 --- /dev/null +++ b/vlib/v/checker/tests/anon_struct_assign_err.vv @@ -0,0 +1,12 @@ +struct Abc { + name string +} + +mut y := Abc{ + name: 'Abc' +} +println(y) +y = struct { + name: 'Def' +} +println(y) -- 2.39.5