modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/chan/perm.go (about) 1 // errorcheck 2 3 // Copyright 2009 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // Test various correct and incorrect permutations of send-only, 8 // receive-only, and bidirectional channels. 9 // Does not compile. 10 11 package main 12 13 var ( 14 cr <-chan int 15 cs chan<- int 16 c chan int 17 ) 18 19 func main() { 20 cr = c // ok 21 cs = c // ok 22 c = cr // ERROR "illegal types|incompatible|cannot" 23 c = cs // ERROR "illegal types|incompatible|cannot" 24 cr = cs // ERROR "illegal types|incompatible|cannot" 25 cs = cr // ERROR "illegal types|incompatible|cannot" 26 27 var n int 28 <-n // ERROR "receive from non-chan" 29 n <- 2 // ERROR "send to non-chan" 30 31 c <- 0 // ok 32 <-c // ok 33 x, ok := <-c // ok 34 _, _ = x, ok 35 36 cr <- 0 // ERROR "send" 37 <-cr // ok 38 x, ok = <-cr // ok 39 _, _ = x, ok 40 41 cs <- 0 // ok 42 <-cs // ERROR "receive" 43 x, ok = <-cs // ERROR "receive" 44 _, _ = x, ok 45 46 select { 47 case c <- 0: // ok 48 case x := <-c: // ok 49 _ = x 50 51 case cr <- 0: // ERROR "send" 52 case x := <-cr: // ok 53 _ = x 54 55 case cs <- 0: // ok 56 case x := <-cs: // ERROR "receive" 57 _ = x 58 } 59 60 for _ = range cs { // ERROR "receive" 61 } 62 63 for range cs { // ERROR "receive" 64 } 65 66 close(c) 67 close(cs) 68 close(cr) // ERROR "receive" 69 close(n) // ERROR "invalid operation.*non-chan type" 70 }