------- Comment #4 from fxcoudert at gcc dot gnu dot org  2008-04-21 12:54 
-------
(In reply to comment #3)
> in gthr-win32.h there seems to be a more serious bug. The cast of an integer
> with less size to a pointer can be seriously wrong.

I don't think it's an issue: the type objc_thread_t, which is used as a thread
identifier, it declared as (void *), so it's larger than the integer types that
are cast into it (which are DWORD). It's inelegant, but I think it cannot cause
bugs.

I suggest silencing the warning that way (in both libobjc/thr-win32.c and
gcc/thr-win32.c):

--- thr-win32.c.old     2008-04-21 14:53:42.000000000 +0200
+++ thr-win32.c 2008-04-21 14:53:35.000000000 +0200
@@ -70,7 +70,7 @@ __objc_thread_detach(void (*func)(void *
                                    arg, 0, &thread_id)))
     thread_id = 0;

-  return (objc_thread_t)thread_id;
+  return (objc_thread_t)(INT_PTR)thread_id;
 }

 /* Set the current thread's priority. */
@@ -151,7 +151,7 @@ __objc_thread_exit(void)
 objc_thread_t
 __objc_thread_id(void)
 {
-  return (objc_thread_t)GetCurrentThreadId();
+  return (objc_thread_t)(INT_PTR)GetCurrentThreadId();
 }

 /* Sets the thread's local storage pointer. */


-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fxcoudert at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34315

Reply via email to