mirror of
https://github.com/golang/go
synced 2024-11-24 20:50:11 -07:00
e6f9f39ce5
Where possible generate calls to runtime makeslice with int arguments during compile time instead of makeslice with int64 arguments. This eliminates converting arguments for calls to makeslice with int64 arguments for platforms where int64 values do not fit into arguments of type int. godoc 386 binary shrinks by approximately 12 kilobyte. amd64: name old time/op new time/op delta MakeSlice-2 29.8ns ± 1% 29.8ns ± 1% ~ (p=1.000 n=24+24) 386: name old time/op new time/op delta MakeSlice-2 52.3ns ± 0% 45.9ns ± 0% -12.17% (p=0.000 n=25+22) Fixes #15357 Change-Id: Icb8701bb63c5a83877d26c8a4b78e782ba76de7c Reviewed-on: https://go-review.googlesource.com/27851 Run-TryBot: Martin Möhrmann <martisch@uos.de> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
// run
|
|
|
|
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"strings"
|
|
"unsafe"
|
|
)
|
|
|
|
type T []int
|
|
|
|
func main() {
|
|
n := -1
|
|
shouldPanic("len out of range", func() { _ = make(T, n) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, n) })
|
|
shouldPanic("len out of range", func() { _ = make(T, int64(n)) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, int64(n)) })
|
|
var t *byte
|
|
if unsafe.Sizeof(t) == 8 {
|
|
n = 1 << 20
|
|
n <<= 20
|
|
shouldPanic("len out of range", func() { _ = make(T, n) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, n) })
|
|
n <<= 20
|
|
shouldPanic("len out of range", func() { _ = make(T, n) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, n) })
|
|
} else {
|
|
n = 1<<31 - 1
|
|
shouldPanic("len out of range", func() { _ = make(T, n) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, n) })
|
|
shouldPanic("len out of range", func() { _ = make(T, int64(n)) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, int64(n)) })
|
|
}
|
|
}
|
|
|
|
func shouldPanic(str string, f func()) {
|
|
defer func() {
|
|
err := recover()
|
|
if err == nil {
|
|
panic("did not panic")
|
|
}
|
|
s := err.(error).Error()
|
|
if !strings.Contains(s, str) {
|
|
panic("got panic " + s + ", want " + str)
|
|
}
|
|
}()
|
|
|
|
f()
|
|
}
|