From 47ab3d4a42e9ab51c465c4322d2ec233f6324e6b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 15:16:40 +0200 Subject: Adding upstream version 1.18.10. Signed-off-by: Daniel Baumann --- test/chan/perm.go | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 test/chan/perm.go (limited to 'test/chan/perm.go') diff --git a/test/chan/perm.go b/test/chan/perm.go new file mode 100644 index 0000000..0404672 --- /dev/null +++ b/test/chan/perm.go @@ -0,0 +1,70 @@ +// 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. + +// Test various correct and incorrect permutations of send-only, +// receive-only, and bidirectional channels. +// Does not compile. + +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" + + var n int + <-n // ERROR "receive from non-chan|expected channel" + n <- 2 // ERROR "send to non-chan|must be channel" + + c <- 0 // ok + <-c // ok + x, ok := <-c // ok + _, _ = x, ok + + cr <- 0 // ERROR "send" + <-cr // ok + x, ok = <-cr // ok + _, _ = x, ok + + cs <- 0 // 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 + } + + for _ = range cs { // ERROR "receive" + } + + for range cs { // ERROR "receive" + } + + close(c) + close(cs) + close(cr) // ERROR "receive" + close(n) // ERROR "invalid operation.*non-chan type|must be channel|non-channel" +} -- cgit v1.2.3