mirror of https://github.com/golang/go.git
cmd/compile/internal/types2: print "nil" rather than "untyped nil"
When we have a typed nil, we already say so; thus it is sufficient to use "nil" in all the other cases. This is closer to (1.17) compiler behavior. In cases where the 1.17 compiler prints "untyped nil" (e.g., wrong uses of "copy"), we already print a different message. We can do better in those cases as well; will be addressed in a separate CL (see #49735). Fixes #48852. Change-Id: I9a7a72e0f99185b00f80040c5510a693b1ea80f6 Reviewed-on: https://go-review.googlesource.com/c/go/+/366276 Trust: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
9678f79414
commit
83bfed916b
|
|
@ -220,9 +220,6 @@ func (check *Checker) assignVar(lhs syntax.Expr, x *operand) Type {
|
||||||
return nil
|
return nil
|
||||||
case variable, mapindex:
|
case variable, mapindex:
|
||||||
// ok
|
// ok
|
||||||
case nilvalue:
|
|
||||||
check.error(&z, "cannot assign to nil") // default would print "untyped nil"
|
|
||||||
return nil
|
|
||||||
default:
|
default:
|
||||||
if sel, ok := z.expr.(*syntax.SelectorExpr); ok {
|
if sel, ok := z.expr.(*syntax.SelectorExpr); ok {
|
||||||
var op operand
|
var op operand
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ func operandString(x *operand, qf Qualifier) string {
|
||||||
case nil, Typ[Invalid]:
|
case nil, Typ[Invalid]:
|
||||||
return "nil (with invalid type)"
|
return "nil (with invalid type)"
|
||||||
case Typ[UntypedNil]:
|
case Typ[UntypedNil]:
|
||||||
return "untyped nil"
|
return "nil"
|
||||||
default:
|
default:
|
||||||
return fmt.Sprintf("nil (of type %s)", TypeString(x.typ, qf))
|
return fmt.Sprintf("nil (of type %s)", TypeString(x.typ, qf))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,10 +69,10 @@ func assignments1() {
|
||||||
|
|
||||||
// test cases for issue 5800
|
// test cases for issue 5800
|
||||||
var (
|
var (
|
||||||
_ int = nil /* ERROR "untyped nil" */
|
_ int = nil /* ERROR "nil" */
|
||||||
_ [10]int = nil /* ERROR "untyped nil" */
|
_ [10]int = nil /* ERROR "nil" */
|
||||||
_ []byte = nil
|
_ []byte = nil
|
||||||
_ struct{} = nil /* ERROR "untyped nil" */
|
_ struct{} = nil /* ERROR "nil" */
|
||||||
_ func() = nil
|
_ func() = nil
|
||||||
_ map[int]string = nil
|
_ map[int]string = nil
|
||||||
_ chan int = nil
|
_ chan int = nil
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ func _[
|
||||||
T1 []int,
|
T1 []int,
|
||||||
T2 ~float64 | ~complex128 | chan int,
|
T2 ~float64 | ~complex128 | chan int,
|
||||||
]() {
|
]() {
|
||||||
_ = T0(nil /* ERROR cannot convert untyped nil to T0 */ )
|
_ = T0(nil /* ERROR cannot convert nil to T0 */ )
|
||||||
_ = T1(1 /* ERROR cannot convert 1 .* to T1 */ )
|
_ = T1(1 /* ERROR cannot convert 1 .* to T1 */ )
|
||||||
_ = T2(2 /* ERROR cannot convert 2 .* to T2 */ )
|
_ = T2(2 /* ERROR cannot convert 2 .* to T2 */ )
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -153,28 +153,28 @@ func _[
|
||||||
|
|
||||||
// "x is the predeclared identifier nil and T is a pointer, function, slice, map, channel, or interface type"
|
// "x is the predeclared identifier nil and T is a pointer, function, slice, map, channel, or interface type"
|
||||||
func _[TP Interface](X TP) {
|
func _[TP Interface](X TP) {
|
||||||
b = nil // ERROR cannot use untyped nil
|
b = nil // ERROR cannot use nil
|
||||||
a = nil // ERROR cannot use untyped nil
|
a = nil // ERROR cannot use nil
|
||||||
l = nil
|
l = nil
|
||||||
s = nil // ERROR cannot use untyped nil
|
s = nil // ERROR cannot use nil
|
||||||
p = nil
|
p = nil
|
||||||
f = nil
|
f = nil
|
||||||
i = nil
|
i = nil
|
||||||
m = nil
|
m = nil
|
||||||
c = nil
|
c = nil
|
||||||
d = nil // ERROR cannot use untyped nil
|
d = nil // ERROR cannot use nil
|
||||||
|
|
||||||
B = nil // ERROR cannot use untyped nil
|
B = nil // ERROR cannot use nil
|
||||||
A = nil // ERROR cannot use untyped nil
|
A = nil // ERROR cannot use nil
|
||||||
L = nil
|
L = nil
|
||||||
S = nil // ERROR cannot use untyped nil
|
S = nil // ERROR cannot use nil
|
||||||
P = nil
|
P = nil
|
||||||
F = nil
|
F = nil
|
||||||
I = nil
|
I = nil
|
||||||
M = nil
|
M = nil
|
||||||
C = nil
|
C = nil
|
||||||
D = nil // ERROR cannot use untyped nil
|
D = nil // ERROR cannot use nil
|
||||||
X = nil // ERROR cannot use untyped nil
|
X = nil // ERROR cannot use nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// "x is an untyped constant representable by a value of type T"
|
// "x is an untyped constant representable by a value of type T"
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
_ = nil // ERROR "use of untyped nil"
|
_ = nil // ERROR "use of untyped nil"
|
||||||
_, _ = nil, 1 // ERROR "use of untyped nil"
|
_, _ = nil, 1 // ERROR "use of untyped nil"
|
||||||
_, _ = 1, nil // ERROR "use of untyped nil"
|
_, _ = 1, nil // ERROR "use of untyped nil"
|
||||||
_ = append(nil, 1, 2, 3) // ERROR "untyped nil"
|
_ = append(nil, 1, 2, 3) // ERROR "untyped nil|nil"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,5 @@
|
||||||
package p
|
package p
|
||||||
|
|
||||||
func f() uintptr {
|
func f() uintptr {
|
||||||
return nil // ERROR "cannot use nil as type uintptr in return argument|incompatible type|cannot use untyped nil"
|
return nil // ERROR "cannot use nil as type uintptr in return argument|incompatible type|cannot use nil"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,15 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
var bits1 uint = 10
|
var bits1 uint = 10
|
||||||
|
|
||||||
const bits2 uint = 10
|
const bits2 uint = 10
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
_ = make([]byte, 1<<bits1)
|
_ = make([]byte, 1<<bits1)
|
||||||
_ = make([]byte, 1<<bits2)
|
_ = make([]byte, 1<<bits2)
|
||||||
_ = make([]byte, nil) // ERROR "non-integer.*len|untyped nil"
|
_ = make([]byte, nil) // ERROR "non-integer.*len|nil"
|
||||||
_ = make([]byte, nil, 2) // ERROR "non-integer.*len|untyped nil"
|
_ = make([]byte, nil, 2) // ERROR "non-integer.*len|nil"
|
||||||
_ = make([]byte, 1, nil) // ERROR "non-integer.*cap|untyped nil"
|
_ = make([]byte, 1, nil) // ERROR "non-integer.*cap|nil"
|
||||||
_ = make([]byte, true) // ERROR "non-integer.*len|untyped bool"
|
_ = make([]byte, true) // ERROR "non-integer.*len|untyped bool"
|
||||||
_ = make([]byte, "abc") // ERROR "non-integer.*len|untyped string"
|
_ = make([]byte, "abc") // ERROR "non-integer.*len|untyped string"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue