Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/go/ssa: commit 75ff53bc introduced a race condition #67079

Closed
aykevl opened this issue Apr 27, 2024 · 21 comments
Closed

x/tools/go/ssa: commit 75ff53bc introduced a race condition #67079

aykevl opened this issue Apr 27, 2024 · 21 comments
Assignees
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@aykevl
Copy link

aykevl commented Apr 27, 2024

Go version

go version go1.22.2 linux/arm64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/home/ayke/.cache/go-build'
GOENV='/home/ayke/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/ayke/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/ayke'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go1.22.2'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go1.22.2/pkg/tool/linux_arm64'
GOVCS=''
GOVERSION='go1.22.2'
GCCGO='gccgo'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/ayke/src/tinygo/tinygo/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build553721638=/tmp/go-build -gno-record-gcc-switches'

What did you do?

I upgraded the x/tools package to v0.17.0.

What did you see happen?

Lots of infrequent crashes starting from golang/tools@75ff53b (see tinygo-org/tinygo#4206).
The symptoms are all kinds of weird crashes, but in particular what I'm seeing often is functions that appear to be unfinished (no terminator in a basic block).

Interestingly, once I build the program using -race the race condition goes away. This makes it particularly difficult to pinpoint where exactly the bug is located.

I've also tried the master branch (golang/tools@0b45163) but sadly it still shows the same crashes.

I can try to work on a standalone reproducer, but with the nature of this crash it's difficult to find one. Still, if it's difficult to find the culprit just from the bisected commit I can try to work on a reproducer.

What did you expect to see?

No race condition.

@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Apr 27, 2024
@gopherbot gopherbot added this to the Unreleased milestone Apr 27, 2024
@adonovan
Copy link
Member

adonovan commented May 3, 2024

Hi, maintainer of go/ssa and author of https://go.dev/cl/538358 here. I don't have a good hypothesis yet: that CL looks sound w.r.t. concurrency, as does the same code at master. Interestingly, tinygo does not appear to use Program.RuntimeTypes or ssautil.AllFunctions (which is good: these functions should be deprecated!), which were the primary focus of that CL. The tinygo logic to construct go/ssa code looks generally sound too.

Can you share the test case you used for bisecting to this CL? Even if it takes hundreds of runs to reliably fail, that would make it much easier to investigate.

@timothy-king
Copy link
Contributor

@aykevl It looks like ssa.Package.Build is called with some synchronization between packages? I don't fully understand the synchronization though.

https://github.com/tinygo-org/tinygo/blob/release/builder/build.go#L350
https://github.com/tinygo-org/tinygo/blob/release/builder/jobs.go#L123

A lack of synchronization could be a source of races once generics are involved. (ssa.Program.Build solves this.) I don't know why https://go.dev/cl/538358 would be involved.

A test case would really help.

@adonovan
Copy link
Member

adonovan commented May 3, 2024

@aykevl It looks like ssa.Package.Build is called with some synchronization between packages? I don't fully understand the synchronization though.

https://github.com/tinygo-org/tinygo/blob/release/builder/build.go#L350
https://github.com/tinygo-org/tinygo/blob/release/builder/jobs.go#L123

A lack of synchronization could be a source of races once generics are involved. (ssa.Program.Build solves this.) I don't know why https://go.dev/cl/538358 would be involved.

It's quite safe to go/ssa-Build all Packages in parallel--that's exactly what Program.Build does--so that doesn't explain it.

tinygo seems to use concurrency for building and compiling each SSA package in parallel while respecting topological order, which seems sound. (There's more available parallelism of course, in reading, parsing, type-checking, etc.) The only synchronization within each compile job (package) is a cross-process lock on the output file, presumably to prevent concurrent writes from different tinygo processes. There's no fine-grained concurrency, so the lack of Mutex.Lock operations isn't obviously a problem.

I wonder about the fact that some functions in low-level packages of intrinsics (runtime et al) are used from all other packages (e.g. when compiling ssa.Go); if the intrinsics package is not fully llvm-built before the other packages this could lead to a race.

A test case would really help.

Agreed.

@timothy-king
Copy link
Contributor

timothy-king commented May 3, 2024

It's quite safe to go/ssa-Build all Packages in parallel--that's exactly what Program.Build does--so that doesn't explain it.

ssa is very careful to only read from specific fixed fields on functions from other packages or created functions while building. Reading from generic instantiations before they are done can race. Waiting for every package to finish building is good enough, which is what ssa.Program does. Annoyingly diamonds can cause the same instantiation to be created so package topology is not enough. This definitely used to be the case, and I don't remember fixing this. (My memory might be off though.)

@cherrymui cherrymui added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label May 6, 2024
@deadprogram
Copy link

if the intrinsics package is not fully llvm-built before the other packages this could lead to a race.

That sounds very much like the behavior I have observed anecdotally. However, I do not have a reproducible test case.

@aykevl
Copy link
Author

aykevl commented May 13, 2024

The way I can reproduce this issue in TinyGo is as follows:

  1. Build TinyGo using a system-installed LLVM (I haven't tried with a self-built LLVM, it probably also works). This is Linux and macOS only at the moment. Guide: https://tinygo.org/docs/guides/build/. Importantly, use go install to build (without -race, and not make to run the build).
  2. cd tests/os/smoke
  3. while true; rm ~/.cache/tinygo/pkg-*; tinygo test -c -target=pybadge; end to try the build until it fails (this is the fish shell, bash will have a slightly different syntax).

Normally it prints lines like this:

FAIL    github.com/tinygo-org/tinygo/tests/os/smoke     0.000s

But sometimes it will result in a crash, like this (though there are many forms this crash can take, this is a common one):

panic: runtime error: index out of range [0] with length 0

goroutine 180 [running]:
github.com/tinygo-org/tinygo/compiler.(*builder).createFunctionStart(0x400c88bc80, 0x0)
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1207 +0xe44
github.com/tinygo-org/tinygo/compiler.(*builder).createFunction(0x400c88bc80)
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1296 +0x2c
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getFunction(0x4010faf7c0, 0x400d1221a0)
        /home/ayke/src/tinygo/tinygo/compiler/symbol.go:222 +0xc08
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeMethodSet(0x4010faf7c0, {0x920408, 0x400d9a72d0})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:619 +0x1d4
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode(0x4010faf7c0, {0x920408, 0x400d9a72d0})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:417 +0x2b64
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode(0x4010faf7c0, {0x9202f0, 0x40001ba540})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:291 +0x226c
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode(0x4010faf7c0, {0x9203e0, 0x40039551d0})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:394 +0x3268
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode(0x4010faf7c0, {0x9202f0, 0x40001c67e0})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:292 +0x2288
github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode(0x4010faf7c0, {0x920408, 0x40028d6e50})
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:322 +0x2938
github.com/tinygo-org/tinygo/compiler.(*builder).createMakeInterface(0x400c88b380, {0x9243a8?}, {0x920408, 0x40028d6e50}, 0x7b7d80?)
        /home/ayke/src/tinygo/tinygo/compiler/interface.go:80 +0x6c
github.com/tinygo-org/tinygo/compiler.(*builder).createExpr(0x400c88b380, {0x923f70, 0x400d016550})
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:2217 +0x1838
github.com/tinygo-org/tinygo/compiler.(*builder).createInstruction(0x400c88b380, {0x925050, 0x400d016550})
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1448 +0x89c
github.com/tinygo-org/tinygo/compiler.(*builder).createFunction(0x400c88b380)
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1337 +0x704
github.com/tinygo-org/tinygo/compiler.(*compilerContext).createPackage(0x4010faf7c0, {0x4006a5e4e0?}, 0x4001bd4d00)
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:853 +0x3ac
github.com/tinygo-org/tinygo/compiler.CompilePackage({0x40003cfa50?, 0x58?}, 0x40003ea000, 0x4001bd4d00, {0x0?}, 0x87e50c?, 0x0?)
        /home/ayke/src/tinygo/tinygo/compiler/compiler.go:312 +0x3a0
github.com/tinygo-org/tinygo/builder.Build.func3(0x400da54780)
        /home/ayke/src/tinygo/tinygo/builder/build.go:378 +0x18c
github.com/tinygo-org/tinygo/builder.runJob(0x400da54780, 0x4010701800)
        /home/ayke/src/tinygo/tinygo/builder/jobs.go:222 +0x48
created by github.com/tinygo-org/tinygo/builder.runJobs in goroutine 23
        /home/ayke/src/tinygo/tinygo/builder/jobs.go:123 +0x458

I have tested this with the current dev branch, https://github.com/tinygo-org/tinygo/tree/1d9f26cee1f1501b09647186a25ba29aa6a0c58c.

@adonovan
Copy link
Member

An easy and helpful experiment would be to bracket each ssa.Package.Build operation for package p with log.Print("go/ssa start|end %s", p) statements, and do the same thing around the LLVM build operation. Then attach the log of those statements to the issue, along with the the output of go list -json -deps <mainpackage>, assuming you're comfortable sharing it.

That would allow us to see whether both SSA and LLVM build steps are respecting the topological order of the graph.

@aykevl
Copy link
Author

aykevl commented May 13, 2024

I am currently trimming down the list of packages that, when built together, trigger this race. That's rather time-consuming. Right now I'm down to this list:

"internal/testlog"
"encoding"
"sync"
"context"
"time"

So it's not related to the runtime package it seems.

@adonovan thanks for the suggestion! I'll try that once I've trimmed down the package list some more. Though I think I could also trigger the crash when I built all of the SSA at the start using program.Build() (instead of building each package individually). I'll try that again after trimming down the list.

@aykevl
Copy link
Author

aykevl commented Jun 5, 2024

I have created a branch here that shows the bug:
https://github.com/tinygo-org/tinygo/tree/race-debug

Then, build TinyGo (use go install on Fedora 40 for example) and run the following command inside the tests/os/smoke directory (in fish, syntax for bash should be similar):

while true; tinygo.test test -c -target=pybadge; end

I found a few things that may point towards the bug:

  • The bug happens when compiling the "context" and "time" packages together.
  • The bug happens after the program SSA has been constructed (program.Build() is called before accessing the Go SSA).
  • By looking at a previous crash backtrace, the bug appears to happen in a synthetic function (my guess would be that a synthetic function is created on-demand, but the 2nd time doesn't wait until it is fully created by the first access).
  • By looking at the race condition crash log (below), it appears that the race is triggered somewhere inside Program.MethodValue, which claims to be thread-safe.

So my guess would be that the "build methods of RuntimeTypes lazily" change does indeed build some methods lazily, but then when two different goroutines access one of these methods, the second doesn't wait until the first is finished.

I also managed to capture a race condition with the -race flag:

Race condition log
==================
WARNING: DATA RACE
Read at 0x00c00f0e7980 by goroutine 182:
  github.com/tinygo-org/tinygo/compiler.(*builder).createFunctionCall()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1833 +0xd4
  github.com/tinygo-org/tinygo/compiler.(*builder).createExpr()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:2040 +0x2e7c
  github.com/tinygo-org/tinygo/compiler.(*builder).createInstruction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1455 +0xcec
  github.com/tinygo-org/tinygo/compiler.(*builder).createFunction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1344 +0xbd0
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getFunction()
      /home/ayke/src/tinygo/tinygo/compiler/symbol.go:222 +0x1458
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeMethodSet()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:622 +0x27c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:420 +0x615c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:294 +0x5500
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:314 +0x5270
  github.com/tinygo-org/tinygo/compiler.(*builder).createMakeInterface()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:80 +0x88
  github.com/tinygo-org/tinygo/compiler.(*builder).createExpr()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:2224 +0x258c
  github.com/tinygo-org/tinygo/compiler.(*builder).createInstruction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1455 +0xcec
  github.com/tinygo-org/tinygo/compiler.(*builder).createFunction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1344 +0xbd0
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).createPackage()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:853 +0x4d0
  github.com/tinygo-org/tinygo/compiler.CompilePackage()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:312 +0x6e4
  github.com/tinygo-org/tinygo/builder.Build.func3()
      /home/ayke/src/tinygo/tinygo/builder/build.go:384 +0x300
  github.com/tinygo-org/tinygo/builder.runJob()
      /home/ayke/src/tinygo/tinygo/builder/jobs.go:222 +0x70
  github.com/tinygo-org/tinygo/builder.runJobs.gowrap1()
      /home/ayke/src/tinygo/tinygo/builder/jobs.go:123 +0x40

Previous write at 0x00c00f0e7980 by goroutine 186:
  golang.org/x/tools/go/ssa.(*builder).buildWrapper()
      /home/ayke/src/tinygo/tools/go/ssa/wrappers.go:115 +0x1150
  golang.org/x/tools/go/ssa.(*builder).buildFunction()
      /home/ayke/src/tinygo/tools/go/ssa/builder.go:2528 +0x1b4
  golang.org/x/tools/go/ssa.(*builder).iterate()
      /home/ayke/src/tinygo/tools/go/ssa/builder.go:2516 +0x4c
  golang.org/x/tools/go/ssa.(*Program).MethodValue()
      /home/ayke/src/tinygo/tools/go/ssa/methods.go:52 +0x288
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeMethodSet()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:621 +0x26c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:420 +0x615c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:294 +0x5500
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:314 +0x5270
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:397 +0x6ca4
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:295 +0x551c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:325 +0x5e94
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:397 +0x6ca4
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:295 +0x551c
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).getTypeCode()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:325 +0x5e94
  github.com/tinygo-org/tinygo/compiler.(*builder).createMakeInterface()
      /home/ayke/src/tinygo/tinygo/compiler/interface.go:80 +0x88
  github.com/tinygo-org/tinygo/compiler.(*builder).createExpr()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:2224 +0x258c
  github.com/tinygo-org/tinygo/compiler.(*builder).createInstruction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1455 +0xcec
  github.com/tinygo-org/tinygo/compiler.(*builder).createFunction()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:1344 +0xbd0
  github.com/tinygo-org/tinygo/compiler.(*compilerContext).createPackage()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:853 +0x4d0
  github.com/tinygo-org/tinygo/compiler.CompilePackage()
      /home/ayke/src/tinygo/tinygo/compiler/compiler.go:312 +0x6e4
  github.com/tinygo-org/tinygo/builder.Build.func3()
      /home/ayke/src/tinygo/tinygo/builder/build.go:384 +0x300
  github.com/tinygo-org/tinygo/builder.runJob()
      /home/ayke/src/tinygo/tinygo/builder/jobs.go:222 +0x70
  github.com/tinygo-org/tinygo/builder.runJobs.gowrap1()
      /home/ayke/src/tinygo/tinygo/builder/jobs.go:123 +0x40

Goroutine 182 (running) created at:
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/builder.Build()
      /home/ayke/src/tinygo/tinygo/builder/build.go:245 +0x2720
  main.buildAndRun()
      /home/ayke/src/tinygo/tinygo/main.go:856 +0x58c
  main.Test()
      /home/ayke/src/tinygo/tinygo/main.go:269 +0xbbc
  main.main.func3()
      /home/ayke/src/tinygo/tinygo/main.go:1715 +0x17c

Goroutine 186 (running) created at:
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  golang.org/x/tools/go/ssa.goversionOf()
      /home/ayke/src/tinygo/tools/go/ssa/source.go:145 +0xd20
  golang.org/x/tools/go/ssa.(*Program).CreatePackage()
      /home/ayke/src/tinygo/tools/go/ssa/create.go:224 +0xd00
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/loader.(*Program).LoadSSA()
      /home/ayke/src/tinygo/tinygo/loader/ssa.go:14 +0x508
  github.com/tinygo-org/tinygo/builder.Build()
      /home/ayke/src/tinygo/tinygo/builder/build.go:245 +0x2720
  main.buildAndRun()
      /home/ayke/src/tinygo/tinygo/main.go:856 +0x58c
  main.Test()
      /home/ayke/src/tinygo/tinygo/main.go:269 +0xbbc
  main.main.func3()
      /home/ayke/src/tinygo/tinygo/main.go:1715 +0x17c
==================

(There's a lot of duplication in there, I'm not sure why - maybe another bug?)
I captured this race at tools commit golang/tools@75ff53b, using a go.mod replace directive.

@aykevl
Copy link
Author

aykevl commented Jun 5, 2024

This looks suspicious:

https://github.com/golang/tools/blob/75ff53bc6b14b0a09f5d4b838ea47ae679d748ba/go/ssa/methods.go#L52
MethodValue calls b.iterate() without lock.

I also see that the synthetic method (*time.Time).Add (among many other methods) is created from both the context and the time package. So my guess would be that this is the race condition: synthetic methods can be created from multiple packages in a program but there is no locking in place to make sure the method is finished creating before returning it.

@adonovan
Copy link
Member

adonovan commented Jun 5, 2024

Thanks @aykevl, this is really helpful information. You're right that there's a race building wrappers. I'll prepare a fix.

@adonovan adonovan self-assigned this Jun 5, 2024
@adonovan
Copy link
Member

adonovan commented Jun 5, 2024

There are a couple of strange things about the go test -race log shown above though:

  • First, the "Goroutine 182 (running)" stack shows a mutual recursion between ssa.goversionOf and ssa.(*Program).CreatePackage(). How is this possible? goversionOf does not call CreatePackage. Also, goversionOf no longer exists in the version of SSA required by your go.mod file (golang.org/x/tools@v0.17.0).
  • Second, the line numbers in the tinygo source don't line up. For example, the createFunctionCall frame has the race read at compiler.go:1833 +0xd4, but this line of code is a simple exported := false declaration, which is not racy; the next line is a call to instr.StaticCallee, which makes sense as the racy read. Did you perhaps have local edits?

Nonetheless, I can reproduce the race nearly 100% of the time using the test below, so I can work on a fix now.

func TestIssue67079(t *testing.T) {
	// This test reproduced a race in the SSA builder nearly 100% of the time.

	// Load the package.
	const src = `package p; type T int; func (T) f() {}; var _ = (*T).f`
	conf := loader.Config{Fset: token.NewFileSet()}
	f, err := parser.ParseFile(conf.Fset, "p.go", src, 0)
	if err != nil {
		t.Fatal(err)
	}
	conf.CreateFromFiles("p", f)
	iprog, err := conf.Load()
	if err != nil {
		t.Fatal(err)
	}
	pkg := iprog.Created[0].Pkg

	// Create and build SSA program.
	ptrT := types.NewPointer(pkg.Scope().Lookup("T").Type())
	ptrTf := types.NewMethodSet(ptrT).At(0) // (*T).f symbol
	prog := ssautil.CreateProgram(iprog, ssa.BuilderMode(0))
	prog.Build()

	var g errgroup.Group

	// Access bodies of all functions.
	g.Go(func() error {
		for fn := range ssautil.AllFunctions(prog) {
			for _, b := range fn.Blocks {
				for _, instr := range b.Instrs {
					if call, ok := instr.(*ssa.Call); ok {
						call.Common().StaticCallee() // access call.Value
					}
				}
			}
		}
		return nil
	})

	// Force building of wrappers.
	g.Go(func() error {
		prog.MethodValue(ptrTf)
		return nil
	})

	g.Wait() // ignore error
}

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/590815 mentions this issue: go/ssa: fix MethodValue race

@aykevl
Copy link
Author

aykevl commented Jun 6, 2024

Thank you for working on a fix!

First, the "Goroutine 182 (running)" stack shows a mutual recursion between ssa.goversionOf and ssa.(*Program).CreatePackage(). How is this possible?

Yeah I was wondering about that too. Perhaps it's a bug in the stack trace code? I'm on linux/arm64 (Asahi Linux, Fedora 40) if that matters.

goversionOf does not call CreatePackage. Also, goversionOf no longer exists in the version of SSA required by your go.mod file (golang.org/x/tools@v0.17.0).

I added a replace directive to go.mod to use golang/tools@75ff53b, see my previous comment.

Second, the line numbers in the tinygo source don't line up. For example, the createFunctionCall frame has the race read at compiler.go:1833 +0xd4, but this line of code is a simple exported := false declaration, which is not racy; the next line is a call to instr.StaticCallee, which makes sense as the racy read. Did you perhaps have local edits?

Yeah I did have a few local edits but forgot to mention it. Sorry about that!
(It was basically a few lines to run a deferred function to print the function that was being compiled, but then I found out deferred functions don't seem to be run for SIGSEGV).

@adonovan
Copy link
Member

adonovan commented Jun 6, 2024

Thank you for working on a fix!

Thanks for reporting the crucial information!

First, the "Goroutine 182 (running)" stack shows a mutual recursion between ssa.goversionOf and ssa.(*Program).CreatePackage(). How is this possible?

Yeah I was wondering about that too. Perhaps it's a bug in the stack trace code? I'm on linux/arm64 (Asahi Linux, Fedora 40) if that matters.

I would urge you to investigate and report it separately, as regardless of whether it's a bug in your code, our code, or the Go runtime, it seems like something we would all want to fix. Any reliable way to reproduce that impossible stack would be a great help.

Yeah I did have a few local edits but forgot to mention it. Sorry about that! (It was basically a few lines to run a deferred function to print the function that was being compiled,

Not to worry, the information you provided was sufficient to pinpoint the problem.

but then I found out deferred functions don't seem to be run for SIGSEGV

That's right; only panic and Goexit cause deferred functions to run. Internal errors in the runtime (called "fatal" or "throw"), or unhandled signals, simply terminate the program and print the stacks.

@aykevl
Copy link
Author

aykevl commented Jun 6, 2024

I would urge you to investigate and report it separately, as regardless of whether it's a bug in your code, our code, or the Go runtime, it seems like something we would all want to fix. Any reliable way to reproduce that impossible stack would be a great help.

Ok, here is a way to reproduce this:

  1. Checkout the race-impossible-backtrace branch: https://github.com/tinygo-org/tinygo/tree/race-impossible-stacktrace (it's almost identical to the race-debug branch but uses an older tools commit).
  2. Build tinygo with the -race flag (go install -race for example). You'll need CGo dependencies (gcc etc) and LLVM packages installed (see https://tinygo.org/docs/guides/build/bring-your-own-llvm/ for details).
  3. Run the compiler using tinygo build -o test.elf test.go, where test.go is the following code:
package main

import _ "context"

func main() {
}

You may need to run this a few times, but for me it reproduces in about half of the cases (with the same CreatePackage/goversionOf recursion that shouldn't happen).

This is on an aarch64 system (Apple M1 Pro CPU) running Fedora Asahi 40, with the distribution version of Go (but I've also seen the same bug on a Go version downloaded from go.dev/dl so it isn't distribution specific).

I can turn this into a separate bug? I guess it should be possible to reduce this testcase further.

@adonovan
Copy link
Member

adonovan commented Jun 6, 2024

Even after checking out the repo and the correct branch, installing llvm via homebrew, and pulling the git submodules, I continue to get this build error:

tinygo2$ go install -race
# tinygo.org/x/go-llvm
../../go/pkg/mod/tinygo.org/x/go-llvm@v0.0.0-20240518103902-697964f2a9dc/analysis.go:16:10: fatal error: 'llvm-c/Analysis.h' file not found
#include "llvm-c/Analysis.h" // If you are getting an error here you need to build or install LLVM, see https://tinygo.org/docs/guides/build/
         ^~~~~~~~~~~~~~~~~~~
1 error generated.

so unfortunately I can't reproduce it yet. Could you disassemble the goversionOf function with this command and share the result?

$ go tool objdump tinygo | awk 'on && /^TEXT/ {exit}; on {print}; /^TEXT .*ssa.goversionOf/ {on=1}'

I can turn this into a separate bug? I guess it should be possible to reduce this testcase further.

Yes, please do.

@aykevl
Copy link
Author

aykevl commented Jun 7, 2024

@adonovan weird, did you try brew install llvm@18? Because that's the version that is needed.

Could you disassemble the goversionOf function with this command and share the result?

$ go tool objdump tinygo | awk 'on && /^TEXT/ {exit}; on {print}; /^TEXT .*ssa.goversionOf/ {on=1}'

goversionOf doesn't seem to exist in the binary. Perhaps it was inlined?
CreatePackage is rather large though, about 896 instructions in size.

I'll try to create a bug report later, I don't really have the time right now. Maybe after this weekend.

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/591775 mentions this issue: go/ssa: fix Synthetic data races

aykevl pushed a commit to tinygo-org/tools that referenced this issue Jun 12, 2024
Program.MethodValue returns the wrapper function for a given
function symbol, creating them on demand and caching them.
However, methods are inserted into the cache before building
is complete, so if MethodValue is called concurrently, thread
A may construct a function, insert it in the cache, then
build it, while another thread B retrieves it from the cache
and returns without waiting, causing it to observe the function
in the process of being built.

The fix is for threads making a cache hit to wait for an
event that indicates completion of building. The event
is represented as a field, 'built chan unit'.
(The extra synchroniziation makes no apparent difference
to TestStdlib's SSA create and build metrics.)

Also:
- Add a test that reliably reproduces the data race.
- Un-export the methods created.{add,at,len}.
- rename Function.done to 'finish', and simplify.
- define type unit = struct{} and clean up.
- consolidate clean-up of transient builder state in finishBody.

Fixes golang/go#67079

Change-Id: I621150b962dc0430d78d2895d81aa7015a53e2cb
@adonovan
Copy link
Member

adonovan commented Jun 14, 2024

@aykevl FYI: my fix MethodValue race CL, which you cherrypicked to tinygo, is not going to be merged to x/tools. @timothy-king extended it in CL 591775 to cover the races that can also arise though generic instantiation; we hope to land that in x/tools soon.

@aykevl
Copy link
Author

aykevl commented Jun 14, 2024

@adonovan yeah that's what I expected. I just wanted a quick workaround because this bug has been nagging us for quite some time (and we have an upcoming release) and the patch looked smaller and more focused. Once the fix lands in x/tools, I'll update TinyGo to use that version instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

6 participants