From f0d53008c5f4281797f86ab2b4e0f30610b5379a Mon Sep 17 00:00:00 2001 From: Krchi <997054144@qq.com> Date: Sat, 13 Dec 2025 21:46:38 +0800 Subject: [PATCH] v.debug: fix struct value initialization of an interface field (fix #25941) (fix #25924) (#25946) --- vlib/v/debug/tests/interface_var.expect | 7 +++++++ vlib/v/debug/tests/interface_var.vv | 17 +++++++++++++++++ vlib/v/gen/c/cgen.v | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/vlib/v/debug/tests/interface_var.expect b/vlib/v/debug/tests/interface_var.expect index 6eeafa77b..af82dcf82 100644 --- a/vlib/v/debug/tests/interface_var.expect +++ b/vlib/v/debug/tests/interface_var.expect @@ -5,5 +5,12 @@ expect "Break on * interface_var in ${test_file}:14\r\n" expect "${test_file}:14 vdbg> " send "p a\n" expect "a = Test{\r\n a: MySum(true)" +send "c\n" +expect "Break on * struct_to_interface_field in ${test_file}:33\r\n" +expect "${test_file}:33 vdbg> " +send "p t1\n" +expect "t1 = Test{\r\n a: MySum(false)" +send "p t2\n" +expect "t2 = Test{\r\n a: MySum(false)" send "q\n" expect eof diff --git a/vlib/v/debug/tests/interface_var.vv b/vlib/v/debug/tests/interface_var.vv index 6ca7ded01..ae6b53b1e 100644 --- a/vlib/v/debug/tests/interface_var.vv +++ b/vlib/v/debug/tests/interface_var.vv @@ -17,6 +17,23 @@ fn interface_var(a ITest) { } } +struct MyTest { + t ITest +} + +fn struct_to_interface_field() { + t1 := Test{} + _ := MyTest{ + t: t1 + } + mut t2 := Test{} + _ := MyTest{ + t: t2 + } + $dbg; +} + fn main() { interface_var(Test{ a: true }) + struct_to_interface_field() } diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index a833c11b8..9514d1779 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -4832,7 +4832,7 @@ fn (mut g Gen) debugger_stmt(node ast.DebuggerStmt) { '&' } else if !str_method_expects_ptr && obj.typ.is_ptr() { '*'.repeat(obj.typ.nr_muls()) - } else if !str_method_expects_ptr && obj_sym.is_heap() { + } else if !str_method_expects_ptr && (obj_sym.is_heap() || obj.is_auto_heap) { '*' } else if obj.is_auto_heap && var_typ.is_ptr() && str_method_expects_ptr { '*' -- 2.39.5