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

--- Comment #20 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

https://gcc.gnu.org/g:c9dd853680b12d9c9def5de61abde5d057c526ba

commit r15-308-gc9dd853680b12d9c9def5de61abde5d057c526ba
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Fri Mar 15 16:34:22 2024 -0700

    DCE __cxa_atexit calls where the function is pure/const [PR19661]

    In C++ sometimes you have a deconstructor function which is "empty", like
for an
    example with unions or with arrays.  The front-end might not know it is
empty either
    so this should be done on during optimization.o
    To implement it I added it to DCE where we mark if a statement is necessary
or not.

    Bootstrapped and tested on x86_64-linux-gnu with no regressions.

    Changes since v1:
      * v2: Add support for __aeabi_atexit for arm-*eabi. Add extra comments.
            Add cxa_atexit-5.C testcase for -fPIC case.
      * v3: Fix testcases for the __aeabi_atexit (forgot to do in the v2).

            PR tree-optimization/19661

    gcc/ChangeLog:

            * tree-ssa-dce.cc (is_cxa_atexit): New function.
            (is_removable_cxa_atexit_call): New function.
            (mark_stmt_if_obviously_necessary): Don't mark removable
            cxa_at_exit calls.
            (mark_all_reaching_defs_necessary_1): Likewise.
            (propagate_necessity): Likewise.

    gcc/testsuite/ChangeLog:

            * g++.dg/tree-ssa/cxa_atexit-1.C: New test.
            * g++.dg/tree-ssa/cxa_atexit-2.C: New test.
            * g++.dg/tree-ssa/cxa_atexit-3.C: New test.
            * g++.dg/tree-ssa/cxa_atexit-4.C: New test.
            * g++.dg/tree-ssa/cxa_atexit-5.C: New test.
            * g++.dg/tree-ssa/cxa_atexit-6.C: New test.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Reply via email to