Fixes #14938.
Additionally some simplifications along the way.
Change-Id: I2c5fb7e32dcc6fab68fff36a49cb72e715756abe
Reviewed-on: https://go-review.googlesource.com/21046
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
}
newcap := old.cap
- if newcap+newcap < cap {
+ doublecap := newcap + newcap
+ if cap > doublecap {
newcap = cap
} else {
- for {
- if old.len < 1024 {
- newcap += newcap
- } else {
+ if old.len < 1024 {
+ newcap = doublecap
+ } else {
+ for newcap < cap {
newcap += newcap / 4
}
- if newcap >= cap {
- break
- }
}
- }
-
- if uintptr(newcap) >= maxcap {
- panic(errorString("growslice: cap out of range"))
+ if uintptr(newcap) > maxcap {
+ panic(errorString("growslice: cap out of range"))
+ }
}
lenmem := uintptr(old.len) * et.size