From b046878018d188bca83579a5562c8c33a3339a5b Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 2 May 2017 11:02:53 -0700 Subject: [PATCH] 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 --- src/cmd/compile/internal/gc/racewalk.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) 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" -- 2.51.0