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