mirror of
https://github.com/golang/go
synced 2024-10-04 23:20:17 +00:00
go/types: better position for "3-index slice of string" error
This is a port of CL 363670 from types2 to go/types. Change-Id: I2ac3a5f86bb4eafddd2854e193083b2b737e29b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/364901 Trust: Robert Findley <rfindley@google.com> Run-TryBot: Robert Findley <rfindley@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
3404ee3e86
commit
72f0976ac4
|
@ -223,7 +223,11 @@ func (check *Checker) sliceExpr(x *operand, e *ast.SliceExpr) {
|
|||
case *Basic:
|
||||
if isString(u) {
|
||||
if e.Slice3 {
|
||||
check.invalidOp(x, _InvalidSliceExpr, "3-index slice of string")
|
||||
at := e.Max
|
||||
if at == nil {
|
||||
at = e // e.Index[2] should be present but be careful
|
||||
}
|
||||
check.invalidOp(at, _InvalidSliceExpr, "3-index slice of string")
|
||||
x.mode = invalid
|
||||
return
|
||||
}
|
||||
|
|
4
src/go/types/testdata/check/expr3.src
vendored
4
src/go/types/testdata/check/expr3.src
vendored
|
@ -109,8 +109,8 @@ func indexes() {
|
|||
_ = t[- /* ERROR "negative" */ 1]
|
||||
_ = t[- /* ERROR "negative" */ 1 :]
|
||||
_ = t[: - /* ERROR "negative" */ 1]
|
||||
_ = t /* ERROR "3-index slice of string" */ [1:2:3]
|
||||
_ = "foo" /* ERROR "3-index slice of string" */ [1:2:3]
|
||||
_ = t[1:2:3 /* ERROR "3-index slice of string" */ ]
|
||||
_ = "foo"[1:2:3 /* ERROR "3-index slice of string" */ ]
|
||||
var t0 byte
|
||||
t0 = t[0]
|
||||
_ = t0
|
||||
|
|
4
src/go/types/testdata/check/typeparams.go2
vendored
4
src/go/types/testdata/check/typeparams.go2
vendored
|
@ -129,7 +129,7 @@ func _[T interface{ ~[10]E }, E any] (x T, i, j, k int) { var _ []E = x[i:j:k] }
|
|||
func _[T interface{ ~[]byte }] (x T, i, j, k int) { var _ T = x[i:j] }
|
||||
func _[T interface{ ~[]byte }] (x T, i, j, k int) { var _ T = x[i:j:k] }
|
||||
func _[T interface{ ~string }] (x T, i, j, k int) { var _ T = x[i:j] }
|
||||
func _[T interface{ ~string }] (x T, i, j, k int) { var _ T = x /* ERROR 3-index slice of string */ [i:j:k] }
|
||||
func _[T interface{ ~string }] (x T, i, j, k int) { var _ T = x[i:j:k /* ERROR 3-index slice of string */ ] }
|
||||
|
||||
type myByte1 []byte
|
||||
type myByte2 []byte
|
||||
|
@ -137,7 +137,7 @@ func _[T interface{ []byte | myByte1 | myByte2 }] (x T, i, j, k int) { var _ T =
|
|||
func _[T interface{ []byte | myByte1 | []int }] (x T, i, j, k int) { var _ T = x /* ERROR no structural type */ [i:j:k] }
|
||||
|
||||
func _[T interface{ []byte | myByte1 | myByte2 | string }] (x T, i, j, k int) { var _ T = x[i:j] }
|
||||
func _[T interface{ []byte | myByte1 | myByte2 | string }] (x T, i, j, k int) { var _ T = x /* ERROR 3-index slice of string */ [i:j:k] }
|
||||
func _[T interface{ []byte | myByte1 | myByte2 | string }] (x T, i, j, k int) { var _ T = x[i:j:k /* ERROR 3-index slice of string */ ] }
|
||||
func _[T interface{ []byte | myByte1 | []int | string }] (x T, i, j, k int) { var _ T = x /* ERROR no structural type */ [i:j] }
|
||||
|
||||
// len/cap built-ins
|
||||
|
|
Loading…
Reference in a new issue