Update to go1.24.0
This commit is contained in:
67
test/codegen/typeswitch.go
Normal file
67
test/codegen/typeswitch.go
Normal file
@@ -0,0 +1,67 @@
|
||||
// asmcheck
|
||||
|
||||
// Copyright 2024 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.
|
||||
|
||||
package codegen
|
||||
|
||||
type Ix interface {
|
||||
X()
|
||||
}
|
||||
|
||||
type Iy interface {
|
||||
Y()
|
||||
}
|
||||
|
||||
type Iz interface {
|
||||
Z()
|
||||
}
|
||||
|
||||
func swXYZ(a Ix) {
|
||||
switch t := a.(type) {
|
||||
case Iy: // amd64:-".*typeAssert"
|
||||
t.Y()
|
||||
case Iz: // amd64:-".*typeAssert"
|
||||
t.Z()
|
||||
}
|
||||
}
|
||||
|
||||
type Ig[T any] interface {
|
||||
G() T
|
||||
}
|
||||
|
||||
func swGYZ[T any](a Ig[T]) {
|
||||
switch t := a.(type) {
|
||||
case Iy: // amd64:-".*typeAssert"
|
||||
t.Y()
|
||||
case Iz: // amd64:-".*typeAssert"
|
||||
t.Z()
|
||||
case interface{ G() T }: // amd64:-".*typeAssert",-".*assertE2I\\(",".*assertE2I2"
|
||||
t.G()
|
||||
}
|
||||
}
|
||||
|
||||
func swE2G[T any](a any) {
|
||||
switch t := a.(type) {
|
||||
case Iy:
|
||||
t.Y()
|
||||
case Ig[T]: // amd64:-".*assertE2I\\(",".*assertE2I2"
|
||||
t.G()
|
||||
}
|
||||
}
|
||||
|
||||
func swI2G[T any](a Ix) {
|
||||
switch t := a.(type) {
|
||||
case Iy:
|
||||
t.Y()
|
||||
case Ig[T]: // amd64:-".*assertE2I\\(",".*assertE2I2"
|
||||
t.G()
|
||||
}
|
||||
}
|
||||
|
||||
func swCaller() {
|
||||
swGYZ[int]((Ig[int])(nil))
|
||||
swE2G[int]((Ig[int])(nil))
|
||||
swI2G[int]((Ix)(nil))
|
||||
}
|
||||
Reference in New Issue
Block a user