R=ken
DELTA=20 (19 added, 0 deleted, 1 changed)
OCL=24719
CL=24771
{
Node *n;
Sym *s;
+ Type *t;
long v;
Val val;
if(r->op != ODOT && r->op != ODOTPTR)
goto no;
walktype(r, Erv);
- v = n->xoffset;
+ v = r->xoffset;
+ goto yes;
+ }
+ if(strcmp(s->name, "Alignof") == 0) {
+ walktype(r, Erv);
+ if (r->type == T)
+ goto no;
+ // make struct { byte; T; }
+ t = typ(TSTRUCT);
+ t->type = typ(TFIELD);
+ t->type->type = types[TUINT8];
+ t->type->down = typ(TFIELD);
+ t->type->down->type = r->type;
+ // compute struct widths
+ dowidth(t);
+ // the offset of T is its required alignment
+ v = t->type->down->width;
goto yes;
}
"type unsafe.Pointer *any\n"
"func unsafe.Offsetof (? any) (? int)\n"
"func unsafe.Sizeof (? any) (? int)\n"
+ "func unsafe.Alignof (? any) (? int)\n"
"\n"
"$$\n";
type Pointer *any;
func Offsetof(any) int;
func Sizeof(any) int;
+func Alignof(any) int;