mirror of https://github.com/golang/go.git
cmd/compile: avoid function literal name collision with "glob"
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>
This commit is contained in:
parent
c0e5d44506
commit
e0f986bf26
|
|
@ -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++
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
Loading…
Reference in New Issue