mirror of
https://github.com/golang/go
synced 2024-11-23 05:00:07 -07:00
cmd/compile: don't crash reporting misuse of shadowed built-in function
The existing implementation causes a compiler panic if a function parameter shadows a built-in function, and then calling that shadowed name. Fixes #27356 Change-Id: I1ffb6dc01e63c7f499e5f6f75f77ce2318f35bcd Reviewed-on: https://go-review.googlesource.com/132876 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
98fd66808f
commit
4a095b87d3
@ -1263,7 +1263,7 @@ func typecheck1(n *Node, top int) *Node {
|
||||
n.Op = OCALLFUNC
|
||||
if t.Etype != TFUNC {
|
||||
name := l.String()
|
||||
if isBuiltinFuncName(name) {
|
||||
if isBuiltinFuncName(name) && l.Name.Defn != nil {
|
||||
// be more specific when the function
|
||||
// name matches a predeclared function
|
||||
yyerror("cannot call non-function %s (type %v), declared at %s",
|
||||
|
19
test/fixedbugs/issue27356.go
Normal file
19
test/fixedbugs/issue27356.go
Normal file
@ -0,0 +1,19 @@
|
||||
// errorcheck
|
||||
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Issue 27356: function parameter hiding built-in function results in compiler crash
|
||||
|
||||
package p
|
||||
|
||||
var a = []int{1,2,3}
|
||||
|
||||
func _(len int) {
|
||||
_ = len(a) // ERROR "cannot call non-function"
|
||||
}
|
||||
|
||||
var cap = false
|
||||
var _ = cap(a) // ERROR "cannot call non-function"
|
||||
|
Loading…
Reference in New Issue
Block a user