golang inline_sync 代码
文件路径:/test/inline_sync.go
/ +build !nacl,!386,!wasm,!arm,!gcflags_noopt
/ errorcheck -0 -m
/ Copyright 2019 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.
/ Test, using compiler diagnostic flags, that inlining of functions
/ imported from the sync package is working.
/ Compiles but does not run.
/ FIXME: This test is disabled on architectures where atomic operations
/ are function calls rather than intrinsics, since this prevents inlining
/ of the sync fast paths. This test should be re-enabled once the problem
/ is solved.
package foo
import (
"sync"
)
var mutex *sync.Mutex
func small5() { / ERROR "can inline small5"
/ the Unlock fast path should be inlined
mutex.Unlock() / ERROR "inlining call to sync\.\(\*Mutex\)\.Unlock"
}
func small6() { / ERROR "can inline small6"
/ the Lock fast path should be inlined
mutex.Lock() / ERROR "inlining call to sync\.\(\*Mutex\)\.Lock"
}
var once *sync.Once
func small7() { / ERROR "can inline small7"
/ the Do fast path should be inlined
once.Do(small5) / ERROR "inlining call to sync\.\(\*Once\)\.Do"
}
var rwmutex *sync.RWMutex
func small8() { / ERROR "can inline small8"
/ the RUnlock fast path should be inlined
rwmutex.RUnlock() / ERROR "inlining call to sync\.\(\*RWMutex\)\.RUnlock"
}
func small9() { / ERROR "can inline small9"
/ the RLock fast path should be inlined
rwmutex.RLock() / ERROR "inlining call to sync\.\(\*RWMutex\)\.RLock"
}