This program exhibits the behavior when compiled with -O2, -O3 and -OS
PROGRAM-ID. PROG.
PROCEDURE DIVISION.
MOVE 1 TO RETURN-CODE
STOP RUN.
> -----Original Message-----
> From: Richard Biener <[email protected]>
> Sent: Friday, April 4, 2025 03:02
> To: Robert Dubner <[email protected]>
> Cc: GCC Mailing List <[email protected]>
> Subject: Re: COBOL: Call to builtin_decl_explicit (BUILT_IN_EXIT), is
> optimized away.
>
> On Fri, Apr 4, 2025 at 12:17 AM Robert Dubner <[email protected]> wrote:
> >
> > 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?
>
> I don't see anything wrong here, so the issue must be elsewhere.
> Do you have a COBOL testcase that shows the exit() being optimized?
>
> >
> > Thanks!
> >