@@ -901,24 +901,27 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool)
901
901
}
902
902
if func.is_variadic && i > = func.params.len - 1 {
903
903
param_sym := c.table.sym (param.typ)
904
+ mut expected_type := param.typ
904
905
if param_sym.kind == .array {
905
906
info := param_sym.array_info ()
906
- c.expected_type = info.elem_type
907
+ expected_type = info.elem_type
908
+ c.expected_type = expected_type
907
909
}
908
910
typ := c.expr (call_arg.expr)
909
911
if i == node.args.len - 1 {
910
912
if c.table.sym (typ).kind == .array && call_arg.expr ! is ast.ArrayDecompose
911
- && ! param.typ.has_flag (.generic) && c. expected_type != typ {
913
+ && ! param.typ.has_flag (.generic) && expected_type != typ {
912
914
styp := c.table.type_to_str (typ)
913
- elem_styp := c.table.type_to_str (c. expected_type)
915
+ elem_styp := c.table.type_to_str (expected_type)
914
916
c.error ('to pass `$call_arg.expr ` ($styp ) to `$func.name ` (which accepts type `...$elem_styp `), use `...$call_arg.expr `' ,
915
917
node.pos)
916
918
} else if call_arg.expr is ast.ArrayDecompose
917
- && c.table.sym (c.expected_type).kind == .sum_type && c.expected_type != typ {
918
- expected_type := c.table.type_to_str (c.expected_type)
919
- got_type := c.table.type_to_str (typ)
920
- c.error ('cannot use `...$got_type ` as `...$expected_type ` in argument ${i + 1} to `$fn_name `' ,
921
- call_arg.pos)
919
+ && c.table.sym (expected_type).kind == .sum_type
920
+ && expected_type.idx () != typ.idx () {
921
+ expected_type_str := c.table.type_to_str (expected_type)
922
+ got_type_str := c.table.type_to_str (typ)
923
+ c.error ('cannot use `...$got_type_str ` as `...$expected_type_str ` in argument ${
924
+ i + 1} to `$fn_name `' , call_arg.pos)
922
925
}
923
926
}
924
927
} else {
0 commit comments