diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2016-08-15 21:09:39 -0700 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2016-08-16 04:29:32 +0000 |
commit | fe27291c0039d4de0748ebd512cb236ca3c24ff6 (patch) | |
tree | 9560afa5f6e9c5731a08dcbb34f86c75866c1ea5 | |
parent | 77e68ea78abc08f827041384e0198576da44db9f (diff) | |
download | go-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.go | 2 | ||||
-rw-r--r-- | src/cmd/compile/internal/gc/subr.go | 9 | ||||
-rw-r--r-- | src/cmd/compile/internal/gc/swt.go | 4 |
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) |