From 073a651f7f0aa2a823ab1b08ad871b5e245bbe9b Mon Sep 17 00:00:00 2001 From: yuyi Date: Fri, 16 Jun 2023 14:48:12 +0800 Subject: [PATCH] cgen: fix fn voidptr param calling with nonpointer rvalue (fix #18424) (#18462) --- vlib/v/gen/c/fn.v | 2 +- ...r_param_call_with_nonpointer_rvalue_test.v | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/fn_voidptr_param_call_with_nonpointer_rvalue_test.v diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 5dd333184e..3617b32014 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -2204,7 +2204,7 @@ fn (mut g Gen) ref_or_deref_arg(arg ast.CallArg, expected_type ast.Type, lang as if atype.has_flag(.generic) { atype = g.unwrap_generic(atype) } - if atype.has_flag(.generic) { + if atype.has_flag(.generic) || arg.expr is ast.StructInit { g.write('(voidptr)&/*qq*/') } else { needs_closing = true diff --git a/vlib/v/tests/fn_voidptr_param_call_with_nonpointer_rvalue_test.v b/vlib/v/tests/fn_voidptr_param_call_with_nonpointer_rvalue_test.v new file mode 100644 index 0000000000..27a8192f4d --- /dev/null +++ b/vlib/v/tests/fn_voidptr_param_call_with_nonpointer_rvalue_test.v @@ -0,0 +1,23 @@ +import eventbus + +struct MyMessage { + msg string +} + +fn test_fn_call_with_nonpointer_rvalue() { + eb := eventbus.new() + mut subscriber := eb.subscriber + + subscriber.subscribe('my_publish', subscriber_method) + + do_something(eb) + assert true +} + +fn subscriber_method(receiver voidptr, ev &MyMessage, sender voidptr) { + println(ev) +} + +fn do_something(eb &eventbus.EventBus) { + eb.publish('my_publish', eb, MyMessage{ msg: 'this is my message' }) +}