mirror of https://github.com/golang/go.git
This is code in progress to generate the two main other types of entries in dictionaries: - all types in the instantiated function derived from the type arguments (which are currently concrete, but will eventually be gcshapes) - pointers (i.e. mainly the unique name) to all needed sub-dictionaries In order to generate these entries, we now generate cached information gfInfo about generic functions/methods that can be used for creating the instantiated dictionaries. We use the type substituter to compute the right type args for instantiated sub-dictionaries. If infoPrintMode is changed to true, the code prints out all the information gathered about generic functions, and also the entries in all the dictionaries that are instantiated. The debug mode also prints out the locations where we need main dictionaries in non-instantiated functions. Other changes: - Moved the dictionary generation back to stencil.go from reflect.go, since we need to do extra analysis for the new dictionary entries. In the process, made getInstantiation generate both the function instantiation and the associated dictionary. - Put in small change for now in reflect.go, so that we don't try generate separate dictionaries for Value[T].get and the auto-generated (*Value[T]).get. The auto-generated wrapper shouldn't really need a dictionary. - Detected, but not handling yet, a new case which needs dictionaries - closures that have function params or captured variables whose types are derived from type arguments. - Added new tests in dictionaryCapture for use of method value/expressions in generic functions and for mutually recursive generic functions. Change-Id: If0cbde8805a9f673a23f5ec798769c85c9c5359b Reviewed-on: https://go-review.googlesource.com/c/go/+/327311 Trust: Dan Scales <danscales@google.com> Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> |
||
|---|---|---|
| .. | ||
| abi | ||
| alias3.dir | ||
| bench | ||
| chan | ||
| closure3.dir | ||
| closure5.dir | ||
| codegen | ||
| ddd2.dir | ||
| dwarf | ||
| fixedbugs | ||
| import2.dir | ||
| import4.dir | ||
| interface | ||
| intrinsic.dir | ||
| ken | ||
| linkname.dir | ||
| method4.dir | ||
| oldescape_linkname.dir | ||
| retjmp.dir | ||
| runtime | ||
| stress | ||
| syntax | ||
| typeparam | ||
| uintptrescapes.dir | ||
| 64bit.go | ||
| 235.go | ||
| README.md | ||
| alg.go | ||
| alias.go | ||
| alias1.go | ||
| alias2.go | ||
| alias3.go | ||
| align.go | ||
| append.go | ||
| append1.go | ||
| args.go | ||
| armimm.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 | ||
| 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 | ||
| convT2X.go | ||
| convert.go | ||
| convert1.go | ||
| convert2.go | ||
| convert3.go | ||
| convert4.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 | ||
| 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_param.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 | ||
| initempty.go | ||
| initexp.go | ||
| initialize.go | ||
| initializerr.go | ||
| initloop.go | ||
| inline.go | ||
| inline_big.go | ||
| inline_caller.go | ||
| inline_callers.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 | ||
| linkname2.go | ||
| linkobj.go | ||
| linkx.go | ||
| linkx_run.go | ||
| literal.go | ||
| literal2.go | ||
| live.go | ||
| live1.go | ||
| live2.go | ||
| live_regabi.go | ||
| live_syscall.go | ||
| locklinear.go | ||
| loopbce.go | ||
| mainsig.go | ||
| makechan.go | ||
| makemap.go | ||
| makenew.go | ||
| makeslice.go | ||
| mallocfin.go | ||
| map.go | ||
| map1.go | ||
| mapclear.go | ||
| maplinear.go | ||
| mergemul.go | ||
| method.go | ||
| method1.go | ||
| method2.go | ||
| method3.go | ||
| method4.go | ||
| method5.go | ||
| method6.go | ||
| method7.go | ||
| named.go | ||
| named1.go | ||
| nil.go | ||
| nilcheck.go | ||
| nilptr.go | ||
| nilptr2.go | ||
| nilptr3.go | ||
| nilptr4.go | ||
| nilptr5.go | ||
| nilptr5_aix.go | ||
| nilptr5_wasm.go | ||
| nilptr_aix.go | ||
| nosplit.go | ||
| notinheap.go | ||
| notinheap2.go | ||
| notinheap3.go | ||
| nowritebarrier.go | ||
| nul1.go | ||
| opt_branchlikely.go | ||
| parentype.go | ||
| peano.go | ||
| phiopt.go | ||
| print.go | ||
| print.out | ||
| printbig.go | ||
| printbig.out | ||
| prove.go | ||
| range.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 | ||
| rename.go | ||
| rename1.go | ||
| reorder.go | ||
| reorder2.go | ||
| retjmp.go | ||
| return.go | ||
| rotate.go | ||
| rotate0.go | ||
| rotate1.go | ||
| rotate2.go | ||
| rotate3.go | ||
| run.go | ||
| rune.go | ||
| runtime.go | ||
| shift1.go | ||
| shift2.go | ||
| sieve.go | ||
| sigchld.go | ||
| sigchld.out | ||
| simassign.go | ||
| sinit.go | ||
| sinit_run.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 | ||
| 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 | ||
| undef.go | ||
| unsafebuiltins.go | ||
| used.go | ||
| utf.go | ||
| varerr.go | ||
| varinit.go | ||
| winbatch.go | ||
| writebarrier.go | ||
| zerodivide.go | ||
README.md
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
gccgoand other Go tool chains.