From fe27291c0039d4de0748ebd512cb236ca3c24ff6 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Mon, 15 Aug 2016 21:09:39 -0700 Subject: [PATCH] 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 Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/inl.go | 2 +- src/cmd/compile/internal/gc/subr.go | 9 +++++++-- 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) -- 2.48.1