mirror of https://github.com/golang/go.git
all: make sure *Pointer[T]'s methods are inlined as intended
Updates #50860 Change-Id: I65bced707e50364b16edf4b087c541cf19bb1778 Reviewed-on: https://go-review.googlesource.com/c/go/+/428362 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
00234b052e
commit
ef69718dd7
|
|
@ -6,6 +6,7 @@ package test
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"internal/buildcfg"
|
||||
"internal/testenv"
|
||||
"io"
|
||||
"math/bits"
|
||||
|
|
@ -205,11 +206,7 @@ func TestIntendedInlining(t *testing.T) {
|
|||
"(*Uintptr).Load",
|
||||
"(*Uintptr).Store",
|
||||
"(*Uintptr).Swap",
|
||||
// TODO(rsc): Why are these not reported as inlined?
|
||||
// "(*Pointer[T]).CompareAndSwap",
|
||||
// "(*Pointer[T]).Load",
|
||||
// "(*Pointer[T]).Store",
|
||||
// "(*Pointer[T]).Swap",
|
||||
// (*Pointer[T])'s methods' handled below.
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -235,6 +232,14 @@ func TestIntendedInlining(t *testing.T) {
|
|||
// (*Bool).CompareAndSwap is just over budget on 32-bit systems (386, arm).
|
||||
want["sync/atomic"] = append(want["sync/atomic"], "(*Bool).CompareAndSwap")
|
||||
}
|
||||
if buildcfg.Experiment.Unified {
|
||||
// Non-unified IR does not report "inlining call ..." for atomic.Pointer[T]'s methods.
|
||||
// TODO(cuonglm): remove once non-unified IR frontend gone.
|
||||
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).CompareAndSwap")
|
||||
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Load")
|
||||
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Store")
|
||||
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Swap")
|
||||
}
|
||||
|
||||
switch runtime.GOARCH {
|
||||
case "386", "wasm", "arm":
|
||||
|
|
|
|||
|
|
@ -35,6 +35,10 @@ func b32(b bool) uint32 {
|
|||
return 0
|
||||
}
|
||||
|
||||
// For testing *Pointer[T]'s methods can be inlined.
|
||||
// Keep in sync with cmd/compile/internal/test/inl_test.go:TestIntendedInlining.
|
||||
var _ = &Pointer[int]{}
|
||||
|
||||
// A Pointer is an atomic pointer of type *T. The zero value is a nil *T.
|
||||
type Pointer[T any] struct {
|
||||
_ noCopy
|
||||
|
|
|
|||
Loading…
Reference in New Issue