Initial commit: Go 1.23 release state
This commit is contained in:
53
test/fixedbugs/issue18595.go
Normal file
53
test/fixedbugs/issue18595.go
Normal file
@@ -0,0 +1,53 @@
|
||||
// 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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user