| 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" | |
| } |