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