]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "runtime: use bytes.IndexByte in findnull"
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 1 Mar 2018 22:22:44 +0000 (22:22 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 1 Mar 2018 22:22:51 +0000 (22:22 +0000)
This reverts commit 7365fac2dbd01960268ee051ed03d961258d4ef4.

Reason for revert: breaks the build on some architectures, reading unmapped pages?

Change-Id: I3a8c02dc0b649269faacea79ecd8213defa97c54
Reviewed-on: https://go-review.googlesource.com/97995
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
misc/cgo/test/basic.go
misc/cgo/test/cgo_test.go
src/runtime/error.go
src/runtime/string.go

index 2655a66e38173c28d244857157d36e926cfa909f..3ceb4ce8470d4dac938c5741dcc19932db6616d4 100644 (file)
@@ -31,8 +31,6 @@ struct S {
        int x;
 };
 
-const char *cstr = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890";
-
 extern enum E myConstFunc(struct S* const ctx, int const id, struct S **const filter);
 
 enum E myConstFunc(struct S *const ctx, int const id, struct S **const filter) { return 0; }
@@ -151,18 +149,6 @@ func benchCgoCall(b *testing.B) {
        }
 }
 
-var sinkString string
-
-func benchGoString(b *testing.B) {
-       for i := 0; i < b.N; i++ {
-               sinkString = C.GoString(C.cstr)
-       }
-       const want = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890"
-       if sinkString != want {
-               b.Fatalf("%q != %q", sinkString, want)
-       }
-}
-
 // Issue 2470.
 func testUnsignedInt(t *testing.T) {
        a := (int64)(C.UINT32VAL)
index 01ab7eba5ec7a2e22e2a1beca1169d3047f26ef7..cfacb9c40d09f6f1d5c5d7da37e26673b8fc6984 100644 (file)
@@ -88,5 +88,4 @@ func Test6907Go(t *testing.T)                { test6907Go(t) }
 func Test21897(t *testing.T)                 { test21897(t) }
 func Test22906(t *testing.T)                 { test22906(t) }
 
-func BenchmarkCgoCall(b *testing.B)  { benchCgoCall(b) }
-func BenchmarkGoString(b *testing.B) { benchGoString(b) }
+func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }
index 2435f98b7af2a394c03b50154d2f9e7b62bb7cff..e1291e15435d53fc79b95f34c0e52065bc2f020d 100644 (file)
@@ -121,7 +121,6 @@ func printany(i interface{}) {
 // strings.IndexByte is implemented in runtime/asm_$goarch.s
 // but amusingly we need go:linkname to get access to it here in the runtime.
 //go:linkname stringsIndexByte strings.IndexByte
-//go:noescape
 func stringsIndexByte(s string, c byte) int
 
 // panicwrap generates a panic for a call to a wrapped value method
index 0ea162235cdc58dfd200e56bf24edde8550123bd..5c838959953b3e1d8d172a278f378dd905312a30 100644 (file)
@@ -407,9 +407,12 @@ func findnull(s *byte) int {
        if s == nil {
                return 0
        }
-       ss := stringStruct{unsafe.Pointer(s), maxAlloc/2 - 1}
-       t := *(*string)(unsafe.Pointer(&ss))
-       return stringsIndexByte(t, 0)
+       p := (*[maxAlloc/2 - 1]byte)(unsafe.Pointer(s))
+       l := 0
+       for p[l] != 0 {
+               l++
+       }
+       return l
 }
 
 func findnullw(s *uint16) int {