diff options
author | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
---|---|---|
committer | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
commit | f154da9e12608589e8d5f0508f908a0c3e88a1bb (patch) | |
tree | f8255d51e10c6f1e0ed69702200b966c9556a431 /test/live.go | |
parent | 8d8329ed5dfb9622c82a9fbec6fd99a580f9c9f6 (diff) | |
download | golang-upstream/1.4.tar.gz |
Imported Upstream version 1.4upstream/1.4
Diffstat (limited to 'test/live.go')
-rw-r--r-- | test/live.go | 77 |
1 files changed, 40 insertions, 37 deletions
diff --git a/test/live.go b/test/live.go index b4cced47e..f15bb74ba 100644 --- a/test/live.go +++ b/test/live.go @@ -1,4 +1,4 @@ -// errorcheck -0 -l -live +// 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 @@ -118,7 +118,10 @@ var i9 interface{} func f9() bool { g8() x := i9 - return x != 99 + // using complex number in comparison so that + // there is always a convT2E, no matter what the + // interface rules are. + return x != 99.0i // ERROR "live at call to convT2E: x" } // liveness formerly confused by UNDEF followed by RET, @@ -138,7 +141,7 @@ var b bool // this used to have a spurious "live at entry to f11a: ~r0" func f11a() *int { - select { // ERROR "live at call to selectgo: autotmp" + select { // ERROR "live at call to newselect: autotmp" "live at call to selectgo: autotmp" case <-c: // ERROR "live at call to selectrecv: autotmp" return nil case <-c: // ERROR "live at call to selectrecv: autotmp" @@ -153,7 +156,7 @@ func f11b() *int { // get to the bottom of the function. // This used to have a spurious "live at call to printint: p". print(1) // nothing live here! - select { // ERROR "live at call to selectgo: autotmp" + select { // ERROR "live at call to newselect: autotmp" "live at call to selectgo: autotmp" case <-c: // ERROR "live at call to selectrecv: autotmp" return nil case <-c: // ERROR "live at call to selectrecv: autotmp" @@ -170,7 +173,7 @@ func f11c() *int { // Unlike previous, the cases in this select fall through, // so we can get to the println, so p is not dead. print(1) // ERROR "live at call to printint: p" - select { // ERROR "live at call to newselect: p" "live at call to selectgo: autotmp.* p" + select { // ERROR "live at call to newselect: autotmp.* p" "live at call to selectgo: autotmp.* p" case <-c: // ERROR "live at call to selectrecv: autotmp.* p" case <-c: // ERROR "live at call to selectrecv: autotmp.* p" } @@ -184,7 +187,7 @@ func f11c() *int { func f12() *int { if b { - select{} + select {} } else { return nil } @@ -215,7 +218,7 @@ func f15() { var x string _ = &x x = g15() // ERROR "live at call to g15: x" - print(x) // ERROR "live at call to printstring: x" + print(x) // ERROR "live at call to printstring: x" } func g15() string @@ -287,7 +290,7 @@ 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]+$" } @@ -348,21 +351,21 @@ func f25(b bool) { var x string _ = &x x = g15() // ERROR "live at call to g15: x" - print(x) // ERROR "live at call to printstring: x" + print(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(1,2,3) // 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(4,5,6) // ERROR "live at call to print26: autotmp_[0-9]+$" - print26(7,8,9) // 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]+$" println() } @@ -374,10 +377,10 @@ func print26(...interface{}) 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]+$" - 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]+$" println() } @@ -386,10 +389,10 @@ func f27(b bool) { 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 "live at call to deferproc: autotmp_[0-9]+$" "live at call to deferreturn: autotmp_[0-9]+$" } - defer call27(func() {x++}) // ERROR "live at call to deferproc: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to deferreturn: autotmp_[0-9]+ autotmp_[0-9]+$" "ambiguously live" - println() // ERROR "live at call to printnl: autotmp_[0-9]+ autotmp_[0-9]+$" + defer call27(func() { x++ }) // ERROR "live at call to deferproc: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to deferreturn: autotmp_[0-9]+ autotmp_[0-9]+$" "ambiguously live" + println() // 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 @@ -397,9 +400,9 @@ func f27defer(b bool) { func f27go(b bool) { x := 0 if b { - go call27(func() {x++}) // ERROR "live at call to new: &x" "live at call to newproc: &x$" + 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 new: &x" + go call27(func() { x++ }) // ERROR "live at call to newobject: &x" println() } @@ -412,11 +415,11 @@ var s1, s2, s3, s4, s5, s6, s7, s8, s9, s10 string func f28(b bool) { if b { - print(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]+$" + print(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]+$" } - print(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]+$" - print(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]+$" -} + print(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]+$" + print(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 @@ -461,10 +464,10 @@ func f31(b1, b2, b3 bool) { 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 new: autotmp_[0-9]+$" "live at call to convT2E: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to h31: autotmp_[0-9]+$" + h31("b") // ERROR "live at call to newobject: autotmp_[0-9]+$" "live at call to convT2E: autotmp_[0-9]+ autotmp_[0-9]+$" "live at call to h31: autotmp_[0-9]+$" } if b3 { - panic("asdf") // ERROR "live at call to convT2E: autotmp_[0-9]+$" "live at call to panic: autotmp_[0-9]+$" + panic("asdf") // ERROR "live at call to convT2E: autotmp_[0-9]+$" "live at call to gopanic: autotmp_[0-9]+$" } print(b3) } @@ -583,14 +586,16 @@ func f39a() (x []int) { } func f39b() (x [10]*int) { - x = [10]*int{new(int)} // ERROR "live at call to new: x" - println() // ERROR "live at call to printnl: x" + x = [10]*int{} + x[0] = new(int) // ERROR "live at call to newobject: x" + println() // ERROR "live at call to printnl: x" return x } func f39c() (x [10]*int) { - x = [10]*int{new(int)} // ERROR "live at call to new: x" - println() // ERROR "live at call to printnl: x" + x = [10]*int{} + x[0] = new(int) // ERROR "live at call to newobject: x" + println() // ERROR "live at call to printnl: x" return } @@ -602,9 +607,8 @@ type T40 struct { } func newT40() *T40 { - ret := T40{ // ERROR "live at call to makemap: &ret" - make(map[int]int), - } + ret := T40{} + ret.m = make(map[int]int) // ERROR "live at call to makemap: &ret" return &ret } @@ -615,9 +619,8 @@ func bad40() { } func good40() { - ret := T40{ // ERROR "live at call to makemap: ret" - make(map[int]int), - } + ret := T40{} + ret.m = make(map[int]int) // ERROR "live at call to makemap: ret" t := &ret println() // ERROR "live at call to printnl: ret" _ = t |