1
0
mirror of https://github.com/golang/go synced 2024-09-29 12:04:28 -06:00
go/test
Dan Scales cf1ec17360 cmd/compile: deal with unsatisfiable type assertion in some instantiations
Deal with case where a certain instantiation of a generic
function/method leads to an unsatisfiable type assertion or type case.
In that case, the compiler was causing a fatal error while trying to
create an impossible itab for the dictionary. To deal with that case,
allow ITabLsym() to create a dummy itab even when the concrete type
doesn't implement the interface. This dummy itab is analogous to the
"negative" itabs created on-the-fly by the runtime.

We will use the dummy itab in type asserts and type switches in
instantiations that use that dictionary entry. Since the dummy itab can
never be used for any real value at runtime (since the concrete type
doesn't implement the interface), there will always be a failure for the
corresponding type assertion or a non-match for the corresponding
type-switch case.

Fixes #50002

Change-Id: I1df05b1019533e1fc93dd7ab29f331a74fab9202
Reviewed-on: https://go-review.googlesource.com/c/go/+/369894
Reviewed-by: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2021-12-07 21:54:30 +00:00
..
abi cmd/compile: restore tail call for method wrappers 2021-09-17 22:59:44 +00:00
alias3.dir
asmhdr.dir cmd/compile: emit sensible go_asm.h consts for big ints 2021-10-30 18:30:05 +00:00
bench test/bench/go1: fix size for RegexpMatchMedium_32 2021-07-18 21:03:43 +00:00
chan [dev.typeparams] cmd/compile/internal/types2: implement close(ch) where ch is of type parameter type 2021-07-14 23:33:46 +00:00
closure3.dir cmd/compile/internal/inline: revise closure inl position fix 2021-11-24 15:55:56 +00:00
closure5.dir
codegen test/codegen: updated arithmetic tests to verify on ppc64,ppc64le 2021-11-01 13:12:37 +00:00
ddd2.dir
dwarf
fixedbugs test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
import2.dir
import4.dir
interface cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
intrinsic.dir
ken test/ken/slicearray.go: correct type width in comment 2021-12-05 12:50:44 +00:00
linkname.dir cmd/compile: allow inlining of ORANGE 2021-10-28 14:25:03 +00:00
method4.dir
oldescape_linkname.dir
retjmp.dir
runtime
stress all: update references to symbols moved from io/ioutil to io 2021-04-05 17:51:15 +00:00
syntax test/syntax: remove interface.go 2021-04-06 18:55:39 +00:00
typeparam cmd/compile: deal with unsatisfiable type assertion in some instantiations 2021-12-07 21:54:30 +00:00
uintptrescapes.dir
64bit.go
235.go
alg.go
alias1.go
alias2.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
alias3.go
alias.go
align.go
append1.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
append.go
args.go
armimm.go
asmhdr.go cmd/compile: emit sensible go_asm.h consts for big ints 2021-10-30 18:30:05 +00:00
assign1.go
assign.go
atomicload.go
bigalg.go
bigmap.go
blank1.go
blank.go
bom.go
bombad.go
bounds.go
cannotassign.go
chancap.go
chanlinear.go
char_lit1.go
char_lit.go
checkbce.go
clearfat.go
closedchan.go
closure1.go
closure2.go
closure3.go
closure4.go
closure5.go
closure6.go
closure7.go
closure.go
cmp6.go
cmp.go
cmplx.go
cmplxdivide1.go
cmplxdivide.c
cmplxdivide.go
complit1.go test: fix error check messages for 2 types2 tests 2021-06-02 05:14:45 +00:00
complit.go
compos.go
const1.go
const2.go
const3.go
const4.go
const5.go
const6.go
const7.go
const.go
convert1.go
convert2.go cmd/compile: allow conversion from slice to array ptr 2021-04-21 00:53:48 +00:00
convert3.go
convert4.go cmd/compile: allow conversion from slice to array ptr 2021-04-21 00:53:48 +00:00
convert.go
convlit1.go
convlit.go
convT2X.go
copy1.go
copy.go
crlf.go
ddd1.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
ddd2.go
ddd.go
decl.go
declbad.go cmd/compile: rewrite a, b = f() to use temporaries when type not identical 2021-06-14 07:12:37 +00:00
defer.go
defererrcheck.go
deferfin.go
defernil.go
deferprint.go
deferprint.out
devirt.go [dev.typeparams] cmd/compile: simplify interface conversions 2021-08-09 16:10:20 +00:00
directive2.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
directive.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
divide.go
divmod.go
embedfunc.go
embedvers.go
empty.go
env.go
eof1.go
eof.go
escape2.go [dev.typeparams] cmd/compile: move call logic from order.go to escape 2021-06-23 16:48:12 +00:00
escape2n.go [dev.typeparams] cmd/compile: move call logic from order.go to escape 2021-06-23 16:48:12 +00:00
escape3.go
escape4.go
escape5.go [dev.typeparams] test: rename blank functions 2021-07-28 21:41:07 +00:00
escape_array.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_calls.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_closure.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_field.go
escape_goto.go [dev.typeparams] test: rename blank functions 2021-07-28 21:41:07 +00:00
escape_hash_maphash.go
escape_iface.go
escape_indir.go
escape_level.go
escape_map.go
escape_param.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_runtime_atomic.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_selfassign.go
escape_slice.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_struct_param1.go
escape_struct_param2.go
escape_struct_return.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape_sync_atomic.go
escape_unsafe.go [dev.typeparams] cmd/compile: simplify ~r/~b naming 2021-05-26 23:50:32 +00:00
escape.go
fibo.go
finprofiled.go
float_lit2.go
float_lit3.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
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
fuse.go test: do not run fuse test in noopt mode 2021-04-28 15:55:10 +00:00
gc1.go
gc2.go
gc.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go
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
initcomma.go
initempty.go
initexp.go
initialize.go
initializerr.go
initloop.go
inline_big.go [dev.typeparams] cmd/compile/internal/inline: refactor mkinlcall 2021-05-27 23:40:56 +00:00
inline_caller.go
inline_callers.go
inline_endian.go test: skip endian inlining test on noopt builder 2021-10-07 00:39:17 +00:00
inline_literal.go
inline_math_bits_rotate.go
inline_sync.go
inline_variadic.go [dev.typeparams] cmd/compile: simplify inlining variadic calls 2021-05-26 23:50:45 +00:00
inline.go cmd/compile/internal/inline: revise closure inl position fix 2021-11-24 15:55:56 +00:00
int_lit.go
intcvt.go
intrinsic_atomic.go
intrinsic.go
iota.go
label1.go
label.go
linkmain_run.go
linkmain.go
linkname2.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
linkname3.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
linkname.go
linkobj.go
linkx_run.go
linkx.go
literal2.go
literal.go
live1.go
live2.go
live_regabi.go test: enable regabi test on arm64 2021-08-20 19:58:13 +00:00
live_syscall.go
live.go [dev.typeparams] cmd/compile: simplify interface conversions 2021-08-09 16:10:20 +00:00
locklinear.go
loopbce.go
mainsig.go
makechan.go cmd/compile/internal/types2: add unsafe.Add and unsafe.Slice 2021-04-23 00:41:01 +00:00
makemap.go cmd/compile/internal/types2: add unsafe.Add and unsafe.Slice 2021-04-23 00:41:01 +00:00
makenew.go
makeslice.go
mallocfin.go
map1.go
map.go
mapclear.go
maplinear.go
maymorestack.go cmd/{asm,compile,internal/obj}: add "maymorestack" support 2021-11-05 00:52:06 +00:00
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
nilptr4.go
nilptr5_aix.go
nilptr5_wasm.go
nilptr5.go
nilptr_aix.go
nilptr.go
nosplit.go
notinheap2.go
notinheap3.go
notinheap.go
nowritebarrier.go
nul1.go
opt_branchlikely.go
parentype.go
peano.go
phiopt.go cmd/compile/internal/ssa: strengthen phiopt pass 2021-03-29 05:50:11 +00:00
print.go
print.out
printbig.go
printbig.out
prove.go
range.go
README.md
recover1.go
recover2.go
recover3.go
recover4.go test/recover4.go: use mprotect to create a hole instead of munmap 2021-11-12 16:58:34 +00:00
recover5.go
recover.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
reflectmethod5.go
reflectmethod6.go
reflectmethod7.go all: use reflect.{Pointer,PointerTo} 2021-10-26 14:24:17 +00:00
reflectmethod8.go [dev.typeparams] cmd/compile: fix missing condition in usemethod 2021-07-22 17:48:41 +00:00
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: deal with unsatisfiable type assertion in some instantiations 2021-12-07 21:54:30 +00:00
rune.go
runtime.go
shift1.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
shift2.go
sieve.go
sigchld.go
sigchld.out
simassign.go
sinit_run.go
sinit.go
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 cmd/compile, types2: better error message for invalid type assertion 2021-10-19 17:01:35 +00:00
switch7.go
switch.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go
typeswitch1.go
typeswitch2.go
typeswitch2b.go
typeswitch3.go cmd/compile/internal/types2: better error for type assertion/switch on type parameter value 2021-11-12 22:20:51 +00:00
typeswitch.go
uintptrescapes2.go [dev.typeparams] cmd/compile: skip escape analysis diagnostics for wrappers 2021-06-24 18:24:24 +00:00
uintptrescapes3.go
uintptrescapes.go
undef.go
unsafebuiltins.go unsafe: allow unsafe.Slice up to end of address space 2021-10-13 18:15:16 +00:00
used.go
utf.go
varerr.go
varinit.go
winbatch.go
writebarrier.go cmd/compile: don't emit write barriers for offsets of global addresses 2021-08-23 19:46:36 +00:00
zerodivide.go all: use bytes.Cut, strings.Cut 2021-10-06 15:53:04 +00:00

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

To run just tests from specified files in this directory, execute:

../bin/go run run.go -- file1.go file2.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.