mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
test: bug424: wrong embedded method called
R=golang-dev, r CC=golang-dev https://golang.org/cl/5695083
This commit is contained in:
parent
7201b0c27c
commit
69015b6fc4
16
test/bugs/424.dir/lib.go
Normal file
16
test/bugs/424.dir/lib.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// Copyright 2012 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 lib
|
||||||
|
|
||||||
|
type I interface {
|
||||||
|
m() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type T struct{}
|
||||||
|
|
||||||
|
// m is not accessible from outside this package.
|
||||||
|
func (t *T) m() string {
|
||||||
|
return "lib.T.m"
|
||||||
|
}
|
61
test/bugs/424.dir/main.go
Normal file
61
test/bugs/424.dir/main.go
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// Tests that method calls through an interface always
|
||||||
|
// call the the locally defined method localT.m independent
|
||||||
|
// at which embedding level it is and in which order
|
||||||
|
// embedding is done.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "./lib"
|
||||||
|
|
||||||
|
type localI interface {
|
||||||
|
m() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type localT struct{}
|
||||||
|
|
||||||
|
func (t *localT) m() string {
|
||||||
|
return "main.localT.m"
|
||||||
|
}
|
||||||
|
|
||||||
|
type myT1 struct {
|
||||||
|
localT
|
||||||
|
}
|
||||||
|
|
||||||
|
type myT2 struct {
|
||||||
|
localT
|
||||||
|
lib.T
|
||||||
|
}
|
||||||
|
|
||||||
|
type myT3 struct {
|
||||||
|
lib.T
|
||||||
|
localT
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var i localI
|
||||||
|
|
||||||
|
i = new(localT)
|
||||||
|
if i.m() != "main.localT.m" {
|
||||||
|
println("BUG: localT:", i.m(), "called")
|
||||||
|
}
|
||||||
|
|
||||||
|
i = new(myT1)
|
||||||
|
if i.m() != "main.localT.m" {
|
||||||
|
println("BUG: myT1:", i.m(), "called")
|
||||||
|
}
|
||||||
|
|
||||||
|
i = new(myT2)
|
||||||
|
if i.m() != "main.localT.m" {
|
||||||
|
println("BUG: myT2:", i.m(), "called")
|
||||||
|
}
|
||||||
|
|
||||||
|
i = new(myT3)
|
||||||
|
if i.m() != "main.localT.m" {
|
||||||
|
println("BUG: myT3:", i.m(), "called")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
9
test/bugs/424.go
Normal file
9
test/bugs/424.go
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
// $G $D/$F.dir/lib.go && $G $D/$F.dir/main.go && $L main.$A && $A.out
|
||||||
|
|
||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// Test case for embedded method invocation.
|
||||||
|
|
||||||
|
ignored
|
|
@ -17,5 +17,8 @@
|
||||||
|
|
||||||
== bugs/
|
== bugs/
|
||||||
|
|
||||||
|
=========== bugs/424.go
|
||||||
|
BUG: myT3: lib.T.m called
|
||||||
|
|
||||||
=========== bugs/bug395.go
|
=========== bugs/bug395.go
|
||||||
bug395 is broken
|
bug395 is broken
|
||||||
|
|
Loading…
Reference in a new issue