Commit 17f90c68 authored by Russ Cox's avatar Russ Cox

gc: fix handling of types inside function bodies

Fixes #849.
Fixes #920.

R=ken2
CC=golang-dev
https://golang.org/cl/1841042
parent 84f67eb8
......@@ -351,8 +351,8 @@ void
defercheckwidth(void)
{
// we get out of sync on syntax errors, so don't be pedantic.
// if(defercalc)
// fatal("defercheckwidth");
if(defercalc && nerrors == 0)
fatal("defercheckwidth");
defercalc = 1;
}
......
......@@ -292,10 +292,14 @@ walkdef(Node *n)
break;
case OTYPE:
if(curfn)
defercheckwidth();
n->walkdef = 1;
n->type = typ(TFORW);
n->type->sym = n->sym;
walkdeftype(n);
if(curfn)
resumecheckwidth();
break;
case OPACK:
......
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2010 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.
// http://code.google.com/p/go/issues/detail?id=920
package main
type X struct { x []X }
func main() {
type Y struct { x []Y } // used to get invalid recursive type
}
......@@ -180,10 +180,3 @@ BUG: bug260 failed
=========== bugs/bug274.go
BUG: errchk: command succeeded unexpectedly
=========== bugs/bug286.go
test2 called g
panic: wrong method called
panic PC=xxx
BUG: bug286 failed
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment