// 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 T[P any] struct{}

func _(x interface{}) {
	switch x.(type) {
	case nil:
	case int:

	case T[int]:
	case []T[int]:
	case [10]T[int]:
	case struct{T[int]}:
	case *T[int]:
	case func(T[int]):
	case interface{m(T[int])}:
	case map[T[int]] string:
	case chan T[int]:

	case T /* ERROR cannot use generic type T\[P any\] without instantiation */ :
	case []T /* ERROR cannot use generic type */ :
	case [10]T /* ERROR cannot use generic type */ :
	case struct{T /* ERROR cannot use generic type */ }:
	case *T /* ERROR cannot use generic type */ :
	case func(T /* ERROR cannot use generic type */ ):
	case interface{m(T /* ERROR cannot use generic type */ )}:
	case map[T /* ERROR cannot use generic type */ ] string:
	case chan T /* ERROR cannot use generic type */ :

	case T /* ERROR cannot use generic type */ , *T /* ERROR cannot use generic type */ :
	}
}

// Make sure a parenthesized nil is ok.

func _(x interface{}) {
	switch x.(type) {
	case ((nil)), int:
	}
}

// Make sure we look for the predeclared nil.

func _(x interface{}) {
	type nil int
	switch x.(type) {
	case nil: // ok - this is the type nil
	}
}

func _(x interface{}) {
	var nil int
	switch x.(type) {
	case nil /* ERROR not a type */ : // not ok - this is the variable nil
	}
}
