pthread_t is opaque type therefore we can not apply simple arithmetic to
variables of pthread_t type this test needs to pass a invalid pthread_t
handle, typcasting to uintptr_t works too and is portable across glibc and
musl
Fixes
| pth_detached3.c:24:25: error: invalid use of undefined type 'struct __pthread'
| 24 | pthread_detach(thread + 8);
| | ^
[ bvanassche: reformatted patch description and fixed up line numbers ]
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
+#include <stdint.h>
static void* thread_func(void* arg)
{
pthread_detach(thread);
/* Invoke pthread_detach() with an invalid thread ID. */
- pthread_detach(thread + 8);
+ pthread_detach((pthread_t)((uintptr_t)thread + 8));
fprintf(stderr, "Finished.\n");
pthread_detach(): invalid thread ID 0x........
at 0x........: pthread_detach (drd_pthread_intercepts.c:?)
- by 0x........: main (pth_detached3.c:21)
+ by 0x........: main (pth_detached3.c:22)
pthread_detach(): invalid thread ID 0x........
at 0x........: pthread_detach (drd_pthread_intercepts.c:?)
- by 0x........: main (pth_detached3.c:24)
+ by 0x........: main (pth_detached3.c:25)
Finished.
pthread_detach(): invalid thread ID 0x........
at 0x........: vgDrd_set_joinable (drd_pthread_intercepts.c:?)
by 0x........: pthread_detach (drd_pthread_intercepts.c:?)
- by 0x........: main (pth_detached3.c:21)
+ by 0x........: main (pth_detached3.c:22)
pthread_detach(): invalid thread ID 0x........
at 0x........: vgDrd_set_joinable (drd_pthread_intercepts.c:?)
by 0x........: pthread_detach (drd_pthread_intercepts.c:?)
- by 0x........: main (pth_detached3.c:24)
+ by 0x........: main (pth_detached3.c:25)
Finished.