1// errorcheck 2 3// Copyright 2015 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// Check that we correctly construct (and report errors) 8// for unary expressions of the form <-x where we only 9// know after parsing x whether <-x is a receive operation 10// or a channel type. 11 12package n 13 14func f() { 15 // test case from issue 13273 16 <-chan int((chan int)(nil)) 17 18 <-chan int(nil) 19 <-chan chan int(nil) 20 <-chan chan chan int(nil) 21 <-chan chan chan chan int(nil) 22 <-chan chan chan chan chan int(nil) 23 24 <-chan<-chan int(nil) 25 <-chan<-chan<-chan int(nil) 26 <-chan<-chan<-chan<-chan int(nil) 27 <-chan<-chan<-chan<-chan<-chan int(nil) 28 29 <-chan (<-chan int)(nil) 30 <-chan (<-chan (<-chan int))(nil) 31 <-chan (<-chan (<-chan (<-chan int)))(nil) 32 <-chan (<-chan (<-chan (<-chan (<-chan int))))(nil) 33 34 <-(<-chan int)(nil) 35 <-(<-chan chan int)(nil) 36 <-(<-chan chan chan int)(nil) 37 <-(<-chan chan chan chan int)(nil) 38 <-(<-chan chan chan chan chan int)(nil) 39 40 <-(<-chan<-chan int)(nil) 41 <-(<-chan<-chan<-chan int)(nil) 42 <-(<-chan<-chan<-chan<-chan int)(nil) 43 <-(<-chan<-chan<-chan<-chan<-chan int)(nil) 44 45 <-(<-chan (<-chan int))(nil) 46 <-(<-chan (<-chan (<-chan int)))(nil) 47 <-(<-chan (<-chan (<-chan (<-chan int))))(nil) 48 <-(<-chan (<-chan (<-chan (<-chan (<-chan int)))))(nil) 49 50 type _ <-<-chan int // ERROR "unexpected <-, expected chan|expected .*chan.*" 51 <-<-chan int // ERROR "unexpected <-, expected chan|expecting {" (new parser: same error as for type decl) 52 53 type _ <-chan<-int // ERROR "unexpected int, expected chan|expected .*chan.*|expected chan|expected .*;.* or .*}.* or newline" 54 <-chan<-int // ERROR "unexpected int, expected chan|expecting {" (new parser: same error as for type decl) 55} 56