]> Cypherpunks repositories - gostls13.git/commit
go/types, types2: use nil to represent incomplete explicit aliases
authorMark Freeman <mark@golang.org>
Tue, 24 Jun 2025 21:16:24 +0000 (17:16 -0400)
committerMark Freeman <mark@golang.org>
Fri, 25 Jul 2025 20:43:32 +0000 (13:43 -0700)
commitd28b27cd8e612f3e3e6ffcfb7444a4e8829dbb48
treea9c7a5bbbe48da8682a7ce50e10c30547429b3a5
parent7b53d8d06ec432b1434b675b96a11526de6e6abe
go/types, types2: use nil to represent incomplete explicit aliases

Using Invalid to represent an incomplete alias is problematic since
it implies that an error has been reported somewhere. This causes
confusion for observers of invalid aliases trying not to emit
follow-on errors.

This change uses nil instead to represent an incomplete alias. This
has a mild benefit of making alias memoization more convenient. We
additionally can now memoize Invalid aliases.

This necessitates a minor change to our cycle error reporting for
aliases. Care is taken to separate logic according to gotypesalias.
Otherwise, a cycle as simple as "type T = T" panics.

A test is also added which uses go/types to inspect for Invalid
types. Currently, the problematic Invalid does not cause an error
in type checking, but rather a panic in noding. Thus, we cannot use
the familiar test facilities relying on error reporting.

Fixes #74181

Change-Id: Iea5ebce567a2805f5647de0fb7ded4a96f6c5f8d
Reviewed-on: https://go-review.googlesource.com/c/go/+/683796
Reviewed-by: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
src/cmd/compile/internal/types2/alias.go
src/cmd/compile/internal/types2/decl.go
src/go/types/alias.go
src/go/types/alias_test.go [new file with mode: 0644]
src/go/types/decl.go