On 05-Sep-13 19:52, Kurt Roeckx wrote:
> Pretty please stop using longs as something that can hold a
> pointer.  In general you should not cast a pointer to any integer
> type.  If you really have to, use an intptr_t type.

Believe me, a 'long' will do. There is no architecture where
a 'long' can not hold a full pointer. The linux kernel as
just one example heavily relies on the fact that 
sizeof(long)>=sizeof(pointer). 

Using 'intptr_t' will lead to problems because older C environments do 
not know about it and sometimes 'configure' scripts do ugly things with 
'intptr_t'. As an example, 'e2fsprogs' broke with gcc-4.0 because it 
used 'intptr_t'.

> > @@ -141,7 +141,7 @@
> >  {
> >     jint rc = 0;
> >     XPCOM_NATIVE_ENTER(env, that, PR_1Malloc_FUNC);
> > -   rc = (jint)PR_Malloc(arg0);
> > +   rc = (long)PR_Malloc(arg0);
> 
> So you avoid an error by first casting it from a pointer to a
> long and then casting it (implicitly) to an jint (int) instead of
> doing it with only 1 cast?  Of course this will now compile, but
> how useful is this if it doesn't run?
> 
> I'm happy g++ considers casting a pointer to an int as an error.
> Too bad gcc only gives a warning about it.  But it doesn't help
> if people just "shut up the warning".

The package worked this way on 64-bit architectures with gcc-3.3
for a long time and nobody complained about that as far as I know.
The patch just restores the status quo that was used with gcc-3.3.
Of course a real fix which perhaps redefines 'jint' as 'long' would
be better.

Regards
Andreas Jochens


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to