The COBOL compiler has this routine:

void
gg_exit(tree exit_code)
  {
  tree the_call = 
      build_call_expr_loc(location_from_lineno(),
                          builtin_decl_explicit (BUILT_IN_EXIT),
                          1,
                          exit_code);
  gg_append_statement(the_call);
  }

I have found that when GCOBOL is used with -O2, -O3, or -Os, the call to
gg_exit() is optimized away, and the intended exit value is lost, and I
end up with zero.

By changing the routine to 

void
gg_exit(tree exit_code)
  {
  tree args[1] = {exit_code};
  tree function = gg_get_function_address(INT, "exit");
  tree the_call = build_call_array_loc (location_from_lineno(),
                                        VOID,
                                        function,
                                        1,
                                        args);
  gg_append_statement(the_call);
  }

the call is not optimized away, and the generated executable behaves as
expected.

How do I prevent the call to gg_exit() from being optimized away?

Thanks!

Reply via email to