1
0
mirror of https://github.com/golang/go synced 2024-11-11 20:01:37 -07:00

gc: fix handling of types inside function bodies

Fixes #849.
Fixes #920.

R=ken2
CC=golang-dev
https://golang.org/cl/1841042
This commit is contained in:
Russ Cox 2010-07-15 14:25:50 -07:00
parent 84f67eb8e6
commit 17f90c68c6
5 changed files with 21 additions and 9 deletions

View File

@ -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;
}

View File

@ -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:

15
test/fixedbugs/bug290.go Normal file
View File

@ -0,0 +1,15 @@
// $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
}

View File

@ -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