diff options
author | Robert Griesemer <gri@golang.org> | 2022-11-21 12:10:12 -0800 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2022-11-21 21:08:22 +0000 |
commit | f60c77026bb47db984c5da7e6f0590010e7e1a6f (patch) | |
tree | af6bf2c817ddf3e53036306d72fe0d9074984cb5 /src/cmd/compile/internal/types2/predicates.go | |
parent | 840b346c5d24a4a8ab5182b6f0711e3c5e65bafc (diff) | |
download | go-f60c77026bb47db984c5da7e6f0590010e7e1a6f.tar.gz go-f60c77026bb47db984c5da7e6f0590010e7e1a6f.zip |
go/types, types2: report empty type sets in operand descriptions
This leads to better error messages where operations are not
permitted because of empty type sets.
Fixes #51525.
Change-Id: I8d15645e2aff5145e458bdf9aaa4d2bee28d37fa
Reviewed-on: https://go-review.googlesource.com/c/go/+/452535
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Diffstat (limited to 'src/cmd/compile/internal/types2/predicates.go')
-rw-r--r-- | src/cmd/compile/internal/types2/predicates.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/types2/predicates.go b/src/cmd/compile/internal/types2/predicates.go index c4d11dcac4..acc1549084 100644 --- a/src/cmd/compile/internal/types2/predicates.go +++ b/src/cmd/compile/internal/types2/predicates.go @@ -96,6 +96,18 @@ func isTypeParam(t Type) bool { return ok } +// hasEmptyTypeset reports whether t is a type parameter with an empty type set. +// The function does not force the computation of the type set and so is safe to +// use anywhere, but it may report a false negative if the type set has not been +// computed yet. +func hasEmptyTypeset(t Type) bool { + if tpar, _ := t.(*TypeParam); tpar != nil && tpar.bound != nil { + iface, _ := safeUnderlying(tpar.bound).(*Interface) + return iface != nil && iface.tset != nil && iface.tset.IsEmpty() + } + return false +} + // isGeneric reports whether a type is a generic, uninstantiated type // (generic signatures are not included). // TODO(gri) should we include signatures or assert that they are not present? |