Home | History | Annotate | Download | only in bug248.dir
      1 // Copyright 2010 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file
      4 
      5 package main
      6 
      7 import (
      8 	p0 "./bug0"
      9 	p1 "./bug1"
     10 )
     11 
     12 // both p0.T and p1.T are struct { X, Y int }.
     13 
     14 var v0 p0.T
     15 var v1 p1.T
     16 
     17 // interfaces involving the two
     18 
     19 type I0 interface {
     20 	M(p0.T)
     21 }
     22 
     23 type I1 interface {
     24 	M(p1.T)
     25 }
     26 
     27 // t0 satisfies I0 and p0.I
     28 type t0 int
     29 
     30 func (t0) M(p0.T) {}
     31 
     32 // t1 satisfies I1 and p1.I
     33 type t1 float64
     34 
     35 func (t1) M(p1.T) {}
     36 
     37 // check static interface assignments
     38 var i0 I0 = t0(0) // ok
     39 var i1 I1 = t1(0) // ok
     40 
     41 var i2 I0 = t1(0) // ERROR "does not implement|incompatible"
     42 var i3 I1 = t0(0) // ERROR "does not implement|incompatible"
     43 
     44 var p0i p0.I = t0(0) // ok
     45 var p1i p1.I = t1(0) // ok
     46 
     47 var p0i1 p0.I = t1(0) // ERROR "does not implement|incompatible"
     48 var p0i2 p1.I = t0(0) // ERROR "does not implement|incompatible"
     49 
     50 func main() {
     51 	// check that cannot assign one to the other,
     52 	// but can convert.
     53 	v0 = v1 // ERROR "assign"
     54 	v1 = v0 // ERROR "assign"
     55 
     56 	v0 = p0.T(v1)
     57 	v1 = p1.T(v0)
     58 
     59 	i0 = i1   // ERROR "cannot use|incompatible"
     60 	i1 = i0   // ERROR "cannot use|incompatible"
     61 	p0i = i1  // ERROR "cannot use|incompatible"
     62 	p1i = i0  // ERROR "cannot use|incompatible"
     63 	i0 = p1i  // ERROR "cannot use|incompatible"
     64 	i1 = p0i  // ERROR "cannot use|incompatible"
     65 	p0i = p1i // ERROR "cannot use|incompatible"
     66 	p1i = p0i // ERROR "cannot use|incompatible"
     67 
     68 	i0 = p0i
     69 	p0i = i0
     70 
     71 	i1 = p1i
     72 	p1i = i1
     73 }
     74