aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-12-03 01:12:02 -0800
committerRuss Cox <rsc@golang.org>2009-12-03 01:12:02 -0800
commit05a1eb1ab0650b465b23f01ca0ea5944735fa63b (patch)
tree3538ef03a4d9e1387322bb39f68d7d631247c576
parent41861a881292d287b14e4e4c38ab21b97182e782 (diff)
downloadgo-05a1eb1ab0650b465b23f01ca0ea5944735fa63b.tar.gz
go-05a1eb1ab0650b465b23f01ca0ea5944735fa63b.zip
gc: recursive type error
Fixes #245. R=ken2 https://golang.org/cl/164094
-rw-r--r--src/cmd/gc/align.c3
-rw-r--r--src/cmd/gc/typecheck.c2
-rw-r--r--test/fixedbugs/bug224.go10
3 files changed, 15 insertions, 0 deletions
diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c
index b74ac0f29f..cf08516465 100644
--- a/src/cmd/gc/align.c
+++ b/src/cmd/gc/align.c
@@ -205,6 +205,9 @@ dowidth(Type *t)
checkwidth(t->down);
break;
case TFORW: // should have been filled in
+ yyerror("invalid recursive type %T", t);
+ w = 1; // anything will do
+ break;
case TANY:
// dummy type; should be replaced before use.
if(!debug['A'])
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 0fd359b319..76147e48f0 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -1039,6 +1039,8 @@ reswitch:
case ODCLTYPE:
ok |= Etop;
typecheck(&n->left, Etype);
+ if(!incannedimport)
+ checkwidth(n->left->type);
goto ret;
}
diff --git a/test/fixedbugs/bug224.go b/test/fixedbugs/bug224.go
new file mode 100644
index 0000000000..11ee57ecfa
--- /dev/null
+++ b/test/fixedbugs/bug224.go
@@ -0,0 +1,10 @@
+// errchk $G $D/$F.go
+
+// 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 T T // ERROR "recursive"
+