aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaylorza <taylorza@gmail.com>2018-09-02 18:09:29 -0400
committerBrad Fitzpatrick <bradfitz@golang.org>2018-10-03 17:40:23 +0000
commit19fe28a3dc91ffb6f3ec31211abb3bf7ae088fb6 (patch)
treeeec91d3fe2fcfdf9e0c113f0808a17351427db0a
parente9c178da3bcaecd07452b67bc5dbe41db3250937 (diff)
downloadgo-19fe28a3dc91ffb6f3ec31211abb3bf7ae088fb6.tar.gz
go-19fe28a3dc91ffb6f3ec31211abb3bf7ae088fb6.zip
[release-branch.go1.11] 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. 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 4a095b87d30f1f6f7ae01e966f1af5ee63b15c1c) Reviewed-on: https://go-review.googlesource.com/c/139103 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r--src/cmd/compile/internal/gc/typecheck.go2
-rw-r--r--test/fixedbugs/issue27356.go19
2 files changed, 20 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index 51dd0dba87..bf7090518c 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.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",
diff --git a/test/fixedbugs/issue27356.go b/test/fixedbugs/issue27356.go
new file mode 100644
index 0000000000..42784876a5
--- /dev/null
+++ b/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"
+