$ GOOS=linux go tool compile x.go
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: interface conversion: interface {} is runtime.errorString, not syntax.localError [recovered]
panic: interface conversion: interface {} is runtime.errorString, not syntax.localError
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x110763d]
goroutine 18 [running]:
cmd/compile/internal/syntax.Parse.func1(0xc420341f30)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/syntax.go:66 +0xfe
panic(0x17060e0, 0xc42030b0c0)
/Users/josh/go/tip/src/runtime/panic.go:491 +0x283
cmd/compile/internal/syntax.Fprint.func1(0xc420341998, 0xc420341910, 0xc4203419a0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:28 +0xb0
panic(0x17052c0, 0x1a87150)
/Users/josh/go/tip/src/runtime/panic.go:491 +0x283
cmd/compile/internal/syntax.(*printer).printRawNode(0xc420341910, 0x1a6ce20, 0x0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:405 +0x528d
cmd/compile/internal/syntax.(*printer).printNode(0xc420341910, 0x1a6ce20, 0x0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:327 +0x3f
cmd/compile/internal/syntax.(*printer).print(0xc420341910, 0xc42033e0a0, 0x3, 0x3)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:250 +0x60c
cmd/compile/internal/syntax.(*printer).printRawNode(0xc420341910, 0x1a6ce60, 0xc4203058a0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:517 +0x4f7c
cmd/compile/internal/syntax.(*printer).printNode(0xc4202f5910, 0x1a6ce60, 0xc4203058a0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:327 +0x3f
cmd/compile/internal/syntax.(*printer).print(0xc420341910, 0xc420305940, 0x2, 0x2)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:250 +0x60c
cmd/compile/internal/syntax.(*printer).printStmtList(0xc420341910, 0xc42007c930, 0x1, 0x1, 0x1)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:879 +0x105
cmd/compile/internal/syntax.(*printer).printRawNode(0xc420341910, 0x1a6cda0, 0xc42030b080)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:535 +0x1d95
cmd/compile/internal/syntax.(*printer).printNode(0xc4202f5910, 0x1a6cda0, 0xc42030b080)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:327 +0x3f
cmd/compile/internal/syntax.(*printer).print(0xc420341910, 0xc4203400b8, 0x3, 0x3)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:250 +0x60c
cmd/compile/internal/syntax.(*printer).printRawNode(0xc4202f5910, 0x1a6d1e0, 0xc420305880)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:358 +0x3e24
cmd/compile/internal/syntax.(*printer).printNode(0xc420045910, 0x1a6d1e0, 0xc420305880)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:327 +0x3f
cmd/compile/internal/syntax.(*printer).print(0xc420341910, 0xc420341538, 0x4, 0x4)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:250 +0x60c
cmd/compile/internal/syntax.(*printer).printRawNode(0xc420045910, 0x1a6cc60, 0xc42030e180)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:438 +0x472e
cmd/compile/internal/syntax.(*printer).printNode(0xc420045910, 0x1a6cc60, 0xc42030e180)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:327 +0x3f
cmd/compile/internal/syntax.(*printer).print(0xc420341910, 0xc420341900, 0x1, 0x1)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:250 +0x60c
cmd/compile/internal/syntax.Fprint(0x1a6a820, 0xc420338000, 0x1a6cc60, 0xc42030e180, 0x100d400, 0xc, 0x0, 0x0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:32 +0x13b
cmd/compile/internal/syntax.String(0x1a6cc60, 0xc42030e180, 0xc42030e180, 0x1a6cc60)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/printer.go:40 +0x64
cmd/compile/internal/syntax.(*parser).unaryExpr(0xc420330000, 0x1ad4e40, 0x1bcd6c8)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:615 +0x1d7
cmd/compile/internal/syntax.(*parser).binaryExpr(0xc420330000, 0x0, 0xc420046b01, 0xc42030e120)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:529 +0x2f
cmd/compile/internal/syntax.(*parser).expr(0xc420330000, 0x15, 0x0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:522 +0x34
cmd/compile/internal/syntax.(*parser).typeOrNil(0xc420330000, 0x30, 0x171d1a0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:1029 +0x44c
cmd/compile/internal/syntax.(*parser).type_(0xc420330000, 0xc42030e0f0, 0xc420021370)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:959 +0x2f
cmd/compile/internal/syntax.(*parser).paramDeclOrNil(0xc420330000, 0xb)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:1390 +0xbb
cmd/compile/internal/syntax.(*parser).paramList(0xc420330000, 0xc42030b000, 0xc420305820, 0xc42002cda0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:1436 +0x11e
cmd/compile/internal/syntax.(*parser).funcDeclOrNil(0xc420330000, 0x24)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:463 +0x252
cmd/compile/internal/syntax.(*parser).fileOrNil(0xc420330000, 0xc4200924b0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/parser.go:289 +0x355
cmd/compile/internal/syntax.Parse(0xc4200924b0, 0x1a6aa20, 0xc4200904d0, 0xc42007c860, 0xc42007c870, 0x1, 0x0, 0x0, 0x0)
/Users/josh/go/tip/src/cmd/compile/internal/syntax/syntax.go:73 +0xf1
cmd/compile/internal/gc.parseFiles.func1(0xc42030af00, 0x7fff5fbff901, 0x4)
/Users/josh/go/tip/src/cmd/compile/internal/gc/noder.go:39 +0x2c5
created by cmd/compile/internal/gc.parseFiles
/Users/josh/go/tip/src/cmd/compile/internal/gc/noder.go:28 +0x188
Does not reproduce with 1.8.
Marking Go 1.9Maybe, because it is a regression, but possibly a low priority one.
Running on darwin/amd64, with go1.9beta1:
Does not reproduce with 1.8.
Marking Go 1.9Maybe, because it is a regression, but possibly a low priority one.
cc @mdempsky @griesemer
Found with go-fuzz (cc @dvyukov).