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