| // errorcheck |
| |
| // 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 |
| |
| func F1[T comparable]() {} |
| func F2() { F1[[]int]() } // ERROR "\[\]int does not satisfy comparable$" |
| |
| type C interface { |
| M() |
| } |
| |
| func F3[T C]() {} |
| func F4() { F3[int]() } // ERROR "int does not satisfy C.*method M" |
| |
| func F5[T any]() { F3[T]() } // ERROR "T does not satisfy C.*method M" |
| |
| type signed interface { |
| type int, int8, int16, int32, int64 |
| } |
| |
| type integer interface { |
| type int, int8, int16, int32, int64, |
| uint, uint8, uint16, uint32, uint64, uintptr |
| } |
| |
| func F6[T signed](a T) bool { return a < 0 } |
| func F7[T any](a T) bool { return F6(a) } // ERROR "T does not satisfy signed.*T has no type constraints" |
| func F8[T integer](a T) bool { return F6(a) } // ERROR "T does not satisfy signed.*T type constraint uint not found in" |
| func F9(a uint) bool { return F6(a) } // ERROR "uint does not satisfy signed.*uint not found in" |
| |
| type MyInt int |
| type MyUint uint |
| |
| func F10(a MyInt) bool { return F6(a) } |
| func F11(a MyUint) bool { return F6(a) } // ERROR "MyUint does not satisfy signed.*uint not found in" |
| |
| type C2 interface { |
| C |
| signed |
| } |
| |
| func F20[T C2](a T) bool { |
| a.M() |
| return a < 0 |
| } |
| |
| func (MyInt) M() {} |
| |
| func (MyUint) M() {} |
| |
| type S struct {} |
| func (S) M() {} |
| |
| func F21() bool { return F20(MyInt(0)) } |
| func F22() bool { return F20(0) } // ERROR "int does not satisfy C2.*(missing method M)" |
| func F23[T any](a T) bool { return F20(a) } // ERROR "T does not satisfy C2.*(missing method M)" |
| func F24[T integer](a T) bool { return F20(a) } // ERROR "T does not satisfy C2.*(missing method M)" |
| func F25(a uint) bool { return F20(a) } // ERROR "uint does not satisfy C2.*(missing method M)" |
| func F26(a MyUint) bool { return F20(a) } // ERROR "MyUint does not satisfy C2.*uint not found in" |
| func F27(a S) bool { return F20(a) } // ERROR "S does not satisfy C2.*struct{} not found in" |