Commit cd0a8ed4 authored by Dmitry Vyukov's avatar Dmitry Vyukov Committed by Russ Cox

cmd/compile: add instrumentation of OKEY

Instrument operands of OKEY.
Also instrument OSLICESTR. Previously it was not needed
because of preceeding bounds checks (which were instrumented).
But the preceeding bounds checks have disappeared.

Change-Id: I3b0de213e23cbcf5b8ef800abeded5eeeb3f8287
Reviewed-on: https://go-review.googlesource.com/11417Reviewed-by: default avatarRuss Cox <rsc@golang.org>
parent f271f928
......@@ -299,8 +299,14 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) {
}
goto ret
case OSLICE, OSLICEARR, OSLICE3, OSLICE3ARR:
case OSLICE, OSLICEARR, OSLICE3, OSLICE3ARR, OSLICESTR:
racewalknode(&n.Left, init, 0, 0)
racewalknode(&n.Right, init, 0, 0)
goto ret
case OKEY:
racewalknode(&n.Left, init, 0, 0)
racewalknode(&n.Right, init, 0, 0)
goto ret
case OADDR:
......@@ -413,8 +419,7 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) {
OTYPE,
ONONAME,
OLITERAL,
OSLICESTR, // always preceded by bounds checking, avoid double instrumentation.
OTYPESW: // ignored by code generation, do not instrument.
OTYPESW: // ignored by code generation, do not instrument.
goto ret
}
......
......@@ -578,3 +578,15 @@ func TestRaceCompareString(t *testing.T) {
s1 = s2
<-c
}
func TestRaceSlice3(t *testing.T) {
done := make(chan bool)
x := make([]int, 10)
i := 2
go func() {
i = 3
done <- true
}()
_ = x[:1:i]
<-done
}
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