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