|  | // run | 
|  |  | 
|  | // Copyright 2018 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // Issue 28390/28430: Function call arguments were not | 
|  | // converted correctly under some circumstances. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "fmt" | 
|  |  | 
|  | type A struct { | 
|  | K int | 
|  | S string | 
|  | M map[string]string | 
|  | } | 
|  |  | 
|  | func newA(k int, s string) (a A) { | 
|  | a.K = k | 
|  | a.S = s | 
|  | a.M = make(map[string]string) | 
|  | a.M[s] = s | 
|  | return | 
|  | } | 
|  |  | 
|  | func proxy() (x int, a A) { | 
|  | return 1, newA(2, "3") | 
|  | } | 
|  |  | 
|  | func consume(x int, a interface{}) { | 
|  | fmt.Println(x) | 
|  | fmt.Println(a) // used to panic here | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | consume(proxy()) | 
|  | } |