...
Run Format

Source file test/assign1.go

Documentation: test

  // errorcheck
  
  // Copyright 2009 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.
  
  // Verify assignment rules are enforced by the compiler.
  // Does not compile.
  
  package main
  
  type (
  	A [10]int
  	B []int
  	C chan int
  	F func() int
  	I interface {
  		m() int
  	}
  	M map[int]int
  	P *int
  	S struct {
  		X int
  	}
  
  	A1 [10]int
  	B1 []int
  	C1 chan int
  	F1 func() int
  	I1 interface {
  		m() int
  	}
  	M1 map[int]int
  	P1 *int
  	S1 struct {
  		X int
  	}
  )
  
  var (
  	a0 [10]int
  	b0 []int
  	c0 chan int
  	f0 func() int
  	i0 interface {
  		m() int
  	}
  	m0 map[int]int
  	p0 *int
  	s0 struct {
  		X int
  	}
  
  	a A
  	b B
  	c C
  	f F
  	i I
  	m M
  	p P
  	s S
  
  	a1 A1
  	b1 B1
  	c1 C1
  	f1 F1
  	i1 I1
  	m1 M1
  	p1 P1
  	s1 S1
  
  	pa0 *[10]int
  	pb0 *[]int
  	pc0 *chan int
  	pf0 *func() int
  	pi0 *interface {
  		m() int
  	}
  	pm0 *map[int]int
  	pp0 **int
  	ps0 *struct {
  		X int
  	}
  
  	pa *A
  	pb *B
  	pc *C
  	pf *F
  	pi *I
  	pm *M
  	pp *P
  	ps *S
  
  	pa1 *A1
  	pb1 *B1
  	pc1 *C1
  	pf1 *F1
  	pi1 *I1
  	pm1 *M1
  	pp1 *P1
  	ps1 *S1
  )
  
  func main() {
  	a0 = a
  	a0 = a1
  	a = a0
  	a = a1 // ERROR "cannot use"
  	a1 = a0
  	a1 = a // ERROR "cannot use"
  
  	b0 = b
  	b0 = b1
  	b = b0
  	b = b1 // ERROR "cannot use"
  	b1 = b0
  	b1 = b // ERROR "cannot use"
  
  	c0 = c
  	c0 = c1
  	c = c0
  	c = c1 // ERROR "cannot use"
  	c1 = c0
  	c1 = c // ERROR "cannot use"
  
  	f0 = f
  	f0 = f1
  	f = f0
  	f = f1 // ERROR "cannot use"
  	f1 = f0
  	f1 = f // ERROR "cannot use"
  
  	i0 = i
  	i0 = i1
  	i = i0
  	i = i1
  	i1 = i0
  	i1 = i
  
  	m0 = m
  	m0 = m1
  	m = m0
  	m = m1 // ERROR "cannot use"
  	m1 = m0
  	m1 = m // ERROR "cannot use"
  
  	p0 = p
  	p0 = p1
  	p = p0
  	p = p1 // ERROR "cannot use"
  	p1 = p0
  	p1 = p // ERROR "cannot use"
  
  	s0 = s
  	s0 = s1
  	s = s0
  	s = s1 // ERROR "cannot use"
  	s1 = s0
  	s1 = s // ERROR "cannot use"
  
  	pa0 = pa  // ERROR "cannot use|incompatible"
  	pa0 = pa1 // ERROR "cannot use|incompatible"
  	pa = pa0  // ERROR "cannot use|incompatible"
  	pa = pa1  // ERROR "cannot use|incompatible"
  	pa1 = pa0 // ERROR "cannot use|incompatible"
  	pa1 = pa  // ERROR "cannot use|incompatible"
  
  	pb0 = pb  // ERROR "cannot use|incompatible"
  	pb0 = pb1 // ERROR "cannot use|incompatible"
  	pb = pb0  // ERROR "cannot use|incompatible"
  	pb = pb1  // ERROR "cannot use|incompatible"
  	pb1 = pb0 // ERROR "cannot use|incompatible"
  	pb1 = pb  // ERROR "cannot use|incompatible"
  
  	pc0 = pc  // ERROR "cannot use|incompatible"
  	pc0 = pc1 // ERROR "cannot use|incompatible"
  	pc = pc0  // ERROR "cannot use|incompatible"
  	pc = pc1  // ERROR "cannot use|incompatible"
  	pc1 = pc0 // ERROR "cannot use|incompatible"
  	pc1 = pc  // ERROR "cannot use|incompatible"
  
  	pf0 = pf  // ERROR "cannot use|incompatible"
  	pf0 = pf1 // ERROR "cannot use|incompatible"
  	pf = pf0  // ERROR "cannot use|incompatible"
  	pf = pf1  // ERROR "cannot use|incompatible"
  	pf1 = pf0 // ERROR "cannot use|incompatible"
  	pf1 = pf  // ERROR "cannot use|incompatible"
  
  	pi0 = pi  // ERROR "cannot use|incompatible"
  	pi0 = pi1 // ERROR "cannot use|incompatible"
  	pi = pi0  // ERROR "cannot use|incompatible"
  	pi = pi1  // ERROR "cannot use|incompatible"
  	pi1 = pi0 // ERROR "cannot use|incompatible"
  	pi1 = pi  // ERROR "cannot use|incompatible"
  
  	pm0 = pm  // ERROR "cannot use|incompatible"
  	pm0 = pm1 // ERROR "cannot use|incompatible"
  	pm = pm0  // ERROR "cannot use|incompatible"
  	pm = pm1  // ERROR "cannot use|incompatible"
  	pm1 = pm0 // ERROR "cannot use|incompatible"
  	pm1 = pm  // ERROR "cannot use|incompatible"
  
  	pp0 = pp  // ERROR "cannot use|incompatible"
  	pp0 = pp1 // ERROR "cannot use|incompatible"
  	pp = pp0  // ERROR "cannot use|incompatible"
  	pp = pp1  // ERROR "cannot use|incompatible"
  	pp1 = pp0 // ERROR "cannot use|incompatible"
  	pp1 = pp  // ERROR "cannot use|incompatible"
  
  	ps0 = ps  // ERROR "cannot use|incompatible"
  	ps0 = ps1 // ERROR "cannot use|incompatible"
  	ps = ps0  // ERROR "cannot use|incompatible"
  	ps = ps1  // ERROR "cannot use|incompatible"
  	ps1 = ps0 // ERROR "cannot use|incompatible"
  	ps1 = ps  // ERROR "cannot use|incompatible"
  
  
  	a0 = [10]int(a)
  	a0 = [10]int(a1)
  	a = A(a0)
  	a = A(a1)
  	a1 = A1(a0)
  	a1 = A1(a)
  
  	b0 = []int(b)
  	b0 = []int(b1)
  	b = B(b0)
  	b = B(b1)
  	b1 = B1(b0)
  	b1 = B1(b)
  
  	c0 = chan int(c)
  	c0 = chan int(c1)
  	c = C(c0)
  	c = C(c1)
  	c1 = C1(c0)
  	c1 = C1(c)
  
  	f0 = func() int(f)
  	f0 = func() int(f1)
  	f = F(f0)
  	f = F(f1)
  	f1 = F1(f0)
  	f1 = F1(f)
  
  	i0 = interface {
  		m() int
  	}(i)
  	i0 = interface {
  		m() int
  	}(i1)
  	i = I(i0)
  	i = I(i1)
  	i1 = I1(i0)
  	i1 = I1(i)
  
  	m0 = map[int]int(m)
  	m0 = map[int]int(m1)
  	m = M(m0)
  	m = M(m1)
  	m1 = M1(m0)
  	m1 = M1(m)
  
  	p0 = (*int)(p)
  	p0 = (*int)(p1)
  	p = P(p0)
  	p = P(p1)
  	p1 = P1(p0)
  	p1 = P1(p)
  
  	s0 = struct {
  		X int
  	}(s)
  	s0 = struct {
  		X int
  	}(s1)
  	s = S(s0)
  	s = S(s1)
  	s1 = S1(s0)
  	s1 = S1(s)
  
  	pa0 = (*[10]int)(pa)
  	pa0 = (*[10]int)(pa1)
  	pa = (*A)(pa0)
  	pa = (*A)(pa1)
  	pa1 = (*A1)(pa0)
  	pa1 = (*A1)(pa)
  
  	pb0 = (*[]int)(pb)
  	pb0 = (*[]int)(pb1)
  	pb = (*B)(pb0)
  	pb = (*B)(pb1)
  	pb1 = (*B1)(pb0)
  	pb1 = (*B1)(pb)
  
  	pc0 = (*chan int)(pc)
  	pc0 = (*chan int)(pc1)
  	pc = (*C)(pc0)
  	pc = (*C)(pc1)
  	pc1 = (*C1)(pc0)
  	pc1 = (*C1)(pc)
  
  	pf0 = (*func() int)(pf)
  	pf0 = (*func() int)(pf1)
  	pf = (*F)(pf0)
  	pf = (*F)(pf1)
  	pf1 = (*F1)(pf0)
  	pf1 = (*F1)(pf)
  
  	pi0 = (*interface {
  		m() int
  	})(pi)
  	pi0 = (*interface {
  		m() int
  	})(pi1)
  	pi = (*I)(pi0)
  	pi = (*I)(pi1)
  	pi1 = (*I1)(pi0)
  	pi1 = (*I1)(pi)
  
  	pm0 = (*map[int]int)(pm)
  	pm0 = (*map[int]int)(pm1)
  	pm = (*M)(pm0)
  	pm = (*M)(pm1)
  	pm1 = (*M1)(pm0)
  	pm1 = (*M1)(pm)
  
  	pp0 = (**int)(pp)
  	pp0 = (**int)(pp1)
  	pp = (*P)(pp0)
  	pp = (*P)(pp1)
  	pp1 = (*P1)(pp0)
  	pp1 = (*P1)(pp)
  
  	ps0 = (*struct {
  		X int
  	})(ps)
  	ps0 = (*struct {
  		X int
  	})(ps1)
  	ps = (*S)(ps0)
  	ps = (*S)(ps1)
  	ps1 = (*S1)(ps0)
  	ps1 = (*S1)(ps)
  
  }
  

View as plain text