// 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
}
