aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/6g/align.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6g/align.c')
-rw-r--r--src/cmd/6g/align.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/6g/align.c b/src/cmd/6g/align.c
index 1a1f2c88b8..208796c2be 100644
--- a/src/cmd/6g/align.c
+++ b/src/cmd/6g/align.c
@@ -105,6 +105,14 @@ dowidth(Type *t)
if(t == T)
return;
+ if(t->width == -2) {
+ yyerror("invalid recursive type %T", t);
+ t->width = 0;
+ return;
+ }
+
+ t->width = -2;
+
w = 0;
switch(t->etype) {
default:
@@ -136,6 +144,7 @@ dowidth(Type *t)
w = 10;
break;
case TINTER: // implemented as 2 pointers
+ case TFORWINTER:
offmod(t);
w = 2*wptr;
break;
@@ -148,7 +157,9 @@ dowidth(Type *t)
dowidth(t->type);
w = wptr;
break;
- case TFORW: // implemented as pointer
+ case TFORW: // should have been filled in
+ case TFORWSTRUCT:
+ yyerror("incomplete type %T", t);
w = wptr;
break;
case TANY: // implemented as pointer