So, what Dick is relying on is that it is permissible to use a
datatype with an absolute address in it along with a buffer pointer
which is not MPI_BOTTOM.
I'm not sure that you're allowed to do that.
Consider p135 in Snir, Otto et al. (I assume the standard has
"Implementations may restrict the use of addresses so that arithmetic
on addresses is confined within sequental storage. Namely, in a
communication call, either
The communication buffer specified by buff, count and datatype
arguments is all within the same sequential storage.
The initial buffer address argument buff is equal to MPI_BOTTOM,
count=1, and all addresses in the type map of datatype are absolute
addresses of the form v+i where v is an absolute address computed by
MPI_ADDR, i is an integer displacement, and v+i is in the same
sequential storage as v."
This seems to me to allow an implementation to forbid the use of a
datatype with absolute addresses and a buffer address which is not
MPI_BOTTOM in the same call.
(This may not have been its intention, since the concern here is with
segmentation, but it does seem to be a side effect of the wording.)
BBN UK Ltd
Phone : +44 117 9071438