aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2021-08-02 18:01:46 -0700
committerMatthew Dempsky <mdempsky@google.com>2021-08-03 02:42:15 +0000
commit1b193598b3a4ad3138626ca97bca752e9e63b21c (patch)
tree2174bb8e3d153c5e67292600bdb3a93687ad7860
parente56234a30544c043b45601ce01601e3a03e00d63 (diff)
downloadgo-1b193598b3a4ad3138626ca97bca752e9e63b21c.tar.gz
go-1b193598b3a4ad3138626ca97bca752e9e63b21c.zip
[dev.typeparams] cmd/compile: fail early on unexpected types2.Invalid
In unified IR, fail right away if we find a types2.Invalid while writing out the package. This provides a clearer error message for https://github.com/golang/go/issues/25838#issuecomment-448746670. Updates #25838. Change-Id: I6902fdd891fc31bbb832b6fdba00eca301282409 Reviewed-on: https://go-review.googlesource.com/c/go/+/338973 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
-rw-r--r--src/cmd/compile/internal/noder/writer.go20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go
index 07d4363f89..eb1db623b4 100644
--- a/src/cmd/compile/internal/noder/writer.go
+++ b/src/cmd/compile/internal/noder/writer.go
@@ -282,18 +282,22 @@ func (pw *pkgWriter) typIdx(typ types2.Type, dict *writerDict) typeInfo {
base.Fatalf("unexpected type: %v (%T)", typ, typ)
case *types2.Basic:
- if kind := typ.Kind(); types2.Typ[kind] == typ {
+ switch kind := typ.Kind(); {
+ case kind == types2.Invalid:
+ base.Fatalf("unexpected types2.Invalid")
+
+ case types2.Typ[kind] == typ:
w.code(typeBasic)
w.len(int(kind))
- break
- }
- // Handle "byte" and "rune" as references to their TypeName.
- obj := types2.Universe.Lookup(typ.Name())
- assert(obj.Type() == typ)
+ default:
+ // Handle "byte" and "rune" as references to their TypeName.
+ obj := types2.Universe.Lookup(typ.Name())
+ assert(obj.Type() == typ)
- w.code(typeNamed)
- w.obj(obj, nil)
+ w.code(typeNamed)
+ w.obj(obj, nil)
+ }
case *types2.Named:
// Type aliases can refer to uninstantiated generic types, so we