mirror of
https://github.com/golang/go
synced 2024-11-23 20:20:01 -07:00
cmd/compile: avoid panic when printing *<N>
When compiling the program: package p func _(){ *;:= } Before: x.go:4:3: syntax error: unexpected semicolon, expecting expression x.go:4:4: non-name *%!v(PANIC=runtime error: invalid memory address or nil pointer dereference) on left side of := x.go:5:1: syntax error: unexpected }, expecting expression After: x.go:4:3: syntax error: unexpected semicolon, expecting expression x.go:4:4: non-name *<N> on left side of := x.go:5:1: syntax error: unexpected }, expecting expression No test because: (1) we don't have a good mechanism to check for the absence of the string "PANIC" in an error message (2) the string "*<N>", while better, is itself ugly enough that I don't want to actively check for it (3) the bug isn't very important, the kind of thing only fuzzers encounter (4) the fix is obvious and trivial Fixes #20220 Change-Id: I35faa986b60b671414ee999d6264b06937f250e3 Reviewed-on: https://go-review.googlesource.com/42498 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
6e9b6e1d22
commit
e41fb5591f
@ -1509,16 +1509,10 @@ func (n *Node) exprfmt(s fmt.State, prec int, mode fmtMode) {
|
||||
}
|
||||
mode.Fprintf(s, "make(%v)", n.Type)
|
||||
|
||||
case OPLUS, OMINUS, OADDR, OCOM, OIND, ONOT, ORECV:
|
||||
// Unary
|
||||
case OPLUS,
|
||||
OMINUS,
|
||||
OADDR,
|
||||
OCOM,
|
||||
OIND,
|
||||
ONOT,
|
||||
ORECV:
|
||||
mode.Fprintf(s, "%#v", n.Op)
|
||||
if n.Left.Op == n.Op {
|
||||
if n.Left != nil && n.Left.Op == n.Op {
|
||||
fmt.Fprint(s, " ")
|
||||
}
|
||||
n.Left.exprfmt(s, nprec+1, mode)
|
||||
|
Loading…
Reference in New Issue
Block a user