From 6945c67e102da9a37725de590b7e825d880ac848 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Mart=C3=AD?= Date: Sun, 24 Sep 2017 17:55:19 +0100 Subject: [PATCH] cmd/compile: merge bytes inline test with the rest MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In golang.org/cl/42813, a test was added in the bytes package to check if a Buffer method was being inlined, using 'go tool nm'. Now that we have a compiler test that verifies that certain funcs are inlineable, merge it there. Knowing whether the funcs are inlineable is also more reliable than whether or not their symbol appears in the binary, too. For example, under some circumstances, inlineable funcs can't be inlined, such as if closures are used. While at it, add a few more bytes.Buffer methods that are currently inlined and should clearly stay that way. Updates #21851. Change-Id: I62066e32ef5542d37908bd64f90bda51276da4de Reviewed-on: https://go-review.googlesource.com/65658 Run-TryBot: Daniel Martí Reviewed-by: Marvin Stenger Reviewed-by: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/bytes/buffer_test.go | 22 ---------------------- src/cmd/compile/internal/gc/inl_test.go | 12 ++++++++++++ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/bytes/buffer_test.go b/src/bytes/buffer_test.go index 47ce10475a..141bbe4821 100644 --- a/src/bytes/buffer_test.go +++ b/src/bytes/buffer_test.go @@ -6,10 +6,8 @@ package bytes_test import ( . "bytes" - "internal/testenv" "io" "math/rand" - "os/exec" "runtime" "testing" "unicode/utf8" @@ -560,26 +558,6 @@ func TestBufferGrowth(t *testing.T) { } } -// Test that tryGrowByReslice is inlined. -// Only execute on "linux-amd64" builder in order to avoid breakage. -func TestTryGrowByResliceInlined(t *testing.T) { - targetBuilder := "linux-amd64" - if testenv.Builder() != targetBuilder { - t.Skipf("%q gets executed on %q builder only", t.Name(), targetBuilder) - } - t.Parallel() - goBin := testenv.GoToolPath(t) - out, err := exec.Command(goBin, "tool", "nm", goBin).CombinedOutput() - if err != nil { - t.Fatalf("go tool nm: %v: %s", err, out) - } - // Verify this doesn't exist: - sym := "bytes.(*Buffer).tryGrowByReslice" - if Contains(out, []byte(sym)) { - t.Errorf("found symbol %q in cmd/go, but should be inlined", sym) - } -} - func BenchmarkWriteByte(b *testing.B) { const n = 4 << 10 b.SetBytes(n) diff --git a/src/cmd/compile/internal/gc/inl_test.go b/src/cmd/compile/internal/gc/inl_test.go index a0f466580a..54793f3526 100644 --- a/src/cmd/compile/internal/gc/inl_test.go +++ b/src/cmd/compile/internal/gc/inl_test.go @@ -64,6 +64,18 @@ func TestIntendedInlining(t *testing.T) { "(*waitq).enqueue", }, "runtime/internal/sys": {}, + "bytes": { + "(*Buffer).Bytes", + "(*Buffer).Cap", + "(*Buffer).Len", + "(*Buffer).Next", + "(*Buffer).Read", + "(*Buffer).ReadByte", + "(*Buffer).Reset", + "(*Buffer).String", + "(*Buffer).UnreadByte", + "(*Buffer).tryGrowByReslice", + }, "unicode/utf8": { "FullRune", "FullRuneInString", -- 2.48.1