gc: inlining, allow empty bodies, fix _ arguments.

R=rsc
CC=golang-dev
https://golang.org/cl/5487077
diff --git a/src/cmd/gc/fmt.c b/src/cmd/gc/fmt.c
index c627adb..f3be53c 100644
--- a/src/cmd/gc/fmt.c
+++ b/src/cmd/gc/fmt.c
@@ -914,6 +914,9 @@
 			fmtprint(f, "%#O", n->op);
 		break;
 
+	case OEMPTY:
+		break;
+
 	case OLABEL:
 		fmtprint(f, "%N: ", n->left);
 		break;
@@ -1018,6 +1021,7 @@
 	[ODCL] = -1,
 	[ODCLFIELD] = -1,
 	[ODEFER] = -1,
+	[OEMPTY] = -1,
 	[OFALL] = -1,
 	[OFOR] = -1,
 	[OIF] = -1,
diff --git a/src/cmd/gc/inl.c b/src/cmd/gc/inl.c
index 196a6ef..e2d122c 100644
--- a/src/cmd/gc/inl.c
+++ b/src/cmd/gc/inl.c
@@ -60,7 +60,7 @@
 	case ORETURN:
 	case OAS:
 	case OAS2:
-	  // case OEMPTY:  // TODO
+	case OEMPTY:
 		break;
 	}
 
@@ -449,7 +449,7 @@
 		// TODO check that n->list->n is a call?
 		as->rlist = n->list;
 		for(t = getinargx(fn->type)->type; t; t=t->down) {
-			if(t->nname) {
+			if(t->nname && !isblank(t->nname)) {
 				if(!t->nname->inlvar)
 					fatal("missing inlvar for %N\n", t->nname);
 				as->list = list(as->list, t->nname->inlvar);
@@ -460,7 +460,7 @@
 	} else {
 		ll = n->list;
 		for(t = getinargx(fn->type)->type; t && ll; t=t->down) {
-			if(t->nname) {
+			if(t->nname && !isblank(t->nname)) {
 				if(!t->nname->inlvar)
 					fatal("missing inlvar for %N\n", t->nname);
 				as->list = list(as->list, t->nname->inlvar);
diff --git a/test/cmp.go b/test/cmp.go
index f079c5d..d51a11a 100644
--- a/test/cmp.go
+++ b/test/cmp.go
@@ -8,7 +8,8 @@
 
 import "unsafe"
 
-func use(bool) {}
+var global bool
+func use(b bool) { global = b }
 
 func stringptr(s string) uintptr { return *(*uintptr)(unsafe.Pointer(&s)) }