Pass a valid pointer to pthread_setspecific to avoid GCC 11 warning.

This commit is contained in:
Martin Sebor 2021-04-27 19:05:30 -06:00
parent a1561c3bbe
commit b25b067491
8 changed files with 30 additions and 18 deletions

View File

@ -37,7 +37,8 @@ destr1 (void *arg)
{
puts ("set key2");
if (pthread_setspecific (key2, (void *) 1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (key2, (void *) &left) != 0)
{
puts ("destr1: setspecific failed");
exit (1);
@ -53,7 +54,8 @@ destr2 (void *arg)
{
puts ("set key1");
if (pthread_setspecific (key1, (void *) 1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (key1, (void *) &left) != 0)
{
puts ("destr2: setspecific failed");
exit (1);
@ -68,8 +70,9 @@ tf (void *arg)
/* Let the destructors work. */
left = 7;
if (pthread_setspecific (key1, (void *) 1l) != 0
|| pthread_setspecific (key2, (void *) 1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (key1, (void *) &left) != 0
|| pthread_setspecific (key2, (void *) &left) != 0)
{
puts ("tf: setspecific failed");
exit (1);

View File

@ -34,7 +34,8 @@ destr (void *arg)
{
++rounds;
if (pthread_setspecific (key, (void *) 1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (key, (void *) &rounds) != 0)
{
puts ("destr: setspecific failed");
exit (1);
@ -45,7 +46,8 @@ destr (void *arg)
static void *
tf (void *arg)
{
if (pthread_setspecific (key, (void *) 1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (key, (void *) &rounds) != 0)
{
puts ("tf: setspecific failed");
exit (1);

View File

@ -56,7 +56,8 @@ tf (void *arg)
{
pthread_key_t *key = (pthread_key_t *) arg;
if (pthread_setspecific (*key, (void *) -1l) != 0)
/* Use an arbirary but valid pointer to avoid GCC warnings. */
if (pthread_setspecific (*key, arg) != 0)
{
write_message ("setspecific failed\n");
_exit (1);

View File

@ -59,7 +59,7 @@ tf (void *arg)
{
pthread_key_t *key = (pthread_key_t *) arg;
if (pthread_setspecific (*key, (void *) -1l) != 0)
if (pthread_setspecific (*key, arg) != 0)
{
write_message ("setspecific failed\n");
_exit (1);

View File

@ -27,6 +27,9 @@ do_test (void)
pthread_key_t key1;
pthread_key_t key2;
void *value;
/* Addresses of val1 and val2 are used as arbitrary but valid pointers
in calls to pthread_setspecific to avoid GCC warnings. */
char val1 = 0, val2 = 0;
int result = 0;
int err;
@ -45,7 +48,7 @@ do_test (void)
result = 1;
}
err = pthread_setspecific (key1, (void *) -2l);
err = pthread_setspecific (key1, (void *) &val1);
if (err != 0)
{
printf ("1st setspecific failed: %s\n", strerror (err));
@ -58,13 +61,13 @@ do_test (void)
puts ("2nd getspecific == NULL\n");
result = 1;
}
else if (value != (void *) -2l)
else if (value != (void *) &val1)
{
puts ("2nd getspecific != -2l\n");
puts ("2nd getspecific != &val1l\n");
result = 1;
}
err = pthread_setspecific (key1, (void *) -3l);
err = pthread_setspecific (key1, (void *) &val2);
if (err != 0)
{
printf ("2nd setspecific failed: %s\n", strerror (err));
@ -77,9 +80,9 @@ do_test (void)
puts ("3rd getspecific == NULL\n");
result = 1;
}
else if (value != (void *) -3l)
else if (value != (void *) &val2)
{
puts ("3rd getspecific != -2l\n");
puts ("3rd getspecific != &val2\n");
result = 1;
}

View File

@ -27,7 +27,7 @@ static int result;
static void
destr (void *arg)
{
if (arg != (void *) -2l)
if (arg != (void *) &result)
result = 2;
else
result = 0;
@ -40,7 +40,8 @@ tf (void *arg)
pthread_key_t key = (pthread_key_t) (long int) arg;
int err;
err = pthread_setspecific (key, (void *) -2l);
/* Use an arbirary but valid pointer to avoid GCC warnings. */
err = pthread_setspecific (key, &result);
if (err != 0)
result = 3;

View File

@ -53,7 +53,8 @@ do_test (void)
puts ("key_create failed");
return 1;
}
if (pthread_setspecific (k, (void *) 1) != 0)
/* Use an arbitrary but valid pointer as the value. */
if (pthread_setspecific (k, (void *) &k) != 0)
{
puts ("setspecific failed");
return 1;

View File

@ -17,7 +17,8 @@ tf (void *arg)
for (int i = 0; i < NKEYS; ++i)
{
void *p = pthread_getspecific (keys[i]);
pthread_setspecific (keys[i], (void *) 7);
/* Use an arbitrary but valid pointer as the value. */
pthread_setspecific (keys[i], (void *) keys);
if (p != NULL)
res = p;
}