...
Run Format

Source file test/fixedbugs/issue13273.go

Documentation: test/fixedbugs

  // 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)
  }
  

View as plain text