[gfortran] PATCH Fix PR 20058

Toon Moene toon@moene.indiv.nluug.nl
Tue Feb 22 11:26:00 GMT 2005


Tobias Schlüter wrote:

> Steve Kargl wrote:
> 
>> /* Match a binary, octal or hexadecimal constant that can be found in
>>-   a DATA statement.  */
>>+   a DATA statement.  In section 5.2.5 and following C567 we find "If a
>>+   data-stmt-constant is a boz-literal-constant, the corresponding variable
>>+   shall be of type integer.  The boz-literal-constant is treated as if it
>>+   were an int-literal-constant with a kind-param that specifies the
>>+   representation method with the largest decimal exponent range supported
>>+   by the processor."  */

> You should probably say that this is from the F2K standard.  I'm also curious
> what edition you have, and where you got it.  In my Sep 2002 draft there's a
> lot of stuff between C567 and this restriction.

It all started by the following remarks by our esteemed Editor of the 
Fortran 2003 Standard, Richard Maine (in paper 02-102.txt for meeting 
160, February, 25 - March, 1, 2002):

     issue 351 - boz and REAL

       The above expression for the result of boz arguments to
       REAL does not give a reasonable result for anything other
       than default real.  The INT(A) gives a default integer
       result, which then doesn't TRANSFER reasonably to anything
       other than a default real.

       If I may make a suggestion, perhaps we should use a
       different descriptive model.  We seem to be somewhat unable
       to decide on what a boz actually is.  I've been assuming
       that a boz constant was of type integer.  They are, after
       all, described in the section on integer types.  But on
       closer reading, I don't see that we actually say they are
       of type integer.  We do say in a few places that they are
       interpreted as if they were, but we don't say that they
       actually are.  The edits of paper 01-394r1 clearly don't
       consider boz literals to actually be of type integer - if
       so, it would be nonsense to say that the arguments to, for
       example the INT intrinsic, could be "of type integer, real,
       or complex, or a boz-literal-constant."

       Treating boz constants as integers is going to make it
       difficult to use them on intrinsic reals larger than the
       largest supported integer kind.  Lots of processors have
       this situation.  It is common for the largest supported
       integer to be 32 bits, yet have 64-bit reals.  Some
       processors support 64-bit integers, but then many of those
       also support 128-bit reals.  EVen if we stick to the
       integers, there is the problem of representing negative
       integers of the largest supported integer kind.

Hope this helps,

-- 
Toon Moene - e-mail: toon@moene.indiv.nluug.nl - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/



More information about the Gcc-patches mailing list