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

View file

@ -34,7 +34,8 @@ destr (void *arg)
{ {
++rounds; ++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"); puts ("destr: setspecific failed");
exit (1); exit (1);
@ -45,7 +46,8 @@ destr (void *arg)
static void * static void *
tf (void *arg) 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"); puts ("tf: setspecific failed");
exit (1); exit (1);

View file

@ -56,7 +56,8 @@ tf (void *arg)
{ {
pthread_key_t *key = (pthread_key_t *) 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"); write_message ("setspecific failed\n");
_exit (1); _exit (1);

View file

@ -59,7 +59,7 @@ tf (void *arg)
{ {
pthread_key_t *key = (pthread_key_t *) 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"); write_message ("setspecific failed\n");
_exit (1); _exit (1);

View file

@ -27,6 +27,9 @@ do_test (void)
pthread_key_t key1; pthread_key_t key1;
pthread_key_t key2; pthread_key_t key2;
void *value; 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 result = 0;
int err; int err;
@ -45,7 +48,7 @@ do_test (void)
result = 1; result = 1;
} }
err = pthread_setspecific (key1, (void *) -2l); err = pthread_setspecific (key1, (void *) &val1);
if (err != 0) if (err != 0)
{ {
printf ("1st setspecific failed: %s\n", strerror (err)); printf ("1st setspecific failed: %s\n", strerror (err));
@ -58,13 +61,13 @@ do_test (void)
puts ("2nd getspecific == NULL\n"); puts ("2nd getspecific == NULL\n");
result = 1; result = 1;
} }
else if (value != (void *) -2l) else if (value != (void *) &val1)
{ {
puts ("2nd getspecific != -2l\n"); puts ("2nd getspecific != &val1l\n");
result = 1; result = 1;
} }
err = pthread_setspecific (key1, (void *) -3l); err = pthread_setspecific (key1, (void *) &val2);
if (err != 0) if (err != 0)
{ {
printf ("2nd setspecific failed: %s\n", strerror (err)); printf ("2nd setspecific failed: %s\n", strerror (err));
@ -77,9 +80,9 @@ do_test (void)
puts ("3rd getspecific == NULL\n"); puts ("3rd getspecific == NULL\n");
result = 1; result = 1;
} }
else if (value != (void *) -3l) else if (value != (void *) &val2)
{ {
puts ("3rd getspecific != -2l\n"); puts ("3rd getspecific != &val2\n");
result = 1; result = 1;
} }

View file

@ -27,7 +27,7 @@ static int result;
static void static void
destr (void *arg) destr (void *arg)
{ {
if (arg != (void *) -2l) if (arg != (void *) &result)
result = 2; result = 2;
else else
result = 0; result = 0;
@ -40,7 +40,8 @@ tf (void *arg)
pthread_key_t key = (pthread_key_t) (long int) arg; pthread_key_t key = (pthread_key_t) (long int) arg;
int err; 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) if (err != 0)
result = 3; result = 3;

View file

@ -53,7 +53,8 @@ do_test (void)
puts ("key_create failed"); puts ("key_create failed");
return 1; 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"); puts ("setspecific failed");
return 1; return 1;

View file

@ -17,7 +17,8 @@ tf (void *arg)
for (int i = 0; i < NKEYS; ++i) for (int i = 0; i < NKEYS; ++i)
{ {
void *p = pthread_getspecific (keys[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) if (p != NULL)
res = p; res = p;
} }