Skip to content

Commit

Permalink
go/types: allow conversion from slice to array ptr
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
josharian committed Apr 21, 2021
1 parent faa4fa1 commit c187443
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
3 changes: 3 additions & 0 deletions src/go/types/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1430,6 +1430,9 @@ func TestConvertibleTo(t *testing.T) {
{newDefined(new(Struct)), new(Struct), true},
{newDefined(Typ[Int]), new(Struct), false},
{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
// behavior is undefined.
{Typ[UntypedString], Typ[String], true},
Expand Down
12 changes: 12 additions & 0 deletions src/go/types/conversions.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,18 @@ func (x *operand) convertibleTo(check *Checker, T Type) bool {
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
}

Expand Down
4 changes: 0 additions & 4 deletions src/go/types/stdlib_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,6 @@ func TestStdTest(t *testing.T) {
"embedfunc.go", // tests //go:embed
"embedvers.go", // tests //go:embed
"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
)
}

Expand Down

0 comments on commit c187443

Please sign in to comment.