aboutsummaryrefslogtreecommitdiff
path: root/test/escape2.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2017-02-27 11:37:54 -0800
committerJosh Bleecher Snyder <josharian@gmail.com>2017-02-27 21:31:04 +0000
commit1e29cd8c2b560825494e6ae079a17d9f3201b73b (patch)
treeab37a1fe356959134b259a46a78e7ed7c7e10e97 /test/escape2.go
parent7b8f51188bd24746b7d0a624b2e9979a425745eb (diff)
downloadgo-1e29cd8c2b560825494e6ae079a17d9f3201b73b.tar.gz
go-1e29cd8c2b560825494e6ae079a17d9f3201b73b.zip
cmd/compile: ignore some dead code during escape analysis
This is the escape analysis analog of CL 37499. Fixes #12397 Fixes #16871 The only "moved to heap" decisions eliminated by this CL in std+cmd are: cmd/compile/internal/gc/const.go:1514: moved to heap: ac cmd/compile/internal/gc/const.go:1515: moved to heap: bd cmd/compile/internal/gc/const.go:1516: moved to heap: bc cmd/compile/internal/gc/const.go:1517: moved to heap: ad cmd/compile/internal/gc/const.go:1546: moved to heap: ac cmd/compile/internal/gc/const.go:1547: moved to heap: bd cmd/compile/internal/gc/const.go:1548: moved to heap: bc cmd/compile/internal/gc/const.go:1549: moved to heap: ad cmd/compile/internal/gc/const.go:1550: moved to heap: cc_plus cmd/compile/internal/gc/export.go:162: moved to heap: copy cmd/compile/internal/gc/mpfloat.go:66: moved to heap: b cmd/compile/internal/gc/mpfloat.go:97: moved to heap: b Change-Id: I0d420b69c84a41ba9968c394e8957910bab5edea Reviewed-on: https://go-review.googlesource.com/37508 Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'test/escape2.go')
-rw-r--r--test/escape2.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/test/escape2.go b/test/escape2.go
index 3490c29d3b..e10dbc2acc 100644
--- a/test/escape2.go
+++ b/test/escape2.go
@@ -1824,3 +1824,18 @@ func issue11387(x int) func() int {
copy(slice2, slice1)
return slice2[0]
}
+
+func issue12397(x, y int) { // ERROR "moved to heap: y$"
+ // x does not escape below, because all relevant code is dead.
+ if false {
+ gxx = &x
+ } else {
+ gxx = &y // ERROR "&y escapes to heap$"
+ }
+
+ if true {
+ gxx = &y // ERROR "&y escapes to heap$"
+ } else {
+ gxx = &x
+ }
+}