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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>:

https://gcc.gnu.org/g:0b0a3cdbff64d97e7de3e0e2c26e965708064193

commit r13-2360-g0b0a3cdbff64d97e7de3e0e2c26e965708064193
Author: Simon Rainer <gcc....@vvalter.com>
Date:   Wed Aug 31 23:00:08 2022 +0200

    ipa: Fix throw in multi-versioned functions [PR106627]

    Any multi-versioned function was implicitly declared as noexcept, which
    leads to an abort if an exception is thrown inside the function.
    The reason for this is that the function declaration is replaced by a
    newly created dispatcher declaration, which has TREE_NOTHROW always set
    to 1. Instead we need to set TREE_NOTHROW to the value of the original
    declaration.

            PR ipa/106627

    gcc/ChangeLog:

            * config/i386/i386-features.cc
(ix86_get_function_versions_dispatcher):
            Set TREE_NOTHROW correctly for dispatcher declaration.
            * config/rs6000/rs6000.cc
(rs6000_get_function_versions_dispatcher):
            Likewise.

    gcc/testsuite/ChangeLog:

            * g++.target/i386/pr106627.C: New test.

Reply via email to