// Copyright 2021 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.

package p

type C0 interface{ int }
type C1 interface{ chan int }
type C2 interface{ chan int | <-chan int }
type C3 interface{ chan int | chan float32 }
type C4 interface{ chan int | chan<- int }
type C5[T any] interface{ ~chan T | <-chan T }

func _[T any](ch T) {
	<-ch // ERROR cannot receive from ch .* \(no core type\)
}

func _[T C0](ch T) {
	<-ch // ERROR cannot receive from non-channel ch
}

func _[T C1](ch T) {
	<-ch
}

func _[T C2](ch T) {
	<-ch
}

func _[T C3](ch T) {
	<-ch // ERROR cannot receive from ch .* \(no core type\)
}

func _[T C4](ch T) {
	<-ch // ERROR cannot receive from send-only channel
}

func _[T C5[X], X any](ch T, x X) {
	x = <-ch
}

// test case from issue, slightly modified
type RecvChan[T any] interface {
	~chan T | ~<-chan T
}

func _[T any, C RecvChan[T]](ch C) T {
	return <-ch
}

func f[T any, C interface{ chan T }](ch C) T {
	return <-ch
}

func _(ch chan int) {
	var x int = f(ch) // test constraint type inference for this case
	_ = x
}
