Commit bcd36e88 authored by Keith Randall's avatar Keith Randall

runtime: make gostringnocopy update maxstring

Fixes #8706

LGTM=josharian
R=josharian
CC=golang-codereviews
https://golang.org/cl/143880043
parent 6e55f7a8
...@@ -160,3 +160,6 @@ func GostringW(w []uint16) (s string) { ...@@ -160,3 +160,6 @@ func GostringW(w []uint16) (s string) {
}) })
return return
} }
var Gostringnocopy = gostringnocopy
var Maxstring = &maxstring
...@@ -42,10 +42,15 @@ String ...@@ -42,10 +42,15 @@ String
runtime·gostringnocopy(byte *str) runtime·gostringnocopy(byte *str)
{ {
String s; String s;
uintptr ms;
s.str = str; s.str = str;
s.len = runtime·findnull(str); s.len = runtime·findnull(str);
while(true) {
ms = runtime·maxstring;
if(s.len <= ms || runtime·casp((void**)&runtime·maxstring, (void*)ms, (void*)s.len))
return s; return s;
}
} }
// TODO: move this elsewhere // TODO: move this elsewhere
......
...@@ -145,3 +145,16 @@ func main() { ...@@ -145,3 +145,16 @@ func main() {
panic(s) panic(s)
} }
` `
func TestGostringnocopy(t *testing.T) {
max := *runtime.Maxstring
b := make([]byte, max+10)
for i := uintptr(0); i < max+9; i++ {
b[i] = 'a'
}
_ = runtime.Gostringnocopy(&b[0])
newmax := *runtime.Maxstring
if newmax != max+9 {
t.Errorf("want %d, got %d", max+9, newmax)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment