From e0f986bf26b72749553e45cad34f14d7d4166acb Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 27 Jun 2016 08:21:55 -0700 Subject: [PATCH] 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 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/gc/closure.go | 2 +- test/fixedbugs/issue16193.go | 27 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue16193.go diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index ecdf19a2c4..66c710f8e5 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -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 index 0000000000..eada62de9a --- /dev/null +++ b/test/fixedbugs/issue16193.go @@ -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() +}