"Richard Maine" wrote in message
news:1ijvx6u.194iziczkyx3wN%%nospam@see.signature...
> TRANSFER
Fine. Let's just eliminate TRANSFER so that we can get back on
topic.
C:\gcc_mingw64a\clf\all_logical>type gen_inputs.f90
program gen_inputs
use ISO_C_BINDING
implicit none
integer i
integer(C_INT8_T) j, k
open(10,file='inputs.dat',status='replace')
do i = 0, 2**bit_size(0_C_INT8_T)-1
j = ishft(i,-1)
k = iand(i,1)
j = ishft(j,1)+k ! Unsigned assignment without overflow
write(10,'(i0)') j
end do
close(10)
end program gen_inputs
C:\gcc_mingw64a\clf\all_logical>type test_logical.f90
module funcs
use ISO_C_BINDING
implicit none
contains
subroutine table_row(y,x)
logical(C_BOOL) x
integer(C_INT8_T) y
logical(C_BOOL) z
logical a, b
z = .TRUE.
z = x .AND. z
if(x) then
a = .TRUE.
else
a = .FALSE.
end if
if(z) then
b = .TRUE.
else
b = .FALSE.
end if
write(*,'(b8.8,1x,a,i5,4x,a,4x,a)') y, &
merge(' .TRUE.','.FALSE.',x),y, &
merge(' .TRUE.','.FALSE.',z), &
merge('passed','failed',x.EQV.z)
end subroutine table_row
end module funcs
program test_logical
use ISO_C_BINDING
use funcs
implicit none
character(10) value
integer(C_INT8_T) input
integer garbage ! To work around gfortran bug
logical(C_BOOL) output
call get_command_argument(1,value)
read(value,*) garbage
input = garbage
! read(value,*) input ! Not allowed by gfortran
open(10,file='temp.dat',access='stream',status='replace')
write(10) input
close(10)
open(10,file='temp.dat',access='stream')
read(10) output
close(10,status='delete')
call table_row(input,output)
end program test_logical
C:\gcc_mingw64a\clf\all_logical>type all_logical.bat
@echo off
x86_64-pc-mingw32-gfortran gen_inputs.f90 -ogen_inputs
gen_inputs
x86_64-pc-mingw32-gfortran test_logical.f90 -otest_logical
echo Binary Output Input Result Test
for /F "tokens=1" %%%%i in (inputs.dat) do test_logical %%%%i
C:\gcc_mingw64a\clf\all_logical>all_logical
Binary Output Input Result Test
00000000 .FALSE. 0 .FALSE. passed
00000001 .TRUE. 1 .TRUE. passed
00000010 .TRUE. 2 .FALSE. failed
00000011 .TRUE. 3 .FALSE. failed
00000100 .TRUE. 4 .FALSE. failed
00000101 .TRUE. 5 .FALSE. failed
00000110 .TRUE. 6 .FALSE. failed
00000111 .TRUE. 7 .FALSE. failed
00001000 .TRUE. 8 .FALSE. failed
00001001 .TRUE. 9 .FALSE. failed
00001010 .TRUE. 10 .FALSE. failed
00001011 .TRUE. 11 .FALSE. failed
00001100 .TRUE. 12 .FALSE. failed
00001101 .TRUE. 13 .FALSE. failed
00001110 .TRUE. 14 .FALSE. failed
00001111 .TRUE. 15 .FALSE. failed
00010000 .TRUE. 16 .FALSE. failed
00010001 .TRUE. 17 .FALSE. failed
00010010 .TRUE. 18 .FALSE. failed
00010011 .TRUE. 19 .FALSE. failed
00010100 .TRUE. 20 .FALSE. failed
00010101 .TRUE. 21 .FALSE. failed
00010110 .TRUE. 22 .FALSE. failed
00010111 .TRUE. 23 .FALSE. failed
00011000 .TRUE. 24 .FALSE. failed
00011001 .TRUE. 25 .FALSE. failed
00011010 .TRUE. 26 .FALSE. failed
00011011 .TRUE. 27 .FALSE. failed
00011100 .TRUE. 28 .FALSE. failed
00011101 .TRUE. 29 .FALSE. failed
00011110 .TRUE. 30 .FALSE. failed
00011111 .TRUE. 31 .FALSE. failed
00100000 .TRUE. 32 .FALSE. failed
00100001 .TRUE. 33 .FALSE. failed
00100010 .TRUE. 34 .FALSE. failed
00100011 .TRUE. 35 .FALSE. failed
00100100 .TRUE. 36 .FALSE. failed
00100101 .TRUE. 37 .FALSE. failed
00100110 .TRUE. 38 .FALSE. failed
00100111 .TRUE. 39 .FALSE. failed
00101000 .TRUE. 40 .FALSE. failed
00101001 .TRUE. 41 .FALSE. failed
00101010 .TRUE. 42 .FALSE. failed
00101011 .TRUE. 43 .FALSE. failed
00101100 .TRUE. 44 .FALSE. failed
00101101 .TRUE. 45 .FALSE. failed
00101110 .TRUE. 46 .FALSE. failed
00101111 .TRUE. 47 .FALSE. failed
00110000 .TRUE. 48 .FALSE. failed
00110001 .TRUE. 49 .FALSE. failed
00110010 .TRUE. 50 .FALSE. failed
00110011 .TRUE. 51 .FALSE. failed
00110100 .TRUE. 52 .FALSE. failed
00110101 .TRUE. 53 .FALSE. failed
00110110 .TRUE. 54 .FALSE. failed
00110111 .TRUE. 55 .FALSE. failed
00111000 .TRUE. 56 .FALSE. failed
00111001 .TRUE. 57 .FALSE. failed
00111010 .TRUE. 58 .FALSE. failed
00111011 .TRUE. 59 .FALSE. failed
00111100 .TRUE. 60 .FALSE. failed
00111101 .TRUE. 61 .FALSE. failed
00111110 .TRUE. 62 .FALSE. failed
00111111 .TRUE. 63 .FALSE. failed
01000000 .TRUE. 64 .FALSE. failed
01000001 .TRUE. 65 .FALSE. failed
01000010 .TRUE. 66 .FALSE. failed
01000011 .TRUE. 67 .FALSE. failed
01000100 .TRUE. 68 .FALSE. failed
01000101 .TRUE. 69 .FALSE. failed
01000110 .TRUE. 70 .FALSE. failed
01000111 .TRUE. 71 .FALSE. failed
01001000 .TRUE. 72 .FALSE. failed
01001001 .TRUE. 73 .FALSE. failed
01001010 .TRUE. 74 .FALSE. failed
01001011 .TRUE. 75 .FALSE. failed
01001100 .TRUE. 76 .FALSE. failed
01001101 .TRUE. 77 .FALSE. failed
01001110 .TRUE. 78 .FALSE. failed
01001111 .TRUE. 79 .FALSE. failed
01010000 .TRUE. 80 .FALSE. failed
01010001 .TRUE. 81 .FALSE. failed
01010010 .TRUE. 82 .FALSE. failed
01010011 .TRUE. 83 .FALSE. failed
01010100 .TRUE. 84 .FALSE. failed
01010101 .TRUE. 85 .FALSE. failed
01010110 .TRUE. 86 .FALSE. failed
01010111 .TRUE. 87 .FALSE. failed
01011000 .TRUE. 88 .FALSE. failed
01011001 .TRUE. 89 .FALSE. failed
01011010 .TRUE. 90 .FALSE. failed
01011011 .TRUE. 91 .FALSE. failed
01011100 .TRUE. 92 .FALSE. failed
01011101 .TRUE. 93 .FALSE. failed
01011110 .TRUE. 94 .FALSE. failed
01011111 .TRUE. 95 .FALSE. failed
01100000 .TRUE. 96 .FALSE. failed
01100001 .TRUE. 97 .FALSE. failed
01100010 .TRUE. 98 .FALSE. failed
01100011 .TRUE. 99 .FALSE. failed
01100100 .TRUE. 100 .FALSE. failed
01100101 .TRUE. 101 .FALSE. failed
01100110 .TRUE. 102 .FALSE. failed
01100111 .TRUE. 103 .FALSE. failed
01101000 .TRUE. 104 .FALSE. failed
01101001 .TRUE. 105 .FALSE. failed
01101010 .TRUE. 106 .FALSE. failed
01101011 .TRUE. 107 .FALSE. failed
01101100 .TRUE. 108 .FALSE. failed
01101101 .TRUE. 109 .FALSE. failed
01101110 .TRUE. 110 .FALSE. failed
01101111 .TRUE. 111 .FALSE. failed
01110000 .TRUE. 112 .FALSE. failed
01110001 .TRUE. 113 .FALSE. failed
01110010 .TRUE. 114 .FALSE. failed
01110011 .TRUE. 115 .FALSE. failed
01110100 .TRUE. 116 .FALSE. failed
01110101 .TRUE. 117 .FALSE. failed
01110110 .TRUE. 118 .FALSE. failed
01110111 .TRUE. 119 .FALSE. failed
01111000 .TRUE. 120 .FALSE. failed
01111001 .TRUE. 121 .FALSE. failed
01111010 .TRUE. 122 .FALSE. failed
01111011 .TRUE. 123 .FALSE. failed
01111100 .TRUE. 124 .FALSE. failed
01111101 .TRUE. 125 .FALSE. failed
01111110 .TRUE. 126 .FALSE. failed
01111111 .TRUE. 127 .FALSE. failed
10000000 .TRUE. -128 .FALSE. failed
10000001 .TRUE. -127 .FALSE. failed
10000010 .TRUE. -126 .FALSE. failed
10000011 .TRUE. -125 .FALSE. failed
10000100 .TRUE. -124 .FALSE. failed
10000101 .TRUE. -123 .FALSE. failed
10000110 .TRUE. -122 .FALSE. failed
10000111 .TRUE. -121 .FALSE. failed
10001000 .TRUE. -120 .FALSE. failed
10001001 .TRUE. -119 .FALSE. failed
10001010 .TRUE. -118 .FALSE. failed
10001011 .TRUE. -117 .FALSE. failed
10001100 .TRUE. -116 .FALSE. failed
10001101 .TRUE. -115 .FALSE. failed
10001110 .TRUE. -114 .FALSE. failed
10001111 .TRUE. -113 .FALSE. failed
10010000 .TRUE. -112 .FALSE. failed
10010001 .TRUE. -111 .FALSE. failed
10010010 .TRUE. -110 .FALSE. failed
10010011 .TRUE. -109 .FALSE. failed
10010100 .TRUE. -108 .FALSE. failed
10010101 .TRUE. -107 .FALSE. failed
10010110 .TRUE. -106 .FALSE. failed
10010111 .TRUE. -105 .FALSE. failed
10011000 .TRUE. -104 .FALSE. failed
10011001 .TRUE. -103 .FALSE. failed
10011010 .TRUE. -102 .FALSE. failed
10011011 .TRUE. -101 .FALSE. failed
10011100 .TRUE. -100 .FALSE. failed
10011101 .TRUE. -99 .FALSE. failed
10011110 .TRUE. -98 .FALSE. failed
10011111 .TRUE. -97 .FALSE. failed
10100000 .TRUE. -96 .FALSE. failed
10100001 .TRUE. -95 .FALSE. failed
10100010 .TRUE. -94 .FALSE. failed
10100011 .TRUE. -93 .FALSE. failed
10100100 .TRUE. -92 .FALSE. failed
10100101 .TRUE. -91 .FALSE. failed
10100110 .TRUE. -90 .FALSE. failed
10100111 .TRUE. -89 .FALSE. failed
10101000 .TRUE. -88 .FALSE. failed
10101001 .TRUE. -87 .FALSE. failed
10101010 .TRUE. -86 .FALSE. failed
10101011 .TRUE. -85 .FALSE. failed
10101100 .TRUE. -84 .FALSE. failed
10101101 .TRUE. -83 .FALSE. failed
10101110 .TRUE. -82 .FALSE. failed
10101111 .TRUE. -81 .FALSE. failed
10110000 .TRUE. -80 .FALSE. failed
10110001 .TRUE. -79 .FALSE. failed
10110010 .TRUE. -78 .FALSE. failed
10110011 .TRUE. -77 .FALSE. failed
10110100 .TRUE. -76 .FALSE. failed
10110101 .TRUE. -75 .FALSE. failed
10110110 .TRUE. -74 .FALSE. failed
10110111 .TRUE. -73 .FALSE. failed
10111000 .TRUE. -72 .FALSE. failed
10111001 .TRUE. -71 .FALSE. failed
10111010 .TRUE. -70 .FALSE. failed
10111011 .TRUE. -69 .FALSE. failed
10111100 .TRUE. -68 .FALSE. failed
10111101 .TRUE. -67 .FALSE. failed
10111110 .TRUE. -66 .FALSE. failed
10111111 .TRUE. -65 .FALSE. failed
11000000 .TRUE. -64 .FALSE. failed
11000001 .TRUE. -63 .FALSE. failed
11000010 .TRUE. -62 .FALSE. failed
11000011 .TRUE. -61 .FALSE. failed
11000100 .TRUE. -60 .FALSE. failed
11000101 .TRUE. -59 .FALSE. failed
11000110 .TRUE. -58 .FALSE. failed
11000111 .TRUE. -57 .FALSE. failed
11001000 .TRUE. -56 .FALSE. failed
11001001 .TRUE. -55 .FALSE. failed
11001010 .TRUE. -54 .FALSE. failed
11001011 .TRUE. -53 .FALSE. failed
11001100 .TRUE. -52 .FALSE. failed
11001101 .TRUE. -51 .FALSE. failed
11001110 .TRUE. -50 .FALSE. failed
11001111 .TRUE. -49 .FALSE. failed
11010000 .TRUE. -48 .FALSE. failed
11010001 .TRUE. -47 .FALSE. failed
11010010 .TRUE. -46 .FALSE. failed
11010011 .TRUE. -45 .FALSE. failed
11010100 .TRUE. -44 .FALSE. failed
11010101 .TRUE. -43 .FALSE. failed
11010110 .TRUE. -42 .FALSE. failed
11010111 .TRUE. -41 .FALSE. failed
11011000 .TRUE. -40 .FALSE. failed
11011001 .TRUE. -39 .FALSE. failed
11011010 .TRUE. -38 .FALSE. failed
11011011 .TRUE. -37 .FALSE. failed
11011100 .TRUE. -36 .FALSE. failed
11011101 .TRUE. -35 .FALSE. failed
11011110 .TRUE. -34 .FALSE. failed
11011111 .TRUE. -33 .FALSE. failed
11100000 .TRUE. -32 .FALSE. failed
11100001 .TRUE. -31 .FALSE. failed
11100010 .TRUE. -30 .FALSE. failed
11100011 .TRUE. -29 .FALSE. failed
11100100 .TRUE. -28 .FALSE. failed
11100101 .TRUE. -27 .FALSE. failed
11100110 .TRUE. -26 .FALSE. failed
11100111 .TRUE. -25 .FALSE. failed
11101000 .TRUE. -24 .FALSE. failed
11101001 .TRUE. -23 .FALSE. failed
11101010 .TRUE. -22 .FALSE. failed
11101011 .TRUE. -21 .FALSE. failed
11101100 .TRUE. -20 .FALSE. failed
11101101 .TRUE. -19 .FALSE. failed
11101110 .TRUE. -18 .FALSE. failed
11101111 .TRUE. -17 .FALSE. failed
11110000 .TRUE. -16 .FALSE. failed
11110001 .TRUE. -15 .FALSE. failed
11110010 .TRUE. -14 .FALSE. failed
11110011 .TRUE. -13 .FALSE. failed
11110100 .TRUE. -12 .FALSE. failed
11110101 .TRUE. -11 .FALSE. failed
11110110 .TRUE. -10 .FALSE. failed
11110111 .TRUE. -9 .FALSE. failed
11111000 .TRUE. -8 .FALSE. failed
11111001 .TRUE. -7 .FALSE. failed
11111010 .TRUE. -6 .FALSE. failed
11111011 .TRUE. -5 .FALSE. failed
11111100 .TRUE. -4 .FALSE. failed
11111101 .TRUE. -3 .FALSE. failed
11111110 .TRUE. -2 .FALSE. failed
11111111 .TRUE. -1 .FALSE. failed
OK then, we have no TRANSFER, only one candidate processed per
program run, 254 failures. May we conclude now that all values
except for 0 and 1 are considered to be invalid as LOGICAL(C_BOOL)
variables by gfortran?
--
write(*,*) transfer((/17.392111325966148d0,6.5794487871554595D-85, &
6.0134700243160014d-154/),(/'x'/)); end