// errorcheck -0 -d=ssa/phiopt/debug=3 //go:build amd64 || s390x || arm64 // Copyright 2016 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 //go:noinline func f0(a bool) bool { x := false if a { x = true } else { x = false } return x // ERROR "converted OpPhi to Copy$" } //go:noinline func f1(a bool) bool { x := false if a { x = false } else { x = true } return x // ERROR "converted OpPhi to Not$" } //go:noinline func f2(a, b int) bool { x := true if a == b { x = false } return x // ERROR "converted OpPhi to Not$" } //go:noinline func f3(a, b int) bool { x := false if a == b { x = true } return x // ERROR "converted OpPhi to Copy$" } //go:noinline func f4(a, b bool) bool { return a || b // ERROR "converted OpPhi to OrB$" } //go:noinline func f5or(a int, b bool) bool { var x bool if a == 0 { x = true } else { x = b } return x // ERROR "converted OpPhi to OrB$" } //go:noinline func f5and(a int, b bool) bool { var x bool if a == 0 { x = b } else { x = false } return x // ERROR "converted OpPhi to AndB$" } //go:noinline func f6or(a int, b bool) bool { x := b if a == 0 { // f6or has side effects so the OpPhi should not be converted. x = f6or(a, b) } return x } //go:noinline func f6and(a int, b bool) bool { x := b if a == 0 { // f6and has side effects so the OpPhi should not be converted. x = f6and(a, b) } return x } //go:noinline func f7or(a bool, b bool) bool { return a || b // ERROR "converted OpPhi to OrB$" } //go:noinline func f7and(a bool, b bool) bool { return a && b // ERROR "converted OpPhi to AndB$" } //go:noinline func f8(s string) (string, bool) { neg := false if s[0] == '-' { // ERROR "converted OpPhi to Copy$" neg = true s = s[1:] } return s, neg } var d int //go:noinline func f9(a, b int) bool { c := false if a < 0 { // ERROR "converted OpPhi to Copy$" if b < 0 { d = d + 1 } c = true } return c } func main() { }