diff --git a/src/cmd/compile/internal/types2/api.go b/src/cmd/compile/internal/types2/api.go index a22ea5d12f..94c290b9ee 100644 --- a/src/cmd/compile/internal/types2/api.go +++ b/src/cmd/compile/internal/types2/api.go @@ -418,7 +418,8 @@ func (conf *Config) Check(path string, files []*syntax.File, info *Info) (*Packa // AssertableTo reports whether a value of type V can be asserted to have type T. // -// The behavior of AssertableTo is undefined in two cases: +// The behavior of AssertableTo is unspecified in three cases: +// - if T is Typ[Invalid] // - if V is a generalized interface; i.e., an interface that may only be used // as a type constraint in Go code // - if T is an uninstantiated generic type @@ -434,8 +435,8 @@ func AssertableTo(V *Interface, T Type) bool { // AssignableTo reports whether a value of type V is assignable to a variable // of type T. // -// The behavior of AssignableTo is undefined if V or T is an uninstantiated -// generic type. +// The behavior of AssignableTo is unspecified if V or T is Typ[Invalid] or an +// uninstantiated generic type. func AssignableTo(V, T Type) bool { x := operand{mode: value, typ: V} ok, _ := x.assignableTo(nil, T, nil) // check not needed for non-constant x @@ -445,8 +446,8 @@ func AssignableTo(V, T Type) bool { // ConvertibleTo reports whether a value of type V is convertible to a value of // type T. // -// The behavior of ConvertibleTo is undefined if V or T is an uninstantiated -// generic type. +// The behavior of ConvertibleTo is unspecified if V or T is Typ[Invalid] or an +// uninstantiated generic type. func ConvertibleTo(V, T Type) bool { x := operand{mode: value, typ: V} return x.convertibleTo(nil, T, nil) // check not needed for non-constant x @@ -454,8 +455,8 @@ func ConvertibleTo(V, T Type) bool { // Implements reports whether type V implements interface T. // -// The behavior of Implements is undefined if V is an uninstantiated generic -// type. +// The behavior of Implements is unspecified if V is Typ[Invalid] or an uninstantiated +// generic type. func Implements(V Type, T *Interface) bool { if T.Empty() { // All types (even Typ[Invalid]) implement the empty interface. diff --git a/src/go/types/api.go b/src/go/types/api.go index 0915d6a6ee..5e7be29b3c 100644 --- a/src/go/types/api.go +++ b/src/go/types/api.go @@ -413,7 +413,8 @@ func (conf *Config) Check(path string, fset *token.FileSet, files []*ast.File, i // AssertableTo reports whether a value of type V can be asserted to have type T. // -// The behavior of AssertableTo is undefined in two cases: +// The behavior of AssertableTo is unspecified in three cases: +// - if T is Typ[Invalid] // - if V is a generalized interface; i.e., an interface that may only be used // as a type constraint in Go code // - if T is an uninstantiated generic type @@ -429,8 +430,8 @@ func AssertableTo(V *Interface, T Type) bool { // AssignableTo reports whether a value of type V is assignable to a variable // of type T. // -// The behavior of AssignableTo is undefined if V or T is an uninstantiated -// generic type. +// The behavior of AssignableTo is unspecified if V or T is Typ[Invalid] or an +// uninstantiated generic type. func AssignableTo(V, T Type) bool { x := operand{mode: value, typ: V} ok, _ := x.assignableTo(nil, T, nil) // check not needed for non-constant x @@ -440,8 +441,8 @@ func AssignableTo(V, T Type) bool { // ConvertibleTo reports whether a value of type V is convertible to a value of // type T. // -// The behavior of ConvertibleTo is undefined if V or T is an uninstantiated -// generic type. +// The behavior of ConvertibleTo is unspecified if V or T is Typ[Invalid] or an +// uninstantiated generic type. func ConvertibleTo(V, T Type) bool { x := operand{mode: value, typ: V} return x.convertibleTo(nil, T, nil) // check not needed for non-constant x @@ -449,8 +450,8 @@ func ConvertibleTo(V, T Type) bool { // Implements reports whether type V implements interface T. // -// The behavior of Implements is undefined if V is an uninstantiated generic -// type. +// The behavior of Implements is unspecified if V is Typ[Invalid] or an uninstantiated +// generic type. func Implements(V Type, T *Interface) bool { if T.Empty() { // All types (even Typ[Invalid]) implement the empty interface.