1
0
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:
taylorza 2018-09-02 18:09:29 -04:00 committed by Robert Griesemer
parent 98fd66808f
commit 4a095b87d3
2 changed files with 20 additions and 1 deletions

View File

@ -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",

View 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"