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= 1050000)
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 1000000
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: [email protected]
Telephone: +61-2-9371 4158