Jérôme M. Berger wrote:
Jérôme M. Berger wrote:
Walter Bright wrote:
Jérôme M. Berger wrote:
    Actually, that problem already occurs in C. I've had problems when
porting code from x86 to x86_64 because some unsigned operations
don't behave the same way on both...
How so? I thought most 64 bit C compilers were specifically designed to
avoid this problem.
        I can't isolate it to a minimal test case, but at my job, we make
an image processing library. Since negative image dimensions don't
make sense, we decided to define width and height as "unsigned int".
Now, we have code that works fine on 32-bit platforms (x86 and arm)
but segfaults on x86_64. Simply adding an (int) cast in front of the
image dimensions in a couple of places fixes the issue (tested with
various versions of gcc on linux and windows).

        Gotcha! See the attached test case. I will post the explanation for
the issue as a reply to give everyone a chance to try and spot the
error...

                Jerome


Whoa! That's indeed unfortunate. Allow me some more whoring for TDPL:

==============
\indexes{surprising behavior!of unary \lstinline{-}}%
One surprising  behavior of  unary minus is  that, when applied  to an
unsigned value,  it still yields  an unsigned value (according  to the
rules in~\S~\vref{sec:typing-of-ops}).  For example,\sbs @-55u@ is\sbs
@4_294_967_241@, which is\sbs \ccbox{uint.max - 55 + 1}.

\indexes{unsigned type, natural number, two's complement, overflow}%
The fact that unsigned types are  not really natural numbers is a fact
of  life.   In\sbs\dee  and  many other  languages,  two's  complement
arithmetic with  its simple overflow  rules is an  inescapable reality
that cannot be abstracted away.  One way to think \mbox{of} @-val@ for
any integral val...@val@ is to  consider it a short form \mbox{of}$\,$
\cc{\~val + 1};  in other words, flip every bit in  @val@ and then add
@1@  to  the result.   This  manipulation  does  not raise  particular
questions about the signedness o...@val@.
==============

(This heavily adorned text also shows what sausage making looks like...)


Andrei

Reply via email to