[J3] BOZ in an array constructor
Bill Long
longb at cray.com
Sun Jul 7 17:00:30 EDT 2019
C7109 allows this program - boz constants are specifically allowed as the first argument to INT. And a ref to INT is allowed in an initialization. And INT is elemental, so an array argument is OK.
I tried the program (changing the print statement to include a Z format, so the result is easier to check) with 4 compilers, and all worked fine and output the correct result. gfortran 8..3.0 was included in the tests. I also tried 6.3 and that also worked. Are you using a really old version of gfortran?
Cheers,
Bill
> On Jul 7, 2019, at 3:26 PM, Robert Corbett via J3 <j3 at mailman.j3-fortran.org> wrote:
>
> I think C7111 and C7112 are irrelevant. I think C7109 is the relevant constraint.
>
> Bob Corbett
>
>> On Jul 7, 2019, at 12:43 PM, Steven G. Kargl via J3 <j3 at mailman.j3-fortran.org> wrote:
>>
>> gfortran's handling of BOZ is rather broken, and I'm
>> currently investigating several fixes. In writing
>> a test program (assuming kind = 4 and 8 are valid), I
>> came up with
>>
>> program foo
>> integer(kind=4) :: i(2) = int([z'1234', z'5678'])
>> integer(kind=8) :: j(2) = int([integer(8) :: z'1234', z'5678'])
>> print *, i
>> end program foo
>>
>> It seems to me C7111 prevents the i(2) case and C7112 prevents
>> the j(2) case. One would need to write
>>
>> program foo
>> integer(kind=4) :: i(2) = [int(z'1234'), int(z'5678')]
>> integer(kind=8) :: j(2) = [integer(8) :: int(z'1234'), int(z'5678')]
>> print *, i
>> end program foo
>>
>> The j(2) case could also be written as
>>
>> integer(kind=8) :: j(2) = [int(z'1234', 8), int(z'5678, 8)]
>>
>> Is my interpretation of C7111 and C7112 correct?
>>
>> --
>> Steve
>
Bill Long longb at cray.com
Principal Engineer, Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9143
Cray Inc./ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
More information about the J3
mailing list