]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix missing markHiddenClosureDead in deadcode pass
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sat, 18 Sep 2021 16:46:47 +0000 (23:46 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Sun, 19 Sep 2021 02:43:09 +0000 (02:43 +0000)
CL 342350 fixed panic with dead hidden closures, by marking discarded
hidden closure as dead, and won't compile them. However, the fix is
incomplete. In case the "if" or "else" block end with panic or return
statement:

if true { return }
# All nodes starts from here are dead

the dead nodes must be processed with markHiddenClosureDead, but they
are not, causing the compiler crashes.

This CL adds that missing part.

Fixes #48459

Change-Id: Ibdd10a61fc6459d139bbf4a66b0893b523ac6b67
Reviewed-on: https://go-review.googlesource.com/c/go/+/350695
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/deadcode/deadcode.go
test/fixedbugs/issue48459.go [new file with mode: 0644]

index 3658c89912b85f52f30d3fcf0d94f2d9f6aa0617..65a48b68032af3680baa5caf2f93d11305240ffb 100644 (file)
@@ -117,6 +117,7 @@ func stmts(nn *ir.Nodes) {
                }
 
                if cut {
+                       ir.VisitList((*nn)[i+1:len(*nn)], markHiddenClosureDead)
                        *nn = (*nn)[:i+1]
                        break
                }
diff --git a/test/fixedbugs/issue48459.go b/test/fixedbugs/issue48459.go
new file mode 100644 (file)
index 0000000..ceb7788
--- /dev/null
@@ -0,0 +1,17 @@
+// compile
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func main() {
+       if true {
+               return
+       }
+
+       defer func() {
+               recover()
+       }()
+}