GNU Fortran 4.6.0

2010-12-29 Thread Lawrence Doctors
Dear GNU Fortran Expert:

(1) On December 16, 2010, I downloaded: gfortran-snwleo-intel-bin.tar.gz onto 
my MacBook Pro running Snow Leopard 10.6. Hence, this would be GNU Fortran 
(GCC) 4.6.0 20101106 (experimental). This followed downloading XCode, which I 
believe is necessary for the Fortran. The installation appeared to go smoothly.

(2) I currently have a suite of 227 main Fortran programs. Despite the fact 
that these have been developed and debugged over a 40-year period using various 
IBM mainframes, three Cyber computers, VMS (VAX 32 bit), VMS (Alpha 64-bit), 
VMS (Itanium 64-bit), and MacBook Pro (64-bit, earlier GCC Fortran version, 
namely 4.5), the compiler was able to detect more ”errors”. A good example, is 
the need to use the parentheses in the declaration:
  character*(1) a, b, c
Which had not been previously necessary. I did not mind this because your error 
messages are extremely clear in meaning and it was a simple matter to make 
these modifications.

(3) I compile using the command: 
gfortran -c -std=f2008 -fdefault-real-8 -fdefault-integer-8 \  
-fdollar-ok -fbounds-check -Wcharacter-truncation \ 
-Wuninitialized -Wunderflow -Werror -fbacktrace program.for 
 

(4) Using the "-v" option when compiling gives the following information:

Using built-in specs.   
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-apple-darwin10.4.0/4.6.0/lto-$
Target: x86_64-apple-darwin10.4.0   
Configured with: ../gcc-4.6-20101106/configure --enable-languages=c++,fortran   
Thread model: posix 
gcc version 4.6.0 20101106 (experimental) (GCC) 
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.6.4' '-c' '-std=f2008' '-fdefault-$
 /usr/local/libexec/gcc/x86_64-apple-darwin10.4.0/4.6.0/f951 xacvopt.for -ffixe$
