[PATCH] add attribute none to pthread_setspecific (BZ #27714)
Martin Sebor
msebor@gmail.com
Tue Apr 27 21:46:46 GMT 2021
On 4/27/21 3:07 PM, Joseph Myers wrote:
> On Tue, 27 Apr 2021, Martin Sebor via Libc-alpha wrote:
>
>> You're right. I had inadvertently reverted the pthread.h changes so
>> my testing didn't expose it. Too many patches in the same tree...
>> I've committed a1561c3bbe with the missing definition (and retesting
>> the macro).
>
> How was that commit tested? It breaks the glibc testsuite build for me
> with GCC 11 (on x86_64, also seen on lots of other architectures with
> build-many-glibcs.py).
These are warnings in my build (I've seen a few others scroll by
and have always assumed they were expected(*)). Those you pasted
below are intended: the none mode implies that const void* pointer
should point to an object 1 byte in size (that excludes valid,
past-the-end pointers, something I've been meaning to add
an extension for). The test should change to use a valid pointer.
I test by simply running make check. I can make the change to
the test if you expect warning-free test builds.
Martin
[*] Here's an example of a warning I just noticed while rerunning
make check:
tst-chk1.c: In function ‘do_test’:
../bits/select.h:37:51: warning: value computed is not used [-Wunused-value]
37 | ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
../misc/sys/select.h:87:33: note: in expansion of macro ‘__FD_ISSET’
87 | #define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp)
| ^~~~~~~~~~
tst-chk1.c:1681:3: note: in expansion of macro ‘FD_ISSET’
1681 | FD_ISSET (FD_SETSIZE - 1, &s);
| ^~~~~~~~
>
> tst-tsd3.c: In function 'tf':
> tst-tsd3.c:71:7: error: 'pthread_setspecific' expecting 1 byte in a region of size 0 [-Werror=stringop-overread]
> 71 | if (pthread_setspecific (key1, (void *) 1l) != 0
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../include/pthread.h:1,
> from tst-tsd3.c:20:
> ../sysdeps/nptl/pthread.h:1184:12: note: in a call to function 'pthread_setspecific' declared with attribute 'access (none, 2)'
> 1184 | extern int pthread_setspecific (pthread_key_t __key,
> | ^~~~~~~~~~~~~~~~~~~
> tst-tsd3.c:72:10: error: 'pthread_setspecific' expecting 1 byte in a region of size 0 [-Werror=stringop-overread]
> 72 | || pthread_setspecific (key2, (void *) 1l) != 0)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../include/pthread.h:1,
> from tst-tsd3.c:20:
> ../sysdeps/nptl/pthread.h:1184:12: note: in a call to function 'pthread_setspecific' declared with attribute 'access (none, 2)'
> 1184 | extern int pthread_setspecific (pthread_key_t __key,
> | ^~~~~~~~~~~~~~~~~~~
> tst-tsd3.c: In function 'destr2':
> tst-tsd3.c:56:11: error: 'pthread_setspecific' expecting 1 byte in a region of size 0 [-Werror=stringop-overread]
> 56 | if (pthread_setspecific (key1, (void *) 1l) != 0)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../include/pthread.h:1,
> from tst-tsd3.c:20:
> ../sysdeps/nptl/pthread.h:1184:12: note: in a call to function 'pthread_setspecific' declared with attribute 'access (none, 2)'
> 1184 | extern int pthread_setspecific (pthread_key_t __key,
> | ^~~~~~~~~~~~~~~~~~~
> tst-tsd3.c: In function 'destr1':
> tst-tsd3.c:40:11: error: 'pthread_setspecific' expecting 1 byte in a region of size 0 [-Werror=stringop-overread]
> 40 | if (pthread_setspecific (key2, (void *) 1l) != 0)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../include/pthread.h:1,
> from tst-tsd3.c:20:
> ../sysdeps/nptl/pthread.h:1184:12: note: in a call to function 'pthread_setspecific' declared with attribute 'access (none, 2)'
> 1184 | extern int pthread_setspecific (pthread_key_t __key,
> | ^~~~~~~~~~~~~~~~~~~
>
> (I also see similar errors building tst-tsd4.c. The testsuite builds
> cleanly with the same compiler and the previous glibc commit.)
>
More information about the Libc-alpha
mailing list