mirror of
https://github.com/golang/go
synced 2025-05-03 03:01:34 +00:00
.github
api
doc
lib
misc
src
test
abi
alias3.dir
arenas
asmhdr.dir
chan
closure3.dir
closure5.dir
codegen
ddd2.dir
dwarf
fixedbugs
import2.dir
import4.dir
interface
intrinsic.dir
ken
linkname.dir
method4.dir
retjmp.dir
runtime
stress
syntax
typeparam
uintptrescapes.dir
235.go
64bit.go
README.md
alg.go
alias.go
alias1.go
alias2.go
alias3.go
align.go
append.go
append1.go
args.go
armimm.go
asmhdr.go
assign.go
assign1.go
atomicload.go
bigalg.go
bigmap.go
blank.go
blank1.go
bom.go
bombad.go
bounds.go
cannotassign.go
chancap.go
chanlinear.go
char_lit.go
char_lit1.go
checkbce.go
clear.go
clearfat.go
closedchan.go
closure.go
closure1.go
closure2.go
closure3.go
closure4.go
closure5.go
closure6.go
closure7.go
cmp.go
cmp6.go
cmplx.go
cmplxdivide.c
cmplxdivide.go
cmplxdivide1.go
complit.go
complit1.go
compos.go
const.go
const1.go
const2.go
const3.go
const4.go
const5.go
const6.go
const7.go
const8.go
convT2X.go
convert.go
convert1.go
convert2.go
convert3.go
convert4.go
convinline.go
convlit.go
convlit1.go
copy.go
copy1.go
crlf.go
ddd.go
ddd1.go
ddd2.go
decl.go
declbad.go
defer.go
defererrcheck.go
deferfin.go
defernil.go
deferprint.go
deferprint.out
devirt.go
directive.go
directive2.go
divide.go
divmod.go
embedfunc.go
embedvers.go
empty.go
env.go
eof.go
eof1.go
escape.go
escape2.go
escape2n.go
escape3.go
escape4.go
escape5.go
escape_array.go
escape_calls.go
escape_closure.go
escape_field.go
escape_goto.go
escape_hash_maphash.go
escape_iface.go
escape_indir.go
escape_level.go
escape_map.go
escape_mutations.go
escape_param.go
escape_reflect.go
escape_runtime_atomic.go
escape_selfassign.go
escape_slice.go
escape_struct_param1.go
escape_struct_param2.go
escape_struct_return.go
escape_sync_atomic.go
escape_unsafe.go
fibo.go
finprofiled.go
float_lit.go
float_lit2.go
float_lit3.go
floatcmp.go
for.go
func.go
func1.go
func2.go
func3.go
func4.go
func5.go
func6.go
func7.go
func8.go
funcdup.go
funcdup2.go
fuse.go
gc.go
gc1.go
gc2.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go
helloworld.go
helloworld.out
if.go
import.go
import1.go
import2.go
import4.go
import5.go
import6.go
index.go
index0.go
index1.go
index2.go
indirect.go
indirect1.go
init.go
init1.go
initcomma.go
initexp.go
initialize.go
initializerr.go
initloop.go
inline.go
inline_big.go
inline_caller.go
inline_callers.go
inline_endian.go
inline_literal.go
inline_math_bits_rotate.go
inline_sync.go
inline_variadic.go
int_lit.go
intcvt.go
intrinsic.go
intrinsic_atomic.go
iota.go
label.go
label1.go
linkmain.go
linkmain_run.go
linkname.go
linkname3.go
linkobj.go
linkx.go
linkx_run.go
literal.go
literal2.go
live.go
live1.go
live2.go
live_regabi.go
live_uintptrkeepalive.go
loopbce.go
mainsig.go
makechan.go
makemap.go
makenew.go
makeslice.go
mallocfin.go
map.go
map1.go
mapclear.go
maplinear.go
maymorestack.go
mergemul.go
method.go
method1.go
method2.go
method3.go
method4.go
method5.go
method6.go
method7.go
named.go
named1.go
newinline.go
nil.go
nilcheck.go
nilptr.go
nilptr2.go
nilptr3.go
nilptr4.go
nilptr5.go
nilptr5_aix.go
nilptr5_wasm.go
nilptr_aix.go
noinit.go
nosplit.go
nowritebarrier.go
nul1.go
opt_branchlikely.go
parentype.go
peano.go
phiopt.go
print.go
print.out
printbig.go
printbig.out
prove.go
prove_constant_folding.go
prove_invert_loop_with_unused_iterators.go
range.go
range2.go
range3.go
range4.go
rangegen.go
recover.go
recover1.go
recover2.go
recover3.go
recover4.go
recover5.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
reflectmethod5.go
reflectmethod6.go
reflectmethod7.go
reflectmethod8.go
rename.go
rename1.go
reorder.go
reorder2.go
retjmp.go
return.go
rotate.go
rotate0.go
rotate1.go
rotate2.go
rotate3.go
rune.go
runtime.go
shift1.go
shift2.go
shift3.go
sieve.go
sigchld.go
sigchld.out
simassign.go
sizeof.go
slice3.go
slice3err.go
slicecap.go
sliceopt.go
solitaire.go
stack.go
stackobj.go
stackobj2.go
stackobj3.go
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch.go
switch2.go
switch3.go
switch4.go
switch5.go
switch6.go
switch7.go
tighten.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go
typeswitch.go
typeswitch1.go
typeswitch2.go
typeswitch2b.go
typeswitch3.go
uintptrescapes.go
uintptrescapes2.go
uintptrescapes3.go
uintptrkeepalive.go
undef.go
unsafe_slice_data.go
unsafe_string.go
unsafe_string_data.go
unsafebuiltins.go
used.go
utf.go
varerr.go
varinit.go
winbatch.go
writebarrier.go
zerodivide.go
zerosize.go
.gitattributes
.gitignore
CONTRIBUTING.md
LICENSE
PATENTS
README.md
SECURITY.md
VERSION
codereview.cfg
go.env
Most of the test cases in the test directory use the new go:build syntax already. Convert the rest. In general, try to place the build constraint line below the test directive comment in more places. For #41184. For #60268. Change-Id: I11c41a0642a8a26dc2eda1406da908645bbc005b Cq-Include-Trybots: luci.golang.try:gotip-linux-386-longtest,gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/536236 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
134 lines
2.0 KiB
Go
134 lines
2.0 KiB
Go
// 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() {
|
|
}
|