parameter declartions in func literals

SVN=127678
diff --git a/src/cmd/6g/gen.c b/src/cmd/6g/gen.c
index bc682fa..3a6735c 100644
--- a/src/cmd/6g/gen.c
+++ b/src/cmd/6g/gen.c
@@ -102,11 +102,12 @@
 	 * parameters, is the offset in the
 	 * parameter list.
 	 */
-	d = autodcl;
+	d = paramdcl->forw;;
 	t = funcfirst(&list, curfn->type);
 	while(t != T) {
 		if(d == D)
 			fatal("allocparams: this & in nil");
+
 		if(d->op != ONAME) {
 			d = d->forw;
 			continue;
@@ -114,7 +115,7 @@
 
 		n = d->dnode;
 		if(n->class != PPARAM)
-			fatal("allocparams: this & in class");
+			fatal("allocparams: this & in class %N %d", n, n->class);
 
 		n->xoffset = t->width;
 		d = d->forw;
@@ -133,7 +134,7 @@
 
 			n = d->dnode;
 			if(n->class != PPARAM)
-				fatal("allocparams: out class");
+				fatal("allocparams: out class %N %d", n, n->class);
 
 			n->xoffset = t->width;
 			d = d->forw;
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index 54a3fad..e37e953 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -370,6 +370,8 @@
 	Iter save;
 	int all;
 
+	paramdcl = autodcl->back;	// base of arguments - see allocparams in gen.c
+
 	// declare the this/in arguments
 	n1 = funcfirst(&save, t);
 	while(n1 != T) {
@@ -602,6 +604,30 @@
 }
 
 void
+dumpdcl(char *st)
+{
+	Sym *s, *d;
+	int i;
+
+	print("\ndumpdcl: %s %p\n", st, b0stack);
+
+	i = 0;
+	for(d=dclstack; d!=S; d=d->link) {
+		i++;
+		print("    %.2d %p", i, d);
+		if(d == b0stack)
+			print(" (b0)");
+		if(d->name == nil) {
+			print("\n");
+			continue;
+		}
+		print(" '%s'", d->name);
+		s = pkglookup(d->name, d->package);
+		print(" %lS\n", s);
+	}
+}
+
+void
 testdclstack(void)
 {
 	Sym *d;
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index d51e0d0..ed1f903 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -385,6 +385,7 @@
 EXTERN	vlong	maxintval[NTYPE];
 
 EXTERN	Dcl*	autodcl;
+EXTERN	Dcl*	paramdcl;
 EXTERN	Dcl*	externdcl;
 EXTERN	Dcl*	exportlist;
 EXTERN	int	dclcontext;	// PEXTERN/PAUTO
@@ -529,6 +530,7 @@
 void	markdcl(void);
 void	popdcl(void);
 void	poptodcl(void);
+void	dumpdcl(char*);
 void	markdclstack(void);
 void	testdclstack(void);
 Sym*	pushdcl(Sym*);
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index d5ef370..0b0e425c 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -1024,7 +1024,6 @@
 
 		$$ = newname(lookup(namebuf));
 		addvar($$, $1, PEXTERN);
-dump("lit1", $$);
 
 		{
 			Node *n;
@@ -1035,13 +1034,10 @@
 			n->nbody = $3;
 			if(n->nbody == N)
 				n->nbody = nod(ORETURN, N, N);
-dump("comp1", n);
 			compile(n);
-dump("comp2", n);
 		}
 
 		$$ = nod(OADDR, $$, N);
-dump("lit2", $$);
 	}
 
 fnbody: