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

--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Simon Martin
<simar...@gcc.gnu.org>:

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

commit r14-11075-gac054467bf42365de85336775cba9b9f476e73ed
Author: Simon Martin <si...@nasilyan.com>
Date:   Mon Dec 9 09:21:25 2024 +0100

    tree-eh: Don't crash on GIMPLE_TRY_FINALLY with empty cleanup sequence
[PR117845]

    The following valid code triggers an ICE with -fsanitize=address

    === cut here ===
    void l() {
        auto const ints = {0,1,2,3,4,5};
        for (auto i : { 3 } ) {
            __builtin_printf("%d ", i);
        }
    }
    === cut here ===

    The problem is that honor_protect_cleanup_actions does not expect the
    cleanup sequence of a GIMPLE_TRY_FINALLY to be empty. It is however the
    case here since r14-8681-gceb242f5302027, because lower_stmt removes the
    only statement in the sequence: a ASAN_MARK statement for the array that
    backs the initializer_list).

    This patch simply checks that the finally block is not 0 before
    accessing it in honor_protect_cleanup_actions.

            PR c++/117845

    gcc/ChangeLog:

            * tree-eh.cc (honor_protect_cleanup_actions): Support empty
            finally sequences.

    gcc/testsuite/ChangeLog:

            * g++.dg/asan/pr117845-2.C: New test.
            * g++.dg/asan/pr117845.C: New test.

    (cherry picked from commit 3076539544d3e36684cc8eed3374aeff5b44c9b1)

Reply via email to