So which of us are the leading blind, and which the following?
I tried playing around with mingw-w64-bin_x86_64-mingw_20080507.zip
some more. I found that compiling with gcc-4.4-20080516-64.exe
from
www.equation.com followed by linking with the aforementioned
gfortran worked sometimes. Unfortunately the trick of linking in
a subroutine that set the f.p. control word to its default value
didn't work: it resulted in a Christo of error messages, so I
couldn't assess the results to full accuracy. You have got to
persuade the mingw 64 guys to set up the f.p. control word
correctly: it's too much of an inconvenience to have to do it
myself and in this jury-rigged setup it fails miserably.
The functions which caused an exception at runtime no longer do so
and many of them even yield the correct results now! Since you now
have working ACOS, ACOSH, ASIN, ASINH, ATAN, ATANH, COSH, SINH, TAN,
and TANH functions for complex arguments I don't see why you don't
enable them for ordinary and specification expressions because it
would require almost no effort to implement them and doing so would
make it possible for the user to invoke them elementally, which is
nonstandard for functions made available via a bind(C) interface
as I have been doing. For initialization expressions it would
perhaps take a little more effort because I'm not sure whether mpfr
supports inverse trigonometric and hyperbolic functions for complex
arguments, but as a first step you could simply error out in this case
as happens for ERFC_SCALED for example.
ABS, LOG, and SQRT for complex arguments also now worked, as did
HYPOT and SCALE for real arguments, but RRSPACING now yields
infinity, SPACING and SET_EXPONENT yield garbage and all the other
functions have the same issues they had in my previous email:
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c bug_collection.f90
C:\gcc_mingw64>gfortran bug_collection.o -obug_collection
C:\gcc_mingw64>bug_collection
C:\gcc_mingw64>collection
C:\gcc_mingw64>REM These complex(10) functions require special interface and
cra
sh at runtime
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ACOS_c10i.f90
C:\gcc_mingw64>gfortran ACOS_c10i.o -o ACOS_c10i
C:\gcc_mingw64>ACOS_c10i
Invoking ACOS...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
4.3608017971689
1516706E-0002, -1.5678369121838189051 )
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ACOSH_c10i.f90
C:\gcc_mingw64>gfortran ACOSH_c10i.o -o ACOSH_c10i
C:\gcc_mingw64>ACOSH_c10i
Invoking ACOSH...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
1.567836912183
8189051 , 4.36080179716891516706E-0002)
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ASIN_c10i.f90
C:\gcc_mingw64>gfortran ASIN_c10i.o -o ASIN_c10i
C:\gcc_mingw64>ASIN_c10i
Invoking ASIN...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
1.527188308823
2074692 , 1.5678369121838189051 )
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ASINH_c10i.f90
C:\gcc_mingw64>gfortran ASINH_c10i.o -o ASINH_c10i
C:\gcc_mingw64>ASINH_c10i
Invoking ASINH...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
1.647871185889
3411159 , 3.71255311654403500410E-0002)
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ATAN_c10i.f90
C:\gcc_mingw64>gfortran ATAN_c10i.o -o ATAN_c10i
C:\gcc_mingw64>ATAN_c10i
Invoking ATAN...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
1.190765099225
7940992 , 1.37775908824697649463E-0002)
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ATANH_c10i.f90
C:\gcc_mingw64>gfortran ATANH_c10i.o -o ATANH_c10i
C:\gcc_mingw64>ATANH_c10i
Invoking ATANH...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
0.4227442792790
7776148 , 1.5517940735445572287 )
...survived!
C:\gcc_mingw64>REM These complex(10) functions crash at runtime
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ABS_c10.f90
C:\gcc_mingw64>gfortran ABS_c10.o -o ABS_c10
C:\gcc_mingw64>ABS_c10
Invoking ABS...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
2.501999200698
9180133 , 0.0000000000000000000 )
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c LOG_c10.f90
C:\gcc_mingw64>gfortran LOG_c10.o -o LOG_c10
C:\gcc_mingw64>LOG_c10
Invoking LOG...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
0.9170900925798
0746252 , 3.99786877183843382784E-0002)
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c SQRT_c10.f90
C:\gcc_mingw64>gfortran SQRT_c10.o -o SQRT_c10
C:\gcc_mingw64>SQRT_c10
Invoking SQRT...
( 2.5000000000000000000 , 0.10000000149011611938 ) (
1.581454899878
4185851 , 3.16164569403161802019E-0002)
...survived!
C:\gcc_mingw64>REM These real(10) functions crash at runtime
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c RRSPACING_r10.f90
C:\gcc_mingw64>gfortran RRSPACING_r10.o -o RRSPACING_r10
C:\gcc_mingw64>RRSPACING_r10
Invoking RRSPACING...
2.5000000000000000000 +Infinity
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c SPACING_r10.f90
C:\gcc_mingw64>gfortran SPACING_r10.o -o SPACING_r10
C:\gcc_mingw64>SPACING_r10
Invoking SPACING...
2.5000000000000000000 3.36210314311209350626E-4932
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c HYPOT_r10.f90
C:\gcc_mingw64>gfortran HYPOT_r10.o -o HYPOT_r10
C:\gcc_mingw64>HYPOT_r10
Invoking HYPOT...
2.5000000000000000000 0.10000000149011611938
2.501999200698918
0133
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c SCALE_r10.f90
C:\gcc_mingw64>gfortran SCALE_r10.o -o SCALE_r10
C:\gcc_mingw64>SCALE_r10
Invoking SCALE...
2.5000000000000000000 20 2621440.0000000000000
...survived!
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c SET_EXPONENT_r10.f90
C:\gcc_mingw64>gfortran SET_EXPONENT_r10.o -o SET_EXPONENT_r10
C:\gcc_mingw64>SET_EXPONENT_r10
Invoking SET_EXPONENT...
2.5000000000000000000 20 2621440.0000000000000
...survived!
C:\gcc_mingw64>REM These real(10) functions fail to link
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_J0_r10.f90
C:\gcc_mingw64>gfortran BESSEL_J0_r10.o -o BESSEL_J0_r10
BESSEL_J0_r10.o:BESSEL_J0_r10.f90:(.text+0x60): undefined reference to
`_j0l'
collect2: ld returned 1 exit status
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_J1_r10.f90
C:\gcc_mingw64>gfortran BESSEL_J1_r10.o -o BESSEL_J1_r10
BESSEL_J1_r10.o:BESSEL_J1_r10.f90:(.text+0x60): undefined reference to
`_j1l'
collect2: ld returned 1 exit status
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_Y0_r10.f90
C:\gcc_mingw64>gfortran BESSEL_Y0_r10.o -o BESSEL_Y0_r10
BESSEL_Y0_r10.o:BESSEL_Y0_r10.f90:(.text+0x60): undefined reference to
`_y0l'
collect2: ld returned 1 exit status
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_Y1_r10.f90
C:\gcc_mingw64>gfortran BESSEL_Y1_r10.o -o BESSEL_Y1_r10
BESSEL_Y1_r10.o:BESSEL_Y1_r10.f90:(.text+0x60): undefined reference to
`_y1l'
collect2: ld returned 1 exit status
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_JN_r10.f90
C:\gcc_mingw64>gfortran BESSEL_JN_r10.o -o BESSEL_JN_r10
BESSEL_JN_r10.o:BESSEL_JN_r10.f90:(.text+0x7f): undefined reference to
`_jnl'
collect2: ld returned 1 exit status
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c BESSEL_YN_r10.f90
C:\gcc_mingw64>gfortran BESSEL_YN_r10.o -o BESSEL_YN_r10
BESSEL_YN_r10.o:BESSEL_YN_r10.f90:(.text+0x7f): undefined reference to
`_ynl'
collect2: ld returned 1 exit status
C:\gcc_mingw64>REM These real(10) functions yield NaN
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ERF_r10.f90
C:\gcc_mingw64>gfortran ERF_r10.o -o ERF_r10
C:\gcc_mingw64>ERF_r10
ERF NaN
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ERFC_r10.f90
C:\gcc_mingw64>gfortran ERFC_r10.o -o ERFC_r10
C:\gcc_mingw64>ERFC_r10
ERFC NaN
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c GAMMA_r10.f90
C:\gcc_mingw64>gfortran GAMMA_r10.o -o GAMMA_r10
C:\gcc_mingw64>GAMMA_r10
GAMMA NaN
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c LOG_GAMMA_r10.f90
C:\gcc_mingw64>gfortran LOG_GAMMA_r10.o -o LOG_GAMMA_r10
C:\gcc_mingw64>LOG_GAMMA_r10
LOG_GAMMA NaN
C:\gcc_mingw64>REM These real(10) functions yield garbage
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c EXPONENT_r10.f90
C:\gcc_mingw64>gfortran EXPONENT_r10.o -o EXPONENT_r10
C:\gcc_mingw64>EXPONENT_r10
x 2.5000000000000000000
EXPONENT -16381
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c FRACTION_r10.f90
C:\gcc_mingw64>gfortran FRACTION_r10.o -o FRACTION_r10
C:\gcc_mingw64>FRACTION_r10
x 2.5000000000000000000
FRACTION 2.5000000000000000000
C:\gcc_mingw64>REM These real(4) functions are not available for
initialization
expressions
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c ERFC_SCALED_r4.f90
ERFC_SCALED_r4.f90:4.18:
real(int(4+0*y)), parameter :: z = 42.0
1
Error: Constant expression required at (1)
C:\gcc_mingw64>c:\gcc_equation\bin\gfortran -c SIZEOF_r4.f90
SIZEOF_r4.f90:3.28:
real(4), parameter :: y = SIZEOF(x)
1
Error: Intrinsic function 'sizeof' at (1) is not permitted in an
initialization
expression
SIZEOF_r4.f90:4.17:
real(int(4+0*y)), parameter :: z = 42.0
1
Error: Parameter 'y' at (1) has not been declared or is a variable, which
does n
ot reduce to a constant expression
How does nightstrike manage to regression test gfortran if the image
available on the mingw 64 page just hangs as it does for me? Has
anyone else used this snapshot successfully to compile anything
with gfortran?
Another test:
C:\gcc_mingw64>type hello.c
#include
main()
{
printf("Hello, world!\n");
return 0;
}
C:\gcc_mingw64>gcc hello.c -ohello
C:\gcc_mingw64>hello
Hello, world!
So that snapshot can compile C programs, the problem is only with
Fortran! Maybe nightstrike has something on his machine in his path
that gfortran needs but is not included in this snapshot. Do you
have any ideas how I can make progress in getting this to work?