|  | // 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}) | 
|  | } |