| // errorcheck | |
| // Copyright 2015 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. | |
| // Check that we correctly construct (and report errors) | |
| // for unary expressions of the form <-x where we only | |
| // know after parsing x whether <-x is a receive operation | |
| // or a channel type. | |
| package n | |
| func f() { | |
| // test case from issue 13273 | |
| <-chan int((chan int)(nil)) | |
| <-chan int(nil) | |
| <-chan chan int(nil) | |
| <-chan chan chan int(nil) | |
| <-chan chan chan chan int(nil) | |
| <-chan chan chan chan chan int(nil) | |
| <-chan<-chan int(nil) | |
| <-chan<-chan<-chan int(nil) | |
| <-chan<-chan<-chan<-chan int(nil) | |
| <-chan<-chan<-chan<-chan<-chan int(nil) | |
| <-chan (<-chan int)(nil) | |
| <-chan (<-chan (<-chan int))(nil) | |
| <-chan (<-chan (<-chan (<-chan int)))(nil) | |
| <-chan (<-chan (<-chan (<-chan (<-chan int))))(nil) | |
| <-(<-chan int)(nil) | |
| <-(<-chan chan int)(nil) | |
| <-(<-chan chan chan int)(nil) | |
| <-(<-chan chan chan chan int)(nil) | |
| <-(<-chan chan chan chan chan int)(nil) | |
| <-(<-chan<-chan int)(nil) | |
| <-(<-chan<-chan<-chan int)(nil) | |
| <-(<-chan<-chan<-chan<-chan int)(nil) | |
| <-(<-chan<-chan<-chan<-chan<-chan int)(nil) | |
| <-(<-chan (<-chan int))(nil) | |
| <-(<-chan (<-chan (<-chan int)))(nil) | |
| <-(<-chan (<-chan (<-chan (<-chan int))))(nil) | |
| <-(<-chan (<-chan (<-chan (<-chan (<-chan int)))))(nil) | |
| type _ <-<-chan int // ERROR "unexpected <-, expecting chan" | |
| <-<-chan int // ERROR "unexpected <-, expecting chan|expecting {" (new parser: same error as for type decl) | |
| type _ <-chan<-int // ERROR "unexpected int, expecting chan|expecting chan" | |
| <-chan<-int // ERROR "unexpected int, expecting chan|expecting {" (new parser: same error as for type decl) | |
| } |