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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:6b42b5a8a207de5e021a2916281f46bcd60b20d2

commit r12-952-g6b42b5a8a207de5e021a2916281f46bcd60b20d2
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu May 20 16:39:06 2021 +0100

    libstdc++: Use __builtin_unreachable for constexpr assertions [PR 100676]

    The current implementation of compile-time precondition checks causes
    compilation to fail by calling a non-constexpr function declared at
    block scope. This breaks the CUDA compiler, which wraps some libstdc++
    headers in a pragma that declares everything as a __host__ __device__
    function, but others are not wrapped and so everything is a __host__
    function. The local declaration thus gets redeclared as two different
    types of function, which doesn't work.

    Just use __builtin_unreachable to make constant evaluation fail, instead
    of the local function declaration. Also simplify the assertion macros,
    which has the side effect of giving simpler compilation errors when
    using Clang.

    libstdc++-v3/ChangeLog:

            PR libstdc++/100676
            * include/bits/c++config (__glibcxx_assert_1): Rename to ...
            (__glibcxx_constexpr_assert): ... this.
            (__glibcxx_assert_impl): Use __glibcxx_constexpr_assert.
            (__glibcxx_assert): Define as either __glibcxx_constexpr_assert
            or __glibcxx_assert_impl.
            (__glibcxx_assert_2): Remove
            * include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): Use
            __glibcxx_constexpr_assert instead of __glibcxx_assert_1.
            *
testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc:
            Adjust expected error.
            *
testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc:
            Likewise.
            *
testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc:
            Likewise.
            Likewise.
            *
testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc:
            Likewise.
            *
testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc:
            Likewise.
            *
testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc:
            Likewise.
            * testsuite/23_containers/span/back_neg.cc: Likewise.
            * testsuite/23_containers/span/front_neg.cc: Likewise.
            * testsuite/23_containers/span/index_op_neg.cc: Likewise.

Reply via email to