What’s New in Flint’s Version 7 core

Last update: 16-Nov-20. Version 7.56

 

Fortran-lint support maps well to compiler capability, non-object-oriented, for Fortran 2003/2008.

New changes in v7 are in bold.

Changes in version 7.5x are in bold italic.

 

Language Additions

·     BLOCK construct (F08)

·     DO CONCURRENT (F08)

·     VALUE statement and attribute

·     VOLATILE statement and attribute

·     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

·     ISO_FORTRAN_ENV

·     IEEE_ARITHMETIC

·     IEEE_EXCEPTIONS

·     IEEE_FEATURES

·     BIND statement and attribute

·     Language binding can be specified in FUNCTION, SUBROUTINE, and ENTRY  statements

·     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

·     MOVE_ALLOC (F03)

·     F08 EXECUTE_COMMAND_LINE, COMPILER_OPTIONS and COMPILER_VERSION intrinsics

·     Updated MAXLOC and MINLOC to the F03 standard

·     Updated FORALL construct to the F03 standard

·     Updated WHERE construct to the F03 standard

·     Character arrays may now be supplied to

-         MAXLOC, MINLOC

-         MAXVAL, MINVAL

·     KIND= argument may be supplied to

-         ACHAR, IACHAR, ICHAR

-         LEN, LEN_TRIM

-         MAXLOC, 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

·     A new statistics option, -A (/ASSESS), provides sorted list of procedure names, lengths, and cyclomatic complexities v(G), output in the summary/statistics section

·     Complete MPI interface definition using stubs for thorough interface analysis and variable tracking (see section 9.2 for stub information)

·     Complete NetCDF interface definition (F77 format)

·     Force –O+ processing. Example: --w no longer supersedes –O+103 (warning: dead code).

·     Flint now exits immediately if source is >72 columns but no –e was specified, which generated a lot of spurious messages

·     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 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, for a total of 886 unique messages and 1610 scenarios where these messages can be applied

·     Improved pointer handling

·     Significant memory management updates

·     Extensive bug fixes

·     Various operational enhancements

 

User Interface Changes to 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.