github.com/mh-cbon/go@v0.0.0-20160603070303-9e112a3fe4c0/test/phiopt.go (about) 1 // +build amd64 2 // errorcheck -0 -d=ssa/phiopt/debug=3 3 4 // Copyright 2016 The Go Authors. All rights reserved. 5 // Use of this source code is governed by a BSD-style 6 // license that can be found in the LICENSE file. 7 8 package main 9 10 //go:noinline 11 func f0(a bool) bool { 12 x := false 13 if a { 14 x = true 15 } else { 16 x = false 17 } 18 return x // ERROR "converted OpPhi to Copy$" 19 } 20 21 //go:noinline 22 func f1(a bool) bool { 23 x := false 24 if a { 25 x = false 26 } else { 27 x = true 28 } 29 return x // ERROR "converted OpPhi to Not$" 30 } 31 32 //go:noinline 33 func f2(a, b int) bool { 34 x := true 35 if a == b { 36 x = false 37 } 38 return x // ERROR "converted OpPhi to Not$" 39 } 40 41 //go:noinline 42 func f3(a, b int) bool { 43 x := false 44 if a == b { 45 x = true 46 } 47 return x // ERROR "converted OpPhi to Copy$" 48 } 49 50 //go:noinline 51 func f4(a, b bool) bool { 52 return a || b // ERROR "converted OpPhi to OrB$" 53 } 54 55 //go:noinline 56 func f5or(a int, b bool) bool { 57 var x bool 58 if a == 0 { 59 x = true 60 } else { 61 x = b 62 } 63 return x // ERROR "converted OpPhi to OrB$" 64 } 65 66 //go:noinline 67 func f5and(a int, b bool) bool { 68 var x bool 69 if a == 0 { 70 x = b 71 } else { 72 x = false 73 } 74 return x // ERROR "converted OpPhi to AndB$" 75 } 76 77 //go:noinline 78 func f6or(a int, b bool) bool { 79 x := b 80 if a == 0 { 81 // f6or has side effects so the OpPhi should not be converted. 82 x = f6or(a, b) 83 } 84 return x 85 } 86 87 //go:noinline 88 func f6and(a int, b bool) bool { 89 x := b 90 if a == 0 { 91 // f6and has side effects so the OpPhi should not be converted. 92 x = f6and(a, b) 93 } 94 return x 95 } 96 97 //go:noinline 98 func f7or(a bool, b bool) bool { 99 return a || b // ERROR "converted OpPhi to OrB$" 100 } 101 102 //go:noinline 103 func f7and(a bool, b bool) bool { 104 return a && b // ERROR "converted OpPhi to AndB$" 105 } 106 107 func main() { 108 }