// errchk $G -e $D/$F.go

// 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.

package main

var (
	cr <-chan int;
	cs chan<- int;
	c chan int;
)

func main() {
	cr = c;		// ok
	cs = c;		// ok
	c = cr;		// ERROR "illegal types|incompatible|cannot"
	c = cs;		// ERROR "illegal types|incompatible|cannot"
	cr = cs;	// ERROR "illegal types|incompatible|cannot"
	cs = cr;	// ERROR "illegal types|incompatible|cannot"

	c <- 0;		// ok
	ok := c <- 0;	// ok
	_ = ok;
	<-c;		// ok
	x, ok := <-c;	// ok
	_, _ = x, ok;

	cr <- 0;	// ERROR "send"
	ok = cr <- 0;	// ERROR "send"
	_ = ok;
	<-cr;		// ok
	x, ok = <-cr;	// ok
	_, _ = x, ok;

	cs <- 0;	// ok
	ok = cs <- 0;	// ok
	_ = ok;
	<-cs;		// ERROR "receive"
	x, ok = <-cs;	// ERROR "receive"
	_, _ = x, ok;

	select {
	case c <- 0:	// ok
	case x := <-c:	// ok
		_ = x;

	case cr <- 0:	// ERROR "send"
	case x := <-cr:	// ok
		_ = x;

	case cs <- 0:	// ok;
	case x := <-cs:	// ERROR "receive"
		_ = x;
	}
}
