mirror of https://github.com/golang/go.git
go/types: handle nil pointer when panic is written outside of a function
The current implementation crashes when someone writes a panic outside of a function, which makes sense since that is broken code. This fix allows one to type-check broken code. Updates #22467 Change-Id: I81b90dbd918162a20c60a821340898eaf02e648d Reviewed-on: https://go-review.googlesource.com/132235 Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
parent
31389254de
commit
c99687f87a
|
|
@ -261,6 +261,8 @@ func TestTypesInfo(t *testing.T) {
|
||||||
{`package x0; func _() { var x struct {f string}; x.f := 0 }`, `x.f`, `string`},
|
{`package x0; func _() { var x struct {f string}; x.f := 0 }`, `x.f`, `string`},
|
||||||
{`package x1; func _() { var z string; type x struct {f string}; y := &x{q: z}}`, `z`, `string`},
|
{`package x1; func _() { var z string; type x struct {f string}; y := &x{q: z}}`, `z`, `string`},
|
||||||
{`package x2; func _() { var a, b string; type x struct {f string}; z := &x{f: a; f: b;}}`, `b`, `string`},
|
{`package x2; func _() { var a, b string; type x struct {f string}; z := &x{f: a; f: b;}}`, `b`, `string`},
|
||||||
|
{`package x3; var x = panic("");`, `panic`, `func(interface{})`},
|
||||||
|
{`package x4; func _() { panic("") }`, `panic`, `func(interface{})`},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
|
|
||||||
|
|
@ -476,7 +476,7 @@ func (check *Checker) builtin(x *operand, call *ast.CallExpr, id builtinId) (_ b
|
||||||
// panic(x)
|
// panic(x)
|
||||||
// record panic call if inside a function with result parameters
|
// record panic call if inside a function with result parameters
|
||||||
// (for use in Checker.isTerminating)
|
// (for use in Checker.isTerminating)
|
||||||
if check.sig.results.Len() > 0 {
|
if check.sig != nil && check.sig.results.Len() > 0 {
|
||||||
// function has result parameters
|
// function has result parameters
|
||||||
p := check.isPanic
|
p := check.isPanic
|
||||||
if p == nil {
|
if p == nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue