(j3.2006) CFI_index_t
Robert Corbett
robert.corbett
Fri Feb 10 19:59:22 EST 2012
On 02/10/12 08:07, Bill Long wrote:
>
>
> On 2/10/12 2:14 AM, Robert Corbett wrote:
>> The definition given for CFI_index_t in Clause 8.3.2 of the draft
>> Further C Interoperability TS is not clear. The definition is
>>
>> CFI_index_t is a typedef name for a standard signed integer type
>> capable of representing the result of subtracting two pointers.
>>
>
> Which was carefully crafted by our C expert.
Yes, and the Fortran standard is carefully crafted by Fortran experts.
>
> For me, it has the right operational content. Things declared CFI_index_t
> are typically values you want to add to, or subtract from, an existing pointer
> to get a new pointer that points to the object you are attempting to access.
> Seems to me the definition says exactly the right thing.
Our interpretations differ. I think of items of the type CFI_index_t as
expressing lower bounds, extents, and stride multipliers (expressed in bytes).
>
>> I assume the definition does not mean the result of subtracting two
>> arbitrary pointers. I assume that the definition assumes something like
>> the definition of pointer subtraction provided in the C standard, but
>> extended to handle cases not defined by the C standard. One important
>> issue is whether the definition is based on pointers to elements of C
>> arrays or pointers to elements of Fortran arrays. For some Fortran
>
> Objects declared with CFI_index_t are always in the C domain. These are C
> pointers we're taking about.
>
>> processors and C companion processors, that difference will make a
>> difference in the required size of the integer type. Here is my best
>
> A C processor that has a different addressing range from a Fortran processor
> is a pretty poor choice as a "companion" processor. This would break even
> the F2003 form of interoperability.
I do not see how this comment relates to anything I wrote.
The point I tried to make was that a Fortran processor and its C companion
processor might have different limits on the number of elements
of size greater than zero allowed in an array. For example, MSVC for 32-bit
Windows allows an array of char to have nearly three billion elements. The
Fortran implementations I tested on 32-bit Windows had limits of 2^31 - 1 or
less on the number of elements allowed in an array whose elements were not
zero-sized. If the pointer differences were for Fortran objects, the
differences between pointers to parts of a single object could be represented
using 32-bit signed integers. A vendor implementing the TS for such an
environment might think the TS would allow the type name CFI_index_t to denote
the 32-bit signed integer type. If the intended meaning is that the type must
be capable of representing difference between two parts of a C object, the type
name must name a type that is larger than 32 bits. I do not think the current
draft of the TS makes this clear.
Bob Corbett
>
>> guess at the intended meaning of the definition:
>>
>> CFI_index_t is a typedef name for a standard signed integer type
>> capable of representing the integers from -N to N, where N is the
>> largest number of elements the Fortran processor supports for an
>> array whose elements are not zero-sized.
>>
>> I can easily imagine that I have not correctly guessed the intended
>> meaning. If that is the case, please let me know how my proposed
>> definition differs from the intended meaning.
>>
>> Robert Corbett
>> _______________________________________________
>> J3 mailing list
>> J3 at j3-fortran.org
>> http://j3-fortran.org/mailman/listinfo/j3
>
More information about the J3
mailing list