case *Map, *Chan:
min = 1
case nil:
- check.errorf(arg0, invalidArg+"cannot make %s; type set has no single underlying type", arg0)
+ check.errorf(arg0, invalidArg+"cannot make %s: no structural type", arg0)
return
default:
check.errorf(arg0, invalidArg+"cannot make %s; type must be slice, map, or channel", arg0)
length := int64(-1) // valid if >= 0
switch u := structuralType(x.typ).(type) {
case nil:
- check.errorf(x, invalidOp+"cannot slice %s: type set has no single underlying type", x)
+ check.errorf(x, invalidOp+"cannot slice %s: %s has no structural type", x, x.typ)
x.mode = invalid
return
// determine key/value types
var key, val Type
if x.mode != invalid {
- // Ranging over a type parameter is permitted if it has a single underlying type.
+ // Ranging over a type parameter is permitted if it has a structural type.
var cause string
u := structuralType(x.typ)
switch t := u.(type) {
case nil:
- cause = "type set has no single underlying type"
+ cause = check.sprintf("%s has no structural type", x.typ)
case *Chan:
if sValue != nil {
check.softErrorf(sValue, "range over %s permits only one iteration variable", &x)
_ = make /* ERROR expects 2 or 3 arguments */ (S1)
_ = make(S1, 10, 20)
_ = make /* ERROR expects 2 or 3 arguments */ (S1, 10, 20, 30)
- _ = make(S2 /* ERROR cannot make .* no single underlying type */ , 10)
+ _ = make(S2 /* ERROR cannot make S2: no structural type */ , 10)
type M0 map[string]int
_ = make(map[string]int)
_ = make(M1)
_ = make(M1, 10)
_ = make/* ERROR expects 1 or 2 arguments */(M1, 10, 20)
- _ = make(M2 /* ERROR cannot make .* no single underlying type */ )
+ _ = make(M2 /* ERROR cannot make M2: no structural type */ )
type C0 chan int
_ = make(chan int)
_ = make(C1)
_ = make(C1, 10)
_ = make/* ERROR expects 1 or 2 arguments */(C1, 10, 20)
- _ = make(C2 /* ERROR cannot make .* no single underlying type */ )
+ _ = make(C2 /* ERROR cannot make C2: no structural type */ )
_ = make(C3)
}
type myByte1 []byte
type myByte2 []byte
func _[T interface{ []byte | myByte1 | myByte2 }] (x T, i, j, k int) { var _ T = x[i:j:k] }
-func _[T interface{ []byte | myByte1 | []int }] (x T, i, j, k int) { var _ T = x[ /* ERROR no single underlying type */ i:j:k] }
+func _[T interface{ []byte | myByte1 | []int }] (x T, i, j, k int) { var _ T = x[ /* ERROR no structural type */ i:j:k] }
// len/cap built-ins
for _, _ /* ERROR permits only one iteration variable */ = range c1 {}
var c2 C2
- for range c2 /* ERROR cannot range over c2.*no single underlying type */ {}
+ for range c2 /* ERROR cannot range over c2.*no structural type */ {}
var c3 C3
for range c3 /* ERROR receive from send-only channel */ {}
for _, _ = range s1 {}
var s2 S2
- for range s2 /* ERROR cannot range over s2.*no single underlying type */ {}
+ for range s2 /* ERROR cannot range over s2.*no structural type */ {}
var a0 []int
for range a0 {}
for _, _ = range a1 {}
var a2 A2
- for range a2 /* ERROR cannot range over a2.*no single underlying type */ {}
+ for range a2 /* ERROR cannot range over a2.*no structural type */ {}
var p0 *[10]int
for range p0 {}
for _, _ = range p1 {}
var p2 P2
- for range p2 /* ERROR cannot range over p2.*no single underlying type */ {}
+ for range p2 /* ERROR cannot range over p2.*no structural type */ {}
var m0 map[string]int
for range m0 {}
for _, _ = range m1 {}
var m2 M2
- for range m2 /* ERROR cannot range over m2.*no single underlying type */ {}
+ for range m2 /* ERROR cannot range over m2.*no structural type */ {}
}
// type inference checks