<div dir="ltr">Sorry it has taken me so long to respond to this --<div><br></div><div>Dave, thanks so much for the detailed example!  I added this to the ticket to make sure we don't lose it.</div><div><br></div><div> ~Jim.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 2, 2014 at 11:36 AM, Dave Goodell (dgoodell) <span dir="ltr"><<a href="mailto:dgoodell@cisco.com" target="_blank">dgoodell@cisco.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Dec 24, 2013, at 11:36 AM, Jim Dinan <<a href="mailto:james.dinan@gmail.com">james.dinan@gmail.com</a>> wrote:<br>

<br>
> Given that MPI_Aint will be at least the same size as ptrdiff_t, do we<br>
> actually have a problem with subtracting MPI_Aints to find pointer diffs?<br>
> It seems like this may actually be ok.<br>
<br>
</div>There's still a problem.  I don't think that ptrdiff_t has anything to do with it since that normally only comes into play when you subtract two _pointers_, not two integers acting sort of like pointers.<br>

<br>
As an example, take a look at this little test program.  It subtracts two plausible addresses from the middle of the address space but underflows the signed arithmetic anyway.  When I compile this with '-ftrapv' under clang then I get a core dump when executing this program.<br>

<br>
----8<----<br>
#include <stdio.h><br>
#include <limits.h><br>
<br>
typedef long long MPI_Aint;<br>
<br>
int main(int argc, char **argv)<br>
{<br>
    MPI_Aint a = LLONG_MIN; /* 0x8000000000000000LL */<br>
    MPI_Aint b = 0x7ffffffffffffffcLL;<br>
    MPI_Aint c = a - b; /* expect 0x4LL if signed overflow were defined */<br>
    printf("a=%#llx b=%#llx c=%#llx\n", a, b, c);<br>
    return 0;<br>
}<br>
----8<----<br>
<br>
The overflow occurs because "(a - b)" is really "(-9223372036854775808 - 9223372036854775804)" in signed integer arithmetic.  Note that most implementations will give you the expected value if you don't set '-ftrapv', but that's *undefined behavior* according to the C standard and should not be relied upon (see <a href="http://www.airs.com/blog/archives/120" target="_blank">http://www.airs.com/blog/archives/120</a>).<br>

<br>
This is all just the C side of things.  I have no idea whether Fortran integer overflow is defined.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Dave<br>
<br>
</font></span></blockquote></div><br></div>