tinygo/testdata
Ayke van Laethem afd49e7cdd compiler: add support for recursive function types
This adds support for a construct like this:

    type foo func(fn foo)

Unfortunately, LLVM cannot create function pointers that look like this.
LLVM only supports named types for structs (not for pointers) and thus
can't add a pointer to a function type of the same type to a parameter
of that function type.

The fix is simple: cast all function pointers to a void function, in
LLVM IR:

    void ()*

Raw function pointers are cast to this type before storing, and cast
back to the regular function type before calling. This means that
function parameters will never refer to its own type because raw
function types are fixed at that one type.

Somehow, this does have an effect on binary size in some cases. The
effect is small and goes both ways. On top of that, there is work
underway in LLVM which would make all pointer types opaque (without a
pointee type). This would make this whole commit useless and therefore
should fix any size increases that might happen.
https://llvm.org/docs/OpaquePointers.html
2021-10-30 15:55:20 +02:00
..
cgo cgo: add support for stdio in picolibc and wasi-libc 2021-10-26 17:08:30 +02:00
alias.go fix bug in IR regarding type aliases 2019-09-20 10:35:49 +02:00
alias.txt fix bug in IR regarding type aliases 2019-09-20 10:35:49 +02:00
atomic.go compiler: add support for atomic operations 2020-05-28 15:11:46 +02:00
atomic.txt compiler: add support for atomic operations 2020-05-28 15:11:46 +02:00
binop.go compiler: properly implement div and rem operations 2021-10-28 15:55:02 +02:00
binop.txt compiler: properly implement div and rem operations 2021-10-28 15:55:02 +02:00
calls.go compiler: add support for recursive function types 2021-10-30 15:55:20 +02:00
calls.txt compiler: implement func value and builtin defers 2020-07-31 01:48:57 +02:00
channel.go compiler: fix a few crashes due to named types 2020-05-27 16:14:41 +02:00
channel.txt runtime: add cap and len support for chans 2020-05-12 01:17:27 +02:00
env.go wasm: add support for the crypto/rand package 2021-08-05 19:01:14 +02:00
env.txt wasm: add support for the crypto/rand package 2021-08-05 19:01:14 +02:00
filesystem.go main: clean up tests 2021-04-09 18:33:48 +02:00
filesystem.txt main: clean up tests 2021-04-09 18:33:48 +02:00
float.go compiler: test float to int conversions and fix upper-bound calculation 2021-01-19 14:02:32 +01:00
float.txt compiler: test float to int conversions and fix upper-bound calculation 2021-01-19 14:02:32 +01:00
gc.go avr: use a garbage collector 2020-01-27 19:01:55 +01:00
gc.txt runtime: implement a simple mark/sweep garbage collector 2018-11-18 19:18:39 +01:00
go1.17.go compiler: add support for new language features of Go 1.17 2021-08-30 09:18:58 +02:00
go1.17.txt compiler: add support for new language features of Go 1.17 2021-08-30 09:18:58 +02:00
goroutines.go transform: improve GC stack slot pass to work around a bug 2021-08-04 20:06:59 +02:00
goroutines.txt main: rename goroutine tests 2021-05-26 20:21:08 +02:00
init.go interp: don't ignore array indices for untyped objects 2021-07-14 07:55:05 +02:00
init.txt interp: don't ignore array indices for untyped objects 2021-07-14 07:55:05 +02:00
init_multi.go testdata: add more test cases in testdata 2018-10-25 20:37:35 +02:00
init_multi.txt testdata: add more test cases in testdata 2018-10-25 20:37:35 +02:00
interface.go compiler: add support for anonymous type asserts 2020-03-29 08:39:07 +02:00
interface.txt compiler: add support for anonymous type asserts 2020-03-29 08:39:07 +02:00
json.go transform: optimize reflect.Type Implements() method 2021-03-28 14:00:37 +02:00
json.txt transform: optimize reflect.Type Implements() method 2021-03-28 14:00:37 +02:00
ldflags.go main: implement -ldflags="-X ..." 2021-04-09 18:33:48 +02:00
ldflags.txt main: implement -ldflags="-X ..." 2021-04-09 18:33:48 +02:00
map.go interp: remove map support 2021-04-21 07:37:22 +02:00
map.txt interp: remove map support 2021-04-21 07:37:22 +02:00
math.go runtime: add support for math package 2019-02-05 19:37:21 +01:00
math.txt runtime: add support for math package 2019-02-05 19:37:21 +01:00
print.go runtime: use dedicated printfloat32 2020-10-02 11:26:22 +02:00
print.txt runtime: use dedicated printfloat32 2020-10-02 11:26:22 +02:00
rand.go wasm: add support for the crypto/rand package 2021-08-05 19:01:14 +02:00
rand.txt wasm: add support for the crypto/rand package 2021-08-05 19:01:14 +02:00
reflect.go reflect: add StructField.IsExported method 2021-08-30 09:18:58 +02:00
reflect.txt reflect: add StructField.IsExported method 2021-08-30 09:18:58 +02:00
slice.go compiler: fix a few crashes due to named types 2020-05-27 16:14:41 +02:00
slice.txt compiler: compare slice against nil 2018-10-20 17:22:51 +02:00
sort.go implement reflect.Swapper 2020-10-23 21:37:35 +02:00
sort.txt implement reflect.Swapper 2020-10-23 21:37:35 +02:00
stdlib.go os: implement process related functions 2021-06-25 16:14:47 +02:00
stdlib.txt os: implement virtual filesystem support 2020-05-13 08:08:57 +02:00
string.go compiler: fix named string to []byte slice conversion 2020-07-29 12:13:37 +02:00
string.txt compiler,runtime: implement []rune to string conversion 2019-08-11 15:45:35 +02:00
structs.go compiler: support recursive types 2019-10-13 23:07:47 +02:00
structs.txt compiler: support recursive types 2019-10-13 23:07:47 +02:00
testing.go testing: add support for the -test.v flag 2021-08-13 08:53:40 +02:00
testing.txt testing: add support for the -test.v flag 2021-08-13 08:53:40 +02:00
zeroalloc.go testdata: fix formatting 2020-05-12 01:17:27 +02:00
zeroalloc.txt add code to handle programs which use heap allocations but never hit the GC 2019-11-17 15:14:51 +01:00