return nblank;
 }
 
+static int inlgen;
+
 // if *np is a call, and fn is a function with an inlinable body, substitute *np with an OINLCALL.
 // On return ninit has the parameter assignments, the nbody is the
 // inlined function body and list, rlist contain the input, output
        }
 
        inlretlabel = newlabel();
+       inlgen++;
        body = inlsubstlist(fn->inl);
 
        body = list(body, nod(OGOTO, inlretlabel, N));  // avoid 'not used' when function doesnt have return
 static Node*
 inlsubst(Node *n)
 {
+       char *p;
        Node *m, *as;
        NodeList *ll;
 
                typecheck(&m, Etop);
 //             dump("Return after substitution", m);
                return m;
+       
+       case OGOTO:
+       case OLABEL:
+               m = nod(OXXX, N, N);
+               *m = *n;
+               m->ninit = nil;
+               p = smprint("%s·%d", n->left->sym->name, inlgen);      
+               m->left = newname(lookup(p));
+               free(p);
+               return m;       
        }
 
 
 
--- /dev/null
+// run
+
+// Copyright 2013 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.
+
+// Issue 4748.
+// This program used to complain because inlining created two exit labels.
+
+package main
+
+func jump() {
+        goto exit
+exit:
+        return
+}
+func main() {
+        jump()
+        jump()
+}