diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 4554d739bf..774121456d 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -2719,6 +2719,8 @@ fn (mut g Gen) ref_or_deref_arg(arg ast.CallArg, expected_type ast.Type, lang as if expected_type.has_flag(.option) { g.expr_with_opt(arg.expr, arg_typ, expected_type) return + } else if arg.expr is ast.Ident && arg.expr.language == .c { + g.write('(voidptr)') } else { g.write('(voidptr)&/*qq*/') } diff --git a/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.c.must_have b/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.c.must_have new file mode 100644 index 0000000000..edf4e93563 --- /dev/null +++ b/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.c.must_have @@ -0,0 +1 @@ +int (*real_open) (charptr , int , int ) = ((main__RealOpen)((dl__sym((voidptr)RTLD_NEXT, _SLIT("open"))))); \ No newline at end of file diff --git a/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.vv b/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.vv new file mode 100644 index 0000000000..76ab3b4e46 --- /dev/null +++ b/vlib/v/gen/c/testdata/c_ident_for_ptr_arg.vv @@ -0,0 +1,13 @@ +module main + +import dl + +#flag -D_GNU_SOURCE + +type RealOpen = fn(charptr, int, int) int + +@[export: open] +fn open(filename charptr, oflag int, mode int) int { + real_open := RealOpen((dl.sym(C.RTLD_NEXT, "open"))) + return real_open(filename, oflag, mode) +} \ No newline at end of file