]> Cypherpunks.ru repositories - gostls13.git/commitdiff
test: make SSA tests unconditional
authorKeith Randall <khr@golang.org>
Thu, 15 Sep 2016 20:04:50 +0000 (13:04 -0700)
committerKeith Randall <khr@golang.org>
Thu, 15 Sep 2016 20:21:26 +0000 (20:21 +0000)
Delete legacy backend tests, make SSA tests unconditional.

Next CL will remove _ssa from the file names.

Update #16357

Change-Id: I2a7f5dcbc69455f63b5e6e6b2725df26ab86c8dd
Reviewed-on: https://go-review.googlesource.com/29231
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

test/live.go [deleted file]
test/live_ssa.go
test/nilptr3.go [deleted file]
test/nilptr3_ssa.go

diff --git a/test/live.go b/test/live.go
deleted file mode 100644 (file)
index 6742e58..0000000
+++ /dev/null
@@ -1,656 +0,0 @@
-// +build !amd64,!arm,!amd64p32,!386,!arm64,!ppc64le,!mips64,!mips64le,!s390x
-// errorcheck -0 -l -live -wb=0
-
-// Copyright 2014 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.
-
-// liveness tests with inlining disabled.
-// see also live2.go.
-
-package main
-
-func printnl()
-
-//go:noescape
-func printpointer(**int)
-
-//go:noescape
-func printintpointer(*int)
-
-//go:noescape
-func printstringpointer(*string)
-
-//go:noescape
-func printstring(string)
-
-//go:noescape
-func printbytepointer(*byte)
-
-func printint(int)
-
-func f1() {
-       var x *int
-       printpointer(&x) // ERROR "live at call to printpointer: x$"
-       printpointer(&x) // ERROR "live at call to printpointer: x$"
-}
-
-func f2(b bool) {
-       if b {
-               printint(0) // nothing live here
-               return
-       }
-       var x *int
-       printpointer(&x) // ERROR "live at call to printpointer: x$"
-       printpointer(&x) // ERROR "live at call to printpointer: x$"
-}
-
-func f3(b bool) {
-       // Because x and y are ambiguously live, they appear
-       // live throughout the function, to avoid being poisoned
-       // in GODEBUG=gcdead=1 mode.
-
-       printint(0) // ERROR "live at call to printint: x y$"
-       if b == false {
-               printint(0) // ERROR "live at call to printint: x y$"
-               return
-       }
-
-       if b {
-               var x *int
-               printpointer(&x) // ERROR "live at call to printpointer: x y$"
-               printpointer(&x) // ERROR "live at call to printpointer: x y$"
-       } else {
-               var y *int
-               printpointer(&y) // ERROR "live at call to printpointer: x y$"
-               printpointer(&y) // ERROR "live at call to printpointer: x y$"
-       }
-       printint(0) // ERROR "f3: x \(type \*int\) is ambiguously live$" "f3: y \(type \*int\) is ambiguously live$" "live at call to printint: x y$"
-}
-
-// The old algorithm treated x as live on all code that
-// could flow to a return statement, so it included the
-// function entry and code above the declaration of x
-// but would not include an indirect use of x in an infinite loop.
-// Check that these cases are handled correctly.
-
-func f4(b1, b2 bool) { // x not live here
-       if b2 {
-               printint(0) // x not live here
-               return
-       }
-       var z **int
-       x := new(int)
-       *x = 42
-       z = &x
-       printint(**z) // ERROR "live at call to printint: x z$"
-       if b2 {
-               printint(1) // ERROR "live at call to printint: x$"
-               return
-       }
-       for {
-               printint(**z) // ERROR "live at call to printint: x z$"
-       }
-}
-
-func f5(b1 bool) {
-       var z **int
-       if b1 {
-               x := new(int)
-               *x = 42
-               z = &x
-       } else {
-               y := new(int)
-               *y = 54
-               z = &y
-       }
-       printint(**z) // ERROR "f5: x \(type \*int\) is ambiguously live$" "f5: y \(type \*int\) is ambiguously live$" "live at call to printint: x y$"
-}
-
-// confusion about the _ result used to cause spurious "live at entry to f6: _".
-
-func f6() (_, y string) {
-       y = "hello"
-       return
-}
-
-// confusion about addressed results used to cause "live at entry to f7: x".
-
-func f7() (x string) {
-       _ = &x
-       x = "hello"
-       return
-}
-
-// ignoring block returns used to cause "live at entry to f8: x, y".
-
-func f8() (x, y string) {
-       return g8()
-}
-
-func g8() (string, string)
-
-// ignoring block assignments used to cause "live at entry to f9: x"
-// issue 7205
-
-var i9 interface{}
-
-func f9() bool {
-       g8()
-       x := i9
-       return x != interface{}(99.0i) // ERROR "live at call to convT2E: x$"
-}
-
-// liveness formerly confused by UNDEF followed by RET,
-// leading to "live at entry to f10: ~r1" (unnamed result).
-
-func f10() string {
-       panic(1)
-}
-
-// liveness formerly confused by select, thinking runtime.selectgo
-// can return to next instruction; it always jumps elsewhere.
-// note that you have to use at least two cases in the select
-// to get a true select; smaller selects compile to optimized helper functions.
-
-var c chan *int
-var b bool
-
-// this used to have a spurious "live at entry to f11a: ~r0"
-func f11a() *int {
-       select { // ERROR "live at call to newselect: autotmp_[0-9]+$" "live at call to selectgo: autotmp_[0-9]+$"
-       case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+$"
-               return nil
-       case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+$"
-               return nil
-       }
-}
-
-func f11b() *int {
-       p := new(int)
-       if b {
-               // At this point p is dead: the code here cannot
-               // get to the bottom of the function.
-               // This used to have a spurious "live at call to printint: p".
-               printint(1) // nothing live here!
-               select {    // ERROR "live at call to newselect: autotmp_[0-9]+$" "live at call to selectgo: autotmp_[0-9]+$"
-               case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+$"
-                       return nil
-               case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+$"
-                       return nil
-               }
-       }
-       println(*p)
-       return nil
-}
-
-func f11c() *int {
-       p := new(int)
-       if b {
-               // Unlike previous, the cases in this select fall through,
-               // so we can get to the println, so p is not dead.
-               printint(1) // ERROR "live at call to printint: p$"
-               select {    // ERROR "live at call to newselect: autotmp_[0-9]+ p$" "live at call to selectgo: autotmp_[0-9]+ p$"
-               case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+ p$"
-               case <-c: // ERROR "live at call to selectrecv: autotmp_[0-9]+ p$"
-               }
-       }
-       println(*p)
-       return nil
-}
-
-// similarly, select{} does not fall through.
-// this used to have a spurious "live at entry to f12: ~r0".
-
-func f12() *int {
-       if b {
-               select {}
-       } else {
-               return nil
-       }
-}
-
-// incorrectly placed VARDEF annotations can cause missing liveness annotations.
-// this used to be missing the fact that s is live during the call to g13 (because it is
-// needed for the call to h13).
-
-func f13() {
-       s := "hello"
-       s = h13(s, g13(s)) // ERROR "live at call to g13: s$"
-}
-
-func g13(string) string
-func h13(string, string) string
-
-// more incorrectly placed VARDEF.
-
-func f14() {
-       x := g14()
-       printstringpointer(&x) // ERROR "live at call to printstringpointer: x$"
-}
-
-func g14() string
-
-func f15() {
-       var x string
-       _ = &x
-       x = g15()      // ERROR "live at call to g15: x$"
-       printstring(x) // ERROR "live at call to printstring: x$"
-}
-
-func g15() string
-
-// Checking that various temporaries do not persist or cause
-// ambiguously live values that must be zeroed.
-// The exact temporary names are inconsequential but we are
-// trying to check that there is only one at any given site,
-// and also that none show up in "ambiguously live" messages.
-
-var m map[string]int
-
-func f16() {
-       if b {
-               delete(m, "hi") // ERROR "live at call to mapdelete: autotmp_[0-9]+$"
-       }
-       delete(m, "hi") // ERROR "live at call to mapdelete: autotmp_[0-9]+$"
-       delete(m, "hi") // ERROR "live at call to mapdelete: autotmp_[0-9]+$"
-}
-
-var m2s map[string]*byte
-var m2 map[[2]string]*byte
-var x2 [2]string
-var bp *byte
-
-func f17a() {
-       // value temporary only
-       if b {
-               m2[x2] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-       }
-       m2[x2] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-       m2[x2] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-}
-
-func f17b() {
-       // key temporary only
-       if b {
-               m2s["x"] = bp // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-       }
-       m2s["x"] = bp // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-       m2s["x"] = bp // ERROR "live at call to mapassign1: autotmp_[0-9]+$"
-}
-
-func f17c() {
-       // key and value temporaries
-       if b {
-               m2s["x"] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-       }
-       m2s["x"] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-       m2s["x"] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-}
-
-func g18() [2]string
-
-func f18() {
-       // key temporary for mapaccess.
-       // temporary introduced by orderexpr.
-       var z *byte
-       if b {
-               z = m2[g18()] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       }
-       z = m2[g18()] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       z = m2[g18()] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       printbytepointer(z)
-}
-
-var ch chan *byte
-
-func f19() {
-       // dest temporary for channel receive.
-       var z *byte
-
-       if b {
-               z = <-ch // ERROR "live at call to chanrecv1: autotmp_[0-9]+$"
-       }
-       z = <-ch // ERROR "live at call to chanrecv1: autotmp_[0-9]+$"
-       z = <-ch // ERROR "live at call to chanrecv1: autotmp_[0-9]+$"
-       printbytepointer(z)
-}
-
-func f20() {
-       // src temporary for channel send
-       if b {
-               ch <- nil // ERROR "live at call to chansend1: autotmp_[0-9]+$"
-       }
-       ch <- nil // ERROR "live at call to chansend1: autotmp_[0-9]+$"
-       ch <- nil // ERROR "live at call to chansend1: autotmp_[0-9]+$"
-}
-
-func f21() {
-       // key temporary for mapaccess using array literal key.
-       var z *byte
-       if b {
-               z = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       }
-       z = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       z = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-       printbytepointer(z)
-}
-
-func f23() {
-       // key temporary for two-result map access using array literal key.
-       var z *byte
-       var ok bool
-       if b {
-               z, ok = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess2: autotmp_[0-9]+$"
-       }
-       z, ok = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess2: autotmp_[0-9]+$"
-       z, ok = m2[[2]string{"x", "y"}] // ERROR "live at call to mapaccess2: autotmp_[0-9]+$"
-       printbytepointer(z)
-       print(ok)
-}
-
-func f24() {
-       // key temporary for map access using array literal key.
-       // value temporary too.
-       if b {
-               m2[[2]string{"x", "y"}] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-       }
-       m2[[2]string{"x", "y"}] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-       m2[[2]string{"x", "y"}] = nil // ERROR "live at call to mapassign1: autotmp_[0-9]+ autotmp_[0-9]+$"
-}
-
-// defer should not cause spurious ambiguously live variables
-
-func f25(b bool) {
-       defer g25()
-       if b {
-               return
-       }
-       var x string
-       _ = &x
-       x = g15()      // ERROR "live at call to g15: x$"
-       printstring(x) // ERROR "live at call to printstring: x$"
-} // ERROR "live at call to deferreturn: x$"
-
-func g25()
-
-// non-escaping ... slices passed to function call should die on return,
-// so that the temporaries do not stack and do not cause ambiguously
-// live variables.
-
-func f26(b bool) {
-       if b {
-               print26((*int)(nil), (*int)(nil), (*int)(nil)) // ERROR "live at call to print26: autotmp_[0-9]+$"
-       }
-       print26((*int)(nil), (*int)(nil), (*int)(nil)) // ERROR "live at call to print26: autotmp_[0-9]+$"
-       print26((*int)(nil), (*int)(nil), (*int)(nil)) // ERROR "live at call to print26: autotmp_[0-9]+$"
-       printnl()
-}
-
-//go:noescape
-func print26(...interface{})
-
-// non-escaping closures passed to function call should die on return
-
-func f27(b bool) {
-       x := 0
-       if b {
-               call27(func() { x++ }) // ERROR "live at call to call27: autotmp_[0-9]+$"
-       }
-       call27(func() { x++ }) // ERROR "live at call to call27: autotmp_[0-9]+$"
-       call27(func() { x++ }) // ERROR "live at call to call27: autotmp_[0-9]+$"
-       printnl()
-}
-
-// but defer does escape to later execution in the function
-
-func f27defer(b bool) {
-       x := 0
-       if b {
-               defer call27(func() { x++ }) // ERROR "live at call to deferproc: autotmp_[0-9]+$" "live at call to deferreturn: autotmp_[0-9]+$"
-       }
-       defer call27(func() { x++ }) // ERROR "f27defer: autotmp_[0-9]+ \(type struct { F uintptr; x \*int }\) is ambiguously live$" "live at call to deferproc: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to deferreturn: autotmp_[0-9]+ autotmp_[0-9]+$"
-       printnl()                    // ERROR "live at call to printnl: autotmp_[0-9]+ autotmp_[0-9]+$"
-} // ERROR "live at call to deferreturn: autotmp_[0-9]+ autotmp_[0-9]+$"
-
-// and newproc (go) escapes to the heap
-
-func f27go(b bool) {
-       x := 0
-       if b {
-               go call27(func() { x++ }) // ERROR "live at call to newobject: &x$" "live at call to newproc: &x$"
-       }
-       go call27(func() { x++ }) // ERROR "live at call to newobject: &x$"
-       printnl()
-}
-
-//go:noescape
-func call27(func())
-
-// concatstring slice should die on return
-
-var s1, s2, s3, s4, s5, s6, s7, s8, s9, s10 string
-
-func f28(b bool) {
-       if b {
-               printstring(s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10) // ERROR "live at call to concatstrings: autotmp_[0-9]+$" "live at call to printstring: autotmp_[0-9]+$"
-       }
-       printstring(s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10) // ERROR "live at call to concatstrings: autotmp_[0-9]+$" "live at call to printstring: autotmp_[0-9]+$"
-       printstring(s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10) // ERROR "live at call to concatstrings: autotmp_[0-9]+$" "live at call to printstring: autotmp_[0-9]+$"
-}
-
-// map iterator should die on end of range loop
-
-func f29(b bool) {
-       if b {
-               for k := range m { // ERROR "live at call to mapiterinit: autotmp_[0-9]+$" "live at call to mapiternext: autotmp_[0-9]+$"
-                       printstring(k) // ERROR "live at call to printstring: autotmp_[0-9]+$"
-               }
-       }
-       for k := range m { // ERROR "live at call to mapiterinit: autotmp_[0-9]+$" "live at call to mapiternext: autotmp_[0-9]+$"
-               printstring(k) // ERROR "live at call to printstring: autotmp_[0-9]+$"
-       }
-       for k := range m { // ERROR "live at call to mapiterinit: autotmp_[0-9]+$" "live at call to mapiternext: autotmp_[0-9]+$"
-               printstring(k) // ERROR "live at call to printstring: autotmp_[0-9]+$"
-       }
-}
-
-// copy of array of pointers should die at end of range loop
-
-var ptrarr [10]*int
-
-func f30(b bool) {
-       // two live temps during print(p):
-       // the copy of ptrarr and the internal iterator pointer.
-       if b {
-               for _, p := range ptrarr {
-                       printintpointer(p) // ERROR "live at call to printintpointer: autotmp_[0-9]+ autotmp_[0-9]+$"
-               }
-       }
-       for _, p := range ptrarr {
-               printintpointer(p) // ERROR "live at call to printintpointer: autotmp_[0-9]+ autotmp_[0-9]+$"
-       }
-       for _, p := range ptrarr {
-               printintpointer(p) // ERROR "live at call to printintpointer: autotmp_[0-9]+ autotmp_[0-9]+$"
-       }
-}
-
-// conversion to interface should not leave temporary behind
-
-func f31(b1, b2, b3 bool) {
-       if b1 {
-               g31("a") // ERROR "live at call to convT2E: autotmp_[0-9]+$" "live at call to g31: autotmp_[0-9]+$"
-       }
-       if b2 {
-               h31("b") // ERROR "live at call to convT2E: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to h31: autotmp_[0-9]+$" "live at call to newobject: autotmp_[0-9]+$"
-       }
-       if b3 {
-               panic("asdf") // ERROR "live at call to convT2E: autotmp_[0-9]+$" "live at call to gopanic: autotmp_[0-9]+$"
-       }
-       print(b3)
-}
-
-func g31(interface{})
-func h31(...interface{})
-
-// non-escaping partial functions passed to function call should die on return
-
-type T32 int
-
-func (t *T32) Inc() { // ERROR "live at entry to \(\*T32\).Inc: t$"
-       *t++
-}
-
-var t32 T32
-
-func f32(b bool) {
-       if b {
-               call32(t32.Inc) // ERROR "live at call to call32: autotmp_[0-9]+$"
-       }
-       call32(t32.Inc) // ERROR "live at call to call32: autotmp_[0-9]+$"
-       call32(t32.Inc) // ERROR "live at call to call32: autotmp_[0-9]+$"
-}
-
-//go:noescape
-func call32(func())
-
-// temporaries introduced during if conditions and && || expressions
-// should die once the condition has been acted upon.
-
-var m33 map[interface{}]int
-
-func f33() {
-       if m33[nil] == 0 { // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-               printnl()
-               return
-       } else {
-               printnl()
-       }
-       printnl()
-}
-
-func f34() {
-       if m33[nil] == 0 { // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-               printnl()
-               return
-       }
-       printnl()
-}
-
-func f35() {
-       if m33[nil] == 0 && m33[nil] == 0 { // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-               printnl()
-               return
-       }
-       printnl()
-}
-
-func f36() {
-       if m33[nil] == 0 || m33[nil] == 0 { // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-               printnl()
-               return
-       }
-       printnl()
-}
-
-func f37() {
-       if (m33[nil] == 0 || m33[nil] == 0) && m33[nil] == 0 { // ERROR "live at call to mapaccess1: autotmp_[0-9]+$"
-               printnl()
-               return
-       }
-       printnl()
-}
-
-// select temps should disappear in the case bodies
-
-var c38 chan string
-
-func fc38() chan string
-func fi38(int) *string
-func fb38() *bool
-
-func f38(b bool) {
-       // we don't care what temps are printed on the lines with output.
-       // we care that the println lines have no live variables
-       // and therefore no output.
-       if b {
-               select { // ERROR "live at call to newselect: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to selectgo: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$"
-               case <-fc38(): // ERROR "live at call to selectrecv: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$"
-                       printnl()
-               case fc38() <- *fi38(1): // ERROR "live at call to fc38: autotmp_[0-9]+$" "live at call to fi38: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to selectsend: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$"
-                       printnl()
-               case *fi38(2) = <-fc38(): // ERROR "live at call to fc38: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to fi38: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to selectrecv: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$"
-                       printnl()
-               case *fi38(3), *fb38() = <-fc38(): // ERROR "live at call to fb38: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to fc38: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to fi38: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to selectrecv2: autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+ autotmp_[0-9]+$"
-                       printnl()
-               }
-               printnl()
-       }
-       printnl()
-}
-
-// issue 8097: mishandling of x = x during return.
-
-func f39() (x []int) {
-       x = []int{1}
-       printnl() // ERROR "live at call to printnl: x$"
-       return x
-}
-
-func f39a() (x []int) {
-       x = []int{1}
-       printnl() // ERROR "live at call to printnl: x$"
-       return
-}
-
-func f39b() (x [10]*int) {
-       x = [10]*int{}
-       x[0] = new(int) // ERROR "live at call to newobject: x$"
-       printnl()       // ERROR "live at call to printnl: x$"
-       return x
-}
-
-func f39c() (x [10]*int) {
-       x = [10]*int{}
-       x[0] = new(int) // ERROR "live at call to newobject: x$"
-       printnl()       // ERROR "live at call to printnl: x$"
-       return
-}
-
-// issue 8142: lost 'addrtaken' bit on inlined variables.
-// no inlining in this test, so just checking that non-inlined works.
-
-type T40 struct {
-       m map[int]int
-}
-
-func newT40() *T40 {
-       ret := T40{}
-       ret.m = make(map[int]int) // ERROR "live at call to makemap: &ret$"
-       return &ret
-}
-
-func bad40() {
-       t := newT40()
-       _ = t
-       printnl()
-}
-
-func good40() {
-       ret := T40{}
-       ret.m = make(map[int]int) // ERROR "live at call to makemap: autotmp_[0-9]+ ret$"
-       t := &ret
-       printnl() // ERROR "live at call to printnl: autotmp_[0-9]+ ret$"
-       _ = t
-}
-
-func ddd1(x, y *int) { // ERROR "live at entry to ddd1: x y$"
-       ddd2(x, y) // ERROR "live at call to ddd2: x y autotmp_[0-9]+$"
-       printnl()  // ERROR "live at call to printnl: x y$"
-       // Note: no autotmp live at printnl.  See issue 16996.
-}
-func ddd2(a ...*int) { // ERROR "live at entry to ddd2: a$"
-       sink = a[0]
-}
-
-var sink *int
index b74ae1539141a48fc30ad567cefa5753c19109b4..373b4e9c2fccc0f9d1d678a3dfc69050c08117ce 100644 (file)
@@ -1,4 +1,3 @@
-// +build amd64 arm amd64p32 386 arm64 mips64 mips64le s390x
 // errorcheck -0 -l -live -wb=0
 
 // Copyright 2014 The Go Authors. All rights reserved.
diff --git a/test/nilptr3.go b/test/nilptr3.go
deleted file mode 100644 (file)
index 73e0743..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-// errorcheck -0 -d=nil
-// Fails on ppc64x because of incomplete optimization.
-// See issues 9058.
-// Same reason for mips64x and s390x.
-// +build !ppc64,!ppc64le,!mips64,!mips64le,!amd64,!s390x,!arm,!amd64p32,!386,!arm64
-
-// Copyright 2013 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.
-
-// Test that nil checks are removed.
-// Optimization is enabled.
-
-package p
-
-type Struct struct {
-       X int
-       Y float64
-}
-
-type BigStruct struct {
-       X int
-       Y float64
-       A [1 << 20]int
-       Z string
-}
-
-type Empty struct {
-}
-
-type Empty1 struct {
-       Empty
-}
-
-var (
-       intp       *int
-       arrayp     *[10]int
-       array0p    *[0]int
-       bigarrayp  *[1 << 26]int
-       structp    *Struct
-       bigstructp *BigStruct
-       emptyp     *Empty
-       empty1p    *Empty1
-)
-
-func f1() {
-       _ = *intp // ERROR "generated nil check"
-
-       // This one should be removed but the block copy needs
-       // to be turned into its own pseudo-op in order to see
-       // the indirect.
-       _ = *arrayp // ERROR "generated nil check"
-
-       // 0-byte indirect doesn't suffice.
-       // we don't registerize globals, so there are no removed repeated nil checks.
-       _ = *array0p // ERROR "generated nil check"
-       _ = *array0p // ERROR "generated nil check"
-
-       _ = *intp    // ERROR "generated nil check"
-       _ = *arrayp  // ERROR "generated nil check"
-       _ = *structp // ERROR "generated nil check"
-       _ = *emptyp  // ERROR "generated nil check"
-       _ = *arrayp  // ERROR "generated nil check"
-}
-
-func f2() {
-       var (
-               intp       *int
-               arrayp     *[10]int
-               array0p    *[0]int
-               bigarrayp  *[1 << 20]int
-               structp    *Struct
-               bigstructp *BigStruct
-               emptyp     *Empty
-               empty1p    *Empty1
-       )
-
-       _ = *intp       // ERROR "generated nil check"
-       _ = *arrayp     // ERROR "generated nil check"
-       _ = *array0p    // ERROR "generated nil check"
-       _ = *array0p    // ERROR "removed repeated nil check"
-       _ = *intp       // ERROR "removed repeated nil check"
-       _ = *arrayp     // ERROR "removed repeated nil check"
-       _ = *structp    // ERROR "generated nil check"
-       _ = *emptyp     // ERROR "generated nil check"
-       _ = *arrayp     // ERROR "removed repeated nil check"
-       _ = *bigarrayp  // ERROR "generated nil check" ARM removed nil check before indirect!!
-       _ = *bigstructp // ERROR "generated nil check"
-       _ = *empty1p    // ERROR "generated nil check"
-}
-
-func fx10k() *[10000]int
-
-var b bool
-
-func f3(x *[10000]int) {
-       // Using a huge type and huge offsets so the compiler
-       // does not expect the memory hardware to fault.
-       _ = x[9999] // ERROR "generated nil check"
-
-       for {
-               if x[9999] != 0 { // ERROR "generated nil check"
-                       break
-               }
-       }
-
-       x = fx10k()
-       _ = x[9999] // ERROR "generated nil check"
-       if b {
-               _ = x[9999] // ERROR "removed repeated nil check"
-       } else {
-               _ = x[9999] // ERROR "removed repeated nil check"
-       }
-       _ = x[9999] // ERROR "generated nil check"
-
-       x = fx10k()
-       if b {
-               _ = x[9999] // ERROR "generated nil check"
-       } else {
-               _ = x[9999] // ERROR "generated nil check"
-       }
-       _ = x[9999] // ERROR "generated nil check"
-
-       fx10k()
-       // This one is a bit redundant, if we figured out that
-       // x wasn't going to change across the function call.
-       // But it's a little complex to do and in practice doesn't
-       // matter enough.
-       _ = x[9999] // ERROR "generated nil check"
-}
-
-func f3a() {
-       x := fx10k()
-       y := fx10k()
-       z := fx10k()
-       _ = &x[9] // ERROR "generated nil check"
-       y = z
-       _ = &x[9] // ERROR "removed repeated nil check"
-       x = y
-       _ = &x[9] // ERROR "generated nil check"
-}
-
-func f3b() {
-       x := fx10k()
-       y := fx10k()
-       _ = &x[9] // ERROR "generated nil check"
-       y = x
-       _ = &x[9] // ERROR "removed repeated nil check"
-       x = y
-       _ = &x[9] // ERROR "removed repeated nil check"
-}
-
-func fx10() *[10]int
-
-func f4(x *[10]int) {
-       // Most of these have no checks because a real memory reference follows,
-       // and the offset is small enough that if x is nil, the address will still be
-       // in the first unmapped page of memory.
-
-       _ = x[9] // ERROR "removed nil check before indirect"
-
-       for {
-               if x[9] != 0 { // ERROR "removed nil check before indirect"
-                       break
-               }
-       }
-
-       x = fx10()
-       _ = x[9] // ERROR "removed nil check before indirect"
-       if b {
-               _ = x[9] // ERROR "removed nil check before indirect"
-       } else {
-               _ = x[9] // ERROR "removed nil check before indirect"
-       }
-       _ = x[9] // ERROR "removed nil check before indirect"
-
-       x = fx10()
-       if b {
-               _ = x[9] // ERROR "removed nil check before indirect"
-       } else {
-               _ = &x[9] // ERROR "generated nil check"
-       }
-       _ = x[9] // ERROR "removed nil check before indirect"
-
-       fx10()
-       _ = x[9] // ERROR "removed nil check before indirect"
-
-       x = fx10()
-       y := fx10()
-       _ = &x[9] // ERROR "generated nil check"
-       y = x
-       _ = &x[9] // ERROR "removed repeated nil check"
-       x = y
-       _ = &x[9] // ERROR "removed repeated nil check"
-}
-
-func m1(m map[int][80]byte) byte {
-       v := m[3] // ERROR "removed nil check"
-       return v[5]
-}
-func m2(m map[int][800]byte) byte {
-       v := m[3] // ERROR "removed nil check"
-       return v[5]
-}
-func m3(m map[int][80]byte) (byte, bool) {
-       v, ok := m[3] // ERROR "removed nil check"
-       return v[5], ok
-}
-func m4(m map[int][800]byte) (byte, bool) {
-       v, ok := m[3] // ERROR "removed nil check"
-       return v[5], ok
-}
-func p1() byte {
-       p := new([100]byte)
-       return p[5] // ERROR "removed nil check"
-}
-
-// make sure not to do nil check for access of PAUTOHEAP
-//go:noinline
-func (p *Struct) m() {}
-func c1() {
-       var x Struct
-       func() { x.m() }() // ERROR "removed nil check"
-}
index a57418e4af9be2ce764c3bdf30f2eb056f98beae..a97873b97c5ccfba5eadf204995f916f33040039 100644 (file)
@@ -1,5 +1,4 @@
 // errorcheck -0 -d=nil
-// +build amd64 arm amd64p32 386 arm64 mips64 mips64le ppc64le s390x
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style