Fortran compiler to be upgraded on Seaborg on 9/28/04

From: Mike Stewart (pmstewart_at_lbl.gov)
Date: 09/21/2004


The default version of the IBM xlf Fortran compiler on seaborg.nersc.gov 
will be upgraded to version 8.1.1.6 on Tuesday, 9/28/04.  This version 
contains fixes to several compiler bugs reported by NERSC to IBM as well 
as some other minor changes and new features. The attached README 
documents the changes and new features in this release.
                                                                                

This new version is currently contained in the xlf module.  To access 
it, type in:
                                                                                

   module load xlf

-- 
=========================
Michael Stewart
Consultant
NERSC User Services Group
510-486-6648
pmstewart@lbl.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."

This archive was generated by hypermail 2.1.6 : 08/21/2008 PDT