[Bug libfortran/102992] fortran: redirecting standard out to a file does not work on macOS 12.0

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun May 29 19:15:19 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102992

--- Comment #40 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Iain D Sandoe
<iains@gcc.gnu.org>:

https://gcc.gnu.org/g:16db663772c03eded30d8ede7ffbc2b9de25f648

commit r10-10802-g16db663772c03eded30d8ede7ffbc2b9de25f648
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Thu Nov 4 09:37:14 2021 +0000

    IPA: Provide a mechanism to register static DTORs via cxa_atexit.

    For at least one target (Darwin) the platform convention is to
    register static destructors (i.e. __attribute__((destructor)))
    with __cxa_atexit rather than placing them into a list that is
    run by some other mechanism.

    This patch provides a target hook that allows a target to opt
    into this and handling for the process in ipa_cdtor_merge ().

    When the mode is enabled (dtors_from_cxa_atexit is set) we:

     * Generate new CTORs to register static destructors with
       __cxa_atexit and add them to the existing list of CTORs;
       we then process the revised CTORs list.

     * We sort the DTORs into priority and then TU order, this
       means that they are registered in that order with
       __cxa_atexit () and therefore will be run in the reverse
       order.

     * Likewise, CTORs are sorted into priority and then TU order,
       which means that they will run in that order.

    This matches the behavior of using init/fini (or
    mod_init_func/mod_term_func) sections.

    This also fixes a bug where Fortran needs a DTOR to be run to
    close IO.

    Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

            PR fortran/102992

    gcc/ChangeLog:

            * config/darwin.h (TARGET_DTORS_FROM_CXA_ATEXIT): New.
            * doc/tm.texi: Regenerated.
            * doc/tm.texi.in: Add TARGET_DTORS_FROM_CXA_ATEXIT hook.
            * ipa.c (cgraph_build_static_cdtor_1): Return the built
            function decl.
            (build_cxa_atexit_decl): New.
            (build_dso_handle_decl): New.
            (build_cxa_dtor_registrations): New.
            (compare_cdtor_tu_order): New.
            (build_cxa_atexit_fns): New.
            (ipa_cdtor_merge): If dtors_from_cxa_atexit is set,
            process the DTORs/CTORs accordingly.
            (pass_ipa_cdtor_merge::gate): Also run if
            dtors_from_cxa_atexit is set.
            * target.def (dtors_from_cxa_atexit): New hook.

    (cherry picked from commit fabe8cc41e9b01913e2016861237d1d99d7567bf)


More information about the Gcc-bugs mailing list