Commit 04c40c97 authored by Rémy Oudompheng's avatar Rémy Oudompheng

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
parent 22e8f82e
...@@ -141,6 +141,7 @@ struct Type ...@@ -141,6 +141,7 @@ struct Type
{ {
uchar etype; uchar etype;
uchar nointerface; uchar nointerface;
uchar noalg;
uchar chan; uchar chan;
uchar trecur; // to detect loops uchar trecur; // to detect loops
uchar printed; uchar printed;
......
...@@ -131,6 +131,7 @@ mapbucket(Type *t) ...@@ -131,6 +131,7 @@ mapbucket(Type *t)
valtype = ptrto(valtype); valtype = ptrto(valtype);
bucket = typ(TSTRUCT); bucket = typ(TSTRUCT);
bucket->noalg = 1;
// The first field is: uint8 topbits[BUCKETSIZE]. // The first field is: uint8 topbits[BUCKETSIZE].
// We don't need to encode it as GC doesn't care about it. // We don't need to encode it as GC doesn't care about it.
...@@ -192,6 +193,7 @@ hmap(Type *t) ...@@ -192,6 +193,7 @@ hmap(Type *t)
bucket = mapbucket(t); bucket = mapbucket(t);
h = typ(TSTRUCT); h = typ(TSTRUCT);
h->noalg = 1;
offset = widthint; // count offset = widthint; // count
offset += 4; // flags offset += 4; // flags
......
...@@ -547,6 +547,9 @@ algtype1(Type *t, Type **bad) ...@@ -547,6 +547,9 @@ algtype1(Type *t, Type **bad)
if(bad) if(bad)
*bad = T; *bad = T;
if(t->noalg)
return ANOEQ;
switch(t->etype) { switch(t->etype) {
case TANY: case TANY:
case TFORW: case TFORW:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment