]> Cypherpunks repositories - gostls13.git/commitdiff
test: add bug437, a test that used to fail with gccgo at link time
authorIan Lance Taylor <iant@golang.org>
Thu, 3 May 2012 21:25:11 +0000 (14:25 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 3 May 2012 21:25:11 +0000 (14:25 -0700)
Updates #3391.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6177045

test/fixedbugs/bug437.dir/one.go [new file with mode: 0644]
test/fixedbugs/bug437.dir/two.go [new file with mode: 0644]
test/fixedbugs/bug437.go [new file with mode: 0644]

diff --git a/test/fixedbugs/bug437.dir/one.go b/test/fixedbugs/bug437.dir/one.go
new file mode 100644 (file)
index 0000000..8d3caad
--- /dev/null
@@ -0,0 +1,18 @@
+// 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 one
+
+type I1 interface {
+       f()
+}
+
+type S1 struct {
+}
+
+func (s S1) f() {
+}
+
+func F1(i1 I1) {
+}
diff --git a/test/fixedbugs/bug437.dir/two.go b/test/fixedbugs/bug437.dir/two.go
new file mode 100644 (file)
index 0000000..406dd59
--- /dev/null
@@ -0,0 +1,11 @@
+// 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 two
+
+import "./one"
+
+type S2 struct {
+       one.S1
+}
diff --git a/test/fixedbugs/bug437.go b/test/fixedbugs/bug437.go
new file mode 100644 (file)
index 0000000..bc046bd
--- /dev/null
@@ -0,0 +1,27 @@
+// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go && $G $D/$F.go && $L $F.$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 converting a type defined in a different package to an
+// interface defined in a third package, where the interface has a
+// hidden method.  This used to cause a link error with gccgo.
+
+package main
+
+import (
+       "./one"
+       "./two"
+)
+
+func F(i1 one.I1) {
+       switch v := i1.(type) {
+       case two.S2:
+               one.F1(v)
+       }
+}
+
+func main() {
+       F(nil)
+}