aboutsummaryrefslogtreecommitdiff
path: root/test/convert4.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2022-09-12 13:01:57 -0700
committerMatthew Dempsky <mdempsky@google.com>2022-09-19 18:58:26 +0000
commitceffdc8545c3155b030de9e91d399dc34bd3c678 (patch)
treefb5079fbaef6a3178c80927ea89df3a2a7bc1c4b /test/convert4.go
parent29153be75763b7cbf9395d732f454336e3df0286 (diff)
downloadgo-ceffdc8545c3155b030de9e91d399dc34bd3c678.tar.gz
go-ceffdc8545c3155b030de9e91d399dc34bd3c678.zip
cmd/compile: implement slice-to-array conversions
The conversion T(x) is implemented as *(*T)(x). Accordingly, runtime panic messages for (*T)(x) are made more general. Fixes #46505. Change-Id: I76317c0878b6a5908299506d392eed50d7ef6523 Reviewed-on: https://go-review.googlesource.com/c/go/+/430415 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Jenny Rakoczy <jenny@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/convert4.go')
-rw-r--r--test/convert4.go24
1 files changed, 23 insertions, 1 deletions
diff --git a/test/convert4.go b/test/convert4.go
index 2bc9c96a52..3cc0aea7be 100644
--- a/test/convert4.go
+++ b/test/convert4.go
@@ -23,25 +23,47 @@ func wantPanic(fn func(), s string) {
func main() {
s := make([]byte, 8, 10)
+ for i := range s {
+ s[i] = byte(i)
+ }
if p := (*[8]byte)(s); &p[0] != &s[0] {
panic("*[8]byte conversion failed")
}
+ if [8]byte(s) != *(*[8]byte)(s) {
+ panic("[8]byte conversion failed")
+ }
wantPanic(
func() {
_ = (*[9]byte)(s)
},
- "runtime error: cannot convert slice with length 8 to pointer to array with length 9",
+ "runtime error: cannot convert slice with length 8 to array or pointer to array with length 9",
+ )
+ wantPanic(
+ func() {
+ _ = [9]byte(s)
+ },
+ "runtime error: cannot convert slice with length 8 to array or pointer to array with length 9",
)
var n []byte
if p := (*[0]byte)(n); p != nil {
panic("nil slice converted to *[0]byte should be nil")
}
+ _ = [0]byte(n)
z := make([]byte, 0)
if p := (*[0]byte)(z); p == nil {
panic("empty slice converted to *[0]byte should be non-nil")
}
+ _ = [0]byte(z)
+
+ var p *[]byte
+ wantPanic(
+ func() {
+ _ = [0]byte(*p) // evaluating *p should still panic
+ },
+ "runtime error: invalid memory address or nil pointer dereference",
+ )
// Test with named types
type Slice []int