diff options
author | Keith Randall <khr@golang.org> | 2016-04-19 19:35:10 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2016-04-20 14:02:22 +0000 |
commit | 001e8e8070e8ed3a578dbad93cc3f70257e965bd (patch) | |
tree | 13300d3f022b1d24571be6c267979e5d8d0c48e5 /src/runtime/slice.go | |
parent | 731531980a36f1fa6434c947c54daf8ba530a65f (diff) | |
download | go-001e8e8070e8ed3a578dbad93cc3f70257e965bd.tar.gz go-001e8e8070e8ed3a578dbad93cc3f70257e965bd.zip |
runtime: simplify mallocgc flag argument
mallocgc can calculate noscan itself. The only remaining
flag argument is needzero, so we just make that a boolean arg.
Fixes #15379
Change-Id: I839a70790b2a0c9dbcee2600052bfbd6c8148e20
Reviewed-on: https://go-review.googlesource.com/22290
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/slice.go')
-rw-r--r-- | src/runtime/slice.go | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/runtime/slice.go b/src/runtime/slice.go index e86c1ce2c8..e15e6c4dc6 100644 --- a/src/runtime/slice.go +++ b/src/runtime/slice.go @@ -43,7 +43,6 @@ func makeslice(et *_type, len64, cap64 int64) slice { // when someone does make([]T, bignumber). 'cap out of range' is true too, // but since the cap is only being supplied implicitly, saying len is clearer. // See issue 4085. - maxElements := maxSliceCap(et.size) len := int(len64) if len64 < 0 || int64(len) != len64 || uintptr(len) > maxElements { @@ -55,11 +54,7 @@ func makeslice(et *_type, len64, cap64 int64) slice { panic(errorString("makeslice: cap out of range")) } - var flags uint32 - if et.kind&kindNoPointers != 0 { - flags = flagNoScan - } - p := mallocgc(et.size*uintptr(cap), et, flags) + p := mallocgc(et.size*uintptr(cap), et, true) return slice{p, len, cap} } @@ -128,12 +123,12 @@ func growslice(et *_type, old slice, cap int) slice { var p unsafe.Pointer if et.kind&kindNoPointers != 0 { - p = rawmem(capmem) + p = mallocgc(capmem, nil, false) memmove(p, old.array, lenmem) memclr(add(p, lenmem), capmem-lenmem) } else { // Note: can't use rawmem (which avoids zeroing of memory), because then GC can scan uninitialized memory. - p = mallocgc(capmem, et, 0) + p = mallocgc(capmem, et, true) if !writeBarrier.enabled { memmove(p, old.array, lenmem) } else { |