]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/gc: fix race build (again)
authorDave Cheney <dave@cheney.net>
Tue, 7 Apr 2015 16:01:55 +0000 (02:01 +1000)
committerDave Cheney <dave@cheney.net>
Tue, 7 Apr 2015 16:38:57 +0000 (16:38 +0000)
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 <dvyukov@google.com>
src/cmd/internal/gc/racewalk.go

index 7ae1c551920da23cdefb2db4a5e899244eb39afd..ec5550171484772f8c989ba2e6902a19eaea6cf2 100644 (file)
@@ -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