mirror of
https://github.com/golang/go
synced 2025-02-19 03:19:07 +00:00
cmd/compile: only check return for valid functions
CheckReturn uses fn.Type() unconditionally, so for invalid function, fn.Type() will be nil, causes the compiler crashes. Updates #43311 Change-Id: I4420dd296c72ea83986b38fbf2c7f51fa59757c8 Reviewed-on: https://go-review.googlesource.com/c/go/+/298709 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
@ -2104,7 +2104,7 @@ func CheckUnused(fn *ir.Func) {
|
||||
|
||||
// CheckReturn makes sure that fn terminates appropriately.
|
||||
func CheckReturn(fn *ir.Func) {
|
||||
if fn.Type().NumResults() != 0 && len(fn.Body) != 0 {
|
||||
if fn.Type() != nil && fn.Type().NumResults() != 0 && len(fn.Body) != 0 {
|
||||
markBreak(fn)
|
||||
if !isTermNodes(fn.Body) {
|
||||
base.ErrorfAt(fn.Endlineno, "missing return at end of function")
|
||||
|
@ -1,4 +1,4 @@
|
||||
// errorcheck
|
||||
// errorcheck -d=panic
|
||||
|
||||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
@ -11,10 +11,10 @@
|
||||
|
||||
package p
|
||||
|
||||
type F func(b T) // ERROR "T .*is not a type|expected type"
|
||||
type F func(b T) // ERROR "T .*is not a type|expected type"
|
||||
|
||||
func T(fn F) {
|
||||
func() {
|
||||
fn(nil) // If Decldepth is not initialized properly, typecheckclosure() Fatals here.
|
||||
}()
|
||||
func() {
|
||||
fn(nil) // If Decldepth is not initialized properly, typecheckclosure() Fatals here.
|
||||
}()
|
||||
}
|
||||
|
Reference in New Issue
Block a user