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

--- Comment #7 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:10f51543bb81cc953792270b40a9c812049e8b4c

commit r11-2971-g10f51543bb81cc953792270b40a9c812049e8b4c
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Sep 1 20:52:26 2020 +0100

    libstdc++: Add compile-time checks to__glibcxx_assert [PR 71960]

    This change evaluates __glibcxx_assert checks unconditionally when a
    function is being constant evaluated (when std::is_constant_evaluated()
    is true). If the check fails, compilation will fail with an error.

    If the function isn't being constant evaluated, the normal runtime check
    will be done if enabled by _GLIBCXX_ASSERTIONS or _GLIBCXX_DEBUG, the
    same as before.

    Tangentially, the __glibcxx_assert and _GLIBCXX_PARALLEL_ASSERT macros
    are changed to expand to 'do { } while (false)' when assertions are
    disabled, instead of expanding to nothing. This avoids -Wempty-body
    warnings when a disabled assertion is used in an 'if' or 'else'
    statement e.g.

      if constexpr (/* precondition is testable */)
        __glibcxx_assert(precondition);

    a.C:9:27: warning: suggest braces around empty body in an âifâ
statement [-Wempty-body]
        9 |     __glibcxx_assert(precondition);
          |                                  ^

    libstdc++-v3/ChangeLog:

            PR libstdc++/71960
            * include/bits/c++config (__glibcxx_assert_impl): Remove
            do-while so that uses of the macro need to add it.
            (__glibcxx_assert): Rename macro for runtime assertions
            to __glibcxx_assert_2.
            (__glibcxx_assert_1): Define macro for constexpr assertions.
            (__glibcxx_assert): Define macro for constexpr and runtime
            assertions.
            * include/bits/range_access.h (ranges::advance): Remove
            redundant precondition checks during constant evaluation.
            * include/parallel/base.h (_GLIBCXX_PARALLEL_ASSERT): Always
            use do-while in macro expansion.
            * include/std/ranges (iota_view::iota_view(W, B)): Remove
            redundant braces.

Reply via email to