aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/syntax/parser.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2020-12-14 17:23:00 -0800
committerRobert Griesemer <gri@golang.org>2020-12-15 19:44:38 +0000
commit6b18081d01f6f87b9af9e5b3910f1379d52a13eb (patch)
tree4d660d75989a3692c8e9d925ac3d5c4f4f470d6b /src/cmd/compile/internal/syntax/parser.go
parent14e4267c3446fe30bb1c7a1a874dc7e18c1d38d1 (diff)
downloadgo-6b18081d01f6f87b9af9e5b3910f1379d52a13eb.tar.gz
go-6b18081d01f6f87b9af9e5b3910f1379d52a13eb.zip
[dev.typeparams] cmd/compile/internal/types2: don't crash if import path is missing
In package syntax: - fix parser appendGroup to not add nil entries - non-string paths are syntax errors per the spec; report in parser - document ImportDecl.Path invariants In package types2: - guard against absent paths In package gc: - guard against absent paths Fixes #43190. Change-Id: Ic6a06f6a96b7f519feaa1ceaf4376fc5ab0f0129 Reviewed-on: https://go-review.googlesource.com/c/go/+/278114 Trust: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax/parser.go')
-rw-r--r--src/cmd/compile/internal/syntax/parser.go22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go
index 4af7e462ed..90b67def0f 100644
--- a/src/cmd/compile/internal/syntax/parser.go
+++ b/src/cmd/compile/internal/syntax/parser.go
@@ -499,21 +499,16 @@ func (p *parser) appendGroup(list []Decl, f func(*Group) Decl) []Decl {
p.clearPragma()
p.next() // must consume "(" after calling clearPragma!
p.list(_Semi, _Rparen, func() bool {
- list = append(list, f(g))
+ if x := f(g); x != nil {
+ list = append(list, x)
+ }
return false
})
} else {
- list = append(list, f(nil))
- }
-
- if debug {
- for _, d := range list {
- if d == nil {
- panic("nil list entry")
- }
+ if x := f(nil); x != nil {
+ list = append(list, x)
}
}
-
return list
}
@@ -540,8 +535,13 @@ func (p *parser) importDecl(group *Group) Decl {
if d.Path == nil {
p.syntaxError("missing import path")
p.advance(_Semi, _Rparen)
- return nil
+ return d
+ }
+ if !d.Path.Bad && d.Path.Kind != StringLit {
+ p.syntaxError("import path must be a string")
+ d.Path.Bad = true
}
+ // d.Path.Bad || d.Path.Kind == StringLit
return d
}