From a95cdac635cc12c725b45500c48e2c1ccf7078dd Mon Sep 17 00:00:00 2001 From: ChAoS_UnItY Date: Thu, 2 Jun 2022 11:21:01 +0800 Subject: [PATCH] cgen: fix type not being unaliased (fix #14568) (#14591) --- vlib/v/gen/c/fn.v | 2 +- vlib/v/gen/c/testdata/alias_interface_method_call.out | 0 vlib/v/gen/c/testdata/alias_interface_method_call.vv | 9 +++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 vlib/v/gen/c/testdata/alias_interface_method_call.out create mode 100644 vlib/v/gen/c/testdata/alias_interface_method_call.vv diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 97da14b112..6f52a5d780 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -750,7 +750,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) { } left_is_shared := node.left_type.has_flag(.shared_f) - left_cc_type := g.cc_type(node.left_type, false) + left_cc_type := g.cc_type(g.table.unaliased_type(node.left_type), false) left_type_name := util.no_dots(left_cc_type) g.write('${c_name(left_type_name)}_name_table[') if node.left.is_auto_deref_var() && node.left_type.nr_muls() > 1 { diff --git a/vlib/v/gen/c/testdata/alias_interface_method_call.out b/vlib/v/gen/c/testdata/alias_interface_method_call.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vlib/v/gen/c/testdata/alias_interface_method_call.vv b/vlib/v/gen/c/testdata/alias_interface_method_call.vv new file mode 100644 index 0000000000..ec4b03a3f0 --- /dev/null +++ b/vlib/v/gen/c/testdata/alias_interface_method_call.vv @@ -0,0 +1,9 @@ +import io { Reader } + +type Decoder = Reader + +fn (mut d Decoder) decode(len int) ?[]u8 { + mut buf := []u8{len: len} + d.read(mut buf)? + return buf +}