GNU Fortran (GCC) version 4.6.0 20101106 (experimental) (x86_64-apple-darwin10.$
compiled by GNU C version 4.6.0 20101106 (experimental), GMP version 4.$
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 
GNU Fortran (GCC) version 4.6.0 20101106 (experimental) (x86_64-apple-darwin10.$
compiled by GNU C version 4.6.0 20101106 (experimental), GMP version 4.$
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.6.4' '-c' '-std=f2008' '-fdefault-$
 as -arch x86_64 -force_cpusubtype_ALL -o xacvopt.o /var/folders/3D/3Dikh2dMHY4$
COMPILER_PATH=/usr/local/libexec/gcc/x86_64-apple-darwin10.4.0/4.6.0/:/usr/loca$
LIBRARY_PATH=/usr/local/lib/gcc/x86_64-apple-darwin10.4.0/4.6.0/:/usr/local/lib$
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.6.4' '-c' '-std=f2008' '-fdefault-$
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.6.4' '-c' '-std=f2008' '-fdefault-$

(5) The reason that I write is that the parameter “end= label” appears to be 
ignored in a READ statement. (a) This causes the program to crash with a 
Fortran run error if the very last character of the data set is a carriage 
return. (I believe that this is the custom with Unix – to complete a plain text 
file with a carriage return.) I am still becoming familiar with Unix. As you 
will note from the above, my expertise is with VMS which is very unfussy about 
such details. (b) Almost all my data for my Fortran programs is read using 
NAMELIST. If I remove the offending carriage return, the program runs smoothly 
with no Fortran errors, but the last NAMELIST data set is apparently ignored. I 
can fix this in a crude manner by adding another, dummy, NAMELIST with no 
variables in it (again, being careful not to include that offending final 
carriage return). Then all the data is processed.

(6) For the moment, I can also fix the problem more professionally by adding 
the parameter “ios= iostat” in the READ statement and adding a line to the 
program with the Fortran statement:
  if (ios .eq. 5010) goto label

I trust that I have described the problem fully. I really doubt that there 
could be such a basic error in GNU Fortran and I therefore suspect that there 
is a problem elsewhere.

I hope that I do not cause you too much trouble over this but would be pleased 
to hear from you if you have the time to comment. I can, of course, send you a 
very short sample file demonstrating the problem.

With best wishes for the Season,

Larry

Lawrence J. Doctors
Emeritus Professor
Naval Architecture Program
School of Mechanical and Manufacturing Engineering
The University of New South Wales
Sydney, NSW 2052, Australia
Telephone: +61-2-9385 4098
Messages:  +61-2-9385 4093
Facsimile: +61-2-9663 1222


Curious Behavior with Fortran gfortran-10.2-catalina.dmg on macOS Big Sur Version 11.4

2021-07-29 Thread Lawrence Doctors
Dear Sir/Madam:

I would firstly like to thank the folks at GCC for their fine work on 
developing the Fortran compilers, which I have been using for about 12 years 
now, on a series of four MacBook Pro computers. In total, I have had over 50 
years experience using Fortran, this being on a variety of different platforms. 
I therefore do consider myself as being a very experienced programmer.

I have recently installed your gfortran-10.2-catalina.dmg on macOS Big Sur 
Version 11.4 with a 2.4 GHz 8-core Intel Core i9 processor. The computer has 64 
GB 2667 MHz DDR4 of memory, with a disk capacity of 8 TB. During my previous 
experience, when I switched to a new computer on about six or seven occasions, 
most of my programs (now 553 in number) compiled successfully the first time, 
but some of the programs required minor modifications. On this occasion, I 
encountered the following new challenges:

(1) I see that you now check consistency of the argument types and rank, in 
CALL statements. Thus, if an argument would normally be an array, but is unused 
in some CALL statements, my practice was to use a dummy argument with a short 
name, such as "d". This has worked for over 50 years without trouble. However, 
you now check for consistency. Obviously this was easy to fix, as I simple 
declared a dummy array in a DIMENSION statement with the name "d (1)", which 
solved the problem. On reflection, I would say that this is an improvement, 
because it forces the programmer to think carefully when writing the CALL 
statement.

(2) I encountered a curious failure on compilation with the following statement 
using integer arithmetic:
  n= (m + 4)/5
with the message
Error: Integer division truncated to constant ‘2’ at (1) 
[-Werror=integer-division]
f951: all warnings being treated as errors

This error only occurs if both (a) the value of  "m" would lead to a truncation 
(say 7 but not 6), and ALSO if (b) the value of "m" was set in a PARAMETER 
statement. I can work my way around this difficulty by rewriting the statement 
as:
  n= int ((1.0*m + 4)/5)
but it does seem clumsy.

(3) The new compiler seems to dislike large fixed DIMENSION statements, such as 
the following at the beginning of the program unit:
  parameter (n= 105)
  dimension a (n)

The compiler then issues the following message:
3 |   dimension a (n)
  | 1
Error: Array ‘a’ at (1) is larger than limit set by ‘-fmax-stack-var-size=’, 
moved from stack to static storage. This makes the procedure unsafe when called 
recursively, or concurrently from multiple threads. Consider using 
‘-frecursive’, or increase the ‘-fmax-stack-var-size=’ limit, or change the 
code to use an ALLOCATABLE array. [-Werror=surprising]
f951: all warnings being treated as errors

I agree that the message is clear and I was able to follow the suggestion to 
use an ALLOCATABLE statement, but I still wonder why you consider the program 
unsatisfactory in the first place. I can understand (to some degree) why such a 
large array is frowned upon, because one should economize on the size of 
arrays. On the other hand, if the use of a large array makes the task of the 
programmer easier, it should be allowed. Furthermore, an array size of 100 
elements or so is very small, considering the size of the RAM and the disk 
available nowadays.

I would be pleased if you have the time to respond and I would like to express 
my appreciation again for the considerable effort that your group has invested 
in the Fortran compilers over the years.

Sincerely,

Larry

Lawrence J. Doctors
Emeritus Professor
Naval Architecture Program
School of Mechanical and Manufacturing Engineering
The University of New South Wales
Sydney, NSW 2052, Australia
Email: l.doct...@unsw.edu.au
Telephone: +61-2-9371 4158