diff options
author | Ian Lance Taylor <iant@golang.org> | 2009-08-17 19:23:17 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2009-08-17 19:23:17 -0700 |
commit | 250e21808c33f728bfdf59bc11ba0ceaf37ca1ae (patch) | |
tree | 8b25c9bc177c3b5b0d81dd087bd0438b332910f4 | |
parent | d02759805a8b67887ba8e5fcbe152313a43bb2ec (diff) | |
download | golang-250e21808c33f728bfdf59bc11ba0ceaf37ca1ae.tar.gz |
Test that a type can refer to itself recursively as long as it
does so in ways that permit its size to be known.
R=rsc
DELTA=35 (35 added, 0 deleted, 0 changed)
OCL=33427
CL=33433
-rw-r--r-- | test/bugs/bug190.go | 26 | ||||
-rw-r--r-- | test/golden.out | 9 |
2 files changed, 35 insertions, 0 deletions
diff --git a/test/bugs/bug190.go b/test/bugs/bug190.go new file mode 100644 index 000000000..da0bfde0f --- /dev/null +++ b/test/bugs/bug190.go @@ -0,0 +1,26 @@ +// $G $D/$F.go || echo BUG: should compile + +// Copyright 2009 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 S struct { + p *S; + s []S; + m map[int] S; + c chan S; + i interface { f(S); }; + f func(S) S; +} + +func main() { + var s S; + s.p = &s; + s.s = make([]S, 1); + s.s[0] = s; + s.m[0] = s; + s.c <- s; + s.i.f(s); +} diff --git a/test/golden.out b/test/golden.out index 81b1bc8c6..f3841b15b 100644 --- a/test/golden.out +++ b/test/golden.out @@ -159,3 +159,12 @@ BUG: 0 1 =========== bugs/bug189.go BUG: errchk: command succeeded unexpectedly + +=========== bugs/bug190.go +<epoch>: invalid recursive type []S +<epoch>: invalid recursive type S +<epoch>: invalid recursive type S +<epoch>: invalid recursive type chan S +<epoch>: invalid recursive type S +<epoch>: invalid recursive type func(S) (S) +BUG: should compile |