mirror of
https://github.com/golang/go
synced 2024-11-13 14:10:22 -07:00
test: use go:noinline consistently
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>
This commit is contained in:
parent
ebafc80eba
commit
e3e0122ae2
@ -511,9 +511,11 @@ func TestAssertE2T2Liveness(t *testing.T) {
|
|||||||
testIfaceEqual(io.EOF)
|
testIfaceEqual(io.EOF)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var a bool
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func testIfaceEqual(x interface{}) {
|
func testIfaceEqual(x interface{}) {
|
||||||
if x == "abc" {
|
if x == "abc" {
|
||||||
// Prevent inlining
|
a = true
|
||||||
panic("")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,11 +22,8 @@ func allocateTransient1M() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func allocateTransient2M() {
|
func allocateTransient2M() {
|
||||||
// prevent inlining
|
|
||||||
if memSink == nil {
|
|
||||||
panic("bad")
|
|
||||||
}
|
|
||||||
memSink = make([]byte, 2<<20)
|
memSink = make([]byte, 2<<20)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,18 +73,18 @@ func TestMemoryProfiler(t *testing.T) {
|
|||||||
|
|
||||||
tests := []string{
|
tests := []string{
|
||||||
fmt.Sprintf(`%v: %v \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
fmt.Sprintf(`%v: %v \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.allocatePersistent1K\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test\.go:43
|
# 0x[0-9,a-f]+ runtime/pprof_test\.allocatePersistent1K\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test\.go:40
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test\.go:66
|
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test\.go:63
|
||||||
`, 32*memoryProfilerRun, 1024*memoryProfilerRun, 32*memoryProfilerRun, 1024*memoryProfilerRun),
|
`, 32*memoryProfilerRun, 1024*memoryProfilerRun, 32*memoryProfilerRun, 1024*memoryProfilerRun),
|
||||||
|
|
||||||
fmt.Sprintf(`0: 0 \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
fmt.Sprintf(`0: 0 \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.allocateTransient1M\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:21
|
# 0x[0-9,a-f]+ runtime/pprof_test\.allocateTransient1M\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:21
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:64
|
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:61
|
||||||
`, (1<<10)*memoryProfilerRun, (1<<20)*memoryProfilerRun),
|
`, (1<<10)*memoryProfilerRun, (1<<20)*memoryProfilerRun),
|
||||||
|
|
||||||
fmt.Sprintf(`0: 0 \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
fmt.Sprintf(`0: 0 \[%v: %v\] @ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+ 0x[0-9,a-f]+
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.allocateTransient2M\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:30
|
# 0x[0-9,a-f]+ runtime/pprof_test\.allocateTransient2M\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:27
|
||||||
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:65
|
# 0x[0-9,a-f]+ runtime/pprof_test\.TestMemoryProfiler\+0x[0-9,a-f]+ .*/runtime/pprof/mprof_test.go:62
|
||||||
`, memoryProfilerRun, (2<<20)*memoryProfilerRun),
|
`, memoryProfilerRun, (2<<20)*memoryProfilerRun),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
src/runtime/race/testdata/mop_test.go
vendored
8
src/runtime/race/testdata/mop_test.go
vendored
@ -1356,14 +1356,8 @@ type InterImpl struct {
|
|||||||
x, y int
|
x, y int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func (p InterImpl) Foo(x int) {
|
func (p InterImpl) Foo(x int) {
|
||||||
// prevent inlining
|
|
||||||
z := 42
|
|
||||||
x = 85
|
|
||||||
y := x / z
|
|
||||||
z = y * z
|
|
||||||
x = z * y
|
|
||||||
_, _, _ = x, y, z
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type InterImpl2 InterImpl
|
type InterImpl2 InterImpl
|
||||||
|
9
src/runtime/race/testdata/regression_test.go
vendored
9
src/runtime/race/testdata/regression_test.go
vendored
@ -65,10 +65,8 @@ type Image struct {
|
|||||||
min, max Rect
|
min, max Rect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func NewImage() Image {
|
func NewImage() Image {
|
||||||
var pleaseDoNotInlineMe stack
|
|
||||||
pleaseDoNotInlineMe.push(1)
|
|
||||||
_ = pleaseDoNotInlineMe.pop()
|
|
||||||
return Image{}
|
return Image{}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,11 +111,8 @@ type RpcChan struct {
|
|||||||
|
|
||||||
var makeChanCalls int
|
var makeChanCalls int
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func makeChan() *RpcChan {
|
func makeChan() *RpcChan {
|
||||||
var pleaseDoNotInlineMe stack
|
|
||||||
pleaseDoNotInlineMe.push(1)
|
|
||||||
_ = pleaseDoNotInlineMe.pop()
|
|
||||||
|
|
||||||
makeChanCalls++
|
makeChanCalls++
|
||||||
c := &RpcChan{make(chan bool, 1)}
|
c := &RpcChan{make(chan bool, 1)}
|
||||||
c.c <- true
|
c.c <- true
|
||||||
|
@ -9,9 +9,8 @@ package main
|
|||||||
|
|
||||||
type T struct{}
|
type T struct{}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func (T) cplx() complex128 {
|
func (T) cplx() complex128 {
|
||||||
for false {
|
|
||||||
} // avoid inlining
|
|
||||||
return complex(1, 0)
|
return complex(1, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,20 +23,14 @@ package main
|
|||||||
|
|
||||||
import "runtime"
|
import "runtime"
|
||||||
|
|
||||||
var c bool
|
//go:noinline
|
||||||
|
|
||||||
func f() interface{} {
|
func f() interface{} {
|
||||||
if c { // disable inlining
|
|
||||||
f()
|
|
||||||
}
|
|
||||||
runtime.GC()
|
runtime.GC()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func g() {
|
func g() {
|
||||||
if c { // disable inlining
|
|
||||||
g()
|
|
||||||
}
|
|
||||||
var s interface{}
|
var s interface{}
|
||||||
_ = func() {
|
_ = func() {
|
||||||
s := f()
|
s := f()
|
||||||
@ -47,31 +41,25 @@ func g() {
|
|||||||
useiface(s)
|
useiface(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func useiface(x interface{}) {
|
func useiface(x interface{}) {
|
||||||
if c { // disable inlining
|
|
||||||
useiface(x)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func h() {
|
func h() {
|
||||||
if c { // disable inlining
|
|
||||||
h()
|
|
||||||
}
|
|
||||||
var x [16]uintptr
|
var x [16]uintptr
|
||||||
for i := range x {
|
for i := range x {
|
||||||
x[i] = 1
|
x[i] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
useint(x[0])
|
useint(x[0])
|
||||||
useint(x[1])
|
useint(x[1])
|
||||||
useint(x[2])
|
useint(x[2])
|
||||||
useint(x[3])
|
useint(x[3])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func useint(x uintptr) {
|
func useint(x uintptr) {
|
||||||
if c { // disable inlining
|
|
||||||
useint(x)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -85,6 +73,6 @@ func main() {
|
|||||||
|
|
||||||
func big(x int) {
|
func big(x int) {
|
||||||
if x >= 0 {
|
if x >= 0 {
|
||||||
big(x-1)
|
big(x - 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ func bar() {
|
|||||||
foo(&f)
|
foo(&f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func foo(f *func()) func() {
|
func foo(f *func()) func() {
|
||||||
defer func() {}() // prevent inlining of foo
|
|
||||||
return *f
|
return *f
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,8 @@ func main() {
|
|||||||
panic("bad")
|
panic("bad")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func f1(v1 uint) uint {
|
func f1(v1 uint) uint {
|
||||||
switch {
|
|
||||||
} // prevent inlining
|
|
||||||
return v1 >> ((1 >> v1) + (1 >> v1))
|
return v1 >> ((1 >> v1) + (1 >> v1))
|
||||||
}
|
}
|
||||||
|
@ -10,15 +10,13 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
func DontInline() {}
|
//go:noinline
|
||||||
|
|
||||||
func F(e interface{}) (int, int) {
|
func F(e interface{}) (int, int) {
|
||||||
DontInline()
|
|
||||||
return 3, 7
|
return 3, 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func G() (int, int) {
|
func G() (int, int) {
|
||||||
DontInline()
|
|
||||||
return 3, 7
|
return 3, 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,16 +10,14 @@ type T struct {
|
|||||||
Pointer *int
|
Pointer *int
|
||||||
}
|
}
|
||||||
|
|
||||||
func dontinline() {}
|
//go:noinline
|
||||||
|
|
||||||
func Store(t *T) {
|
func Store(t *T) {
|
||||||
global = t.Pointer
|
global = t.Pointer
|
||||||
dontinline()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func Store2(t *T) {
|
func Store2(t *T) {
|
||||||
global2 = t.Pointer
|
global2 = t.Pointer
|
||||||
dontinline()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Get() *int {
|
func Get() *int {
|
||||||
|
@ -4,12 +4,8 @@ import "fmt"
|
|||||||
|
|
||||||
var P int
|
var P int
|
||||||
|
|
||||||
var b bool
|
//go:noinline
|
||||||
|
|
||||||
func F(x *int) string {
|
func F(x *int) string {
|
||||||
if b { // avoid inlining
|
|
||||||
F(x)
|
|
||||||
}
|
|
||||||
P = 50
|
P = 50
|
||||||
*x = 100
|
*x = 100
|
||||||
return fmt.Sprintln(P, *x)
|
return fmt.Sprintln(P, *x)
|
||||||
|
@ -18,19 +18,19 @@ type T struct {
|
|||||||
|
|
||||||
type TI [3]uintptr
|
type TI [3]uintptr
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func G() (t TI) {
|
func G() (t TI) {
|
||||||
t[0] = 1
|
t[0] = 1
|
||||||
t[1] = 2
|
t[1] = 2
|
||||||
t[2] = 3
|
t[2] = 3
|
||||||
runtime.GC() // prevent inlining
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func F() (t T) {
|
func F() (t T) {
|
||||||
t.X = newint()
|
t.X = newint()
|
||||||
t.Y = t.X
|
t.Y = t.X
|
||||||
t.Z = t.Y
|
t.Z = t.Y
|
||||||
runtime.GC() // prevent inlining
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,16 +21,14 @@ func g() int {
|
|||||||
|
|
||||||
var xy string
|
var xy string
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func x() bool {
|
func x() bool {
|
||||||
for false {
|
|
||||||
} // no inlining
|
|
||||||
xy += "x"
|
xy += "x"
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func y() string {
|
func y() string {
|
||||||
for false {
|
|
||||||
} // no inlining
|
|
||||||
xy += "y"
|
xy += "y"
|
||||||
return "abc"
|
return "abc"
|
||||||
}
|
}
|
||||||
|
@ -58,9 +58,8 @@ func f(x, y string) {
|
|||||||
log += "f(" + x + ", " + y + ")"
|
log += "f(" + x + ", " + y + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func ff(x, y string) {
|
func ff(x, y string) {
|
||||||
for false {
|
|
||||||
} // prevent inl
|
|
||||||
log += "ff(" + x + ", " + y + ")"
|
log += "ff(" + x + ", " + y + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,9 +68,8 @@ func h(x string) string {
|
|||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
func g(x string) string {
|
func g(x string) string {
|
||||||
for false {
|
|
||||||
} // prevent inl
|
|
||||||
log += "g(" + x + ")"
|
log += "g(" + x + ")"
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -167,7 +165,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
x := 0
|
x := 0
|
||||||
switch x {
|
switch x {
|
||||||
case 0:
|
case 0:
|
||||||
@ -176,7 +174,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in switch, expecting a(1)b(2)a(2), got ", log)
|
println("in switch, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
@ -194,7 +192,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
c := make(chan int, 1)
|
c := make(chan int, 1)
|
||||||
c <- 1
|
c <- 1
|
||||||
select {
|
select {
|
||||||
@ -206,7 +204,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in select1, expecting a(1)b(2)a(2), got ", log)
|
println("in select1, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
@ -233,7 +231,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in select2, expecting a(1)b(2)a(2), got ", log)
|
println("in select2, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
@ -255,14 +253,14 @@ func main() {
|
|||||||
c <- 1
|
c <- 1
|
||||||
select {
|
select {
|
||||||
default:
|
default:
|
||||||
case c<-1:
|
case c <- 1:
|
||||||
case <-c:
|
case <-c:
|
||||||
if a("1")("2")("3"); log != "a(1)a(2)a(3)" {
|
if a("1")("2")("3"); log != "a(1)a(2)a(3)" {
|
||||||
println("in select3, expecting a(1)a(2)a(3) , got ", log)
|
println("in select3, expecting a(1)a(2)a(3) , got ", log)
|
||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in select3, expecting a(1)b(2)a(2), got ", log)
|
println("in select3, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
@ -290,7 +288,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in select4, expecting a(1)b(2)a(2), got ", log)
|
println("in select4, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
@ -318,7 +316,7 @@ func main() {
|
|||||||
err++
|
err++
|
||||||
}
|
}
|
||||||
log = ""
|
log = ""
|
||||||
|
|
||||||
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
if t.a("1").a(t.b("2")); log != "a(1)b(2)a(2)" {
|
||||||
println("in select5, expecting a(1)b(2)a(2), got ", log)
|
println("in select5, expecting a(1)b(2)a(2), got ", log)
|
||||||
err++
|
err++
|
||||||
|
Loading…
Reference in New Issue
Block a user