mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
35 lines
722 B
Go
35 lines
722 B
Go
|
// run
|
||
|
|
||
|
// Copyright 2022 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.
|
||
|
|
||
|
// Test that type assertion panics mention the real interface type,
|
||
|
// not their shape type.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"runtime"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
// The exact error message isn't important, but it should mention
|
||
|
// `main.T`, not `go.shape.int_0`.
|
||
|
if have := F[T](); !strings.Contains(have, "interface { T() main.T }") {
|
||
|
fmt.Printf("FAIL: unexpected panic message: %q\n", have)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type T int
|
||
|
|
||
|
func F[T any]() (res string) {
|
||
|
defer func() {
|
||
|
res = recover().(runtime.Error).Error()
|
||
|
}()
|
||
|
_ = interface{ T() T }(nil).(T)
|
||
|
return
|
||
|
}
|