diff -r e4d31cd0e6d8 -r ed66dc50f31a stage4/generate_c/generate_c_vardecl.cc --- a/stage4/generate_c/generate_c_vardecl.cc Sun Dec 13 11:41:22 2009 +0100 +++ b/stage4/generate_c/generate_c_vardecl.cc Tue Dec 15 08:51:44 2009 +0100 @@ -955,7 +955,7 @@ /* now to produce the c equivalent... */ if ((wanted_varformat == local_vf) || (wanted_varformat == init_vf) || - (wanted_varformat == localinit_vf)) { + (wanted_varformat == localinit_vf && (current_vartype & inoutput_vt) == 0)) { for(int i = 0; i < list->n; i++) { s4o.print(s4o.indent_spaces); if (wanted_varformat == local_vf) { @@ -995,8 +995,10 @@ s4o.print(nv->get()); s4o.print("\n" + s4o.indent_spaces); this->current_var_type_symbol->accept(*this); - if ((current_vartype & (output_vt | inoutput_vt)) != 0) + if ((current_vartype & output_vt) != 0) s4o.print(" *__"); + else if ((current_vartype & inoutput_vt) != 0) + s4o.print(" *"); else s4o.print(" "); list->elements[i]->accept(*this); @@ -1012,7 +1014,7 @@ if (wanted_varformat == foutputassign_vf) { for(int i = 0; i < list->n; i++) { - if ((current_vartype & (output_vt | inoutput_vt)) != 0) { + if ((current_vartype & output_vt) != 0) { s4o.print(s4o.indent_spaces + "if (__"); list->elements[i]->accept(*this); s4o.print(" != NULL) {\n");