On Mon, 11 Apr 2022 at 18:03, Jonathan Wakely via Libstdc++
<libstd...@gcc.gnu.org> wrote:
>         // Precondition: _M_frames == nullptr
>         pointer
>         _M_allocate(allocator_type& __alloc, size_type __n) noexcept
>         {
>           __try
>             {
> -             _M_frames = __n ? __alloc.allocate(__n) : nullptr;
> -             _M_capacity = __n;
> +             if (0 < __n && __n <= _S_max_size(__alloc)) [[unlikely]]

I originally changed this to return early if the size isn't OK:

  if (unlikely condition)
    return nullptr;

but in the version I pushed it's:

  if (likely condition)
    // do allocation

but forgot to change the attribute to match.

Fixed by the attached. Tested x86_64-linux and pushed to trunk.

I have further improvements to stacktrace::current coming tomorrow.
commit b1124648ff8f655307f264d7b353fd68e3b03e9c
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Mon Apr 11 20:13:44 2022

    libstdc++: Fix incorrect branch prediction hint in std::stacktrace
    
    libstdc++-v3/ChangeLog:
    
            * include/std/stacktrace (basic_stacktrace::_Impl::_M_allocate):
            Change [[unlikely]] attribute to [[likely]].

diff --git a/libstdc++-v3/include/std/stacktrace 
b/libstdc++-v3/include/std/stacktrace
index dd78c71c5dc..79038e803f2 100644
--- a/libstdc++-v3/include/std/stacktrace
+++ b/libstdc++-v3/include/std/stacktrace
@@ -579,7 +579,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {
          __try
            {
-             if (0 < __n && __n <= _S_max_size(__alloc)) [[unlikely]]
+             if (0 < __n && __n <= _S_max_size(__alloc)) [[likely]]
                {
                  _M_frames = __alloc.allocate(__n);
                  _M_capacity = __n;

Reply via email to