mirror of
https://github.com/golang/go
synced 2024-11-25 03:57:56 -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)
|
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)
|
|||||||
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:
|
||||||
|
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
|
=========== 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
|
|
||||||
|
Loading…
Reference in New Issue
Block a user