May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 1
N1177
To: X3J3 and WG5
From: Richard Maine
Subject: Edits made to X3J3/95-007R2
The following changes have been made relative to X3J3/95-007r2 (N1166)
to produce X3J3/96-007, also known as N1176, which is being circulated
for final review prior to the DIS ballot on the f95.
This list includes the changes formerly mentioned in paper
X3J3/96-030, a fix for UK substantitive issue 5 as
described in paper X3J3/96-050, plus fixes for a few other
comments as described in paper X3J3/96-038.
I have kept a copy that has change bars relative to X3J3/95-007r2,
but the version for the DIS ballot has all the change bars cleared.
----------Misc fixes.
[xiii:42] Replace 'and' by 'simultaneously and then'.
[xv:29] Delete comma.
[xv:30] ", in order to decrease" -> "; this decreases"
[14:17] "Statement function" -> "Statement function statement"
[27:29-40] Merge notes 3.8 and 3.9 as follows. Start with
An "!" or ";" in character position 6
as in note 3.8. Then use the rest of the text from 3.9,
following "position 6". Change "another" to "an".
Result replaces the old 3.8. Delete the old 3.9
[32:1] Delete "unsigned and". No such term is defined.
[33:21-22] Replace 'underflow occurs ... below' by 'the exact result of
an operation is negative but rounding produces a zero'.
[40:14] Delete hyphen from 'non-pointer'.
[49:1] "type-spec" -> ""
[51:27-31] Change the note to read
An interface body may be specified for a dummy or external
function whose result has a character length parameter value of *
only if the function is not invoked. This is because this
characteristic has to be specified to be the same in the interface
body as in the procedure definition, but in order to invoke such a
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 2
procedure, the calling routine is required to specify a length
other than *.
[54:2] "rank or the rank and shape are" -> "rank or shape is"
[61:16] Change 'an' to 'a nonpointer'.
[83:28] Change 'PROCES' to 'PROCESS'.
[115:25] Add "is a scalar variable that" after "It".
(because rank is an attribute).
[115:26] Add ", and this type shall be integer type" after "FORALL" to
be similar to comparable sentences at 280:41 and 280:45.
[115:47] Capitalize the first word and add ',' at the end.
[115:48] Capitalize the first word and add ', and' at the end.
[116:1] Capitalize the first word and add '.' at the end.
[119:16] Replace ' variables' by ' expressions'.
[129:6] Add period at end of line in constraint after R834.
[199:5] "shall" -> "shall not" in 4th constraint after R1215
[212:5-8] Capitalize the first word of each item.
[245:31] "is absent or present with the value..."
-> "is absent or has the value..."
The original wording invited strange misreadings (which could
alternatively be fixed by adding "is" before "present"). This
fix also repairs a bad line break.
[253:31] 13.14.67 heading. MAXLOC -> MAXVAL
[256:19 13.14.72 heading. MAXLOC -> MINVAL
[260:27] 13.14.83 heading. MAXLOC -> PRODUCT
[266:37-40] Replace all 4 lines by
Case (iv): If B is of type real and is zero, then
(a) If the processor cannot distinguish between positive and
negative real zero, the value of the result is |A|.
(a) If B is positive real zero, the value of the result is |A|.
(b) If B is negative real zero, the value of the result is -|A|.
[268:37] 13.14.105 heading. MAXLOC -> SUM
[273:30] "present with" -> "has"
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 3
[280:41] "Its only attributes are" -> "It is a scalar variable that has".
[280:43] Add "; it has no other attributes" before the period.
[280:45] "Its only attributes are" -> "It is a scalar variable that has".
[281:2] Add "; it has no other attributes" before the period.
[293:30] Delete hyphen from 'non-pointer'.
[305:30] Replace R504 by R512.
[305:31] Replace (10) by (11).
[305:45] "in" -> "In"
[310:22] "compoents" -> "components"
[316:12] "i" -> "I"
--------------Resolution of UK substantitive item 5.
Most of this is from paper X3J3/96-050, except for the deletion of
Note 12.36, which is clearly needed because it directly referred
to the deleted sentence above it. I also consistently used :: syntax
throuought the added example, and I added "s" to "expression".
[214:4+] Add the following new constraint:
Constraint: A dummy argument, or a subobject thereof, shall not appear
in a except as the argument to one of
the intrinsic functions BIT_SIZE, KIND, LEN, or the numeric
inquiry functions (13.11.8).
[214:9+] Add a new note as follows:
The restriction on dummy arguments in specification expressions is
imposed primarily to facilitate optimization. An example of usage
that is not permitted is
ELEMENTAL REAL FUNCTION F (A)
REAL :: A
INTEGER :: N
REAL :: WORK_ARRAY (N) ! Invalid
...
END FUNCTION F
An example of usage that is permitted is
ELEMENTAL REAL FUNCTION F (A)
REAL :: A
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 4
REAL (SELECTED_REAL_KIND (PRECISION (A)*2)) :: WORK
...
END FUNCTION F
[214:17-18] Delete sentence "For...expression."
[214:19-20] Delete note 12.36
[214:35-36] Delete sentence "For...expression."
[214:40-215:9] Delete note 12.38
--------------Some global items.
Index. Make font size for index entries 10 pt like the rest of the
document instead of 12 pt.
Change font for "FORTRAN 66" and "FORTRAN 77" to be consistently large "F"
with "ORTRAN" in small capitals as in section 1.5.2 on pp 3-4.
Changes are needed in the following lines:
FORTRAN 66: 303:16, 303:20, 303:25, 303:27, 307:15
FORTRAN 77: Contents at 1.5.2, 6:20, 6:24, 303:9, 303:13, 303:16, 303:20,
303:21, 303:24, 307:15, index at "compatibility", index at
"FORTRAN 77 compatibility".
(The heading for section 1.5.2 is ok on page 3. However, my attempts
to get the font size change into the table of contents entry for this
section on pg i failed. The index entries were also tricky, but they
worked).
----------------- from interpretations passed in Jan 96.
interp 27
1. In section 13.14.13, [232:19] in the description of the
TARGET dummy argument add
". It shall have the same type, type parameters, and rank
as POINTER"
following
"shall be a pointer or target"
2. Section 13.14.13, replace Case (ii) [232:25-27] and Case (iii)
[232:28-30] with
(Editor's note: I added commas after "otherwise" and "If POINTER
is disassociated". Also deleted "the" before "POINTER").
"Case (ii): If TARGET is present and is a scalar target, the
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 5
result is true if TARGET is not a zero-sized storage
sequence and the target associated with POINTER occupies
the same storage units as TARGET.
Otherwise, the result is false. If POINTER is
disassociated, the result is false.
Case (iii): If TARGET is present and is an array target, the result
is true if the target associated with POINTER and TARGET
have the same shape, are neither of size zero nor arrays whose
elements are zero-sized storage sequences, and occupy the
same storage units in array element order. Otherwise,
the result is false. If POINTER is disassociated, the
result is false.
Case (iv): If TARGET is present and is a scalar pointer, the result
is true if the target associated with POINTER and the
target associated with TARGET are not zero-sized storage
sequences and they occupy the same storage units.
Otherwise, the result is false.
If either POINTER or TARGET is disassociated, the result
is false.
Case (v): If TARGET is present and is an array pointer, the result
is true if the target associated with POINTER and the
target associated with TARGET have the same shape, are
neither of size zero nor arrays whose elements are zero-sized
storage sequences, and occupy the same storage units in
array element order. Otherwise, the result is false.
If either POINTER or TARGET is disassociated, the result
is false. "
interp 81
1. In section 12.4.1.6 [203:26-28], delete the first
sentence of (1).
2. In section 12.4.1.6 [203:34] after 2nd ',' in (c) insert
" the dummy argument is a scalar object or an assumed-shape
array,"
3. In section 12.4.1.6 [204:17],
change "pointer association status of A"
to "allocation of B"
4. In section 12.4.1.6 [204:20-21]
change ", but would ... attribute."
to ". If B were declared with the POINTER attribute,
either of the statements
DEALLOCATE(A)
and
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 6
DEALLOCATE(B)
would be permitted, but not both."
5. In section 12.4.1.6 [205:5-7], delete the first sentence
of (2).
6. In section 12.4.1.6 [205:14] after 2nd "," in (c) insert
" the dummy argument is a scalar object or an assumed-shape
array,"
interp 125
1. In section 12.4.1.1 delete the last sentence of the 4th
paragraph [200:30-32]
2. In section 12.4.1.1, add to the end of the 7th paragraph
[200:45]
"If such a dummy argument is associated with a dummy argument
with the TARGET attribute, whether any pointers associated
with the original actual argument become associated with the
dummy argument with the TARGET attribute is processor
dependent."
3. In section 12.4.1.2, 8th paragraph, [201:1]
Change 'is either scalar or is an assumed-shape array'
to 'is either a scalar or an assumed-shape array'
4. In section 12.4.1.2 replace the 9th paragraph [201:8-10] by
"If the dummy argument has the TARGET attribute and is an
explicit-shape array or is an assumed-size array, and the
corresponding actual argument has the TARGET attribute but is
not an array section with a vector subscript
(1) On invocation of the procedure, whether any pointers
associated with the actual argument become associated
with the corresponding dummy argument is processor
dependent and
(2) When execution of the procedure completes, the pointer
association status of any pointer that is pointer
associated with the dummy argument is processor
dependent.
5. In section C.9.5 [336:32]
Change "and is scalar or assumed-shape"
to "and is either a scalar or an assumed-shape array"
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 7
interp 148
(As mentioned in email, the following text reflects some editorial
changes from the exact text of the interpretation).
1. [262:15+] In Section 13.14.86, before "Examples", insert the
following paragraph:
"The pseudorandom number generator used by RANDOM_NUMBER
maintains a seed that is updated during the execution of
RANDOM_NUMBER and that may be specified or returned by
RANDOM_SEED. Computation of the seed from argument PUT
is performed in a processor-dependent manner.
The value returned by GET need not be the same as the value
specified by PUT in an immediately preceding reference to
RANDOM_SEED. For example, following execution of the
statements
CALL RANDOM_SEED(PUT=SEED1)
CALL RANDOM_SEED(GET=SEED2)
SEED2 need not equal SEED1. When the values differ, the use
of either value as the PUT argument in a subsequent call to
RANDOM_SEED shall result in the same sequence of pseudorandom
numbers being generated. For example, after execution of
the statements
CALL RANDOM_SEED(PUT=SEED1)
CALL RANDOM_SEED(GET=SEED2)
CALL RANDOM_NUMBER(X1)
CALL RANDOM_SEED(PUT=SEED2)
CALL RANDOM_NUMBER(X2)
X2 equals X1."
interp 187
1. Delete the second sentence of 5.1.2.8 [57:18-19].
2. Section 5.5.2.3 [70:22] (95-007r2)
Change 'shall' to 'may'
3. Section 5.5.2.3 [70:23] (95-007r2)
Change 'attribute.'
to 'attribute and the same type and type parameters.'
interp 201
May 14 07:44 1996 X3J3/96-099 (8 Pages) Page 8
1. In section 13.14.95, the paragraph prefaced with
"Result Value", [265:40-41]
change "if the precision is not available"
to "if the processor does not support a real data type
with a precision greater than or equal to P"
2. In section 13.14.95, the paragraph prefaced with
"Result Value", [265:41]
change "if the exponent range is not available"
to "if the processor does not support a real data type
with an exponent range greater than or equal to R"
3. In section 13.14.95, the paragraph prefaced with
"Result Value", [265:41]
change "if neither is available"
to "if neither is supported"
interp 203
(Note, deleted the comma from the second edit; it didn't belong)
1. In section 14.4, 2nd sentence [281:28],
Add "that is not an extended intrinsic operator"
after "A defined operator"
2. In section 14.5, 2nd sentence [281:33],
Add "or replace the intrinsic derived type assignment
operation" after "operations"
----------- Final adjustments
After all the above edits were done, some adjustments around tables and
notes (which are implemented as Frame tables) were made to improve page
breaks. The automatic page breaking doesn't deal well with tables, so
they often need to be hand-tuned. None of these adjustments involved
any changes to text.
I ran a script to edit the Frame Postscript prolog so that the
Postscript files should print without change on US letter and A4
paper.