mirror of
https://github.com/golang/go
synced 2024-11-18 03:34:42 -07:00
041526c6ef
This commit allows the runtime to handle 64bits addresses returned by mmap syscall on AIX. Mmap syscall returns addresses on 59bits on AIX. But the Arena implementation only allows addresses with less than 48 bits. This commit increases the arena size up to 1<<60 for aix/ppc64. Update: #25893 Change-Id: Iea72e8a944d10d4f00be915785e33ae82dd6329e Reviewed-on: https://go-review.googlesource.com/c/138736 Reviewed-by: Austin Clements <austin@google.com>
61 lines
1.8 KiB
Go
61 lines
1.8 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 {
|
|
// Test mem > maxAlloc
|
|
var n2 int64 = 1 << 59
|
|
shouldPanic("len out of range", func() { _ = make(T, int(n2)) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, int(n2)) })
|
|
// Test elem.size*cap overflow
|
|
n2 = 1<<63 - 1
|
|
shouldPanic("len out of range", func() { _ = make(T, int(n2)) })
|
|
shouldPanic("cap out of range", func() { _ = make(T, 0, int(n2)) })
|
|
} 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)) })
|
|
}
|
|
|
|
// Test make in append panics since the gc compiler optimizes makes in appends.
|
|
shouldPanic("len out of range", func() { _ = append(T{}, make(T, n)...) })
|
|
shouldPanic("cap out of range", func() { _ = append(T{}, make(T, 0, n)...) })
|
|
shouldPanic("len out of range", func() { _ = append(T{}, make(T, int64(n))...) })
|
|
shouldPanic("cap out of range", func() { _ = append(T{}, 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()
|
|
}
|