| // Copyright 2019 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. | |
| //go:build 386 || amd64p32 || arm || mips || mipsle || armbe || m68k || nios2 || ppc || riscv || s390 || sh || shbe || sparc | |
| package runtime | |
| import _ "unsafe" // for go:linkname | |
| // For gccgo, use go:linkname to export compiler-called functions. | |
| // | |
| //go:linkname goPanicExtendIndex | |
| //go:linkname goPanicExtendIndexU | |
| //go:linkname goPanicExtendSliceAlen | |
| //go:linkname goPanicExtendSliceAlenU | |
| //go:linkname goPanicExtendSliceAcap | |
| //go:linkname goPanicExtendSliceAcapU | |
| //go:linkname goPanicExtendSliceB | |
| //go:linkname goPanicExtendSliceBU | |
| //go:linkname goPanicExtendSlice3Alen | |
| //go:linkname goPanicExtendSlice3AlenU | |
| //go:linkname goPanicExtendSlice3Acap | |
| //go:linkname goPanicExtendSlice3AcapU | |
| //go:linkname goPanicExtendSlice3B | |
| //go:linkname goPanicExtendSlice3BU | |
| //go:linkname goPanicExtendSlice3C | |
| //go:linkname goPanicExtendSlice3CU | |
| // Additional index/slice error paths for 32-bit platforms. | |
| // Used when the high word of a 64-bit index is not zero. | |
| // failures in the comparisons for s[x], 0 <= x < y (y == len(s)) | |
| func goPanicExtendIndex(x int64, y int) { | |
| panicCheck1(getcallerpc(), "index out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsIndex}) | |
| } | |
| func goPanicExtendIndexU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "index out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsIndex}) | |
| } | |
| // failures in the comparisons for s[:x], 0 <= x <= y (y == len(s) or cap(s)) | |
| func goPanicExtendSliceAlen(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSliceAlen}) | |
| } | |
| func goPanicExtendSliceAlenU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSliceAlen}) | |
| } | |
| func goPanicExtendSliceAcap(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSliceAcap}) | |
| } | |
| func goPanicExtendSliceAcapU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSliceAcap}) | |
| } | |
| // failures in the comparisons for s[x:y], 0 <= x <= y | |
| func goPanicExtendSliceB(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSliceB}) | |
| } | |
| func goPanicExtendSliceBU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSliceB}) | |
| } | |
| // failures in the comparisons for s[::x], 0 <= x <= y (y == len(s) or cap(s)) | |
| func goPanicExtendSlice3Alen(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSlice3Alen}) | |
| } | |
| func goPanicExtendSlice3AlenU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSlice3Alen}) | |
| } | |
| func goPanicExtendSlice3Acap(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSlice3Acap}) | |
| } | |
| func goPanicExtendSlice3AcapU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSlice3Acap}) | |
| } | |
| // failures in the comparisons for s[:x:y], 0 <= x <= y | |
| func goPanicExtendSlice3B(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSlice3B}) | |
| } | |
| func goPanicExtendSlice3BU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSlice3B}) | |
| } | |
| // failures in the comparisons for s[x:y:], 0 <= x <= y | |
| func goPanicExtendSlice3C(x int64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: x, signed: true, y: y, code: boundsSlice3C}) | |
| } | |
| func goPanicExtendSlice3CU(x uint64, y int) { | |
| panicCheck1(getcallerpc(), "slice bounds out of range") | |
| panic(boundsError{x: int64(x), signed: false, y: y, code: boundsSlice3C}) | |
| } |