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) {
})
return
}
var Gostringnocopy = gostringnocopy
var Maxstring = &maxstring
......@@ -42,10 +42,15 @@ String
runtime·gostringnocopy(byte *str)
{
String s;
uintptr ms;
s.str = str;
s.len = runtime·findnull(str);
return s;
while(true) {
ms = runtime·maxstring;
if(s.len <= ms || runtime·casp((void**)&runtime·maxstring, (void*)ms, (void*)s.len))
return s;
}
}
// TODO: move this elsewhere
......
......@@ -145,3 +145,16 @@ func main() {
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