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:
parent
84f67eb8e6
commit
17f90c68c6
@ -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:
|
||||
|
15
test/fixedbugs/bug290.go
Normal file
15
test/fixedbugs/bug290.go
Normal 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
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user