]> Cypherpunks repositories - gostls13.git/commit
runtime: remove type-punning for Type.gc[0], gc[1]
authorRuss Cox <rsc@golang.org>
Tue, 7 Oct 2014 15:06:51 +0000 (11:06 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 7 Oct 2014 15:06:51 +0000 (11:06 -0400)
commit18172c42ff48611df564e5af8bf00515bbac612a
treeef248fd6221698fa640c525d68be3afa0583b31b
parentf739b7750853f2d620c78eca9fc14c32e48a14d5
runtime: remove type-punning for Type.gc[0], gc[1]

Depending on flags&KindGCProg,
gc[0] and gc[1] are either pointers or inlined bitmap bits.
That's not compatible with a precise garbage collector:
it needs to be always pointers or never pointers.

Change the inlined bitmap case to store a pointer to an
out-of-line bitmap in gc[0]. The out-of-line bitmaps are
dedup'ed, so that for example all pointer types share the
same out-of-line bitmap.

Fixes #8864.

LGTM=r
R=golang-codereviews, dvyukov, r
CC=golang-codereviews, iant, khr, rlh
https://golang.org/cl/155820043
src/cmd/gc/reflect.c
src/cmd/ld/decodesym.c
src/reflect/type.go
src/runtime/malloc.go
src/runtime/type.h