Following an empty import, a declaration involving a ? symbol
generates an internal compiler error when the name of the
symbol (in newname function).
package a
import""
var?
go.go:2: import path is empty
go.go:3: internal compiler error: newname nil
Make sure dclname is not called when the symbol is nil.
The error message is now:
go.go:2: import path is empty
go.go:3: invalid declaration
go.go:4: syntax error: unexpected EOF
This CL was initially meant to be applied to the old parser,
and has been updated to apply to the new parser.
Fixes #11610
Change-Id: I75e07622fb3af1d104e3a38c89d9e128e3b94522
Reviewed-on: https://go-review.googlesource.com/15268
Reviewed-by: Russ Cox <rsc@golang.org>
return nil
}
+func (p *parser) dcl_name(sym *Sym) *Node {
+ if trace && Debug['x'] != 0 {
+ defer p.trace("dcl_name")()
+ }
+
+ if sym == nil {
+ yyerrorl(int(prevlineno), "invalid declaration")
+ return nil
+ }
+ return dclname(sym)
+}
+
func (p *parser) onew_name() *Node {
if trace && Debug['x'] != 0 {
defer p.trace("onew_name")()
defer p.trace("dcl_name_list")()
}
- l := list1(dclname(p.sym()))
+ l := list1(p.dcl_name(p.sym()))
for p.got(',') {
- l = list(l, dclname(p.sym()))
+ l = list(l, p.dcl_name(p.sym()))
}
return l
}
--- /dev/null
+// errorcheck
+
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test an internal compiler error on ? symbol in declaration
+// following an empty import.
+
+package a
+import"" // ERROR "import path is empty"
+var? // ERROR "invalid declaration"
+
+var x int // ERROR "unexpected var"
+
+func main() {
+}