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
case OXOR:
case OSUB:
case OMUL:
+ case OHMUL:
case OEQ:
case ONE:
case OLT:
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;
}
}
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() {