mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
e3e0122ae2
Replace various implementations of inlining prevention with "go:noinline" Change-Id: Iac90895c3a62d6f4b7a6c72e11e165d15a0abfa4 Reviewed-on: https://go-review.googlesource.com/16510 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Todd Neal <todd@tneal.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
45 lines
741 B
Go
45 lines
741 B
Go
// 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.
|
|
|
|
// Issue 2582
|
|
package main
|
|
|
|
type T struct{}
|
|
|
|
//go:noinline
|
|
func (T) cplx() complex128 {
|
|
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())
|
|
}
|