1
0
mirror of https://github.com/golang/go synced 2024-11-17 16:14:42 -07:00
go/test
Matthew Dempsky a9831633be cmd/compile: update escape analysis tests for newescape
The new escape analysis implementation tries to emit debugging
diagnostics that are compatible with the existing implementation, but
there's a handful of cases that are easier to handle by updating the
test expectations instead.

For regress tests that need updating, the original file is copied to
oldescapeXXX.go.go with -newescape=false added to the //errorcheck
line, while the file is updated in place with -newescape=true and new
test requirements.

Notable test changes:

1) escape_because.go looks for a lot of detailed internal debugging
messages that are fairly particular to how esc.go works and that I
haven't attempted to port over to escape.go yet.

2) There are a lot of "leaking param: x to result ~r1 level=-1"
messages for code like

    func(p *int) *T { return &T{p} }

that were simply wrong. Here &T must be heap allocated unconditionally
(because it's being returned); and since p is stored into it, p
escapes unconditionally too. esc.go incorrectly reports that p escapes
conditionally only if the returned pointer escaped.

3) esc.go used to print each "leaking param" analysis result as it
discovered them, which could lead to redundant messages (e.g., that a
param leaks at level=0 and level=1). escape.go instead prints
everything at the end, once it knows the shortest path to each sink.

4) esc.go didn't precisely model direct-interface types, resulting in
some values unnecessarily escaping to the heap when stored into
non-escaping interface values.

5) For functions written in assembly, esc.go only printed "does not
escape" messages, whereas escape.go prints "does not escape" or
"leaking param" as appropriate, consistent with the behavior for
functions written in Go.

6) 12 tests included "BAD" annotations identifying cases where esc.go
was unnecessarily heap allocating something. These are all fixed by
escape.go.

Updates #23109.

