1// run
2
3// Copyright 2011 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Issue 2582
8package main
9
10type T struct{}
11
12//go:noinline
13func (T) cplx() complex128 {
14	return complex(1, 0)
15}
16
17func (T) cplx2() complex128 {
18	return complex(0, 1)
19}
20
21type I interface {
22	cplx() complex128
23}
24
25func main() {
26
27	var t T
28
29	if v := real(t.cplx()); v != 1 {
30		panic("not-inlined complex call failed")
31	}
32	_ = imag(t.cplx())
33
34	_ = real(t.cplx2())
35	if v := imag(t.cplx2()); v != 1 {
36		panic("potentially inlined complex call failed")
37	}
38
39	var i I
40	i = t
41	if v := real(i.cplx()); v != 1 {
42		panic("potentially inlined complex call failed")
43	}
44	_ = imag(i.cplx())
45}
46