]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: avoid function literal name collision with "glob"
authorIan Lance Taylor <iant@golang.org>
Mon, 27 Jun 2016 15:21:55 +0000 (08:21 -0700)
committerIan Lance Taylor <iant@golang.org>
Mon, 27 Jun 2016 21:05:28 +0000 (21:05 +0000)
The compiler was treating all global function literals as occurring in a
function named "glob", which caused a symbol name collision when there
was an actual function named "glob".  Fixed by adding a period.

Fixes #16193.

Change-Id: I67792901a8ca04635ba41d172bfaee99944f594d
Reviewed-on: https://go-review.googlesource.com/24500
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/gc/closure.go
test/fixedbugs/issue16193.go [new file with mode: 0644]

index ecdf19a2c4293a4997c09ef8b20e9c59483ee160..66c710f8e532ba10ed434ce721cb5cd496c3e04b 100644 (file)
@@ -166,7 +166,7 @@ func closurename(n *Node) *Sym {
        prefix := ""
        if n.Func.Outerfunc == nil {
                // Global closure.
-               outer = "glob"
+               outer = "glob."
 
                prefix = "func"
                closurename_closgen++
diff --git a/test/fixedbugs/issue16193.go b/test/fixedbugs/issue16193.go
new file mode 100644 (file)
index 0000000..eada62d
--- /dev/null
@@ -0,0 +1,27 @@
+// compile
+
+// Copyright 2016 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.
+
+// The compiler used the name "glob" as the function holding a global
+// function literal, colliding with an actual function named "glob".
+
+package main
+
+func glob() {
+       func() {
+       }()
+}
+
+var c1 = func() {
+}
+
+var c2 = func() {
+}
+
+func main() {
+       glob()
+       c1()
+       c2()
+}