From d3252a2db9b8e1b6cff26dd4d2721cedc91378dc Mon Sep 17 00:00:00 2001 From: Dave Cheney Date: Wed, 8 Apr 2015 02:01:55 +1000 Subject: [PATCH] cmd/internal/gc: fix race build (again) Add OGETG to the list of ignored operations. We don't instrument the runtime package, but calls to runtime.getg can appear in other packages, for example, after inlining runtime.LockOSThread. Change-Id: I8d6e91f1f3c8fd1302b596bdead42d588c059911 Reviewed-on: https://go-review.googlesource.com/8553 Reviewed-by: Dmitry Vyukov --- src/cmd/internal/gc/racewalk.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cmd/internal/gc/racewalk.go b/src/cmd/internal/gc/racewalk.go index 7ae1c55192..ec55501714 100644 --- a/src/cmd/internal/gc/racewalk.go +++ b/src/cmd/internal/gc/racewalk.go @@ -410,9 +410,6 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) { OLABEL: goto ret - case OGETG: - Yyerror("racewalk: OGETG can happen only in runtime which we don't instrument") - // does not require instrumentation case OPRINT, // don't bother instrumenting it OPRINTN, // don't bother instrumenting it @@ -428,6 +425,11 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) { ONONAME, OLITERAL, OSLICESTR, + // g is goroutine local so cannot race. Although we don't instrument + // the runtime package, through inlining the call to runtime.getg can + // appear in non runtime packages, for example, after inlining + // runtime.LockOSThread. + OGETG, // always preceded by bounds checking, avoid double instrumentation. OTYPESW: // ignored by code generation, do not instrument. goto ret -- 2.48.1