blob: 24b865ffad9b2533c35738c6382b0d0a0e6d5b8a [file] [log] [blame]
// 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"