stage4/generate_c/generate_c.cc
changeset 330 d2facfcf485a
parent 318 746a357b8747
child 337 9a2262fb7994
child 350 2c3c4dc34979
--- a/stage4/generate_c/generate_c.cc	Wed Jun 29 12:26:00 2011 +0200
+++ b/stage4/generate_c/generate_c.cc	Wed Jun 29 12:28:13 2011 +0200
@@ -453,17 +453,6 @@
       s4o.print(END_LABEL);
       s4o.print(":\n");
       s4o.indent_right();
-
-      /* since every label must be followed by at least one statement, and
-       * only the functions will introduce the return statement after this label,
-       * function blocks written in IL would result in invalid C++ code.
-       * To work around this we introduce the equivalent of a 'nop' operation
-       * to humour the compiler...
-       */
-      s4o.print(s4o.indent_spaces);
-      s4o.print("/* to humour the compiler, we insert a nop */\n");
-      s4o.print(s4o.indent_spaces);
-      s4o.print("if (0);\n\n");
     }
   
 
@@ -841,6 +830,7 @@
   generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->fblock_name, symbol, FB_FUNCTION_PARAM"->");
   symbol->fblock_body->accept(generate_c_code);
   print_end_of_block_label();
+  s4o.print(s4o.indent_spaces + "return;\n");
   s4o.indent_left();
   s4o.print(s4o.indent_spaces + "} // ");
   symbol->fblock_name->accept(*this);
@@ -1002,6 +992,7 @@
   generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol->program_type_name, symbol, FB_FUNCTION_PARAM"->");
   symbol->function_block_body->accept(generate_c_code);
   print_end_of_block_label();
+  s4o.print(s4o.indent_spaces + "return;\n");
   s4o.indent_left();
   s4o.print(s4o.indent_spaces + "} // ");
   symbol->program_type_name->accept(*this);