mirror of
https://github.com/golang/go
synced 2024-11-12 05:40:22 -07:00
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:
parent
6d1fffac63
commit
99699d14fe
@ -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.
|
||||
|
15
test/typeparam/issue48962.go
Normal file
15
test/typeparam/issue48962.go
Normal 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]
|
||||
}
|
Loading…
Reference in New Issue
Block a user