|  | // run | 
|  |  | 
|  | // Copyright 2011 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type Value struct { | 
|  | X interface{} | 
|  | Y int | 
|  | } | 
|  |  | 
|  | type Struct struct { | 
|  | X complex128 | 
|  | } | 
|  |  | 
|  | const magic = 1 + 2i | 
|  |  | 
|  | func (Value) Complex(x complex128) { | 
|  | if x != magic { | 
|  | println(x) | 
|  | panic("bad complex magic") | 
|  | } | 
|  | } | 
|  |  | 
|  | func f(x *byte, y, z int) complex128 { | 
|  | return magic | 
|  | } | 
|  |  | 
|  | func (Value) Struct(x Struct) { | 
|  | if x.X != magic { | 
|  | println(x.X) | 
|  | panic("bad struct magic") | 
|  | } | 
|  | } | 
|  |  | 
|  | func f1(x *byte, y, z int) Struct { | 
|  | return Struct{magic} | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | var v Value | 
|  | v.Struct(f1(nil, 0, 0)) // ok | 
|  | v.Complex(f(nil, 0, 0)) // used to fail | 
|  | } |