go inline_sync 源码

  • 2022-07-15
  • 浏览 (832)

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"
}

相关信息

go 源码目录

相关文章

go 235 源码

go 64bit 源码

go alg 源码

go alias 源码

go alias1 源码

go alias2 源码

go alias3 源码

go align 源码

go append 源码

go append1 源码

0  赞