On Tue, 8 Jul 2025 at 13:26, Tomasz Kaminski <tkami...@redhat.com> wrote:
>
>
>
> On Sat, Jul 5, 2025 at 1:27 AM Jonathan Wakely <jwak...@redhat.com> wrote:
>>
>> In r16-1911-g6596f5ab746533 I claimed to have reordered some attributes
>> for compatibility with Clang, but it looks like I got the Clang
>> restriction backwards and put them all in the wrong order.
>>
>> libstdc++-v3/ChangeLog:
>>
>>         PR libstdc++/120949
>>         * include/bits/stl_iterator.h (__normal_iterator): Fix order of
>>         always_inline and nodiscard attributes for Clang compatibility.
>> ---
>>
>> Tested x86_64-linux, and tested lightly with Clang.
>
> LGTM.
> I have also checked that this is indeed an order that is accepted by clang.
> The fact that this restriction is only put on hidden friends is strange.

I think they've fixed it on Clang trunk.

But Clang trunk still complains about attributes after the 'friend'
keyword, and it might be correct about that.


>>
>>
>>  libstdc++-v3/include/bits/stl_iterator.h | 30 +++++++++++++-----------
>>  1 file changed, 16 insertions(+), 14 deletions(-)
>>
>> diff --git a/libstdc++-v3/include/bits/stl_iterator.h 
>> b/libstdc++-v3/include/bits/stl_iterator.h
>> index a7188f46f6db..75e794f6c020 100644
>> --- a/libstdc++-v3/include/bits/stl_iterator.h
>> +++ b/libstdc++-v3/include/bits/stl_iterator.h
>> @@ -1211,7 +1211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>  #else
>>         // Forward iterator requirements
>>        template<typename _Iter>
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>>         _GLIBCXX_CONSTEXPR
>>         bool
>> @@ -1220,7 +1220,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() == __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        bool
>> @@ -1229,7 +1229,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>        { return __lhs.base() == __rhs.base(); }
>>
>>        template<typename _Iter>
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>>         _GLIBCXX_CONSTEXPR
>>         bool
>> @@ -1238,7 +1238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() != __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        bool
>> @@ -1248,15 +1248,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>
>>        // Random access iterator requirements
>>        template<typename _Iter>
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD 
>> _GLIBCXX_CONSTEXPR
>> +       _GLIBCXX_CONSTEXPR
>>         inline bool
>>         operator<(const __normal_iterator& __lhs,
>>                   const __normal_iterator<_Iter, _Container>& __rhs)
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() < __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX20_CONSTEXPR
>>        bool
>> @@ -1265,15 +1266,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>        { return __lhs.base() < __rhs.base(); }
>>
>>        template<typename _Iter>
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD 
>> _GLIBCXX_CONSTEXPR
>> +       _GLIBCXX_CONSTEXPR
>>         bool
>>         operator>(const __normal_iterator& __lhs,
>>                   const __normal_iterator<_Iter, _Container>& __rhs)
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() > __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        bool
>> @@ -1282,7 +1284,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>        { return __lhs.base() > __rhs.base(); }
>>
>>        template<typename _Iter>
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>>         _GLIBCXX_CONSTEXPR
>>         bool
>> @@ -1291,7 +1293,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() <= __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        bool
>> @@ -1300,7 +1302,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>        { return __lhs.base() <= __rhs.base(); }
>>
>>        template<typename _Iter>
>> -       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +       _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>         friend
>>         _GLIBCXX_CONSTEXPR
>>         bool
>> @@ -1309,7 +1311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>         _GLIBCXX_NOEXCEPT
>>         { return __lhs.base() >= __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        bool
>> @@ -1341,7 +1343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>  #endif
>>         { return __lhs.base() - __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        difference_type
>> @@ -1349,7 +1351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>         _GLIBCXX_NOEXCEPT
>>        { return __lhs.base() - __rhs.base(); }
>>
>> -      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
>> +      _GLIBCXX_NODISCARD __attribute__((__always_inline__))
>>        friend
>>        _GLIBCXX_CONSTEXPR
>>        __normal_iterator
>> --
>> 2.50.0
>>

Reply via email to