ianlancetaylor / demangle

C++ symbol name demangler written in Go
BSD 3-Clause "New" or "Revised" License
166 stars 24 forks source link

_Z1jI1AEDTcldtfp_cvPT_EES1_ crashes demangler #2

Closed octoploid closed 7 years ago

octoploid commented 7 years ago

% c++filt_ _Z1jI1AEDTcldtfp_cvPTEES1 panic: TemplateParam Template field is nil

goroutine 1 [running]: panic(0x4d67c0, 0xc42000e8c0) /usr/lib/go/src/runtime/panic.go:500 +0x1a1 github.com/ianlancetaylor/demangle.(TemplateParam).print(0xc42000e7e0, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:373 +0x12b github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x570c60, 0xc42000e7e0) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.printBase(0xc42009e000, 0x570840, 0xc42000e7f0, 0x570c60, 0xc42000e7e0) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:565 +0xab github.com/ianlancetaylor/demangle.(PointerType).print(0xc42000e7f0, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:578 +0x52 github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x570840, 0xc42000e7f0) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.(Cast).print(0xc42000e800, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:1763 +0x64 github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x56ffa0, 0xc42000e800) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.parenthesize(0xc42009e000, 0x56ffa0, 0xc42000e800) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:1812 +0x8f github.com/ianlancetaylor/demangle.(Binary).print(0xc420014990, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:2012 +0x120 github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x56fee0, 0xc420014990) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.parenthesize(0xc42009e000, 0x56fee0, 0xc420014990) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:1812 +0x8f github.com/ianlancetaylor/demangle.(Binary).print(0xc4200149c0, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:1995 +0xa7 github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x56fee0, 0xc4200149c0) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.(Decltype).print(0xc42000e810, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:1297 +0x64 github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x570180, 0xc42000e810) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.(FunctionType).print(0xc420014a20, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:946 +0xac github.com/ianlancetaylor/demangle.(printState).print(0xc42009e000, 0x570420, 0xc420014a20) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:102 +0x16a github.com/ianlancetaylor/demangle.(*Typed).print(0xc42000a520, 0xc42009e000) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:148 +0xf8 github.com/ianlancetaylor/demangle.ASTToString(0x570d80, 0xc42000a520, 0xc42000e730, 0x1, 0x1, 0x570d80, 0xc42000a520) /var/tmp/go/src/github.com/ianlancetaylor/demangle/ast.go:46 +0xf2 github.com/ianlancetaylor/demangle.ToString(0x7ffce443b802, 0x1b, 0xc42000e730, 0x1, 0x1, 0x0, 0x113afa9af06b, 0x40, 0x40) /var/tmp/go/src/github.com/ianlancetaylor/demangle/demangle.go:57 +0x9c github.com/ianlancetaylor/demangle.Filter(0x7ffce443b802, 0x1b, 0xc42000e730, 0x1, 0x1, 0xc42000e730, 0x0) /var/tmp/go/src/github.com/ianlancetaylor/demangle/demangle.go:41 +0x57 main.doDemangle(0xc4200102c0, 0x7ffce443b802, 0x1b) /var/tmp/go/src/github.com/ianlancetaylor/demangle/c++filt.go:122 +0xea main.main() /var/tmp/go/src/github.com/ianlancetaylor/demangle/c++filt.go:73 +0x595

Testcase: gcc/testsuite/g++.dg/abi/mangle37.C

octoploid commented 7 years ago

Seems to work with go1.8. Closing.