mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 10:40:57 +00:00 
			
		
		
		
	Follows suit with https://go-review.googlesource.com/#/c/20111. Generated by running $ grep -R 'Go Authors. All' * | cut -d":" -f1 | while read F;do perl -pi -e 's/Go Authors. All/Go Authors. All/g' $F;done The code in cmd/internal/unvendor wasn't changed. Fixes #15213 Change-Id: I4f235cee0a62ec435f9e8540a1ec08ae03b1a75f Reviewed-on: https://go-review.googlesource.com/21819 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// compile
 | 
						|
 | 
						|
// Copyright 2014 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.
 | 
						|
 | 
						|
// Issue 6847: select clauses involving implicit conversion
 | 
						|
// of channels trigger a spurious typechecking error during walk.
 | 
						|
 | 
						|
package p
 | 
						|
 | 
						|
type I1 interface {
 | 
						|
	String()
 | 
						|
}
 | 
						|
type I2 interface {
 | 
						|
	String()
 | 
						|
}
 | 
						|
 | 
						|
func F() {
 | 
						|
	var (
 | 
						|
		cr <-chan int
 | 
						|
		cs chan<- int
 | 
						|
		c  chan int
 | 
						|
 | 
						|
		ccr chan (<-chan int)
 | 
						|
		ccs chan chan<- int
 | 
						|
		cc  chan chan int
 | 
						|
 | 
						|
		ok bool
 | 
						|
	)
 | 
						|
	// Send cases.
 | 
						|
	select {
 | 
						|
	case ccr <- cr:
 | 
						|
	case ccr <- c:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case ccs <- cs:
 | 
						|
	case ccs <- c:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case ccr <- c:
 | 
						|
	default:
 | 
						|
	}
 | 
						|
	// Receive cases.
 | 
						|
	select {
 | 
						|
	case cr = <-cc:
 | 
						|
	case cs = <-cc:
 | 
						|
	case c = <-cc:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case cr = <-cc:
 | 
						|
	default:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case cr, ok = <-cc:
 | 
						|
	case cs, ok = <-cc:
 | 
						|
	case c = <-cc:
 | 
						|
	}
 | 
						|
      // Interfaces.
 | 
						|
	var (
 | 
						|
		c1 chan I1
 | 
						|
		c2 chan I2
 | 
						|
		x1 I1
 | 
						|
		x2 I2
 | 
						|
	)
 | 
						|
	select {
 | 
						|
	case c1 <- x1:
 | 
						|
	case c1 <- x2:
 | 
						|
	case c2 <- x1:
 | 
						|
	case c2 <- x2:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case x1 = <-c1:
 | 
						|
	case x1 = <-c2:
 | 
						|
	case x2 = <-c1:
 | 
						|
	case x2 = <-c2:
 | 
						|
	}
 | 
						|
	select {
 | 
						|
	case x1, ok = <-c1:
 | 
						|
	case x1, ok = <-c2:
 | 
						|
	case x2, ok = <-c1:
 | 
						|
	case x2, ok = <-c2:
 | 
						|
	}
 | 
						|
	_ = ok
 | 
						|
}
 |