...
Run Format

Source file test/fixedbugs/issue18595.go

Documentation: test/fixedbugs

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

View as plain text