diff --git a/vlib/v/checker/containers.v b/vlib/v/checker/containers.v index b8e19526bb..52f8b588b9 100644 --- a/vlib/v/checker/containers.v +++ b/vlib/v/checker/containers.v @@ -344,7 +344,8 @@ fn (mut c Checker) map_init(mut node ast.MapInit) ast.Type { mut key0_type := ast.void_type mut val0_type := ast.void_type use_expected_type := c.expected_type != ast.void_type && !c.inside_const - && c.table.sym(c.expected_type).kind == .map + && c.table.sym(c.expected_type).kind == .map && !(c.inside_fn_arg + && c.expected_type.has_flag(.generic)) if use_expected_type { sym := c.table.sym(c.expected_type) info := sym.map_info() diff --git a/vlib/v/tests/generic_fn_infer_map_argument_test.v b/vlib/v/tests/generic_fn_infer_map_argument_test.v new file mode 100644 index 0000000000..233b1c772c --- /dev/null +++ b/vlib/v/tests/generic_fn_infer_map_argument_test.v @@ -0,0 +1,17 @@ +fn f[T](src map[string]T) T { + return src['a'] +} + +fn test_generic_fn_infer_map_arg() { + r1 := f({ + 'a': 1 + }) + println(r1) + assert r1 == 1 + + r2 := f({ + 'a': 'hello' + }) + println(r2) + assert r2 == 'hello' +}