// $G $D/$F.go && $L $F.$A && ./$A.out || echo "Bug401"

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

// Issue 2582
package main

type T struct{}

func (T) cplx() complex128 {
	for false {
	} // avoid inlining
	return complex(1, 0)
}

func (T) cplx2() complex128 {
	return complex(0, 1)
}

type I interface {
	cplx() complex128
}

func main() {

	var t T

	if v := real(t.cplx()); v != 1 {
		panic("not-inlined complex call failed")
	}
	_ = imag(t.cplx())

	_ = real(t.cplx2())
	if v := imag(t.cplx2()); v != 1 {
		panic("potentially inlined complex call failed")
	}

	var i I
	i = t
	if v := real(i.cplx()); v != 1 {
		panic("potentially inlined complex call failed")
	}
	_ = imag(i.cplx())
}
