1
0
mirror of https://github.com/golang/go synced 2024-09-29 16:34:31 -06:00
go/test/fixedbugs/bug248.dir/bug2.go
Yury Smolsky cb80c28961 test: eliminate use of Perl in test/fixedbugs/bug248.go
This change enables bug248 to be tested with Go code.
For that, it adds a flag -1 to error check and run directory
with one package failing compilation prior the last package
which should be run.

Specifically, the "p" package in bug1.go file was renamed into "q"
to compile them in separate steps,
bug2.go and bug3.go files were reordered,
bug2.go was changed into non-main package.

Updates #25586.

Change-Id: Ie47aacd56ebb2ce4eac66c792d1a53e1e30e637c
Reviewed-on: https://go-review.googlesource.com/114818
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-05-26 15:20:42 +00:00

74 lines
1.5 KiB
Go

// Copyright 2010 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 s
import (
p0 "./bug0"
p1 "./bug1"
)
// both p0.T and p1.T are struct { X, Y int }.
var v0 p0.T
var v1 p1.T
// interfaces involving the two
type I0 interface {
M(p0.T)
}
type I1 interface {
M(p1.T)
}
// t0 satisfies I0 and p0.I
type t0 int
func (t0) M(p0.T) {}
// t1 satisfies I1 and p1.I
type t1 float64
func (t1) M(p1.T) {}
// check static interface assignments
var i0 I0 = t0(0) // ok
var i1 I1 = t1(0) // ok
var i2 I0 = t1(0) // ERROR "does not implement|incompatible"
var i3 I1 = t0(0) // ERROR "does not implement|incompatible"
var p0i p0.I = t0(0) // ok
var p1i p1.I = t1(0) // ok
var p0i1 p0.I = t1(0) // ERROR "does not implement|incompatible"
var p0i2 p1.I = t0(0) // ERROR "does not implement|incompatible"
func foobar() {
// check that cannot assign one to the other,
// but can convert.
v0 = v1 // ERROR "assign"
v1 = v0 // ERROR "assign"
v0 = p0.T(v1)
v1 = p1.T(v0)
i0 = i1 // ERROR "cannot use|incompatible"
i1 = i0 // ERROR "cannot use|incompatible"
p0i = i1 // ERROR "cannot use|incompatible"
p1i = i0 // ERROR "cannot use|incompatible"
i0 = p1i // ERROR "cannot use|incompatible"
i1 = p0i // ERROR "cannot use|incompatible"
p0i = p1i // ERROR "cannot use|incompatible"
p1i = p0i // ERROR "cannot use|incompatible"
i0 = p0i
p0i = i0
i1 = p1i
p1i = i1
}