Unions can break precise GC.
Update #5193.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/
8456043
#include "runtime.h"
#include "arch_GOARCH.h"
-static union {
+static struct {
Lock l;
- byte pad [CacheLineSize];
+ byte pad[CacheLineSize-sizeof(Lock)];
} locktab[57];
#define LOCK(addr) (&locktab[((uintptr)(addr)>>3)%nelem(locktab)].l)
// Prime to not correlate with any user patterns.
#define SEMTABLESZ 251
-union semtable
+struct semtable
{
SemaRoot;
- uint8 pad[CacheLineSize];
+ uint8 pad[CacheLineSize-sizeof(SemaRoot)];
};
#pragma dataflag 16 /* mark semtable as 'no pointers', hiding from garbage collector */
-static union semtable semtable[SEMTABLESZ];
+static struct semtable semtable[SEMTABLESZ];
static SemaRoot*
semroot(uint32 *addr)