Change-Id: Iabc9eb14c94c9cadde3b183478d1fd54f013502f
Reviewed-on: https://go-review.googlesource.com/c/go/+/170447
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
2019-04-16 16:20:39 +00:00
..
alias3.dir
bench test/bench/go1: add go.mod file 2019-03-06 18:53:12 +00:00
chan test/chan: fix broken link to Squinting at Power Series 2019-02-06 20:54:16 +00:00
closure3.dir cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
codegen cmd/compile: handle new panicindex/slice names in optimizations 2019-04-03 21:24:17 +00:00
ddd2.dir
dwarf
fixedbugs cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
import2.dir
import4.dir
interface
intrinsic.dir
ken
linkname.dir cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
method4.dir
oldescape_linkname.dir cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
retjmp.dir
stress
syntax
uintptrescapes.dir
64bit.go
235.go
alg.go
alias1.go
alias2.go
alias3.go
alias.go
align.go
append1.go
append.go
args.go
armimm.go
assign1.go
assign.go
atomicload.go
bigalg.go
bigmap.go
blank1.go
blank.go
bom.go
bombad.go
bounds.go
chancap.go runtime: handle 64bits addresses for AIX 2018-11-26 14:06:28 +00:00
chanlinear.go
char_lit1.go
char_lit.go
checkbce.go cmd/compile: fix ordering for short-circuiting ops 2019-03-06 20:04:07 +00:00
clearfat.go
closedchan.go
closure1.go
closure2.go
closure3.go all: fix a bunch of misspellings 2018-10-06 15:40:03 +00:00
closure4.go
closure.go
cmp6.go
cmp.go
cmplx.go cmd/compile: rewrite f(g()) for multi-value g() during typecheck 2019-03-14 21:00:20 +00:00
cmplxdivide1.go
cmplxdivide.c
cmplxdivide.go
complit1.go
complit.go
compos.go
const1.go cmd/compile: fix ICE from invalid operations on float/complex constants 2019-03-28 17:46:55 +00:00
const2.go
const3.go
const4.go
const5.go
const6.go
const.go
convert1.go
convert2.go
convert3.go
convert.go
convlit1.go
convlit.go
convT2X.go
copy1.go cmd/compile: rewrite f(g()) for multi-value g() during typecheck 2019-03-14 21:00:20 +00:00
copy.go
crlf.go
ddd1.go
ddd2.go
ddd.go
decl.go
declbad.go
defer.go
deferfin.go
deferprint.go
deferprint.out
devirt.go
divide.go
divmod.go
empty.go
env.go
eof1.go
eof.go
escape2.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape2n.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape3.go
escape4.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape5.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_array.go cmd/compile: trim more unnecessary escape analysis messages 2019-04-02 18:00:32 +00:00
escape_because.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_calls.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_closure.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_field.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_iface.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_indir.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_level.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_map.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_param.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_slice.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_struct_param1.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_struct_param2.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
escape_struct_return.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
escape_unsafe.go test: add regress tests for unsafe.Pointer rules 2019-04-03 16:03:55 +00:00
escape.go
fibo.go
finprofiled.go
float_lit2.go
float_lit3.go
float_lit.go
floatcmp.go
for.go
func1.go
func2.go
func3.go
func4.go
func5.go
func6.go
func7.go
func8.go
func.go
funcdup2.go
funcdup.go
gc1.go
gc2.go
gc.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go test: improve test coverage for heap sampling 2019-03-07 21:05:15 +00:00
helloworld.go
helloworld.out
if.go
import1.go
import2.go
import4.go
import5.go
import6.go
import.go
index0.go
index1.go
index2.go
index.go
indirect1.go
indirect.go
init1.go
init.go cmd/compile: reorganize init functions 2019-03-18 20:10:55 +00:00
initcomma.go
initialize.go
initializerr.go
initloop.go
inline_big.go
inline_caller.go runtime: make FuncForPC return the innermost inlined frame 2019-01-08 21:54:04 +00:00
inline_callers.go runtime: make FuncForPC return the innermost inlined frame 2019-01-08 21:54:04 +00:00
inline_literal.go
inline_math_bits_rotate.go cmd/compile: make math/bits.RotateLeft* an intrinsic on amd64 2018-08-30 22:48:28 +00:00
inline_sync.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
inline_variadic.go
inline.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
int_lit.go
intcvt.go
intrinsic_atomic.go
intrinsic.go
iota.go
label1.go
label.go
linkmain_run.go
linkmain.go
linkname.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
linkobj.go
linkx_run.go
linkx.go
literal2.go cmd/compile: accept 'i' suffix orthogonally on all numbers 2019-02-19 22:45:09 +00:00
literal.go
live1.go
live2.go cmd/compile,runtime: remove ambiguously live logic 2018-10-03 19:54:16 +00:00
live_syscall.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
live.go cmd/compile: fix ordering for short-circuiting ops 2019-03-06 20:04:07 +00:00
locklinear.go
loopbce.go cmd/compile: reverse order of slice bounds checks 2019-03-09 00:52:45 +00:00
makechan.go
makemap.go
makenew.go
mallocfin.go
map1.go
map.go
mapclear.go
maplinear.go
mergemul.go
method1.go
method2.go
method3.go
method4.go
method5.go
method6.go
method7.go
method.go
named1.go
named.go
nil.go
nilcheck.go
nilptr2.go
nilptr3.go cmd/compile: fix nilcheck for AIX 2018-11-26 14:13:53 +00:00
nilptr4.go
nilptr5_aix.go test: fix nilptr5 for AIX 2018-11-27 15:36:08 +00:00
nilptr5_wasm.go cmd/compile: fix nilcheck for AIX 2018-11-26 14:13:53 +00:00
nilptr5.go cmd/compile: fix nilcheck for AIX 2018-11-26 14:13:53 +00:00
nilptr_aix.go cmd/compile: fix nilcheck for AIX 2018-11-26 14:13:53 +00:00
nilptr.go cmd/compile: fix nilcheck for AIX 2018-11-26 14:13:53 +00:00
nosplit.go ../test: set GOPATH in nosplit.go 2019-03-12 20:46:29 +00:00
notinheap2.go
notinheap3.go cmd/compile: omit write barriers for slice clears of go:notinheap pointers 2018-12-05 21:54:54 +00:00
notinheap.go cmd/compile: disallow converting string to notinheap slice 2018-11-02 19:53:59 +00:00
nowritebarrier.go
nul1.go
oldescape2.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape2n.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape5.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_calls.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_closure.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_field.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_iface.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_linkname.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_param.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
oldescape_struct_return.go cmd/compile: update escape analysis tests for newescape 2019-04-16 16:20:39 +00:00
opt_branchlikely.go
parentype.go
peano.go
phiopt.go
print.go
print.out
printbig.go
printbig.out
prove.go cmd/compile: make prove learn index >= 0 from successful bounds checks 2019-03-30 23:22:02 +00:00
range.go
README.md
recover1.go
recover2.go
recover3.go
recover4.go
recover5.go
recover.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
rename1.go
rename.go
reorder2.go
reorder.go
retjmp.go
return.go
rotate0.go
rotate1.go
rotate2.go
rotate3.go
rotate.go
run.go cmd/compile: handle new panicindex/slice names in optimizations 2019-04-03 21:24:17 +00:00
rune.go
runtime.go
shift1.go
shift2.go
sieve.go
sigchld.go
sigchld.out
simassign.go
sinit_run.go
sinit.go cmd/compile: fix static initializer 2018-12-03 16:48:21 +00:00
sizeof.go
slice3.go
slice3err.go
slicecap.go
sliceopt.go
solitaire.go
stack.go
stackobj2.go test: stress test for stack objects 2018-10-03 19:54:29 +00:00
stackobj3.go cmd/compile,runtime: remove ambiguously live logic 2018-10-03 19:54:16 +00:00
stackobj.go cmd/compile,runtime: remove ambiguously live logic 2018-10-03 19:54:16 +00:00
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch2.go
switch3.go
switch4.go
switch5.go Revert "fmt: fix incorrect format of whole-number floats when using %#v" 2018-10-16 21:54:35 +00:00
switch6.go
switch7.go
switch.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go
typeswitch1.go
typeswitch2.go test: fix spelling of caught be the compiler to caught by the compiler 2018-10-04 00:49:49 +00:00
typeswitch3.go test: fix spelling of caught be the compiler to caught by the compiler 2018-10-04 00:49:49 +00:00
typeswitch.go
uintptrescapes2.go cmd/compile: skip escape analysis diagnostics for OADDR 2019-04-02 16:34:03 +00:00
uintptrescapes.go
undef.go
utf.go
varerr.go
varinit.go
writebarrier.go cmd/compile: better write barrier removal when initializing new objects 2019-03-18 21:16:19 +00:00
zerodivide.go

The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.

To run just these tests, execute:

../bin/go run run.go

Standard library tests should be written as regular Go tests in the appropriate package.

The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:

  • it is most naturally expressed using the test runner; or
  • it is also applicable to gccgo and other Go tool chains.