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 ...@@ -351,8 +351,8 @@ void
defercheckwidth(void) defercheckwidth(void)
{ {
// we get out of sync on syntax errors, so don't be pedantic. // we get out of sync on syntax errors, so don't be pedantic.
// if(defercalc) if(defercalc && nerrors == 0)
// fatal("defercheckwidth"); fatal("defercheckwidth");
defercalc = 1; defercalc = 1;
} }
......
...@@ -292,10 +292,14 @@ walkdef(Node *n) ...@@ -292,10 +292,14 @@ walkdef(Node *n)
break; break;
case OTYPE: case OTYPE:
if(curfn)
defercheckwidth();
n->walkdef = 1; n->walkdef = 1;
n->type = typ(TFORW); n->type = typ(TFORW);
n->type->sym = n->sym; n->type->sym = n->sym;
walkdeftype(n); walkdeftype(n);
if(curfn)
resumecheckwidth();
break; break;
case OPACK: 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 ...@@ -180,10 +180,3 @@ BUG: bug260 failed
=========== bugs/bug274.go =========== bugs/bug274.go
BUG: errchk: command succeeded unexpectedly 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