diff --git a/src/cmd/dist/goc2c.c b/src/cmd/dist/goc2c.c
index 36b43f56eb3b9a5de969d20c8740a3f4ebbbb2a2..38627657ec146a9c6dad01878aae1f2092394cc6 100644
--- a/src/cmd/dist/goc2c.c
+++ b/src/cmd/dist/goc2c.c
@@ -524,6 +524,7 @@ write_6g_func_header(char *package, char *name, struct params *params,
 		     int paramwid, struct params *rets)
 {
 	int first, n;
+	struct params *p;
 
 	bwritef(output, "void\n");
 	if(!contains(name, "路"))
@@ -546,6 +547,24 @@ write_6g_func_header(char *package, char *name, struct params *params,
 
 	write_params(rets, &first);
 	bwritef(output, ")\n{\n");
+	
+	for (p = rets; p != nil; p = p->next) {
+		if(streq(p->name, "..."))
+			continue;
+		if(streq(p->type, "Slice"))
+			bwritef(output, "\t%s.array = 0;\n\t%s.len = 0;\n\t%s.cap = 0;\n", p->name, p->name, p->name);
+		else if(streq(p->type, "String"))
+			bwritef(output, "\t%s.str = 0;\n\t%s.len = 0;\n", p->name, p->name);
+		else if(streq(p->type, "Eface"))
+			bwritef(output, "\t%s.type = 0;\n\t%s.data = 0;\n", p->name, p->name);
+		else if(streq(p->type, "Iface"))
+			bwritef(output, "\t%s.tab = 0;\n\t%s.data = 0;\n", p->name, p->name);
+		else if(streq(p->type, "Complex128"))
+			bwritef(output, "\t%s.real = 0;\n\t%s.imag = 0;\n", p->name, p->name);
+		else
+			bwritef(output, "\t%s = 0;\n", p->name);
+		bwritef(output, "\tFLUSH(&%s);\n", p->name);
+	}
 }
 
 /* Write a 6g function trailer.  */