From 36c7910f53bed4f60af400f3e248759f42d5d3dc Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 13 Jul 2024 06:29:47 -0300 Subject: [PATCH] cgen: fix option string struct member init with autofree (#21859) --- vlib/v/gen/c/struct.v | 2 +- ...ing_and_printing_struct_with_optional_field.out | 5 +++++ ...ning_and_printing_struct_with_optional_field.vv | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.out create mode 100644 vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.vv diff --git a/vlib/v/gen/c/struct.v b/vlib/v/gen/c/struct.v index 5db2a6c83..ee2a9d0cb 100644 --- a/vlib/v/gen/c/struct.v +++ b/vlib/v/gen/c/struct.v @@ -640,7 +640,7 @@ fn (mut g Gen) struct_init_field(sfield ast.StructInitField, language ast.Langua mut cloned := false if g.is_autofree && !sfield.typ.is_ptr() && field_type_sym.kind in [.array, .string] { g.write('/*clone1*/') - if g.gen_clone_assignment(sfield.typ, sfield.expr, sfield.typ, false) { + if g.gen_clone_assignment(sfield.expected_type, sfield.expr, sfield.typ, false) { cloned = true } } diff --git a/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.out b/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.out new file mode 100644 index 000000000..e3b840c13 --- /dev/null +++ b/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.out @@ -0,0 +1,5 @@ +autofree is on +SomeStruct{ + val: 0 + arg: Option('xyz') +} diff --git a/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.vv b/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.vv new file mode 100644 index 000000000..36c29c8a9 --- /dev/null +++ b/vlib/v/gen/c/testdata/assigning_and_printing_struct_with_optional_field.vv @@ -0,0 +1,14 @@ +// vtest vflags: -autofree +struct SomeStruct { + val int + arg ?string +} + +x := 'xyz' +s := SomeStruct{ + arg: x +} +$if autofree { + println('autofree is on') +} +println(s) -- 2.39.5