Skip to content

Commit

Permalink
[release-branch.go1.11] cmd/compile: don't crash reporting misuse of …
Browse files Browse the repository at this point in the history
…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.

Updates #27356
Fixes #27399

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>
(cherry picked from commit 4a095b8)
Reviewed-on: https://go-review.googlesource.com/c/139103
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
taylorza authored and bradfitz committed Oct 3, 2018
1 parent e9c178d commit 19fe28a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/gc/typecheck.go
Expand Up @@ -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",
Expand Down
19 changes: 19 additions & 0 deletions test/fixedbugs/issue27356.go
@@ -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 19fe28a

Please sign in to comment.