modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue18595.go (about) 1 // run 2 3 // Copyright 2017 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 7 // This test makes sure that itabs are unique. 8 // More explicitly, we require that only one itab structure exists for the pair of 9 // a given compile-time interface type and underlying concrete type. 10 // Ensuring this invariant enables fixes for 18492 (improve type switch code). 11 12 package main 13 14 type I interface { 15 M() 16 } 17 type J interface { 18 M() 19 } 20 21 type T struct{} 22 23 func (*T) M() {} 24 25 func main() { 26 test1() 27 test2() 28 } 29 30 func test1() { 31 t := new(T) 32 var i1, i2 I 33 var j interface { 34 M() 35 } 36 i1 = t 37 j = t 38 i2 = j 39 if i1 != i2 { 40 panic("interfaces not equal") 41 } 42 } 43 44 func test2() { 45 t := new(T) 46 i1 := (I)(t) 47 i2 := (I)((interface { 48 M() 49 })((J)(t))) 50 if i1 != i2 { 51 panic("interfaces not equal") 52 } 53 }