uchar dupok; // duplicate definitions ok (for func)
schar likely; // likeliness of if statement
uchar hasbreak; // has break statement
- uchar norace; // disable race detector for this function
uint esc; // EscXXX
int funcdepth;
Node *nodpc;
char s[1024];
- if(fn->norace || ispkgin(omit_pkgs, nelem(omit_pkgs)))
+ if(ispkgin(omit_pkgs, nelem(omit_pkgs)))
return;
if(!ispkgin(noinst_pkgs, nelem(noinst_pkgs))) {
dot = adddot(nod(OXDOT, this->left, newname(method->sym)));
// generate call
- if(isptr[rcvr->etype] && isptr[methodrcvr->etype] && method->embedded && !isifacemethod(method->type)) {
+ if(!flag_race && isptr[rcvr->etype] && isptr[methodrcvr->etype] && method->embedded && !isifacemethod(method->type)) {
// generate tail call: adjust pointer receiver and jump to embedded method.
- fn->norace = 1; // something about this body makes the race detector unhappy.
- // skip final .M
- dot = dot->left;
+ dot = dot->left; // skip final .M
if(!isptr[dotlist[0].field->type->etype])
dot = nod(OADDR, dot, N);
as = nod(OAS, this->left, nod(OCONVNOP, dot, N));