aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2016-08-15 21:09:39 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2016-08-16 04:29:32 +0000
commitfe27291c0039d4de0748ebd512cb236ca3c24ff6 (patch)
tree9560afa5f6e9c5731a08dcbb34f86c75866c1ea5
parent77e68ea78abc08f827041384e0198576da44db9f (diff)
downloadgo-fe27291c0039d4de0748ebd512cb236ca3c24ff6.tar.gz
go-fe27291c0039d4de0748ebd512cb236ca3c24ff6.zip
cmd/compile: reduce garbage from autolabel
Follow-up to CL 26661 Change-Id: I67c58d17313094675cf0f30ce50d486818ae0dcb Reviewed-on: https://go-review.googlesource.com/27113 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/cmd/compile/internal/gc/inl.go2
-rw-r--r--src/cmd/compile/internal/gc/subr.go9
-rw-r--r--src/cmd/compile/internal/gc/swt.go4
3 files changed, 10 insertions, 5 deletions
diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go
index ea49ae16aa..a669df819f 100644
--- a/src/cmd/compile/internal/gc/inl.go
+++ b/src/cmd/compile/internal/gc/inl.go
@@ -766,7 +766,7 @@ func mkinlcall1(n *Node, fn *Node, isddd bool) *Node {
ninit.Append(as)
}
- retlabel := autolabel("i")
+ retlabel := autolabel(".i")
retlabel.Etype = 1 // flag 'safe' for escape analysis (no backjumps)
inlgen++
diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go
index fa4c8e8ba1..c3f2b60509 100644
--- a/src/cmd/compile/internal/gc/subr.go
+++ b/src/cmd/compile/internal/gc/subr.go
@@ -248,16 +248,21 @@ func LookupN(prefix string, n int) *Sym {
// autolabel generates a new Name node for use with
// an automatically generated label.
-// prefix is a short mnemonic (e.g. "s" for switch)
+// prefix is a short mnemonic (e.g. ".s" for switch)
// to help with debugging.
+// It should begin with "." to avoid conflicts with
+// user labels.
func autolabel(prefix string) *Node {
+ if prefix[0] != '.' {
+ Fatalf("autolabel prefix must start with '.', have %q", prefix)
+ }
fn := Curfn
if Curfn == nil {
Fatalf("autolabel outside function")
}
n := fn.Func.Label
fn.Func.Label++
- return newname(LookupN("."+prefix, int(n)))
+ return newname(LookupN(prefix, int(n)))
}
var initSyms []*Sym
diff --git a/src/cmd/compile/internal/gc/swt.go b/src/cmd/compile/internal/gc/swt.go
index dce3e16ce1..f44c747d36 100644
--- a/src/cmd/compile/internal/gc/swt.go
+++ b/src/cmd/compile/internal/gc/swt.go
@@ -358,7 +358,7 @@ func casebody(sw *Node, typeswvar *Node) {
n.Op = OCASE
needvar := n.List.Len() != 1 || n.List.First().Op == OLITERAL
- jmp := Nod(OGOTO, autolabel("s"), nil)
+ jmp := Nod(OGOTO, autolabel(".s"), nil)
if n.List.Len() == 0 {
if def != nil {
Yyerror("more than one default case")
@@ -577,7 +577,7 @@ func (s *typeSwitch) walk(sw *Node) {
i.Nbody.Set1(typenil)
} else {
// Jump to default case.
- lbl := autolabel("s")
+ lbl := autolabel(".s")
i.Nbody.Set1(Nod(OGOTO, lbl, nil))
// Wrap default case with label.
blk := Nod(OBLOCK, nil, nil)