From: Mike Stewart (pmstewart_at_lbl_dot_gov)
Date: 01/11/2005
The default version of the IBM Fortran compiler will be upgraded on
Seaborg on Tuesday, January 18, 2005.
This new version of Fortran is 8.1.1.8. This version is currently
contained in the xlf module on seaborg, and can be tested by loading
this module before compiling and linking Fortran programs.
This version is primarily a bug fix version with a few minor new
features and documentation addenda and clarifications which are
described in the attached file.
Contact the NERSC consultants at consult_at_nersc_dot_gov if you experience any
problems with these new versions.
--
=========================
Michael Stewart
Consultant
NERSC User Services Group
510-486-6648
pmstewart_at_lbl_dot_gov
=========================
* @(#) 01 1.2.11.38 6/3/02 22:26:48
*
* COMPONENT_NAME: (Fortran) AIX XL Fortran Compiler
*
* FUNCTIONS: XLF README file
*
* ORIGINS: 27
*
* 5765-F70 (C) COPYRIGHT International Business Machines Corp. 1990, 2002
* All Rights Reserved
* Licensed Materials - Property of IBM
*
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
* IBM, AIXwindows, RS/6000, PowerPC, POWER2, POWER3, POWER4 and AIX are
* trademarks of IBM Corp. in the U.S and/or other countries.
*
* Portions of this document may have been derived from the Information
* technology - Programming languages - Fortran - Part 1: Base
* language, ISO/IEC 1539-1:1997. This document uses the standard's
* informal name, Fortran 95.
This document contains the following sections:
I. Language Reference Errata (version 8.1)
II. Fortran 95 Standard Interpretations
III. User's Guide Errata (version 8.1)
I. Language Reference Errata
============================
The following corrections and additions apply to the published version of the
XL Fortran for AIX Language Reference, version 8.1:
Addition to Storage Class Assignment
------------------------------------
Chapter 3: Data Types and Data Objects
In the "Storage Class Assignment" section, the last paragraph under the heading
"Explicitly", now reads as follows:
A variable that does not satisfy any of the above, and is not
equivalenced with a variable that has an explicit storage class, has an
explicit storage class of static if:
- A SAVE statement with no list exists in the scoping unit, or
- The variable is declared in the specification part of a main
program.
Clarification of TARGET
-----------------------
Chapter 10: Statements
The following changes have been made to the documentation for the TARGET
statement:
Purpose:
Data objects with the TARGET attribute can be associated with
pointers.
In the Rules section, the first rule has been replaced by the following:
If a data object has the TARGET attribute, then all of the data
object's nonpointer subobjects will also have the TARGET attribute.
A data object that does not have the TARGET attribute cannot be
associated with an accessible pointer.
Clarification of COS(X), EXP(X), and SIN(X)
-------------------------------------------
Chapter 12: Intrinsic Procedures
COS(X)
Result Value
If X is of type complex, the real and imaginary parts of X
are regarded as values in radians.
EXP(X)
Result Value
If X is of type complex, its real and imaginary parts are
regarded as values in radians.
SIN(X)
X
must be of type real or complex. If X is real, it is regarded
as a value in radians. If X is complex, its real and imaginary
parts are regarded as values in radians.
Clarification of PACK(ARRAY, MASK, VECTOR)
------------------------------------------
Chapter 12: Intrinsic Procedures
The description of the VECTOR argument for the PACK intrinsic now reads as
follows:
VECTOR (optional)
is a padding array whose elements are used to fill out the
result if there are not enough elements selected by the mask.
It is a one-dimensional array that has the same data type and
type parameter as ARRAY and at least as many elements as there
are true values in MASK. If MASK is a scalar with a value of
.TRUE., VECTOR must have at least as many elements as there are
array elements in ARRAY.
Changed Examples for gmtime_ and ltime_
---------------------------------------
Chapter 14: Service and Utility Procedures
The examples for the following procedures have been corrected:
gmtime_
INTEGER(KIND=TIME_SIZE) STIME
INTEGER(4) TARRAY(9)
CALL gmtime_(STIME, TARRAY)
ltime_
INTEGER(KIND=TIME_SIZE) STIME
INTEGER(4) TARRAY(9)
CALL ltime_(STIME, TARRAY)
II. Fortran 95 Interpretations for XL Fortran for AIX
=====================================================
The following interpretations of the Fortran 95 standard apply to the
XL Fortran for AIX Language Reference, version 8.1:
Chapter 3: Data Types and Data Objects
1. Under "Events Causing Undefinition", rule 14b now reads as follows:
A nonpointer dummy argument with INTENT(OUT) and its associated
actual argument are undefined, except for nonpointer direct components
that have default initialization.
Chapter 4: Array Concepts
2. The following restriction has been added to the "Implied-DO list for an
Array Constructor":
You must not reference the value of an implied_do_variable in
the limit expressions expr1 or expr2.
Chapter 5: Expressions and Assignment
3. The following addition has been made in the section entitled "Pointer
Assignment":
If the target of a pointer assignment is an allocatable object, it
must be allocated.
Chapter 7: Program Units and Procedures
4. Rule 1 of "Rules for Resolving Procedure References to Names" now reads as
follows:
If there is an interface block with that name in the scoping unit or
accessible through use association, and the reference is consistent
with a non-elemental reference to one of the specific interfaces
of that interface block, the reference is to the specific procedure
associated with the specific interface.
5. Within the "Interface Blocks" section, the paragraph above the IBM Extension
now reads as follows:
A procedure name used in a MODULE PROCEDURE statement must not have
been previously specified in any MODULE PROCEDURE statement in any
accessible interface block with the same generic identifier.
Chapter 10: Statements
6. The fourth paragraph in the "Rules" section for the "NAMELIST" statement now
reads as follows:
Nname can be specified in more than one NAMELIST statement in the
scoping unit, and more than once in each NAMELIST statement. The
variable_name_list following each successive appearance of the same
Nname in a scoping unit is treated as the continuation of the list for
that Nname.
Chapter 12: Intrinsic Procedures
7. The description of the MOLD argument for the TRANSFER intrinsic now reads as
follows:
is a data entity that has the type characteristics you want for the
result. If MOLD is a variable, the value does not need to be defined.
It may be of any type, and may be scalar or array valued. Its value is
not used, only its type characteristics.
III. User's Guide Errata
========================
The following corrections and additions apply to the published version of the
XL Fortran for AIX User's Guide, version 8.1:
Chapter 4: Editing, Compiling, Linking, and Running XL Fortran Programs
1. The section that describes the XLFRTEOPTS environment variable in the
"Setting Run-Time Options" section is missing a definition for
cpu_time_type. The cpu_time_type run-time option is defined as follows:
cpu_time_type={usertime | systime | alltime | total_usertime |
total_systime | total_alltime}
-------------
Determines the measure of time returned by a call to CPU_TIME(TIME).
The suboptions for cpu_time_type are as follows:
usertime Specifies that CPU_TIME(TIME) should return the user
time of a process. For a definition of user time, see
the AIX Performance and Tuning Guide.
systime Specifies that CPU_TIME(TIME) should return the system
time of a process. For a definition of system time,
see the AIX Performance and Tuning Guide.
alltime Specifies that CPU_TIME(TIME) should return the sum of
the user and system time of a process.
total_usertime Specifies that CPU_TIME(TIME) should return the total
user time of a process. The total user time is the
sum of the user time of a process and the total user
times of its child processes, if any.
total_systime Specifies that CPU_TIME(TIME) should return the total
system time of a process. The total system time is the
sum of the system time of the current process and the
total system times of its child processes, if any.
total_alltime Specifies that CPU_TIME(TIME) should return the total
user and system time of a process. The total
user and system time is the sum of the user and system
time of the current process and the total user and
system times of their child processes, if any.
This is the default measure of time for CPU_TIME if
you have not set the cpu_time_type run-time option.
2. In all sections concerning linking 32 and 64-bit SMP and non-SMP programs
using the ld command, the following bullet:
-If you use the -qpdf1 option, specify -lpdf and
-L/usr/lpp/xlf/lib/pdf.
is replaced by the following:
-If you use the -qpdf1 compiler option, specify -lxlopt.
Chapter 5: Fortran Compiler-Option Reference
3. In the description of the -d compiler option, and in the "Passing Fortran
Files through the C Preprocessor" section in Chapter 4, the following
sentence should be added:
"When XL Fortran invokes cpp for a file, the preprocessor will emit
#line directives unless you also specify the -d option."
4. The description of the -qfloat=fltint suboption, is incorrect.
The following sentence and note:
"Speeds up calculations more safely than the hsflt suboption, by
rounding double-precision values only when they are stored into
REAL(4) memory locations.
Note: If a program converts a floating-point value that is outside the
representable range of integers, it produces undefined results
because the error condition is not detected."
should be replaced with this description:
"Speeds up floating-point-to-integer conversions by using an
inline sequence of code instead of a call to a library function.
The library function, which is called by default if -qfloat=fltint is not
specified or implied by another option, checks for floating-point values
outside the representable range of integers and returns the minimum or
maximum representable integer if passed an out-of-range floating-point
value.
The Fortran language does not require checking for floating-point values
outside the representable range of integers. In order to improve
efficiency, the inline sequence used by -qfloat=fltint does not perform this
check. If passed a value that is out of range, the inline sequence will
produce undefined results."