diff options
author | Robert Hencke <robert.hencke@gmail.com> | 2011-07-12 11:12:06 -0700 |
---|---|---|
committer | Robert Hencke <robert.hencke@gmail.com> | 2011-07-12 11:12:06 -0700 |
commit | 0f190c9038c80e1dcbc4ba9cafaa30a9c06c481f (patch) | |
tree | 960b7f3843112f8302771e18db790fe64e60ad74 /src/cmd/gc/align.c | |
parent | 5bb6dd604b29bc9d7e37cdad9a2d1e5d35977a07 (diff) | |
download | go-0f190c9038c80e1dcbc4ba9cafaa30a9c06c481f.tar.gz |
gc: make size of struct{} and [0]byte 0 bytes
Fixes issue 1949.
R=iant, rsc
CC=golang-dev
http://codereview.appspot.com/4634124
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/cmd/gc/align.c')
-rw-r--r-- | src/cmd/gc/align.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c index 7fcac4833..6bb93ef17 100644 --- a/src/cmd/gc/align.c +++ b/src/cmd/gc/align.c @@ -225,20 +225,16 @@ dowidth(Type *t) uint64 cap; dowidth(t->type); - if(t->type->width == 0) - fatal("no width for type %T", t->type); - if(tptr == TPTR32) - cap = ((uint32)-1) / t->type->width; - else - cap = ((uint64)-1) / t->type->width; - if(t->bound > cap) - yyerror("type %lT larger than address space", t); + if(t->type->width != 0) { + if(tptr == TPTR32) + cap = ((uint32)-1) / t->type->width; + else + cap = ((uint64)-1) / t->type->width; + if(t->bound > cap) + yyerror("type %lT larger than address space", t); + } w = t->bound * t->type->width; t->align = t->type->align; - if(w == 0) { - w = 1; - t->align = 1; - } } else if(t->bound == -1) { w = sizeof_Array; @@ -255,10 +251,6 @@ dowidth(Type *t) if(t->funarg) fatal("dowidth fn struct %T", t); w = widstruct(t, 0, 1); - if(w == 0) { - w = 1; - t->align = 1; - } break; case TFUNC: @@ -286,9 +278,6 @@ dowidth(Type *t) break; } - // catch all for error cases; avoid divide by zero later - if(w == 0) - w = 1; t->width = w; if(t->align == 0) { if(w > 8 || (w&(w-1)) != 0) |