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

cmd/compile: crash when compiling illegal code #48818

go101 opened this issue Oct 6, 2021 · 3 comments

cmd/compile: crash when compiling illegal code #48818

go101 opened this issue Oct 6, 2021 · 3 comments


Copy link

@go101 go101 commented Oct 6, 2021

What version of Go are you using (go version)?

$ go version
go version go1.17.1 linux/amd64

Does this issue reproduce with the latest release?


What did you do?

package main

func main() {
	_ = &([10]bool[1]{})

What did you expect to see?

Report errors

What did you see instead?


Copy link

@ALTree ALTree commented Oct 6, 2021

On tip (go1.18-55e7f7e12d) there's no crash:

$ gotip tool compile -G=0 test.go
test.go:4:19: syntax error: unexpected {, expecting )

$ gotip tool compile test.go
test.go:4:12: bool is not a generic type

But the second error message is... inscrutable.

EDIT: oh, I see. It prints that when you try to "index" with [ on a non-generic type(?)

cc @griesemer @findleyr @mdempsky to decide if the tip error message looks good.


@ALTree ALTree added this to the Go1.18 milestone Oct 6, 2021
Copy link

@findleyr findleyr commented Oct 6, 2021

Here's the 1.17.1 panic:

go1.17.1 run issue48818.go
# command-line-arguments
panic: interface conversion: *ir.IndexExpr is not ir.Ntype: missing method CanBeNtype

goroutine 1 [running]:
cmd/compile/internal/noder.(*noder).expr(0xc000382bd0, {0xe38c00, 0xc00007c0a0})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:695 +0x767
cmd/compile/internal/noder.(*noder).expr(0xc000382bd0, {0xe38f90, 0xc0000360c0})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:742 +0x1693
cmd/compile/internal/noder.(*noder).exprList(0x14a5294a5294a5, {0xe38f90, 0xc0000360c0})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:668 +0x67
cmd/compile/internal/noder.(*noder).stmtFall(0xc000382bd0, {0xe38a80, 0xc000036100}, 0x0)
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:1055 +0x845
cmd/compile/internal/noder.(*noder).stmtsFall(0x0, {0xc000066030, 0x1, 0x1}, 0x0)
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:1005 +0xea
cmd/compile/internal/noder.(*noder).stmts(0xc00001e2c0, {0xc000066030, 0xc00007c0f0, 0x0})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:999 +0x25
cmd/compile/internal/noder.(*noder).funcBody(0xc000382bd0, 0xc00001e2c0, 0xc000036080)
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:216 +0x8e
cmd/compile/internal/noder.(*noder).funcDecl(0xc000382bd0, 0xc0000720c0)
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:587 +0x5a6
cmd/compile/internal/noder.(*noder).decls(0xc000382bd0, {0xc000066040, 0x1, 0x1})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:331 +0x2c5
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:285 +0xb8
cmd/compile/internal/noder.LoadPackage({0xc0000ba140, 0x2, 0x0})
        /usr/local/go/src/cmd/compile/internal/noder/noder.go:85 +0x358
        /usr/local/go/src/cmd/compile/internal/gc/main.go:192 +0xb2e
        /usr/local/go/src/cmd/compile/main.go:55 +0xdd

The inscrutable error message in 1.18 is really unrelated. I'll open a separate issue.


Copy link

@mdempsky mdempsky commented Oct 6, 2021

The 1.17.1 crash is unfortunate, but the gotip errors look okay to me. Since the code is invalid anyway, I don't think it's necessary to backport any fixes.

I'm going to close. If anyone disagrees, feel free to reopen.


@mdempsky mdempsky closed this Oct 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
4 participants