Skip to content
Permalink
Browse files

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 golang#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>
  • Loading branch information...
taylorza authored and griesemer committed Sep 2, 2018
1 parent 98fd668 commit 4a095b87d30f1f6f7ae01e966f1af5ee63b15c1c
Showing with 20 additions and 1 deletion.
  1. +1 −1 src/cmd/compile/internal/gc/typecheck.go
  2. +19 −0 test/fixedbugs/issue27356.go
@@ -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",
@@ -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"

0 comments on commit 4a095b8

Please sign in to comment.
You can’t perform that action at this time.