On 5/2/24 3:56 PM, Andrew Pinski wrote:
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.

        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.
OK
jeff

Reply via email to