--- /dev/null
+package main
+
+// Tests of channel 'peers' query.
+// See go.tools/guru/guru_test.go for explanation.
+// See peers.golden for expected query results.
+
+var a2 int
+
+func main() {
+ chA := make(chan *int)
+ a1 := 1
+ chA <- &a1
+
+ chA2 := make(chan *int, 2)
+ if a2 == 0 {
+ chA = chA2
+ }
+
+ chB := make(chan *int)
+ b := 3
+ chB <- &b
+
+ <-chA // @pointsto pointsto-chA "chA"
+ <-chA2 // @pointsto pointsto-chA2 "chA2"
+ <-chB // @pointsto pointsto-chB "chB"
+
+ select {
+ case rA := <-chA: // @peers peer-recv-chA "<-"
+ _ = rA // @pointsto pointsto-rA "rA"
+ case rB := <-chB: // @peers peer-recv-chB "<-"
+ _ = rB // @pointsto pointsto-rB "rB"
+
+ case <-chA: // @peers peer-recv-chA' "<-"
+
+ case chA2 <- &a2: // @peers peer-send-chA' "<-"
+ }
+
+ for range chA {
+ }
+
+ close(chA) // @peers peer-close-chA "chA"
+
+ chC := make(chan *int)
+ (close)(chC) // @peers peer-close-chC "chC"
+
+ close := func(ch chan *int) chan *int {
+ return ch
+ }
+
+ close(chC) <- &b // @peers peer-send-chC "chC"
+ <-close(chC) // @peers peer-recv-chC "chC"
+}