mirror of
https://github.com/golang/go
synced 2024-11-21 16:44:43 -07: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/424.go
|
||||
BUG: myT3: lib.T.m called
|
||||
|
||||
=========== bugs/bug395.go
|
||||
bug395 is broken
|
||||
|
Loading…
Reference in New Issue
Block a user