From: Josh Bleecher Snyder Date: Tue, 2 May 2017 18:02:53 +0000 (-0700) Subject: cmd/compile: don't generate race calls for zero-sized values X-Git-Tag: go1.10beta1~1344 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b046878018d188bca83579a5562c8c33a3339a5b;p=gostls13.git cmd/compile: don't generate race calls for zero-sized values One example of a heavily-used zero-size value is encoding/binary.BigEndian. Change-Id: I8e873c447e154ab2ca61b7315df774693891270c Reviewed-on: https://go-review.googlesource.com/59330 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Dmitry Vyukov --- diff --git a/src/cmd/compile/internal/gc/racewalk.go b/src/cmd/compile/internal/gc/racewalk.go index cfb803187c..b1c4f223ab 100644 --- a/src/cmd/compile/internal/gc/racewalk.go +++ b/src/cmd/compile/internal/gc/racewalk.go @@ -462,6 +462,15 @@ func callinstr(np **Node, init *Nodes, wr int, skip int) bool { return false } t := n.Type + // dowidth may not have been called for PEXTERN. + dowidth(t) + w := t.Width + if w == BADWIDTH { + Fatalf("instrument: %v badwidth", t) + } + if w == 0 { + return false // can't race on zero-sized things + } if isartificial(n) { return false } @@ -494,24 +503,12 @@ func callinstr(np **Node, init *Nodes, wr int, skip int) bool { if wr != 0 { name = "msanwrite" } - // dowidth may not have been called for PEXTERN. - dowidth(t) - w := t.Width - if w == BADWIDTH { - Fatalf("instrument: %v badwidth", t) - } f = mkcall(name, nil, init, uintptraddr(n), nodintconst(w)) } else if flag_race && (t.IsStruct() || t.IsArray()) { name := "racereadrange" if wr != 0 { name = "racewriterange" } - // dowidth may not have been called for PEXTERN. - dowidth(t) - w := t.Width - if w == BADWIDTH { - Fatalf("instrument: %v badwidth", t) - } f = mkcall(name, nil, init, uintptraddr(n), nodintconst(w)) } else if flag_race { name := "raceread"