mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +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:
parent
d4247f5167
commit
70b277cf2e
@ -2104,7 +2104,7 @@ func CheckUnused(fn *ir.Func) {
|
|||||||
|
|
||||||
// CheckReturn makes sure that fn terminates appropriately.
|
// CheckReturn makes sure that fn terminates appropriately.
|
||||||
func CheckReturn(fn *ir.Func) {
|
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)
|
markBreak(fn)
|
||||||
if !isTermNodes(fn.Body) {
|
if !isTermNodes(fn.Body) {
|
||||||
base.ErrorfAt(fn.Endlineno, "missing return at end of function")
|
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.
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
@ -11,10 +11,10 @@
|
|||||||
|
|
||||||
package p
|
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 T(fn F) {
|
||||||
func() {
|
func() {
|
||||||
fn(nil) // If Decldepth is not initialized properly, typecheckclosure() Fatals here.
|
fn(nil) // If Decldepth is not initialized properly, typecheckclosure() Fatals here.
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user