diff options
-rw-r--r-- | src/cmd/gc/walk.c | 19 | ||||
-rw-r--r-- | test/bugs/bug250.go (renamed from test/fixedbugs/bug250.go) | 0 | ||||
-rw-r--r-- | test/bugs/bug251.go (renamed from test/fixedbugs/bug251.go) | 0 | ||||
-rw-r--r-- | test/fixedbugs/bug195.go | 4 | ||||
-rw-r--r-- | test/fixedbugs/bug256.go | 16 | ||||
-rw-r--r-- | test/golden.out | 14 |
6 files changed, 33 insertions, 20 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 31d1e3091..067db0fc7 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -122,9 +122,6 @@ walkdeflist(NodeList *l) walkdef(l->n); } -static NodeList *deftypequeue; -static int intypedef; - static void walkdeftype(Node *n) { @@ -265,21 +262,7 @@ walkdef(Node *n) n->walkdef = 1; n->type = typ(TFORW); n->type->sym = n->sym; - intypedef++; - if(intypedef > 1) - deftypequeue = list(deftypequeue, n); - else { - walkdeftype(n); - while(deftypequeue != nil) { - NodeList *l; - - l = deftypequeue; - deftypequeue = nil; - for(; l; l=l->next) - walkdeftype(l->n); - } - } - intypedef--; + walkdeftype(n); break; case OPACK: diff --git a/test/fixedbugs/bug250.go b/test/bugs/bug250.go index cd28642bf..cd28642bf 100644 --- a/test/fixedbugs/bug250.go +++ b/test/bugs/bug250.go diff --git a/test/fixedbugs/bug251.go b/test/bugs/bug251.go index f6365f1e6..f6365f1e6 100644 --- a/test/fixedbugs/bug251.go +++ b/test/bugs/bug251.go diff --git a/test/fixedbugs/bug195.go b/test/fixedbugs/bug195.go index 221a2eb09..27bbbd354 100644 --- a/test/fixedbugs/bug195.go +++ b/test/fixedbugs/bug195.go @@ -19,9 +19,9 @@ type I4 interface { } type I5 interface { - I6 // ERROR "interface" + I6 } type I6 interface { - I5 + I5 // ERROR "interface" } diff --git a/test/fixedbugs/bug256.go b/test/fixedbugs/bug256.go new file mode 100644 index 000000000..37fa5f5c8 --- /dev/null +++ b/test/fixedbugs/bug256.go @@ -0,0 +1,16 @@ +// errchk $G -e $D/$F.go + +// 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. + +package main + +type T U // bogus "invalid recursive type T" from 6g +type U int + +const x T = 123 + +type V V // ERROR "invalid recursive type" + + diff --git a/test/golden.out b/test/golden.out index cf2297e1a..22abf0c4b 100644 --- a/test/golden.out +++ b/test/golden.out @@ -150,3 +150,17 @@ throw: interface conversion panic PC=xxx == bugs/ + +=========== bugs/bug250.go +bugs/bug250.go:14: interface type loop involving I1 +bugs/bug250.go:17: need type assertion to use I2 as I1 + missing m() I2 +BUG: bug250 + +=========== bugs/bug251.go +BUG: errchk: bugs/bug251.go:11: missing expected error: 'loop|interface' +errchk: bugs/bug251.go: unmatched error messages: +================================================== +bugs/bug251.go:15: interface type loop involving I1 +bugs/bug251.go:19: need type assertion to use I2 as I1 +================================================== |