]> Cypherpunks repositories - gostls13.git/commitdiff
test: bug424: wrong embedded method called
authorRobert Griesemer <gri@golang.org>
Tue, 28 Feb 2012 02:52:40 +0000 (18:52 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 28 Feb 2012 02:52:40 +0000 (18:52 -0800)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5695083

test/bugs/424.dir/lib.go [new file with mode: 0644]
test/bugs/424.dir/main.go [new file with mode: 0644]
test/bugs/424.go [new file with mode: 0644]
test/golden.out

diff --git a/test/bugs/424.dir/lib.go b/test/bugs/424.dir/lib.go
new file mode 100644 (file)
index 0000000..97054da
--- /dev/null
@@ -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"
+}
diff --git a/test/bugs/424.dir/main.go b/test/bugs/424.dir/main.go
new file mode 100644 (file)
index 0000000..64a600b
--- /dev/null
@@ -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")
+       }
+
+}
diff --git a/test/bugs/424.go b/test/bugs/424.go
new file mode 100644 (file)
index 0000000..b227760
--- /dev/null
@@ -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
index 764f561969dd6b19531478f40309fe2eac036b6d..b7d759450cf108739659b9e9e5bfe1d84f3fd31f 100644 (file)
@@ -17,5 +17,8 @@
 
 == bugs/
 
+=========== bugs/424.go
+BUG: myT3: lib.T.m called
+
 =========== bugs/bug395.go
 bug395 is broken