What’s New in Flint’s Version 7 core

Last update: 12-Aug-23, Version 7.59

 

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.