Subject: Re: bug#46495: 28.0.50; [native-comp] Build fails for 32bit --with-wide-int

From: David Malcolm <[email-masked]>
Date: Wed, 31 Mar 2021 09:03:33 -0400

On Wed, 2021-03-31 at 11:13 +0300, Eli Zaretskii wrote:
> > Date: Tue, 30 Mar 2021 12:06:38 +0300
> > From: Eli Zaretskii <[email-masked]>
> > Cc: [email-masked], [email-masked], [email-masked]
> > 
> >  3) I see in my temporary directory subdirectories, created when I
> > run
> >     the example program, with files fake.s and fake.so.  Are they
> >     supposed to be left there, or are they supposed to be deleted
> >     when the program exits?
> 
> These temporary files behave strangely, to say the least.  Just
> running the tut01-hello-world example program produces a new
> temporary
> directory each time, and deposits a fake.so file there.  If I run a
> variant of that which I built after adding
> 
>   gcc_jit_context_set_bool_option (
>                                    ctxt,
>                                    GCC_JIT_BOOL_OPTION_DEBUGINFO,
>                                    1);
> 
> then the temporary directory isn't created, or maybe it's deleted
> when
> the program exits.  I think the latter is the case, because the
> directory is visible if I step through the program with a debugger,
> but disappears when the program exits.
> 
> David, what's the story with these temporary directories?

They're meant to be cleaned up automatically by libgccjit: on
gcc_jit_result_release for a successful compilation, or at the end of
gcc_jit_context_compile* for a failed compilation.

The removal code is in gcc::jit::tempdir::~tempdir in gcc/jit/jit-
tempdir.c, maybe there's a bug there? (perhaps only affecting Windows?)
It calls unlink on everything it "knows" about, and them rmdir on the
directory.  I see now that I'm not checking for errors on those unlink
and rmdir calls.

Is the code setting GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES to true,
perhaps?  That forcibly keeps them around:
  https://gcc.gnu.org/onlinedocs/jit/topics/contexts.html#c.GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES

Dave