diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index b9f570bdad..6108ff3dbc 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -2757,7 +2757,7 @@ fn (mut g Gen) call_cfn_for_casting_expr(fname string, expr ast.Expr, exp ast.Ty mut mutable_idx := 0 is_not_ptr_and_fn := !got_is_ptr && !got_is_fn - is_sumtype_cast := is_not_ptr_and_fn && fname.contains('_to_sumtype_') + is_sumtype_cast := !got_is_fn && fname.contains('_to_sumtype_') is_comptime_variant := is_not_ptr_and_fn && expr is ast.Ident && g.comptime.is_comptime_variant_var(expr) diff --git a/vlib/v/tests/sumtypes/sumtype_mutable_test.v b/vlib/v/tests/sumtypes/sumtype_mutable_test.v new file mode 100644 index 0000000000..89b8560c43 --- /dev/null +++ b/vlib/v/tests/sumtypes/sumtype_mutable_test.v @@ -0,0 +1,30 @@ +module main + +type MySumType = MyStructA | MyStructB + +struct MyStructA { +mut: + test bool +} + +struct MyStructB { +} + +fn test_main() { + mut my_struct := &MyStructA{ + test: false + } + if $d('mutable_sumtype', false) { + assert my_struct.test == false + my_struct.test = true + assert my_struct.test == true + but_why(mut my_struct) + assert my_struct.test == false + } +} + +fn but_why(mut passed MySumType) { + if mut passed is MyStructA { + passed.test = false + } +}