cmd/compile: fix TypeDefn to deal with node with no Ntype set

Adjust TypeDefn(), which is used by reportTypeLoop(), to work for nodes
with no Ntype set (which are all nodes in -G=3 mode). Normally,
reportTypeLoop() would not be called, because the types2 typechecker
would have already caught it. This is a possible way to report an
unusual type loop involving type params, which is not being caught by
the types2 type checker.

Updates #48962

Change-Id: I55edee46026eece2e8647c5b5b4d8dfb39eeb5f8
Reviewed-on: https://go-review.googlesource.com/c/go/+/361398
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
Dan Scales 2021-11-04 11:59:17 -07:00
parent 6d1fffac63
commit 99699d14fe
2 changed files with 19 additions and 1 deletions

View File

@ -146,7 +146,10 @@ func (n *Name) editChildren(edit func(Node) Node) {}
// That is, given "type T Defn", it returns Defn.
// It is used by package types.
func (n *Name) TypeDefn() *types.Type {
return n.Ntype.Type()
if n.Ntype != nil {
return n.Ntype.Type()
}
return n.Type()
}
// RecordFrameOffset records the frame offset for the name.

View File

@ -0,0 +1,15 @@
// errorcheck -G=3
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
type T0[P any] struct { // ERROR "invalid recursive type"
f P
}
type T1 struct {
_ T0[T1]
}