[PATCH] libstdc++: mark variables as possibly unused
Jonathan Wakely
jwakely@redhat.com
Thu Sep 10 15:22:15 GMT 2020
On 28/08/20 08:40 +0200, Krystian Kuźniarek via Libstdc++ wrote:
>>Test suite confirmation:
>>All tests pass. Tested on both Manjaro and some Ubuntu 18.04 with gcc10
>and gcc8 respectively.
Thanks.
>Jonathan, one more thing. I hope it's what you asked for cause all I did
>was:
>make bootstrap
There has been no need to say "make bootstrap" for 10 years or so,
just "make" does a bootstrap.
>make check
That runs all the tests for the entire compiler. What we're interested
in is whether there are any (new) failures caused by your patch,
specifically in the libstdc++ testsuite.
N.B. This patch is less relevant now, because these variables are
always used, because the __glibcxx_assert macro now expands to a
compile-time test (as long as the compiler supports
__builtin_is_constant_evaluated(), which GCC does).
But adding the attributes anyway is harmless, so I'll go ahead and
apply this patch. Thanks again.
>On Fri, 28 Aug 2020 at 08:32, Krystian Kuźniarek <
>krystian.kuzniarek@gmail.com> wrote:
>
>> Ok, so here it is.
>> New diff:
>>
>> diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
>> index 015acef83c4..c4a763aae5c 100644
>> --- a/libstdc++-v3/include/bits/atomic_base.h
>> +++ b/libstdc++-v3/include/bits/atomic_base.h
>> @@ -231,7 +231,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE void
>> clear(memory_order __m = memory_order_seq_cst) noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_consume);
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> @@ -242,7 +243,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE void
>> clear(memory_order __m = memory_order_seq_cst) volatile noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_consume);
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> @@ -416,7 +418,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE void
>> store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> __glibcxx_assert(__b != memory_order_consume);
>> @@ -428,7 +431,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> store(__int_type __i,
>> memory_order __m = memory_order_seq_cst) volatile noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> __glibcxx_assert(__b != memory_order_consume);
>> @@ -439,7 +443,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE __int_type
>> load(memory_order __m = memory_order_seq_cst) const noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_release);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>>
>> @@ -449,7 +454,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE __int_type
>> load(memory_order __m = memory_order_seq_cst) const volatile noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_release);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>>
>> @@ -475,8 +481,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> compare_exchange_weak(__int_type& __i1, __int_type __i2,
>> memory_order __m1, memory_order __m2) noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> __glibcxx_assert(__b2 <= __b1);
>> @@ -490,8 +498,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> memory_order __m1,
>> memory_order __m2) volatile noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> __glibcxx_assert(__b2 <= __b1);
>> @@ -520,8 +530,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> compare_exchange_strong(__int_type& __i1, __int_type __i2,
>> memory_order __m1, memory_order __m2) noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> __glibcxx_assert(__b2 <= __b1);
>> @@ -535,8 +547,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> memory_order __m1,
>> memory_order __m2) volatile noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>>
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> @@ -736,7 +750,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> store(__pointer_type __p,
>> memory_order __m = memory_order_seq_cst) noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>>
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> @@ -749,7 +764,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> store(__pointer_type __p,
>> memory_order __m = memory_order_seq_cst) volatile noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_acquire);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>> __glibcxx_assert(__b != memory_order_consume);
>> @@ -760,7 +776,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE __pointer_type
>> load(memory_order __m = memory_order_seq_cst) const noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_release);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>>
>> @@ -770,7 +787,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> _GLIBCXX_ALWAYS_INLINE __pointer_type
>> load(memory_order __m = memory_order_seq_cst) const volatile noexcept
>> {
>> - memory_order __b = __m & __memory_order_mask;
>> + memory_order __b __attribute__ ((__unused__))
>> + = __m & __memory_order_mask;
>> __glibcxx_assert(__b != memory_order_release);
>> __glibcxx_assert(__b != memory_order_acq_rel);
>>
>> @@ -797,8 +815,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> memory_order __m1,
>> memory_order __m2) noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> __glibcxx_assert(__b2 <= __b1);
>> @@ -812,8 +832,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> memory_order __m1,
>> memory_order __m2) volatile noexcept
>> {
>> - memory_order __b2 = __m2 & __memory_order_mask;
>> - memory_order __b1 = __m1 & __memory_order_mask;
>> + memory_order __b2 __attribute__ ((__unused__))
>> + = __m2 & __memory_order_mask;
>> + memory_order __b1 __attribute__ ((__unused__))
>> + = __m1 & __memory_order_mask;
>>
>> __glibcxx_assert(__b2 != memory_order_release);
>> __glibcxx_assert(__b2 != memory_order_acq_rel);
>> diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h
>> index 131718b8b2f..2e21a98409f 100644
>> --- a/libstdc++-v3/include/ext/new_allocator.h
>> +++ b/libstdc++-v3/include/ext/new_allocator.h
>> @@ -117,7 +117,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>
>> // __p is not permitted to be a null pointer.
>> void
>> - deallocate(_Tp* __p, size_type __t)
>> + deallocate(_Tp* __p, size_type __t __attribute__ ((__unused__)))
>> {
>> #if __cpp_aligned_new
>> if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
>>
>>
>> Changelog entry:
>>
>> libstdc++-v3/ChangeLog:
>>
>> * include/bits/atomic_base.h: Fix -Wunused-variable
>> in system headers.
>> * include/ext/new_allocator.h: Fix -Wunused-parameter
>> in system headers.
>>
>>
>> Test suite confirmation:
>> All tests pass. Tested on both Manjaro and some Ubuntu 18.04 with gcc10
>> and gcc8 respectively.
>>
>> On Mon, 24 Aug 2020 at 13:59, Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>>> On 24/08/20 13:26 +0200, Krystian Kuźniarek via Libstdc++ wrote:
>>> >Hi,
>>> >
>>> >First of all, sorry, I must have sent it as quoted-printable so spaces
>>> and
>>> >tabs are preserved.
>>> >
>>> >A description of the problem/bug and how your patch addresses it:
>>> >I've got a small patch for -Wunused-variable and -Wunused-parameter in
>>> >system headers. These are needed either for:
>>> >1) __glibcxx_assert() that quickly goes away during an early compilation
>>> >step leaving the warning
>>> >2) code that conditionally is removed by preprocessor leaving the warning
>>> >
>>> >Testcases:
>>> >N/A, it's only a warning.
>>> >
>>> >ChangeLog:
>>> >Sorry, contrib/mklog.py didn't quite work for me.
>>> >For some reason after instruction in line 129: "diff = PatchSet(data)" my
>>> >"diff" variable is always empty.
>>> >
>>> >Bootstrapping and testing:
>>> >Tested that manually by recompling GCC, unfolding all headers with
>>> >`#include <stdc++.h>` and compiling what's been included by it.
>>> >
>>> >The patch itself:
>>> >
>>> >diff --git a/libstdc++-v3/include/bits/atomic_base.h
>>> >b/libstdc++-v3/include/bits/atomic_base.h
>>> >index 015acef83c4..1fbb2d78d28 100644
>>> >--- a/libstdc++-v3/include/bits/atomic_base.h
>>> >+++ b/libstdc++-v3/include/bits/atomic_base.h
>>> >@@ -231,7 +231,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> > _GLIBCXX_ALWAYS_INLINE void
>>> > clear(memory_order __m = memory_order_seq_cst) noexcept
>>> > {
>>> >- memory_order __b = __m & __memory_order_mask;
>>> >+ memory_order __b __attribute__ ((__unused__)) =
>>>
>>> Thanks for the patch.
>>>
>>> Please put the line break before the '=' character i.e.
>>>
>>> memory_order __b __attribute__ ((__unused__))
>>> = __m & __memory_order_mask;
>>>
>>> Other than that, the patch looks ok, and simple enough to not need a
>>> copyright assignment for GCC.
>>>
>>> A changelog entry and confirmation the testsuite still runs would be
>>> preferred though.
>>>
>>>
>
More information about the Libstdc++
mailing list