Commit e440354c authored by Russ Cox's avatar Russ Cox

cmd/gc: turn race detector off for tail-call method wrapper functions

It was off in the old implementation (because there was no high-level
description of the function at all). Maybe some day the race detector
should be fixed to handle the wrapper and then enabled for it, but there's
no reason that has to be today.

R=golang-dev
TBR=dvyukov
CC=golang-dev
https://golang.org/cl/10037045
parent e50e4f7e
......@@ -268,6 +268,7 @@ struct Node
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;
......
......@@ -58,7 +58,7 @@ racewalk(Node *fn)
Node *nodpc;
char s[1024];
if(ispkgin(omit_pkgs, nelem(omit_pkgs)))
if(fn->norace || ispkgin(omit_pkgs, nelem(omit_pkgs)))
return;
if(!ispkgin(noinst_pkgs, nelem(noinst_pkgs))) {
......
......@@ -2574,6 +2574,8 @@ genwrapper(Type *rcvr, Type *method, Sym *newnam, int iface)
// generate call
if(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;
if(!isptr[dotlist[0].field->type->etype])
......
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