1// run 2 3// Copyright 2024 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package main 8 9import ( 10 "strings" 11 "unsafe" 12) 13 14func main() { 15 shouldPanic("runtime error: index out of range", func() { f(0) }) 16 shouldPanic("runtime error: index out of range", func() { g(0) }) 17} 18 19func f[T byte](t T) { 20 const str = "a" 21 _ = str[unsafe.Sizeof(t)] 22} 23 24func g[T byte](t T) { 25 const str = "a" 26 _ = str[unsafe.Sizeof(t)+0] 27} 28 29func shouldPanic(str string, f func()) { 30 defer func() { 31 err := recover() 32 if err == nil { 33 panic("did not panic") 34 } 35 s := err.(error).Error() 36 if !strings.Contains(s, str) { 37 panic("got panic " + s + ", want " + str) 38 } 39 }() 40 41 f() 42} 43