Commit 5f9a9433 authored by Rémy Oudompheng's avatar Rémy Oudompheng

cmd/gc: enable racewalk of HMUL nodes.

A HMUL node appears in some constant divisions, but
to observe a false negative in race detector the divisor must be
suitably chosen to make sure the only memory access is
done for HMUL.

R=dvyukov
CC=golang-dev
https://golang.org/cl/7935045
parent 24c2c88b
......@@ -241,6 +241,7 @@ racewalknode(Node **np, NodeList **init, int wr, int skip)
case OXOR:
case OSUB:
case OMUL:
case OHMUL:
case OEQ:
case ONE:
case OLT:
......@@ -379,19 +380,18 @@ racewalknode(Node **np, NodeList **init, int wr, int skip)
case OPARAM: // it appears only in fn->exit to copy heap params back
case OCLOSUREVAR:// immutable pointer to captured variable
case ODOTMETH: // either part of CALLMETH or CALLPART (lowered to PTRLIT)
goto ret;
// unimplemented
case OSLICESTR:
case OAPPEND:
case ODCL:
case OINDREG: // at this stage, only n(SP) nodes from nodarg
case ODCL: // declarations (without value) cannot be races
case ODCLCONST:
case ODCLTYPE:
case OLITERAL:
case OTYPE:
case ONONAME:
case OINDREG:
case OHMUL:
case OLITERAL:
case OSLICESTR: // always preceded by bounds checking, avoid double instrumentation.
goto ret;
// unimplemented
case OAPPEND:
goto ret;
}
......
......@@ -339,11 +339,11 @@ func TestRaceDiv(t *testing.T) {
}
func TestRaceDivConst(t *testing.T) {
var x, y, z int
var x, y, z uint32
ch := make(chan int, 2)
go func() {
x = y / 3
x = y / 3 // involves only a HMUL node
ch <- 1
}()
go func() {
......
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