]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix unsafe-point analysis with -N
authorAustin Clements <austin@google.com>
Tue, 22 May 2018 15:07:43 +0000 (11:07 -0400)
committerAustin Clements <austin@google.com>
Tue, 22 May 2018 15:26:32 +0000 (15:26 +0000)
Compiling without optimizations (-N) can result in write barrier
blocks that have been optimized away but not actually pruned from the
block set. Fix unsafe-point analysis to recognize and ignore these.

For #24543.

Change-Id: I2ca86fb1a0346214ec71d7d6c17b6a121857b01d
Reviewed-on: https://go-review.googlesource.com/114076
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/plive.go

index 7a953546dcfca941966673178bf410a724b06f97..f42094a0f5c043c55881468e7ab66dc92958fd74 100644 (file)
@@ -493,6 +493,12 @@ func (lv *Liveness) markUnsafePoints() {
 
        // Mark write barrier unsafe points.
        for _, wbBlock := range lv.f.WBLoads {
+               if wbBlock.Kind == ssa.BlockPlain && len(wbBlock.Values) == 0 {
+                       // The write barrier block was optimized away
+                       // but we haven't done dead block elimination.
+                       // (This can happen in -N mode.)
+                       continue
+               }
                // Check that we have the expected diamond shape.
                if len(wbBlock.Succs) != 2 {
                        lv.f.Fatalf("expected branch at write barrier block %v", wbBlock)