[waffle] [PATCH 16.2/33] third_party/threads: use intptr_t for int<>void* typecasting
Emil Velikov
emil.l.velikov at gmail.com
Tue Jul 22 03:51:06 PDT 2014
While the current code operates correctly, one needs to wrap
all the typecasting via intptr_t to prevent compiler warnings
such as
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
warning: cast from pointer to integer of different size
[-Wpointer-to-int-cast]
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
AFAICS the warnings make things look scarier that what they
truly are. Carry on reading for more details.
The C11 threads API uses void* in order to be to move flexible
while the POSIX threads uses int throughout.
As we consistently typecast from void * to int and back we are
practically safe.
-Emil
third_party/threads/threads_posix.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/third_party/threads/threads_posix.c b/third_party/threads/threads_posix.c
index f2c8bf5..6e6b983 100644
--- a/third_party/threads/threads_posix.c
+++ b/third_party/threads/threads_posix.c
@@ -66,7 +66,7 @@ static void *impl_thrd_routine(void *p)
{
struct impl_thrd_param pack = *((struct impl_thrd_param *)p);
free(p);
- return (void*)pack.func(pack.arg);
+ return (void*)(intptr_t)pack.func(pack.arg);
}
@@ -253,7 +253,7 @@ int thrd_equal(thrd_t thr0, thrd_t thr1)
// 7.25.5.5
void thrd_exit(int res)
{
- pthread_exit((void*)res);
+ pthread_exit((void*)(intptr_t)res);
}
// 7.25.5.6
@@ -263,7 +263,7 @@ int thrd_join(thrd_t thr, int *res)
if (pthread_join(thr, &code) != 0)
return thrd_error;
if (res)
- *res = (int)code;
+ *res = (int)(intptr_t)code;
return thrd_success;
}
--
2.0.0
More information about the waffle
mailing list