1
0
mirror of https://github.com/golang/go synced 2024-11-24 04:40:24 -07:00
go/test
Keith Randall 64c134f90f cmd/compile: don't move nil checks across a VarDef
We need to make sure that there's no possible faulting
instruction between a VarDef and that variable being
fully initialized. If there was, then anything scanning
the stack during the handling of that fault will see
a live but uninitialized variable on the stack.

If we have:

  NilCheck p
  VarDef x
  x = *p

We can't rewrite that to

  VarDef x
  NilCheck p
  x = *p

Particularly, even though *p faults on p==nil, we still
have to do the explicit nil check before the VarDef.

Fixes #32288

Change-Id: Ib8b88e6a5af3bf6f238ff5491ac86f53f3cf9fc9
Reviewed-on: https://go-review.googlesource.com/c/go/+/179239
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2019-05-31 21:52:17 +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: fix the error of absorbing boolean tests into block(FGE, FGT) 2019-05-16 13:46:25 +00:00
ddd2.dir
dwarf
fixedbugs cmd/compile: don't move nil checks across a VarDef 2019-05-31 21:52:17 +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
runtime cmd/compile: shortcut intrinsic inlining AFTER getcallerXX check 2019-04-19 20:18:29 +00:00
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
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 test: add regress test for issue 28369 2019-04-16 21:01:30 +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_runtime_atomic.go test: fix escape_runtime_atomic.go 2019-04-17 22:55:26 +00:00
escape_selfassign.go test: add regress test cases for self-assignment 2019-04-17 16:36:56 +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_sync_atomic.go runtime/internal/atomic: remove bad go:noescape annotations on Loadp 2019-04-17 19:09:15 +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
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
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 test: use a real use function in nilptr2.go 2019-05-11 03:02:33 +00:00
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 test/fixedbugs: fix some tests will not be run 2019-05-23 01:39:41 +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
stackobj3.go
stackobj.go
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch2.go
switch3.go
switch4.go
switch5.go
switch6.go
switch7.go
switch.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go
typeswitch1.go
typeswitch2.go
typeswitch3.go
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.