x.mode = constant_
case *TypeName:
- if check.isBrokenAlias(obj) {
+ if !check.conf._EnableAlias && check.isBrokenAlias(obj) {
check.errorf(e, InvalidDeclCycle, "invalid use of type alias %s in recursive type (see go.dev/issue/50729)", obj.name)
return
}
func setDefType(def *TypeName, typ Type) {
if def != nil {
switch t := def.typ.(type) {
- // case *_Alias:
+ case *_Alias:
+ // t.fromRHS should always be set, either to an invalid type
+ // in the beginning, or to typ in certain cyclic declarations.
+ if t.fromRHS != Typ[Invalid] && t.fromRHS != typ {
+ panic(sprintf(nil, nil, true, "t.fromRHS = %s, typ = %s\n", t.fromRHS, typ))
+ }
+ t.fromRHS = typ
case *Basic:
assert(t == Typ[Invalid])
case *Named: