]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/types2: refer to structural rather than single underlying type...
authorRobert Griesemer <gri@golang.org>
Wed, 10 Nov 2021 17:33:53 +0000 (09:33 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 10 Nov 2021 18:24:20 +0000 (18:24 +0000)
This brings the error messages in sync with the terminology that
will be used it the spec.

Change-Id: Ia05993776c649be9eb2cdf948a583b9a49f9b192
Reviewed-on: https://go-review.googlesource.com/c/go/+/362997
Reviewed-by: Robert Findley <rfindley@google.com>
Trust: Robert Griesemer <gri@golang.org>

src/cmd/compile/internal/types2/builtins.go
src/cmd/compile/internal/types2/index.go
src/cmd/compile/internal/types2/stmt.go
src/cmd/compile/internal/types2/testdata/check/builtins.go2
src/cmd/compile/internal/types2/testdata/check/typeparams.go2

index 5c3f0aac8adc6894aca6e63270eaae9521b17c75..fa0fc1e5e66e63a4933265bfa5194079b740a3dd 100644 (file)
@@ -470,7 +470,7 @@ func (check *Checker) builtin(x *operand, call *syntax.CallExpr, id builtinId) (
                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)
index 10e85ef6e1d816d821b72f2003dc636be11d2cf1..10fb57c3215edc70da3f876308086d3df4386ebc 100644 (file)
@@ -212,7 +212,7 @@ func (check *Checker) sliceExpr(x *operand, e *syntax.SliceExpr) {
        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
 
index 39b24398d76b91d4db15f41cfdb1794bacab271b..2d414891528454c62e59b47d4e2f86159329f272 100644 (file)
@@ -834,12 +834,12 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s
        // 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)
index d1067a190f8cdc7ba56f07367c2c172b8a27d445..48a39891bf85874821e6b77fc24504b8a9c6d9ff 100644 (file)
@@ -148,7 +148,7 @@ func _[
        _ = 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)
@@ -156,7 +156,7 @@ func _[
        _ = 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)
@@ -164,7 +164,7 @@ func _[
        _ = 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)
 }
 
index a1bf6c262f4ce105d36cd0172f96ec46558be14c..9e7960a474485b6f9e34df40b1c3f27d123cbc13 100644 (file)
@@ -134,7 +134,7 @@ func _[T interface{ ~string }] (x T, i, j, k int) { var _ T = x /* ERROR 3-index
 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
 
@@ -210,7 +210,7 @@ func _[
         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 */ {}
@@ -226,7 +226,7 @@ func _[
         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 {}
@@ -239,7 +239,7 @@ func _[
         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 {}
@@ -252,7 +252,7 @@ func _[
         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 {}
@@ -265,7 +265,7 @@ func _[
         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