1
0
mirror of https://github.com/golang/go synced 2024-11-12 10:30:23 -07:00

cmd/gc: don't generate algs for internal map types.

Fake types describing the internal structure of hashmaps are
generated for use by precise GC.

Generating hash and eq functions for these fake types slows down
the build and wastes space: the go tool binary size is 13MB
instead of 12MB, and the package size on amd64 is 48.7MB instead
of 45.3MB.

R=golang-dev, daniel.morsing, r, khr, rsc, iant
CC=golang-dev
https://golang.org/cl/13698043
This commit is contained in:
Rémy Oudompheng 2013-09-14 09:30:36 +02:00
parent 22e8f82e8d
commit 04c40c97c3
3 changed files with 6 additions and 0 deletions

View File

@ -141,6 +141,7 @@ struct Type
{
uchar etype;
uchar nointerface;
uchar noalg;
uchar chan;
uchar trecur; // to detect loops
uchar printed;

View File

@ -131,6 +131,7 @@ mapbucket(Type *t)
valtype = ptrto(valtype);
bucket = typ(TSTRUCT);
bucket->noalg = 1;
// The first field is: uint8 topbits[BUCKETSIZE].
// We don't need to encode it as GC doesn't care about it.
@ -192,6 +193,7 @@ hmap(Type *t)
bucket = mapbucket(t);
h = typ(TSTRUCT);
h->noalg = 1;
offset = widthint; // count
offset += 4; // flags

View File

@ -547,6 +547,9 @@ algtype1(Type *t, Type **bad)
if(bad)
*bad = T;
if(t->noalg)
return ANOEQ;
switch(t->etype) {
case TANY:
case TFORW: