mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
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/11417 Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
f271f928d9
commit
cd0a8ed48a
|
@ -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
|
||||
}
|
||||
|
||||
|
|
12
src/runtime/race/testdata/slice_test.go
vendored
12
src/runtime/race/testdata/slice_test.go
vendored
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue