// run // Copyright 2017 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. // This test makes sure that itabs are unique. // More explicitly, we require that only one itab structure exists for the pair of // a given compile-time interface type and underlying concrete type. // Ensuring this invariant enables fixes for 18492 (improve type switch code). package main type I interface { M() } type J interface { M() } type T struct{} func (*T) M() {} func main() { test1() test2() } func test1() { t := new(T) var i1, i2 I var j interface { M() } i1 = t j = t i2 = j if i1 != i2 { panic("interfaces not equal") } } func test2() { t := new(T) i1 := (I)(t) i2 := (I)((interface { M() })((J)(t))) if i1 != i2 { panic("interfaces not equal") } }