mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
go/types: allow conversion from slice to array ptr
These match the changes to cmd/compile/internal/types2 in CL 301650. Updates #395 Change-Id: I1e85b6355c8c8fdba0996c26a2505c65fab908d6 Reviewed-on: https://go-review.googlesource.com/c/go/+/301651 Trust: Josh Bleecher Snyder <josharian@gmail.com> Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
faa4fa1a6e
commit
c18744377a
3 changed files with 15 additions and 4 deletions
|
|
@ -1430,6 +1430,9 @@ func TestConvertibleTo(t *testing.T) {
|
||||||
{newDefined(new(Struct)), new(Struct), true},
|
{newDefined(new(Struct)), new(Struct), true},
|
||||||
{newDefined(Typ[Int]), new(Struct), false},
|
{newDefined(Typ[Int]), new(Struct), false},
|
||||||
{Typ[UntypedInt], Typ[Int], true},
|
{Typ[UntypedInt], Typ[Int], true},
|
||||||
|
{NewSlice(Typ[Int]), NewPointer(NewArray(Typ[Int], 10)), true},
|
||||||
|
{NewSlice(Typ[Int]), NewArray(Typ[Int], 10), false},
|
||||||
|
{NewSlice(Typ[Int]), NewPointer(NewArray(Typ[Uint], 10)), false},
|
||||||
// Untyped string values are not permitted by the spec, so the below
|
// Untyped string values are not permitted by the spec, so the below
|
||||||
// behavior is undefined.
|
// behavior is undefined.
|
||||||
{Typ[UntypedString], Typ[String], true},
|
{Typ[UntypedString], Typ[String], true},
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,18 @@ func (x *operand) convertibleTo(check *Checker, T Type) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "x is a slice, T is a pointer-to-array type,
|
||||||
|
// and the slice and array types have identical element types."
|
||||||
|
if s := asSlice(V); s != nil {
|
||||||
|
if p := asPointer(T); p != nil {
|
||||||
|
if a := asArray(p.Elem()); a != nil {
|
||||||
|
if check.identical(s.Elem(), a.Elem()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,10 +163,6 @@ func TestStdTest(t *testing.T) {
|
||||||
"embedfunc.go", // tests //go:embed
|
"embedfunc.go", // tests //go:embed
|
||||||
"embedvers.go", // tests //go:embed
|
"embedvers.go", // tests //go:embed
|
||||||
"linkname2.go", // go/types doesn't check validity of //go:xxx directives
|
"linkname2.go", // go/types doesn't check validity of //go:xxx directives
|
||||||
|
|
||||||
"convert2.go", // temporary: go/types doesn't know yet about converting from slices to array pointers
|
|
||||||
"convert4.go", // temporary: go/types doesn't know yet about converting from slices to array pointers
|
|
||||||
"escape_slice.go", // temporary: go/types doesn't know yet about converting from slices to array pointers
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue