Fortran-lint
support maps well to compiler capability, non-object-oriented, for Fortran from
pre-F77 through F18.
Changes
in version 7.57/7.58/7.59 are in italic.
Language Additions
·
BLOCK construct (F08)
·
DO CONCURRENT (F08)
·
IMPORT statement
(F03)
·
ENUM, END ENUM
and ENUMERATOR statements (F03)
·
PROCEDURE
statement (non-oo) (F03)
·
ABSTRACT
INTERFACE statement (F03)
·
FINAL statement
(F03)
·
VALUE statement and
attribute
·
VOLATILE statement and
attribute
·
BIND statement and
attribute
·
Language binding can be
specified in FUNCTION, SUBROUTINE, and ENTRY statements
· “PROCEDURE” as
shorthand for “MODULE PROCEDURE” (F03)
·
Pointer objects can now
have the INTENT attribute
·
Symbol names up to 63
characters
·
Statements up to 256 lines
(16,000 character limit for Flint)
·
Square brackets [ ] are permitted to
delimit array constructors in addition to previous standard / /
·
Binary, Octal, and Hex
(BOZ) constants to intrinsic functions INT,
REAL, DBLE, and CMPLX
Intrinsics
·
ISO_C_BINDING and
ISO_FORTRAN_ENV
·
IEEE_ARITHMETIC, IEEE_EXCEPTIONS,
and IEEE_FEATURES
·
INTRINSIC and
NON-INTRINSIC can be specified for modules in USE statements
·
GET_COMMAND,
GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT, and GET_ENVIRONMENT_VARIABLE
intrinsics
·
F08 intrinsics
EXECUTE_COMMAND_LINE, COMPILER_OPTIONS and COMPILER_VERSION
·
F08 intrinsic
functions BGE, BGT, BLE, BLT, DSHIFTL, DSHIFTR, LEADZ, POPCNT, POPPAR, TRAILZ,
MASKL, MASKR, SHIFTA, SHIFTL, SHIFTR, MERGE_BITS, IALL, IANY, IPARITY,
STORAGE_SIZE, BESSEL_J0/1/N, BESSEL_Y0/1/N, transformational forms of
BESSEL_JN/BESSEL_YN, ERF, ERFC, ERFC_SCALED, GAMMA, HYPOT, LOG_GAMMA, NORM2,
PARITY, and FINDLOC
·
Updated the
following to the F08 standard: ACOS, ASIN, ATAN, COSH, SINH, TANH, TAN, ACOSH,
ASINH, ATANH, ASCII kind, MINLOC, and MAXLOC
·
MOVE_ALLOC (F03)
· Updated FORALL and WHERE constructs to the F03
standard
·
Character arrays may now
be supplied to MAXLOC, MINLOC, MAXVAL, and MINVAL
·
KIND= argument may be
supplied to ACHAR, IACHAR, ICHAR, LEN, LEN_TRIM, MAXLOC, and MINLOC
I/O
·
FLUSH statement
·
WAIT statement (with
ASYNCHRONOUS/ASYNCH and DONE extensions from IBM)
·
ASYNCHRONOUS statement and
attribute
·
The following I/O
specifiers have been added or updated to the F03 standard: ACCESS, ASYNCHRONOUS
(along with ASYNCH alias, an IBM extension), BLANK, DECIMAL, DELIM, ENCODING,
ID, IOMSG, PAD, PENDING, POS, RECORDTYPE (DEC, HP, Intel extension) ROUND,
SIGN, SIZE, and STREAM
·
F08 I/O specifier NEWUNIT
·
Any KIND is permissible
with integer specifiers (SIZE, NEXTREC, etc.)
·
Intrinsic functions
IS_IOSTAT_END, IS_IOSTAT_EOR
·
Comma after a P-edit
descriptor is optional when followed by a repeat
·
NEW_LINE intrinsic
function
·
SELECTED_CHAR_KIND
intrinsic function
·
F08 extension to
SELECTED_REAL_KIND intrinsic function
Other Additions/Improvements
·
Command line
options -MmagicCom and -MmagicShow suppress Flint
messages at the sourceline level, rather than over the entire sourcebase
·
A new statistics option,
-A (/ASSESS), provides a sorted list of procedure names, line counts, parameter counts, and cyclomatic
complexities v(G), output in the summary/statistics section
· A new message, #909, is generated to alert user if v(G),
line count, or parameter count exceed a user-specified maximum (see
flintman.pdf for -A)
·
Complete MPI interface
definition using stubs for thorough interface analysis and variable tracking
(see flintman.pdf section 9.2 for stub information)
·
Complete NetCDF interface
definition (F77 format)
·
Force -O+ processing.
Example: --w no longer suppresses explicit -O+103 (warning: dead code).
· Force Flint to ignore sequence numbers and any characters
past col. 72 (-Mstrict72)
·
Flint now exits
immediately if source is >72 columns but no -e was specified, which
generated a lot of spurious messages
·
Flint now exits
immediately if include files are missing, which generated a lot of spurious
messages
·
Two pre-analysis
modes which check for common issues that can generate spurious errors,
especially when using Flint for the first time (see section 7.4 of flintguide.pdf)
·
Some messages downgraded
to FYIs if analysis performed in local mode (i.e., no –g): #136, 538
·
New xref legend item, ‘C’
for “assoCiated”
·
A nother
new xref legend item, ‘c’ (lowercase) for symbol used
as loop counter
· Yet more xref legends: lowercase
‘s’ and ‘r’ for targets that are set or refenced via their pointers; also
eliminates misleading #742/126 messages regarding target referenced but never
set
·
A new command line switch -o "message_format" to
change the format of Flint’s analysis messages, suitable for interfacing to
IDE/ editor such as Visual Studio
Under the Hood
·
New analyses: now
911 unique messages and 1662 scenarios where these
messages can be applied
·
Fug bixes
·
Various
operational and performance enhancements
·
Improved pointer handling
·
Significant memory
management updates
·
Native 64-bit builds
User Interface Changes of Note
·
Separator for cross
reference (xref) content selection is now ‘.’ instead of ‘_’; see Section 8.4 of flintman.pdf. Prior versions of Flint retain the old
syntax.
·
In building
64-bit versions, the FDB database required storing and retrieving 64-bit
pointers, necessitating a restructure of the binary file format. Notify
support@cleanscape.net for assistance if this affected you.
·
As of version
7.57, messages are enabled for intrinsic procedures. In prior versions, if you
did not specify -g you would not get any messages regarding use of the
intrinsic (passing a CHARACTER when INTEGER is expected, for instance) because
these are considered interface issues, and interface issues are suppressed
unless -g is specified. In v7.57, these messages are enabled
by default. To revert to pre-7.57 behavior, add
-Moldintrinmsgs to your Flint command line.