Commit db37e160 authored by Robert Griesemer's avatar Robert Griesemer

go/parser: make sure we have a valid AST when 'if' condition is missing

This prevents a crash in go/types due to a nil condition in an 'if'
statement. There's more we can do to make go/types more robust but
this will address the immediate cause and also makes sure that the
parser returns a valid AST in this case.

Fixes #25438.

Change-Id: Ie55dc2c722352a5ecb17af6a16983741e8a8b515
Reviewed-on: https://go-review.googlesource.com/113735
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarDaniel Martí <mvdan@mvdan.cc>
Reviewed-by: 's avatarDominik Honnef <dominik@honnef.co>
Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
parent 8a16c710
......@@ -1830,6 +1830,7 @@ func (p *parser) makeExpr(s ast.Stmt, want string) ast.Expr {
func (p *parser) parseIfHeader() (init ast.Stmt, cond ast.Expr) {
if p.tok == token.LBRACE {
p.error(p.pos, "missing condition in if statement")
cond = &ast.BadExpr{From: p.pos, To: p.pos}
return
}
// p.tok != token.LBRACE
......@@ -1877,6 +1878,11 @@ func (p *parser) parseIfHeader() (init ast.Stmt, cond ast.Expr) {
}
}
// make sure we have a valid AST
if cond == nil {
cond = &ast.BadExpr{From: p.pos, To: p.pos}
}
p.exprLev = outer
return
}
......
......@@ -240,3 +240,11 @@ func issue24140(x interface{}) int {
panic(0)
}
}
// Test that we don't crash when the 'if' condition is missing.
func issue25438() {
if { /* ERROR missing condition */ }
if x := 0; /* ERROR missing condition */ { _ = x }
if
{ /* ERROR missing condition */ }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment