Skip to content

Commit c7c874a

Browse files
aykevldeadprogram
authored andcommitted
loader: fix panic in CGo files with syntax errors
If all of the Go files presented to the compiler have syntax errors, cgo.Process gets an empty files slice and will panic: panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]: github.com/tinygo-org/tinygo/cgo.Process({0x0, 0x4e8e36, 0x0}, {0xc000024104, 0x18}, 0xc000090fc0, {0xc000899780, 0x7, 0xc00018ce68}) /home/ayke/src/github.com/tinygo-org/tinygo/cgo/cgo.go:186 +0x22ee github.com/tinygo-org/tinygo/loader.(*Package).parseFiles(0xc0001ccf00) /home/ayke/src/github.com/tinygo-org/tinygo/loader/loader.go:400 +0x51e This is simple to work around: just don't try to run CGo when there are no files to process. It just means there are bugs to fix before CGo can properly run. (This is perhaps not the nicest solution but certainly the simplest).
1 parent c528a16 commit c7c874a

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

loader/loader.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,11 @@ func (p *Package) parseFiles() ([]*ast.File, error) {
386386
}
387387

388388
// Do CGo processing.
389-
if len(p.CgoFiles) != 0 {
389+
// This is done when there are any CgoFiles at all. In that case, len(files)
390+
// should be non-zero. However, if len(GoFiles) == 0 and len(CgoFiles) == 1
391+
// and there is a syntax error in a CGo file, len(files) may be 0. Don't try
392+
// to call cgo.Process in that case as it will only cause issues.
393+
if len(p.CgoFiles) != 0 && len(files) != 0 {
390394
var initialCFlags []string
391395
initialCFlags = append(initialCFlags, p.program.config.CFlags()...)
392396
initialCFlags = append(initialCFlags, "-I"+p.Dir)

0 commit comments

Comments
 (0)