// Copyright 2020 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

// Test case from issue.

type Nat interface {
	type Zero, Succ
}

type Zero struct{}
type Succ struct{
	Nat // ERROR interface contains type constraints
}

// Struct tests.

type I1 interface {
	comparable
}

type I2 interface {
	type int
}

type I3 interface {
	I1
	I2
}

type _ struct {
	f I1 // ERROR interface is .* comparable
}

type _ struct {
	comparable // ERROR interface is .* comparable
}

type _ struct{
	I1 // ERROR interface is .* comparable
}

type _ struct{
	I2 // ERROR interface contains type constraints
}

type _ struct{
	I3 // ERROR interface contains type constraints
}

// General composite types.

type (
	_ [10]I1 // ERROR interface is .* comparable
	_ [10]I2 // ERROR interface contains type constraints

	_ []I1 // ERROR interface is .* comparable
	_ []I2 // ERROR interface contains type constraints

	_ *I3 // ERROR interface contains type constraints
	_ map[I1 /* ERROR interface is .* comparable */ ]I2 // ERROR interface contains type constraints
	_ chan I3 // ERROR interface contains type constraints
	_ func(I1 /* ERROR interface is .* comparable */ )
	_ func() I2 // ERROR interface contains type constraints
)

// Other cases.

var _ = [...]I3 /* ERROR interface contains type constraints */ {}

func _(x interface{}) {
	_ = x.(I3 /* ERROR interface contains type constraints */ )
}

type T1[_ any] struct{}
type T3[_, _, _ any] struct{}
var _ T1[I2 /* ERROR interface contains type constraints */ ]
var _ T3[int, I2 /* ERROR interface contains type constraints */ , float32]

func f1[_ any]() int
var _ = f1[I2 /* ERROR interface contains type constraints */ ]()
func f3[_, _, _ any]() int
var _ = f3[int, I2 /* ERROR interface contains type constraints */ , float32]()

func _(x interface{}) {
	switch x.(type) {
	case I2 /* ERROR interface contains type constraints */ :
	}
}
