]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: merge bytes inline test with the rest
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 24 Sep 2017 16:55:19 +0000 (17:55 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 25 Sep 2017 06:52:31 +0000 (06:52 +0000)
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í <mvdan@mvdan.cc>
Reviewed-by: Marvin Stenger <marvin.stenger94@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/bytes/buffer_test.go
src/cmd/compile/internal/gc/inl_test.go

index 47ce10475a9f19e18b7463bbf741ae6faf20167a..141bbe48216efbe39859ccd3c18df6850e5a5484 100644 (file)
@@ -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)
index a0f466580a45d861d23c88082f25e8e687afad26..54793f352625035e467d5b7f228f60e14a2705b8 100644 (file)
@@ -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",