diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index ea49ae16aa0..a669df819f8 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 fa4c8e8ba1a..c3f2b605099 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 dce3e16ce16..f44c747d366 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)