############################################################################## # # # X3J3/94-006 # # # # Part B # # # ############################################################################## T A B L E O F C O N T E N T S Part B Interpretations approved by SC22/WG5 (status codes W, P) ############################################################################## -------------------------------------------------------------------------------- NUMBER: 00000a TITLE: Minor edits and corrections to ISO/IEC 1539:1991 (E) KEYWORDS: typographical errors DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: ANSWER: EDITS: 1. Introduction, Overview, Data Concepts, last sentence [xvi:1-2]; Delete the sentence "The section concludes ... names." 2. 2.4.6, third sentence [15:25]; Change "of" to "or". 3. 12.4.1.1, first paragraph, last line [172:41]; Change "of the the dummy" to "of the dummy" 4. 12.5.2.4, at end of first paragraph [177:29]; Add new sentence "When a statement function is invoked, an instance of that statement function is created." 5. 13.13.25, Result Value, Case (ii), at beginning of the third line [203:23]; Change "1,sh" to "sh,1". 6. 13.13.66, Result Value, Case (iii) [220:25]; Change",[" to "[" (i.e. delete comma). 7. Annex A, conformable [255:27]; Change "2.4.7" to "2.4.5". 8. Annex A, constant [255:38]; Change "2.4.4" to "2.4.3.1.2". 9. Annex A, derived type [256:23]; Change "2," to "2)". 10. Annex A, extent [257:8]; Change "2.4.7" to " 2.4.5". 11. Annex A, literal constant [258:19]; Change "2.4.4" to "2.4.3.1.2". 12. Annex A, main program [258:22]; Change "2," to "2)". 13. Annex A, module [258:25]; Change "4," to "4)". 14. Annex A, named constant [258:34]; Change "2.4.4" to "2.4.3.1.2". 15. Annex A, procedure [259:19]; Change "3," to "3)". 16. Annex A, rank [259:31]; Change "2.4.7" to "2.4.5". 17. Annex A, shape [ 260:12]; Change "2.4.7" to "2.4.5". 18. Annex A, size [260:14]; Change "2.4.7" to "2.4.5". 19. Annex A, subobject [260:35]; Change "2.4.3.2" to "2.4.3.1". 20. Annex A, target [261:9]; Change "specified in a" to "specified in a TARGET statement or". 21. Annex A, variable [261:30]; Change "2.4.5" to "2.4.3.1.1". HISTORY: The initial set of 20 items, all except item 3, prepared at WG5 (Victoria, BC) and submitted to X3J3 122, July 1992. Item 3 submitted at X3J3 meeting 123, November 1992. Approved in X3J3 letter ballots 92-182 and 930-016. N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000002 TITLE: Default main program name KEYWORDS: main program, PROGRAM statement DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Some implementations of Fortran supply a default PROGRAM statement and program name when it is omitted from the main program. If the default program name conflicts with a global name in the program is the processor standard conforming or not? For example: COMMON /MAIN/ A(1000) READ *,N CALL SUB(N) END SUBROUTINE SUB(N) COMMON /MAIN/ A(1000) DO 100 I=1,N A(I)=0.0 100 CONTINUE END If a processor supplies a PROGRAM statement with a default name MAIN, this will conflict with the common block name MAIN. Is such a processor standard conforming? If the processor supplied a name which could never conflict with a Fortran name, would it be standard conforming? Would the processor in the example above be standard conforming if it used $MAIN, for example, instead of MAIN? ANSWER: This situation is covered by the third paragraph of sections 1.4 and C.11.1 of ISO/IEC 1539:1991. Specifically, section 1.4, item (1), of ISO/IEC 1539:1991 states: A processor conforms to this International Standard if: (1) It executes any standard-conforming program in a manner that fulfills the interpretations herein, subject to any limits that the processor may impose on the size and complexity of the program. If, as in the example provided, the processor supplies a PROGRAM statement with a symbolic name that conflicts with another global name in the program such that the program fails to execute, then the processor does not conform to the standard. The processor may supply a default name which does not conflict with another global name and be standard conforming. REFERENCES: ISO/IEC 1539:1991 (E) sections 1.4 and C.11.1 ANSI X3.9-1978 section 1.4 (page 1-2, lines 25-27) EDITS: None. SUBMITTED BY: A.D. Tait, 117-ADT-5 (117.035), 118-ADT-3 (118.045) HISTORY: 119-ADT-1 (119.012), 119-RL-2 (119.048) X3J3 draft response at meetings 120, 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000003 TITLE: Preconnected units and UNIT=* KEYWORDS: i/o preconnected units, i/o unit, i/o UNIT=* DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Is a processor which associates preconnected units with the files identified by the * in READ and WRITE statements standard conforming? ANSWER: Yes. Discussion: This situation is covered by sections 9.3and 9.4.4.2 of ISO/IEC 1539:1991. These sections state that the asterisk identifies a particular processor-determined unit which is the same for a PRINT statement and a WRITE statement which contains an asterisk. The processor-determined unit is different for a READ statement which contains an asterisk. REFERENCES: ISO/IEC 1539:1991 (E) sections 9.3 and 9.4.4.2 ANSI X3.9-1978 section 12.9.2 EDITS: None. SUBMITTED BY: A.D. Tait, 118-ADT-2 (118.024) HISTORY: Approved as 119-ADT-2 (119.013) at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000005 TITLE: Namelist output of zero length character strings KEYWORDS: i/o namelist output, zero length DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Given the program: PROGRAM P CHARACTER*0 CH NAMELIST/OUT/CH OPEN(UNIT=8,DELIM='NONE') WRITE(UNIT=8,NML=OUT) END The namelist output record would be: &OUT CH= / Does not this conflict with the statement in section 10.9.2.2 that: A null value is not produced by namelist formatting. ANSWER: No. Discussion: Although the output produced by this program appears to contain a null value (to namelist input), actually a zero-length character string was written by the namelist output statement. Note that this is different from a null value (section 10.9.1.4) which has no meaning on output. The statement: A null value is not produced by namelist formatting. indicates that since all namelist group objects have a value, that value (in this case a zero-length string) is output. REFERENCES: ISO/IEC 1539:1991 (E) sections 10.9.1.4, & 10.9.2.2, EDITS: None. SUBMITTED BY: J. T. Martin, 119-JTM-3 (119.016) HISTORY: 119-RPK-2 (119.064), & 119-JTM-6 (119.041) Approved in ballot 92-182 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000006 TITLE: Procedure specifications in a scoping unit KEYWORDS: procedure specification, scoping unit, interface body DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Which of the following procedure related specifications may jointly occur within a scoping unit? a. An interface body for the procedure and the appearance of the procedure name in a type statement b. A module procedure definition and the appearance of the procedure name in a type statement c. A module procedure definition and an interface body for the procedure d. An interface body for the procedure and the appearance of the procedure name in an EXTERNAL statement ANSWER: None of the above. Discussion: Section 5.1 states the generally applicable constraint: An entity must not be given explicitly any attribute more than once in a scoping unit. An interface body provides an explicit interface to the procedure. This interface includes the characteristics of the procedure: these characteristics include, for a function, the type of the value returned. Thus, the interface body is an explicit declaration of the function result type, and this must not also be declared in a type statement (a). Similarly, a module procedure definition includes a declaration of its interface, so its presence precludes the presence of either a type statement declaring function result (b) or an interface body declaring its characteristics (c). The case of the module procedure definition and interface body is also covered by the statement in 12.3.2.1 that A procedure must not have more than one explicit specific interface in a given scoping unit. and by the fact that the statement (also in 12.3.2.1): An interface body in an interface block specifies an explicit interface for an existing external procedure or a dummy procedure, does not include module procedures. The latter statement in conjunction with the sentence which follows it also implies that the interface body declares the same attributes as the EXTERNAL statement, so this combination is similarly prohibited (d). This last case may be less than obvious. This deficiency is remedied by an edit to provide an explicit prohibition to cover this case. REFERENCES: ISO/IEC 1539:1991 (E) sections 5.1, & 12.3.2.1 EDIT: At the end of the fourth paragraph following R1207 in 12.3.2.2 [170:42], add: A name that appears in an EXTERNAL statement must not also appear as a specific procedure name in an interface block in the scoping unit. SUBMITTED BY: S. M. Lammers, 119-SML-1 (119.019) items 1 through 4 HISTORY: X3J3/92-170 m122 Approved uc 92-312 m123 Revised following letter ballot, approved uc N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000009 TITLE: Generic interfaces with the same name in a program KEYWORDS: generic interface, interface, use association DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: May two generic interfaces of the same name be accessed by use association in the same scoping unit? Discussion: Can the following program fragment be part of a standard conforming program? MODULE MOD1 INTERFACE INT1 ... END INTERFACE END MODULE MOD1 MODULE MOD2 INTERFACE INT1 ... END INTERFACE ... END MODULE MOD2 PROGRAM EXAMPLE_1 USE MOD1 USE MOD2 ANSWER: Yes. As can be seen in section 11.3.2: If two or more generic interfaces that are accessible in a scoping unit ... they are interpreted as a single generic interface. REFERENCES: ISO/IEC 1539:1991 (E) section 11.3.2 (paragraph 5 after last constraint). EDITS: None. SUBMITTED BY: Larry Rolison, 120-LRR-4 (120.029), question 1 HISTORY: 120-MBSH-1A (120.084A) m120 proposed X3J3/92-040 (121-JKR-8) Questioned in X3J3/92-099 Approved X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000010 TITLE: Generic interfaces with the same name in a scoping unit KEYWORDS: generic interface, interface, scoping unit DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Are two generic interfaces with the same name allowed in the same scoping unit? For example can this program fragment be part of a standard conforming program? PROGRAM EXAMPLE_1 INTERFACE INT1 ... END INTERFACE ... INTERFACE INT1 ... END INTERFACE ANSWER: Yes. As can be seen in section 11.3.2: If two or more generic interfaces that are accessible in a scoping unit ... they are interpreted as a single generic interface. REFERENCES: 120-MBSH-1A (120.084A) EDITS: None. SUBMITTED BY: Larry Rolison, 120-LRR-4 (120.029), question 2 HISTORY: 120-MBSH-1A (120.084A) m120 Proposed X3J3/92-040 (121-JKR-8) Questioned in X3J3/92-100 Approved as X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000013 TITLE: Implicit mapping of an interface block KEYWORDS: implicit mapping, interface block DEFECT TYPE: Amendment STATUS: WG5 approved; ready for SC22 QUESTION: Is the implicit mapping of the host inherited by an interface block? ANSWER: No. Discussion: Unlike other scoping units that are contained within a host scoping unit, an interface body does not access entities from its host by host association. This was intended to allow the initial statements of an external procedure to be used without modification in an interface body describing that procedure. The possibility of there being different implicit mappings was inadvertently overlooked. If not corrected, this would mean that: FUNCTION F(X,I) F = X**I/I END FUNCTION F would be properly described by: INTERFACE FUNCTION F(X,I) END FUNCTION F END INTERFACE if the interface block is contained in a host with default implicit mapping, but not in one containing the statement: IMPLICIT INTEGER (A-Z) The default implicit mapping in an interface body is made consistent with that in an external procedure by the supplied edit. REFERENCES: ISO/IEC 1539:1991 (E) sections 2.2 & 5.3 EDITS: 1. In Section 5.3 in the second paragraph after the constraints [54:30], in the phrase: "the default is the mapping ...", after "default": add "for a program unit or an interface body is default integer if the letter is I,J, ... , or N and default real otherwise, and the default for an internal or module procedure". Delete "A program ... O-Z)" 2. In the example in section 5.3 for FUNCTION FUN [55:2] in the interface block the comment should be changed from: ! All data entities must ! be declared explicitly to ! Not all entities need be ! declared explicitly 3. In the first example in section 5.3 [55:3], change "INTEGER FUN, I" to be "INTEGER FUN". SUBMITTED BY: Larry Rolison 120-LRR-3 (120.028) LAST SIGNIFICANT CHANGE: 93-07-09 000013 approved, WG5 N930 resolution B2 HISTORY: X3J3/92-102A Draft response WG5 N786A Victoria, questioned in X3J3/92-154A m122 Revised edit approved 21-1. X3J3/92-267r m123 Edit approved WG5 N881 ballot failed WG5 N930 Berchtesgaden, resolution B2 approved -------------------------------------------------------------------------------- NUMBER: 000014 TITLE: Interface for a character function with a variable length result KEYWORDS: character function, variable length, interface, function result DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Given a definition of an external function such as the following where the function result is variable length, must the characteristics of the function be described by an interface block accessible to the calling scoping unit? FUNCTION F(I) INTEGER I,N CHARACTER*(N) F COMMON /B/ N ... END ANSWER: Yes. Discussion: Section 12.3.1.1 states: A procedure must have an explicit interface if ... (2) The procedure has ... (d) A result whose length type parameter value is neither assumed nor constant." That provision applies to this function. Section 12.3.1 indicates that an external procedure has an explicit interface only if an interface block is provided. REFERENCES: ISO/IEC 1539:1991 (E) section 12.3.1 & 12.3.1.1 EDITS: None. SUBMITTED BY: Larry Rolison, 119-LRR-1, part II HISTORY: 119-KWH-3A (119-70A) Approved in ballot 92-182 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000015 TITLE: Error in fourth constraint for R429 KEYWORDS: derived type definition DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Should the fourth constraint for R429 also apply to a in the ? ANSWER: Yes. Discussion: A nonconstant specification expression specifies an automatic character object that may be declared only in a procedure or procedure interface. It was never the intention to permit the specification of automatic objects in type definitions. The fifth constraint for R429 prohibits the only other automatic object, an automatic array. The length specified in a character should be similarly restricted. REFERENCES: ISO/IEC 1539:1991 (E) sections 4.4.1, 5.1, 5.1.1.5, & 7.1.6.2 EDIT: Replace the fourth constraint after R429 [33:36] with: The character length specified by the in a or the in a (5.1, 5.1.1.5) must be a constant specification expression (7.1.6.2). SUBMITTED BY: J. T. Martin, 119-JTM-7 (119.042) part 1 HISTORY: 119-JTM-11 (119.054) Approved at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000016 TITLE: Character length specification KEYWORDS: character length specification, derived type definition DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Is there a similar interaction between a specified in both a and a as there is between a specified in both an and a ? ANSWER: Yes. Discussion: It was intended that character declarations in type definitions be symmetrical with character object declarations. REFERENCES: ISO/IEC 1539:1991 (E) sections 4.4.1, 5.1, & 5.1.1.5 EDIT: Replace the text following the constraints for R508 [42:29] with: The in a CHARACTER and the * in an or in a of a type definition specify character length. The * in an or a specifies an individual length and overrides the length specified in the , if any. If a * is not specified in an or a , the or specified in the is the character length. If the length is not specified in a or a * , the length is 1. SUBMITTED BY: J. T. Martin, 119-JTM-7 (119.042) part 2 HISTORY: 119-JTM-12A (119.055A) Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000017 TITLE: Creation of entities by local names in rename-list KEYWORDS: local name, use renaming DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Does a local-name on a rename-list create a new data-entity? For example, is the local name Q a new data entity or is Q a rename of the entity P in the following example? MODULE UTIL PUBLIC P CONTAINS SUBROUTINE P END END MODULE UTIL MODULE MID1 USE UTIL, Q=>P ! Is Q a new data entity or merely a ! renaming of P? PUBLIC Q END MODULE MID1 MODULE MID2 USE UTIL, Q=>P ! Another renaming of the same entity P? PUBLIC Q END MODULE MID2 SUBROUTINE ENDUSER USE MID1 USE MID2 CALL Q ! Is this legal? Does it refer to P? END SUBROUTINE ENDUSER ANSWER: Multiple renames of the same do not constitute separate entities. Subsequent appearances of the refer to the single entity. In the example, Q does not create a new entity. Thus "CALL Q" in the subroutine is legal. Discussion: In section 11.3.2 [158:15-16], the standard states that a local name in the rename list is a "local name for the entity" which is intended to mean that a new entity is not created. REFERENCES: ISO/IEC 1539:1991 (E) section 11.3.2 EDITS: None. SUBMITTED BY: E. A. Johnson, 119-EAJ-1 (119.057) HISTORY: 120-LF-1 (120.089) 077, ui 18 (jw note) 92-296 m123 Response proposed, approved by unanimous consent N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000018 TITLE: Valid characters for indicating fixed form statement continuation KEYWORDS: source form - fixed - statement continuation, character set DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Line 3 of the first paragraph of 3.3.2.3 states: If character position 6 contains any character other than blank or zero, character positions 7-72 of this line constitute a continuation of the preceding noncomment line. Can the character in character position 6 be a character outside the Fortran character set (for example, newline)? ANSWER: No. Section 3.1.5 specifies where additional characters not in the Fortran character set may be used. REFERENCES: ISO/IEC 1539:1991 (E) sections 3.1 & 3.3.2.3 EDITS: None. SUBMITTED BY: J. C. Adams, 120-JCA-13 (120.013) HISTORY: 120-RL-1 (120.058) Originally proposed X3J3/92-105 m121 Approved 20-0 X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000019 TITLE: Correctness of last example in section 4.5 KEYWORDS: array constructor DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Is the order of the coordinates correct in the last example of 4.5, considering the type definition of LINE in 4.4.1? ANSWER: Yes. Discussion: The line is drawn between points X and Y where the coordinates of X are X1 and X2 and the coordinates of Y are Y1 and Y2. Admittedly, this is not the traditional naming scheme for the coordinates of two points that determine a line. Traditionally, a line would be drawn between points 1 and 2 where each point had an X and Y coordinate, but it is merely a matter of naming. REFERENCES: ISO/IEC 1539:1991 (E) sections 4.4.1 and 4.5 EDITS: None. SUBMITTED BY: J. C. Adams, 120-JCA-14 (120.014) HISTORY: 120-JTM-10 (120.057) Approved at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000020 TITLE: References to the same derived type by different names KEYWORDS: derived type reference, derived type definition DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: How does changing the name by which a derived type is referenced affect its use? For example, is the code below standard conforming and, if so, which specific procedure is invoked by the reference to GEN? MODULE MOD TYPE T1 SEQUENCE INTEGER I,J END TYPE T1 END MODULE MOD USE MOD, T2=>T1 TYPE (T2) X INTERFACE GEN SUBROUTINE SPEC1(A1) TYPE T1 SEQUENCE INTEGER I,J END TYPE T1 TYPE (T1) A1 END SUBROUTINE SPEC1 SUBROUTINE SPEC2(A2) TYPE T2 SEQUENCE INTEGER I,J END TYPE T2 TYPE (T2) A2 END SUBROUTINE SPEC2 END INTERFACE GEN INTERFACE SUBROUTINE SPEC3(A3) USE MOD TYPE (T1) A3 END SUBROUTINE SPEC3 END INTERFACE ... CALL SPEC3(X) CALL GEN(X) END ANSWER: Yes, the code is standard conforming. The reference to GEN should invoke the specific procedure SPEC1. Discussion: The rules governing these questions are stated in 4.4.2. Two alternatives are provide for entities to have the same type. The first alternative applies to the reference to SPEC3: Two data entities have the same type if they are declared with reference to the same derived-type definition. In this case, both the actual argument X and the dummy argument A3 are declared with reference to the type definition T1 in MOD. The second alternative applies to the analysis of the procedures in generic interface GEN: Data entities in different scoping units also have the same type if they are declared with reference to different derived-type definitions that have the same name, have the SEQUENCE property, and have structure components that do not have PRIVATE accessibility and agree in order, name, and attributes. The type definition in SPEC1 agrees in all these respects with the type definition in MOD, so X and A1 have the same type. The definition in SPEC2 has a different name, so X and A2 have different types. Thus the reference to GEN invokes SPEC1. Note the fact that type T1 in MOD was accessible using a different name in the main program was irrelevant in both these analyses. REFERENCES: ISO/IEC 1539:1991 (E) section 4.4.2 EDITS: None. SUBMITTED BY: J. C. Adams, 120-JCA-15 (120.015), 120-JLS-5 (120.023) HISTORY: 120-KWH-1 (120.078) Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000021 TITLE: References to different derived types with the same name KEYWORDS: derived type definition, derived type reference DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: In the following example, to which type T1 does the FUNCTION statement refer? SUBROUTINE FRED TYPE T1 REAL :: X,Y END TYPE ... CONTAINS TYPE (T1) FUNCTION WILMA() TYPE T1 INTEGER I,J END TYPE ... END FUNCTION WILMA END SUBROUTINE FRED ANSWER: It is the type T1 defined in WILMA. Discussion: Section 12.1.2.2.1 states: A name that appears in the scoping unit as (1) a in a ... is the name of a local entity and any entity of the host that has this as its nongeneric name is inaccessible. Therefore, the type T1 defined in FRED is not accessible in WILMA and cannot be the type referenced in the function statement. Note that it is impossible to reference WILMA because its type T1 is not known outside WILMA. Were the SEQUENCE attribute added to the definition of T1 and the component types of the two T1 declarations the same so that the two T1 declarations met the requirements of being the "same derived types" (4.4.2), then a reference to WILMA would be possible. REFERENCES: ISO/IEC 1539:1991 (E) sections 4.4.2, 5.3, 12.1.2.2.1, 12.5.2.2 EDITS: None. SUBMITTED BY: Jon Steidel, 120-JLS-1 (120.019) HISTORY: 120-KWH-2A (120.083A) Originally answered X3J3/92-037 (121-JKR-5) Modification requested X3J3/92-049 (121-ADT-9) p7 Discussed in X3J3/92-050 (121-ADT-10) p4 Discussed in X3J3/92-080 m121 Approved 20-0 X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000022 TITLE: Use of derived type name in host scoping unit KEYWORDS: derived type, host association DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Consider the following code fragment: SUBROUTINE HOST TYPE T1 INTEGER I,J END TYPE ... CONTAINS FUNCTION CONTAINED () IMPLICIT TYPE (T1) C TYPE T1 INTEGER I,J END TYPE END FUNCTION CONTAINED END SUBROUTINE HOST Is it standard conforming to redefine T1 following the IMPLICIT statement that maps to T1? Does the fact that the function name begins with the letter being mapped have any significance in that determination? If an argument named C were added to the dummy argument list of CONTAINED, would that have any effect? ANSWER: The redefinition is permitted. The fact that the type of CONTAINED is implicitly mapped has no significance. The inclusion of an argument named C would have no significance in the redefinition of T1, but would render the program unit nonstandard conforming for other reasons. Discussion: Section 12.1.2.2.1 states: A name that appears in the scoping unit as (1) a in a ... is the name of a local entity and any entity of the host that has this as its nongeneric name is inaccessible. Therefore the type T1 of HOST is inaccessible in the scoping unit of CONTAINED. The function statement is part of the scoping unit of CONTAINED since R1215 states that a function statement is part of its subprogram and it is not excluded in item (3) of the definition of a scoping unit in section 2.2. It follows that the type must be the local type. Note that although this is legal, it is not very useful. Since the type of CONTAINED is local to CONTAINED, CONTAINED cannot be referenced. To be useful, when the type of a procedure is of nonsequence derived type, the derived-type definition must be accessible in the scoping unit of the procedure by either host association or use association. If a dummy argument is of nonsequence derived type, this principle is mandated in 5.1.1.7: A declaration for a nonsequence derived-type dummy argument must specify a derived type that is accessed by use association or host association because the same definition must be used to declare both the actual and dummy arguments to ensure that both are of the same derived type. This restriction does not apply to arguments of sequence type (4.4.2). If the SEQUENCE attribute were present, and the types were the same as mandated by 4.4.2, then the program would be legal and the function with the dummy argument could be referenced in the host. REFERENCES: ISO/IEC 1539:1991 (E) sections 2.2, 4.4.2, 12.1.2.2.1, 12.5.2.2 EDITS: None. SUBMITTED BY: Jon Steidel, 120-JLS-2 (120.020) cases 1 and 2 HISTORY: 120-RPK-1A (120.092A) Proposed X3J3/92-038 (121-JKR-6) Questioned by X3J3/92-097 m121 Approved 20-0 X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000024 TITLE: IMPLICIT NONE and the type of a function result KEYWORDS: IMPLICIT NONE, internal procedure, function result DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: An internal function contains an IMPLICIT NONE statement and does not contain a type specification for the function result. Is this legal? ANSWER: No. Discussion: 12.5.2.2 states if the type of the function result is not explicitly specified: ... it is determined by the implicit typing rules in force within the function subprogram. As the null mapping has been specified for all letters within the internal function, the type of the result must be explicitly specified within the function. REFERENCES: ISO/IEC 1539:1991 (E) section 12.5.2.2 EDITS: None. SUBMITTED BY: Jon Steidel, 120-JLS-2 (120.020) case 4 HISTORY: 120-RPK-3A (120-094A) 92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000025 TITLE: Resolution of internal procedure references KEYWORDS: host association, internal procedure, IMPLICIT NONE, procedure references DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: A host scoping unit contains two internal functions, F1 and F2. If F1 contains an IMPLICIT NONE and references F2, must F1 contain an explicit type declaration for F2? ANSWER: No. In fact if it did contain an explicit type specification for F2, F1 would be referencing an external function F2 and not the internal one contained in its host scoping unit. Discussion: 12.3.1 states: If a procedure is accessible in a scoping unit, its interface is either explicit or implicit in that scoping unit. The interface of an internal procedure ... is always explicit in such a scoping unit. Therefore, the interface of F2 is explicit in the host scoping unit. The function F2 is established to be specific in the host scoping unit by (2)(b) of 14.1.2.4 which states that a procedure name is specific: if that scoping unit contains a ... an internal procedure ... with that name; Furthermore, the function name F2 is established to be specific in the internal procedure F1 by (2)(f) of 14.1.2.4 which states that a name is specific: if that scoping unit contains no declarations of that name, that scoping unit is contained in the host scoping unit, and that name is established to be specific in the host scoping unit. As F2 is established to be specific within F1 by the above, 14.1.2.4.2 indicates that the F2 referenced by F1 is to the internal function F2 contained in the host scoping unit. Note that if F1 contains an explicit declaration for F2, by the rules of 14.1.2.4, F2 is not established to be either generic or specific in F1. Therefore, to resolve the procedure reference, the rules in 14.1.2.4.3 apply and the reference to F2 within F1 is to an external procedure with the name F2. REFERENCES: ISO/IEC 1539:1991 (E) section 12.3.1, 14.1.2.4, 14.1.2.4.2, 14.1.2.4.3 EDITS: None. SUBMITTED BY: Jon Steidel, 120-JLS-2 (120.020) case 5 HISTORY: 120-RPK-4 (120-095)m120 Proposed X3J3/92-050 (121-ADT-10) page 4, Questioned X3J3 m121 draft response X3J3/92-182 Approved in ballot N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000026 TITLE: Bounds of array expressions KEYWORDS: array bounds, array expression, expression - array DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Is it the intent of the standard to state that the lower bound of an array expression is always 1, and the upper bound is equal to the number of elements in a given dimension, for all dimensions? That is, given: REAL,TARGET,DIMENSION(5:10) :: A REAL,DIMENSION(:),POINTER :: P P => A(5:10) PRINT *, LBOUND (P) Does the PRINT statement result in the value 1 being written? Previous versions of the draft standard stated that the lower bounds of array expressions were 1. Where are those words in the standard? Reading chapter 7 indicates that an expression may be simply a primary, and a primary may be an array variable. Question 1: Does this mean, given the above declarations that P => A PRINT *, LBOUND (P) would also result in the value 1 being written (since A is an array expression), or should this print the value 5? Question 2: Is the intent of the standard that given an array with a declared lower bound other than one, the following relational expressions are false? REAL,TARGET,DIMENSION(5:10) :: A REAL,DIMENSION(:),POINTER :: P1, P2 INTERFACE SUBROUTINE FRED (X, Y) REAL,INTENT (IN),DIMENSION(:) :: X, Y END SUBROUTINE END INTERFACE P1 => A P2 => A(:) PRINT *, LBOUND (A) .EQ. LBOUND (A(:)) PRINT *, LBOUND (P1).EQ. LBOUND (P2) CALL FRED (A, A(:)) END SUBROUTINE FRED (X, Y) REAL,INTENT(IN),DIMENSION(:) :: X, Y PRINT *, LBOUND (X) .EQ. LBOUND (Y) END SUBROUTINE Question 3: If the above three PRINT statements result in the values .FALSE., in what cases does the appearance of an array name constitute an array (carrying with it its dimension attributes), and in what cases does it constitute an expression (implying the lower bound is one)? That is, in cases where bounds information may be transmitted (pointer assignment and actual argument association at subprogram calls), does the appearance of an array or pointer name *without* a subscript following cause the bounds of the array or pointer to be transmitted, and does the appearance of the same array or pointer name followed by a subscript triplet with no lower or upper bound or stride (i.e. (:,:)) constitute an expression with a lower bound of one transmitted? In summary: (a) What are the bounds of an array pointer which has been pointer assigned to an array section? (b) What are the bounds of an array pointer which has been pointer assigned to a whole array? (c) What are the bounds of an assumed-shape array? (d) What are the bounds of a pointer dummy argument? ANSWER: The output of the three example programs would be: 1) 1 2) 5 3) F F T (a) Each lower bound is 1, and each upper bound is the size of the corresponding dimension of the array section. (b) The declared bounds of the whole array. (c) Each lower bound is the declared lower bound of the assumed-shape corresponding dimension of the array section plus the lower bound minus one. (d) The bounds of the target associated with the pointer actual argument. Discussion: Cases (a) and (b) are determined from the statements (5.1.2.4.3), ...The lower bound of each dimension is the result of the LBOUND function (13.13.52) applied to the corresponding dimension of the target. The upper bound of each dimension is the result of the UBOUND function (13.13.111) applied to the corresponding dimension of the target. Case (c) is described in section 5.1.2.4.2. Case (d) is determined from these statements in conjunction with the statement, "If the actual argument is currently associated, the dummy argument becomes associated with the same target" (12.4.1.1). REFERENCES: ISO/IEC 1539:1991 (E) sections 5.1.2.4.2, 5.1.2.4.3, 12.4.1.1, 13.13.52, & 13.13.111 EDITS: None. SUBMITTED BY: Jon Steidel, 120-JLS-3 (120.021) HISTORY: 120-LJM-4A (120.088A) ballot comments, 216, 329 (jw note) Approved at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000031 TITLE: Overloaded implied-DO variable names KEYWORD: implied-Do variable, DATA statement DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Section 14.1.3. states: The name of the variable that appears as the DO variable of an implied-DO in a DATA statement or an array constructor has a scope of the implied-DO list. It has the type and type parameter that it would have if it were the name of a variable in the scoping unit that includes the DATA statement or array constructor and this type must be integer. Is the following in error since J has type character and therefore does not have type integer? CHARACTER J INTEGER A(10) DATA (A(J), J=1,10) /10*5/ Is the following valid because, although J is a named constant, it has type integer? INTEGER J PARAMETER (J=5) INTEGER A(10) DATA (A(J), J=1,10) /10*5/ Is the following valid? TYPE (ITYPE) CHARACTER FIELD1 INTEGER FIELD2 END TYPE INTEGER A(10) DATA (A(ITYPE), ITYPE=1,10) /10*5/ If ITYPE were a variable it would have type integer and this would be valid. Does the fact that it is the name of a derived type cause a conflict? The second sentence cited above appears to allow EXTERNAL J INTEGER A(10) DATA (A(J), J=1,10) /10*5/ The EXTERNAL statement declares J to be a global name. If J is a subroutine it has no type, so the presence of the EXTERNAL statement is irrelevant. If J were a function, then it must be type integer for the presence of J in the DATA statement to be valid. Question 1: Is the Fortran 90 standard intentionally extending the FORTRAN 77 standard with respect to implied-DO variables in DATA statements? Did the Fortran 90 standard intentionally delete the material about COMMON block names in section 18.2.7 of X3.9-1978? Question 2: Are the conclusions and interpretations above correct or incorrect? If incorrect, for what specific reasons are they incorrect? Question 3: Are the examples above standard conforming program fragments? If not, what are the specific reasons? Question 4: Are the rules for implied-DO variables in DATA statements and array constructors the same? If they are not exactly the same, provide examples which illustrate the differences. ANSWER: It was intended that the rules for implied-DO variables be similar to those in X3.9-1978. An edit to section 14.1.3 of ISO/IEC 1539:1991 clarifies these rules. The answers to the specific questions are: 1. Fortran 90 extended the rules for implied-DO variables in DATA statements in two ways: a) The type of an implied-DO variable must be integer but need not be default integer. b) FORTRAN 77 allowed the name of the statement entity also to be the name of a (scalar) variable or COMMON block (X3.9-1978, section 18.2.7) in (i.e. appearing in) the program unit containing the DATA statement or statement function statement. Fortran 90 allows the name of the statement entity also to be the name of a scalar variable or COMMON block appearing in or accessible from the enclosing scope (section 14.1.3 of ISO/IEC 1539-1991, with the changes in the EDITS section, below). 2. The detailing of the conclusions and justifications given below in (3) answer this. 3. The first example is in error because J is of type character and R537 requires integer type. The second example is in error. J is of type integer as required by R537, but the edit to section 14.1.3 prohibits the name of a statement entity also being the name of a constant in the same scoping unit. The third example is in error. The edit to section 14.1.3 prohibits the name of a statement entity also being the name of a derived type. The fourth example is in error. The edit to section 14.1.3 prohibits the name of a statement entity also being the name of an external function or subroutine. 4. The rules for implied-DO variables in DATA statements and in array constructors, with respect to typing and scope, are the same. REFERENCES: ISO/IEC 1539:1991, sections 5.2.9, 6.2.1, 14.1.2, 14.1.3. X3.9-1978, section 18.2.7 EDIT: Replace the last paragraph of section 14.1.3 with the following two paragraphs: [245:23] Except for a common block name or a scalar variable name, a name that identifies a global entity or local entity of class 1 (14.1.2) accessible in the scoping unit of a statement must not be the name of a statement entity of that statement. Within the scope of a statement entity, another statement entity must not have the same name. If the name of a global or local entity accessible in the scoping unit of a statement is the same as the name of a statement entity in that statement, the name is interpreted within the scope of the statement entity as that of the statement entity. Elsewhere in the scoping unit, including parts of the statement outside the scope of the statement entity, the name is interpreted as that of the global or local entity. SUBMITTED BY: Larry Rolison, 120-LRR-2 (120.027) LAST SIGNIFICANT CHANGE: 92-11-13 000031 new response HISTORY: ul 11, ul 26, ul 65, ul 117 (jw note) 92.049 p.11ff Griffiths' complaint 92.069a (120-RRR-1A) -- 1st response - all prohibited 92.112 -- 2nd response -- all allowed 92.132, #4, 5, 32, 33, 38, 39, 49 Email discussion 92.136, N815-7 WG5 suggests F77 restrictions 92.167a -- 3rd response drafted by DATA subgroup at m122; final action deferred due to 2 week rule Improved edits suggested by Janice Shepherd (private communication) 92-229b m123 -- 4th response approved (22-1) N865 ballot comments - edit to answer N881 WG5 approval 93-150 edits from WG5 ballot -------------------------------------------------------------------------------- NUMBER: 000032 TITLE: Implicit declaration of a derived type KEYWORDS: derived type, IMPLICIT statement DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Is the following program standard conforming? IMPLICIT TYPE(T1) (A-D) ! Note IMPLICIT range is A-D. TYPE T1 SEQUENCE CHARACTER*10 NAME INTEGER EMP_NUMBER END TYPE T1 A1%NAME='FRED' ! A1 is implicitly declared to be of type T1 ... CONTAINS SUBROUTINE INNER IMPLICIT TYPE(T1) (D) ! D now overrides IMPLICIT for D in !host TYPE T1 INTEGER WIDTH INTEGER HEIGHT END TYPE T1 D%WIDTH = 10 ! No problem here, D is implicitly ! declared with the T1 that is ! defined in INNER. CALL OUTSIDE(C) ! Is this an error? ... Is a reference to A1 (declared in the host) from inside INNER permitted in this example? ANSWER: Yes, the example is standard conforming. Discussion: Components of A1 can also be referred to from inside INNER. While the derived type T1 from the host scoping unit is inaccessible inside the internal routine INNER, there is no reason why data entities of this derived type that are accessible cannot be referred to. The implicit mapping for the letter C is not specified within the internal routine INNER. So, the implicit mapping is that of the host routine. In the host routine the letter C is mapped to derived type T1 of the host. Therefore the variable C is implicitly declared to be of type T1 from the host. The components of the variable C, C%NAME and C%EMP_NUMBER, can also be referred to in INNER. The following edits clarify the standard with regard to these questions. REFERENCES: ISO/IEC 1539:1991 (E) section 5.1.1.7, 5.3, 12.1.2.2.1 EDITS: 1. In the first paragraph of 5.1.1.7, change "is specified" to "is declared explicitly". [43:22] 2. In paragraph 5 of 5.3 after "provided the mapping is not null.", insert the new sentence: "Note that the mapping can be to a derived type that is inaccessible in the local scope if the derived type is accessible to the host scope." [54:35] 3. In paragraph 3 of 12.1.2.2.1 after "prior to the DATA statement.", insert a new paragraph: [164:25] "If a derived type name of a host is inaccessible, data entities of that type or subobjects of such data entities still can be accessible." SUBMITTED BY: Larry Rolison, 120-LRR-5 (120.030) LAST SIGNIFICANT CHANGE: 93-07-16 000032 edit 3 subsumed by 000082 HISTORY: 096, ul23 (jw note) 120-TMRE-2 (120.075) 92-035 Questioned by 92-049(p14) Questioned by 92-050(p4) Questioned by m121 Revised but rejected 92-280 Revised response proposed m123 approved uc N881 WG5 approval X3J3/93-234 m126 edit 3 is subsumed and superceded by interpretation 82 -------------------------------------------------------------------------------- NUMBER: 000036 TITLE: Pointer to an assumed-size array KEYWORDS: pointer, array assumed-size, pointer assignment statement DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Is a pointer assignment statement of the form: PTR => A where A is an assumed-size array, standard conforming? ANSWER: No. This is prohibited by section 6.2.1, third paragraph, second sentence. REFERENCES: ISO/IEC 1539:1991 (E) section 6.2.1 EDITS: None. SUBMITTED BY: Larry Rolison, 120-LRR-7 (120.032) HISTORY: 120-RRR-2A (120.087A) Approved in ballot 92-182 m125 edits from WG5 ballot N865 comments N881 WG5 approval 93-150 m125 edits from WG5 ballot -------------------------------------------------------------------------------- NUMBER: 000037 TITLE: Use of array sections in pointer assignment statements KEYWORDS: pointer assignment statement, array sections, pointer DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: If A is an assumed-size array: Is "PTR => A(:N)" standard conforming? Are "PTR => A(:)" and "PTR => A(N:)" standard conforming? ANSWER: "PTR => A(:N)" is standard conforming because A(:N) is a valid array section. Forms "PTR => A(:)" and "PTR => A(N:)" are not standard conforming because the array sections are prohibited by the second constraint after R621. REFERENCES: ISO/IEC 1539:1991 (E) section 6.2.2 EDITS: None. SUBMITTED BY: Larry Rolison, 120-LRR-7 (120.032) HISTORY: 120-RRR-2A (120.087A) Approved in ballot 92-182 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000038 TITLE: Same interface body in multiple generic interface blocks KEYWORDS: interface body, generic interface, scoping unit DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Part 1. Is the following example standard conforming? That is, can the same interface body exist in multiple generic interface blocks that are all accessible from a single scoping unit? MODULE MOD_1 INTERFACE RED SUBROUTINE CMN(K) INTEGER K END SUBROUTINE SUBROUTINE S(X) REAL X END SUBROUTINE END INTERFACE END MODULE MODULE MOD_2 INTERFACE BLUE SUBROUTINE SS(Y) REAL Y END SUBROUTINE SUBROUTINE CMN(K) INTEGER K END SUBROUTINE END INTERFACE END MODULE PROGRAM EXAMPLE_1 USE MOD_1; USE MOD_2 INTEGER M ... CALL RED(M) ... CALL BLUE(M) ... END PROGRAM Part 2. If the names are removed from the interface blocks in both modules, thus making them nongeneric, and the subroutine calls in program EXAMPLE_1 replaced by "CALL CMN(M)", is the resulting program standard conforming? That is, may a procedure interface description occur in multiple nongeneric interface blocks that are accessible to a given scoping unit and may the program unit reference that procedure? ANSWER: Part 1. No. The example is not standard conforming. Part 2. No. Discussion: The last sentence of the second paragraph of 12.3.2.1 states A procedure must not have more than one explicit specific interface in a given scoping unit. In the example the subroutine CMN has two specific interfaces, one from each module in the program EXAMPLE_1 which is forbidden. The program could be made standard conforming by making the name CMN private in one or both modules or by adding a rename or only option to one of the USE statements. REFERENCES: ISO/IEC 1539:1991 (E) section 12.3.2.1 EDITS: None. SUBMITTED BY: Larry Rolison, 120-LRR-8 (120.033) HISTORY: Original interpretation in 120-TMRE-4 (120.077) Questioned in X3J3/92-131 Approved as X3J3/92-174 at meeting 122 by unanimous consent Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000040 TITLE: Allocation of arrays of pointers KEYWORDS: array of pointers, pointer allocation, structure DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Consider the following code fragment: TYPE DEF INTEGER I INTEGER, POINTER :: PTR END TYPE TYPE (DEF) :: STRUCT (5) ... ALLOCATE (STRUCT%PTR) Are the following quotations from the standard sufficient to declare this code fragment to be nonstandard-conforming? The constraint immediately following R628 "Each must be a pointer or an allocatable array." The second sentence of the fourth constraint after R613 "A to the right of a with nonzero rank must not have the POINTER attribute." ANSWER: The ALLOCATE statement in the example is not permitted by the syntax rules and constraints of the standard: R625 is or R614 is R612 is [%]... R613 is [()] Constraint: A to the right of a with nonzero rank must not have the POINTER attribute. REFERENCES: ISO/IEC 1539:1991 (E) sections 6.1.2 and 6.3.1 EDITS: None. SUBMITTED BY: Larry Rolison, X3J3/92-056 HISTORY: Approved as X3J3/92-069 at meeting 121 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000042 TITLE: KIND parameter value KEYWORDS: kind type parameter, constant DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: It is stated in section 5.1.1.2 that: An entity declared with type specifier REAL(KIND(0.0)) is of the same kind as one declared with the type specifier REAL. There are similar statements about INTEGER, DOUBLE PRECISION, and COMPLEX type specifiers in sections 5.1.1.1, 5.1.1.3, and 5.1.1.4. In section 5.1.1.2, for example, must the constant be exactly the characters "0.0" to cause the declared entity to be the same as the default real entity? Could the result be different if the constant were expressed, for example, as "0."? It appears that the committee chose the value 0 in these statements because it exists on every machine on which a Fortran 90 processor will be run. Further, a specific value was chosen so that machine architecture differences would be factored out. For example, KIND(10000000.) might have the same kind parameter value as default real on one machine but not on another. ANSWER: No, the constant need not be exactly "0.0". The constant "0.0" is used only as an example. Discussion: The KIND intrinsic is defined in section 13.13.51 of the standard to return a value equal to the kind type parameter of its argument; the argument may be of any intrinsic type. In section 13.5.5 it is stated that the value of the argument to this function need not be defined. It is only the kind type of the argument that is relevant. Nowhere in the standard is there a restriction that the argument to the KIND intrinsic be a constant at all, much less the specific constant 0.0. The is specified in section 5.1, R505 to be a . The definition of an is given in section 7.1.6.1, and the restrictions on the argument of the KIND intrinsic in an are detailed in item (6) of that definition. The question makes the assertion that KIND(10000000.) might not have the same kind parameter value as default real on all machines. This assertion is false. Possibly the requestor believed that a literal real constant could assume a kind parameter value based on the number of digits in the constant or some other implicit criterion. This is not allowed in Fortran 90. In section 4.3.1.2, it is explicitly stated that: A literal real constant without a kind type parameter is a default real constant if it is without an exponent part..." Similar arguments apply to the corresponding questions about INTEGER, DOUBLE PRECISION, and COMPLEX type specifiers. REFERENCES: ISO/IEC 1539:1991, sections 4.3.1.2, 5.1, 5.1.1, 7.1.6.1, 13.5.5, 13.13.51 EDITS: None. SUBMITTED BY: Larry Rolison, X3J3/92-060 HISTORY: Approved as X3J3/92-084 at meeting 121 by a vote of 19-0 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000043 TITLE: List-directed character input KEYWORDS: i/o list-directed, character, zero length DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: For list directed input of character items, how does the standard distinguish between the input of an undelimited zero-length character string and a null value? If the input is a zero-length character string, the corresponding list item must be set to blank, whereas if the input is a null value, the definition status of the corresponding list item must be left unchanged. However, there appears to be no way to distinguish these two possibilities. ANSWER: The ambiguity between undelimited zero length character values and the null value should be resolved by requiring that zero-length character values always be delimited in list-directed input. Discussion: Several other potential ambiguities with undelimited character items in list-directed input were resolved in section 10.8.1 by requiring delimiters in those cases. However, the case of a zero-length string was omitted from this list. REFERENCES: ISO/IEC 1539:1991, sections 10.8.1, 10.8.1.1 EDITS: 1. Section 10.8.1: Add " and" to the end of item (4), and [149:12] 2. Section 10.8.1: Add an additional item to the list after item (4): [149:12] "(5) The character constant contains at least one character," SUBMITTED BY: Richard E. Maine, X3J3/92-087 HISTORY: Approved as X3J3/92-116 at meeting 121 by a vote of 19-0 Approved in ballot 92-182 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000044 TITLE: END statement and fixed form source KEYWORDS: END statement, source form - fixed - initial line DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Consider the following: 1. Section 3.3.2.4 "Fixed Form Statements", page 24, requires that no statement, except the program unit END statement, have an initial line that appears to be a program unit END statement. 2. Other statements, for example, , R1218 page 175, may consist of only the keywords "END" or "END FUNCTION". While these do not conflict, the combined requirements are not obvious and complicate the situation for users. Consider, for example, ending an for a function subprogram: 1. END ! wrong, appears to be a program unit END 2. EN ! END continued to 2nd line. OK & D 3. END FUNCTION ! OK in main PROGRAM unit and SUBROUTINE ! subprogram, wrong in FUNCTION subprogram 4. EN ! OK & D FUNCTION 5. END F ! OK 6. END FUNCTION A ! OK in main program, OK in SUBROUTINE & BC !subprogram, OK in function if name is not "A" ANSWER: Section 3.3.2.4 was brought forward from FORTRAN 77 without modification for new Fortran 90 constructs. The resulting usability characteristics, as seen in the examples above, are regrettable enough that a repair should be made. REFERENCES: ISO/IEC 1539:1991 (E) section 3.3.2.4 EDIT: In 3.3.2.4 replace the text "and no other statement in the program unit may have an initial line that appears to be a program unit END statement" with ". A statement whose initial line appears to be a program unit END statement must not be continued." [24:13] SUBMITTED BY: Janice C. Shepherd, X3J3/92-012, X3J3/92-013, X3J3/92-014 HISTORY: Approved as X3J3/92-088A at meeting 122 by a vote of 24-0 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000045 TITLE: Array intrinsics with arrays of derived-type arguments KEYWORDS: array intrinsics, derived type, operations, interface block DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: The intrinsic functions ALLOCATED, ASSOCIATED, LBOUND, UBOUND, PRESENT, SHAPE, SIZE, MERGE, PACK, SPREAD, UNPACK, CSHIFT, EOSHIFT, TRANSPOSE, RESHAPE, and TRANSFER are documented as accepting arrays of any type. Does this include arrays of derived-type, and if so, does this conflict with section 4.4.5 which states: Any operation on derived-type entities or nonintrinsic assignment for derived-type entities must be defined explicitly by a function or subroutine and a procedure interface block. ANSWER: The intrinsics in question can accept arguments which are arrays of derived-types. This does not conflict with section 4.4.5. Discussion: The term "operation" in section 4.4.5 refers to user defined unary and binary operations in expressions and nonintrinsic assignments. Such operators are defined by means of interface blocks which define operators and nonintrinsic assignment. Using an object as an actual argument in a procedure reference is not considered an operation on that object in this sense. REFERENCES: ISO/IEC 1539:1991 section 4.4.5 and 13.13 X3J3/92-051 pages 13-14 EDITS: None. SUBMITTED BY: H.Funaki, X3J3/92-051 (121-ADT-11) pp13-14 HISTORY: Posted request to f90 interp e-mail Approved as X3J3/92-092A meeting 121 by a vote of 19-0 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000046 TITLE: RESULT clause for RECURSIVE functions KEYWORDS: function result, recursive function DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: 1. Does RECURSIVE require RESULT? 2. Assuming (1), is a permitted on the function name when RECURSIVE is present? ANSWER: The RESULT clause is not required for all RECURSIVE functions; it is required for those that are directly recursive. That is, the RESULT clause is necessary to make the function visible in its own body so that direct recursion can take place. It should be noted that the prohibition against typing the function name when a result variable name is specified was not intended to prohibit putting the function type into the header. In other words: FUNCTION F() RESULT (FVAR) INTEGER FVAR and INTEGER FUNCTION F() RESULT (FVAR) are both allowed. The case prohibited is: FUNCTION F() RESULT (FVAR) INTEGER F It is possible for both a and RECURSIVE to appear in a single function header. REFERENCES: ISO/IEC 1539:1991 (E) section 12.5.2.2 EDITS: None. SUBMITTED BY: L.Meissner, X3J3/92-045 (121-ADT-5) p17. HISTORY: For discussion see X3J3/92-45 (121-ADT-5) pp 18, 26-27 Approved as X3J3/92-101 at meeting 121 by a vote of 20-0 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000047 TITLE: Automatic data object in initialization expressions KEYWORDS: automatic data object, expression - initialization DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Can an automatic data object be used as the argument to the LEN function in the initialization expression of a PARAMETER statement or an item given the PARAMETER attribute? ANSWER: No. It was the intent of the committee to include objects with nonconstant lengths in the restrictions on the LEN function in section 7.1.6.1 (pages 77 and 78). REFERENCES: EDITS: 1. Section 7.1.6.1, page 77, item (6) change "not assumed or" to "not assumed, are not defined by an expression that is not a constant expression, and are not" [77:27] 2. Section 7.1.6.1, page 78, item (6) change "not assumed or" to "not assumed, are not defined by an expression that is not an initialization expression, and are not" [78:9] SUBMITTED BY: 120.042 LAST SIGNIFICANT CHANGE: 93-07-16 000047 m126 changed "constant" to "initial..." HISTORY: X3J3/92-036 (121-JKR-4) and 120.073A For discussion X3J3/92-107 m121 approved by a vote of 20-0 X3J3/92-267r m123 edit approved N881 WG5 approval X3J3/93-151 m125 approved unanimous consent N903 changed 1st edit "a constant" to "an initialization" to match -------------------------------------------------------------------------------- NUMBER: 000048 TITLE: Pointer-valued statement functions KEYWORDS: statement function, pointer DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Can a statement function be pointer-valued? There appears to be nothing in section 12.5.4 to prohibit this. ANSWER: No, a statement function cannot be pointer-valued. Discussion: From section 12.3.1: The interface of a statement function is always implicit. >From section 12.3.1.1: A procedure must have an explicit interface if... (2) The procedure has: (e) A result that is a pointer (functions only) Therefore, a statement function cannot have a result that is a pointer. REFERENCES: ISO/IEC 1539:1991 sections 12.3.1, 12.3.1.1, 12.5.4 EDITS: None. SUBMITTED BY: L.Meissner, X3J3/92-45 (121-ADT-5) p37 HISTORY: Approved as X3J3/92-108 at meeting 121 by a vote of 19-0 Edit approved in 92-267r at meeting 123 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000050 TITLE: Repeat counts on edit descriptors KEYWORDS: i/o edit descriptor, i/o repeat count in format-directed DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Is the repeat specification part of the edit descriptor? In section 10.1.1 the second constraint states that the comma separating the in a is optional between certain combinations of edit descriptors. In section 10.2 a format-item is defined as, amongst other things, "[r]" and in 10.2.1 an edit-descriptor can be a data-edit-desc. However, does not contain the repeat count. This implies that: 100 FORMAT(1PE20.10) ! is legal 200 FORMAT(1P3E20.10) ! is not legal 300 FORMAT(1P,3E20.10) ! is legal ANSWER: The repeat count is not part of any edit descriptor except the "[r]/" edit descriptor. The comments in the examples are correct. Discussion: This problem appears to stem from an incompatibility between FORTRAN 66 and FORTRAN 77. In FORTRAN 66 a FORMAT statement is of the form: FORMAT(list) where the list consists of a series of field descriptors separated by field separators and optionally preceded and succeeded by slashes. The field descriptors for real or double precision values consisted of the now familiar Dw.d, Ew.d, Fw.d, and Gw.d edit descriptors (a term introduced in FORTRAN 77) preceded by an optional scale factor and repeat count. For example, in FORTRAN 66 a valid field descriptor is 1P3E17.10, where 1P is the scale factor, 3 the repeat count for a field containing 10 digits in the fractional part of the number and having a E exponent. In FORTRAN 77 the scale factor is an edit descriptor and thus is a list element in the format specification. While FORTRAN 77 specifies places where the commas separating list elements in a format specification are optional, it fails to make a comma between the scale factor and an immediately succeeding repeated D, E, F, or G edit descriptor optional. This situation has been carried over to Fortran 90. Thus: 100 FORMAT(1PE20.10) ! is legal in F66, F77, and F90 200 FORMAT(1P3E20.10) ! is legal in F66, and illegal in F77 & F90 300 FORMAT(1P,3E20.10) ! is illegal in F66, and legal in F77 & F90 REFERENCES: ISO/IEC 1539:1991, sections 10.1.1, 10.2, & 10.2.1 EDITS: None. SUBMITTED BY: A.D. Tait, X3J3/92-041 (121-ADT-1) HISTORY: X3J3/92-041 X3J3/92-042 X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000051 TITLE: On unambiguous generic procedure references KEYWORDS: generic procedure DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Should the rules in 14.1.2.3 include a rule that uses the fact that a dummy argument is either a subroutine or a function to disambiguate a generic procedure reference? For example, such a rule could be in section 14.1.2.3, in the sentence that is preceded by "(1)", after "with a different type" adding "present as a subroutine instead of a function". ANSWER: No. The intent of the committee was to keep the rules as simple as possible in order that they would be easy to understand and to use. It is not always possible for the processor to tell whether an actual argument that is a procedure is a subroutine or an implicitly typed function. REFERENCES: ISO/IEC 1539:1991 (E) section 14.1.2.3 EDITS: None. SUBMITTED BY: John Reid, SC22/WG5 N786A HISTORY: 266 (jw note) X3J3/92-017 m121 generic interfaces and dummy procedure arguments X3J3/92-151 m122 Approved 25-0 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000052 TITLE: Expressions in statement function definitions KEYWORDS: statement function DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Section 12.5.4 appears to prohibit whole array names appearing as actual arguments to functions within the of a statement function. The first constraint states: The may be composed only of constants (literal and named), references to scalar variables and array elements, references to functions and function dummy procedures, and intrinsic operators. A defined operator may be an extended intrinsic operator, as well as a defined unary or binary operator. Question 1: Is the legal FORTRAN 77 program fragment, EXTERNAL FCN REAL A(2) STFN(X) = FCN(A) + X where FCN is some function and STFN is a statement function, a legal Fortran 90 program fragment? Question 2: Is it intended that a defined operator which is an extended intrinsic operator be allowed in a statement function definition but other defined operators not be allowed? ANSWER: The intent is that the program fragment in question one should be a valid Fortran 90 program fragment, and that no defined operators be allowed in a statement function definition. The standard is in error. The edits below should be applied to correct the standard. Discussion: The intent of the standard was to retain the FORTRAN 77 definition of statement functions without extending it to include defined operators or array expressions. In FORTRAN 77, "expression" and "variable" referred only to scalar expressions and variables; there were no defined operators. In Fortran 90 these terms also refer to array expressions and arrays. The Fortran 90 definition of statement functions was intended to prohibit array expressions but overlooked the use of an array name as an actual argument to a function in the definition of a statement function. REFERENCES: ISO/IEC 1539:1991 section 12.5.4 EDITS: 1. Section 12.5.4: First constraint, first sentence [182:4] change "references to scalar variables and array elements" to "references to variables" change "intrinsic operators" to "intrinsic operations" after first sentence add If contains a reference to a function or a function dummy procedure, the reference must not require an explicit interface, the function must not require an explicit interface or be a transformational intrinsic, and the result must be scalar. If an argument to a function or a function dummy procedure is array valued, it must be an array name. 2. Section 12.5.4: Second constraint, third sentence [182:12] change "scalar variable, array element" to "variable" 3. Section 12.5.4: Fifth constraint, first sentence delete second word ("scalar") [182:19] SUBMITTED BY: A.D. Tait X3J3/92-064 item # 13 points to B. Smith e-mail in X3J3/92-045 pp. 50-52 HISTORY: X3J3/92-153A m122 Approved 17-2 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000053 TITLE: Optional intrinsic function arguments KEYWORDS: intrinsic function, argument - optional DEFECT TYPE: Amendment STATUS: WG5 approved; ready for SC22 QUESTION: Should constraining text be added to the description of optional argument Y in CMPLX, and optional argument BACK in INDEX, and optional argument SIZE in ISHFTC, and optional argument A3,... in MAX, and optional argument A3,... in MIN, and optional argument BACK in SCAN, and optional argument BACK in VERIFY to state that the argument must not be an optional argument of an invoking procedure? ANSWER: In principle yes; however it is more appropriate to add an additional restriction on dummy arguments not present in section 12.5.2.8. Discussion: The standard contains numerous restrictions intended to ensure that the rank of a given expression never changes. The case of elemental functions with optional arguments was inadvertently overlooked. Consider the following subprogram: SUBROUTINE SUB (A,B,C) INTEGER :: A ,B INTEGER, OPTIONAL :: C (:) PRINT *, MAX (A, B, C) END When C is present, the result of the elemental function MAX, is an array of the same shape as C. However, if SUB were to be called with the third argument omitted, the result would be a scalar. The supplied edit remedies this deficiency. REFERENCES: ISO/IEC 1539:1991 (E) 12.5.2.8, 13.13.20, 13.13.46, 13.13.50, 13.13.52, 13.13.63, 13.13.68, 13.13.91, 13.13.111, 13.13.113. EDITS: 1. Add the following point to the numbered list in section 12.5.2.8: [179:38] (5) If it is an array, it must not be supplied as an actual argument to an elemental procedure unless an array of the same rank is supplied as an actual argument corresponding to a nonoptional dummy argument of that elemental procedure. 2. In the paragraph following the numbered list, replace "It" with "Except as noted in (5) above, it" [179:39] SUBMITTED BY: response to X3J3/92-058 (121-LRR-5) HISTORY: X3J3/92-058 Submitted as question, draft response prepared N786A John Reid's paper N815A of the WG5 Victoria meeting X3J3/92-094 X3J3/92-156r m122 approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000055 TITLE: Characteristics of character function results KEYWORDS: character function, function result DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: In section 12.5.2.5 the second paragraph after the constraints contains the text: "Otherwise, they are storage associated and must all be scalars without the POINTER attribute and all be of type default character with identical length". Is some of this text redundant? ANSWER: Yes. Discussion: The phrase referring to "identical length" was meant to include the FORTRAN 77 character storage association case. FORTRAN 77 requires either that they all be of assumed length or all be of the same constant length; both are included as characteristics that agree in section 12.5.2.5 in the second paragraph after the constraints that starts with "If the ENTRY". The phrase is redundant and is causing confusion. REFERENCES: ISO/IEC 1539:1991 (E) section 12.5.2.5. EDIT: In Section 12.5.2.5 in the sentence that starts: "Otherwise, they ... " delete: "all be scalars ... length or". [178:19] SUBMITTED BY: John Reid in N786A at the WG5 Victoria Meeting, July 1992. HISTORY: X3J3/92-158 m122 Drafted at the WG5 Victoria Meeting July, approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000056 TITLE: TRANSFER intrinsic function description KEYWORDS: TRANSFER intrinsic DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Should the text of Case (iii) under Examples in the TRANSFER intrinsic function be corrected so the example reads: Case (iii): TRANSFER((/1.1,2.2,3.3/),(/ (0.0,0.0) /),1) is a complex rank-one array of length one whose sole element has the value (1.1,2.2)." ANSWER: No. Discussion: The current format of the example, 1.1+2.2i, is valid mathematical notation for complex type. REFERENCES: ISO/IEC 1539:1991 (E) Section 13.13.108. EDITS: None. SUBMITTED BY: Larry Rolison in X3J3/92-059 (121-LRR-6) LAST SIGNIFICANT CHANGE: 92-11-13 000056 opposite response HISTORY: X3J3/92-059 Submitted X3J3/92-091 Draft response X3J3/92-159 m121, m122 Subsequent draft rejected X3J3/92-294 m123 Revised response, approved by uc N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000057 TITLE: Prohibition against multiple explicit specific interfaces KEYWORDS: interface - specific, interface body, interface block DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: What is the meaning and/or intent of the following sentence in 12.3.2.1? A procedure must not have more than one explicit specific interface in a given scoping unit." Multiple SPECIFIC interfaces can not be produced by the existence of interface blocks because the definition of an interface body states that it only specifies an EXPLICIT interface, not a SPECIFIC interface. According to the statement in 12.3.2.1: "An external or module subprogram definition specifies a specific interface for the procedures defined in that subprogram", only external or module subprograms have specific interfaces and the specific interfaces are only specified by the text of the subprogram itself. Could an example of code be provided that is prohibited by the statement "a procedure must not have more than one explicit specific interface in a given scoping unit" in 12.3.2.1 and that would not be prohibited by some other provision of ISO/IEC 1539:1991? ANSWER: The statement in the question that "Multiple SPECIFIC interfaces can not be produced by the existence of interface blocks" is incorrect. An example follows. Discussion: The paragraph following the constraints, in 12.3.2.1 is concerned with "specific interfaces" and it was intended to be understood from the context in that discussion that the interface specified by an interface body should be both specific and explicit. See also 14.1.2.4, (2), (a) which shows that it was intended that an interface body define a specific interface. The intention was to disallow the same information being provided twice, as for other specifications. An edit is supplied to make this clearer. An example which illustrates what is prohibited follows: Example: MODULE MOD INTERFACE SUBROUTINE SUB(I,J) INTEGER I,J END SUBROUTINE SUBROUTINE SUB(M,N) ! duplication of SUB is illegal INTEGER M,N END SUBROUTINE END INTERFACE END MODULE REFERENCES: ISO/IEC 1539:1991 (E) section 12.3.2. EDITS: Section 12.3.2.1, the sentence that begins "An interface body..." change "explicit interface" to "explicit specific interface". [167:39] SUBMITTED BY: Larry Rolison LAST SIGNIFICANT CHANGE: 92-11-13 000057 HISTORY: 120.035, 120.090 X3J3/92-162A m122 Approved by uc 92-192, 222, 263, 314 (original) (jw note) X3J3/92-314 m123 Revised following letter ballot to correct transcription errors in the recording of what was contained in 92-162A N881 WG5 passed -------------------------------------------------------------------------------- NUMBER: 000059 TITLE: SEQUENCE derived type and component bounds KEYWORDS: SEQUENCE, derived type DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Given two objects of SEQUENCE derived type, can the two objects be of the same derived type if the only difference between the two SEQUENCE derived type definitions is the value of the low bound and high bound for one dimension of one of the components (assuming the extent of the dimension of the array component matches the extent given in the other; and there are no structure components that have PRIVATE accessibility)? The description of when two objects of SEQUENCE derived type have the same type includes the words (2nd paragraph of 4.4.2 "Determination of derived types") "have structure components that do not have PRIVATE accessibility and agree in order, name, and attributes". This text seems to imply that if the derived type includes an then the individual low bounds and high bounds have to be the same. An example that corresponds to the question above: SUBROUTINE S() TYPE T SEQUENCE INTEGER A(1:10) END TYPE TYPE (T) X CALL S2(X) ... SUBROUTINE S2(Y) TYPE T SEQUENCE INTEGER A(2:11) END TYPE TYPE (T) Y ... Do X and Y have the same type? ANSWER: No. Discussion: The attributes that a data object may have are enumerated in section 5.1.2. Included in these is the DIMENSION attribute (section 5.1.2.4). In reference to the explicit shape arrays in the example above, in order for the attributes to agree, the values of the corresponding lower bounds and the corresponding upper bounds in must be equal. REFERENCES: ISO/IEC 1539:1991(E) 5.1.2 EDITS: None. SUBMITTED BY: Janice C. Shepherd X3J3/92-129 HISTORY: X3J3/92-129 X3J3/92-165A m122 Approved 19-2 Approved in ballot 92-182 N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000060 TITLE: Statement function argument references KEYWORDS: statement function arguments DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Consider the following program: PROGRAM TEST INTEGER AR EXTERNAL AR REAL A(2), FUN, X, Y DATA A/2*5./ FUN(X) = X+X+X Y=FUN(A(AR(5))) END INTEGER FUNCTION AR(I) INTEGER I AR = 1 PRINT *, I RETURN END When the statement function is referenced, how many times is the function AR called? Or, to put it another way, how many times is the PRINT statement in function AR executed during the statement function reference? ANSWER: In the program above, the function AR is called once unless the value of the function "can be determined otherwise" than by evaluating the function. Therefore, the PRINT statement in function AR is executed at most once. Discussion: When the statement function is referenced, the actual arguments are evaluated and the resulting values are associated with the corresponding dummy arguments. The statement function FUN has only one actual argument which contains only one reference to the external function AR. Therefore, the function AR is called once as part of the evaluation of the actual argument. The value resulting from this evaluation is associated with the single dummy argument of the statement function FUN. Though the PRINT statement may be executed once, note that 7.1.7.1 gives license to the processor to not execute the PRINT statement at all. Thus the statement in the answer is "the PRINT statement in function AR is executed at most once". REFERENCES: ISO/IEC 1539:1991 (E) sections 7.1.7.1 and 12.5.4, the fourth paragraph after the last constraint EDITS: None. SUBMITTED BY: Linda J. O'Gara LAST SIGNIFICANT CHANGE: 92-11-13 000060 HISTORY: 121-LJO-3, 121-ADT-11 pages 14-17 X3J3/92-168 m122 Approved 17-0 X3J3/92-315 m123 Revised after letter ballot Revision approved by unanimous consent in meeting 123. N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000061 TITLE: G edit descriptor with "d" = 0 KEYWORDS: i/o G edit descriptor, conformance DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Is a value of 0 for "d" in a G edit descriptor (e.g. 1PG8.0) permitted? ANSWER: Yes. See R1008, R1005, and R404. QUESTION: Did the committee mean to change the definition of G format in Fortran 90 (compared to FORTRAN 77)? ANSWER: Yes. The form of output text produced by the G edit descriptor for some values and particular edit descriptors was intentionally changed. The changes require processors to give meaningful output instead of "*"s for certain values and edit descriptors. QUESTION: What happens when N (the value to be printed) is zero and "d" is zero? ANSWER: The standard indicates a format of F(w-n).-1 is to be used. This is an error in the standard. REFERENCES: ISO/IEC 1539:1991 (E) Rules R404, R1005, and R1008 EDITS: 1. In section 10.5.4.1.2 second paragraph, 3rd sentence, after "- 0.5," add " or N is identically 0 and d is 0,". [144:37] 2. In section 10.5.4.1.2, second paragraph, fourth sentence, after "N is identically 0" add " and d is not zero". [144:40] 3. In section 1.4.1, add item (5) as follows: [3:32] (5) A value of 0 for a list item in a formatted output statement will be formatted in a different form for some G edit descriptors. In addition, the Fortran 90 standard specifies how rounding of values will affect the output field form, but FORTRAN 77 did not address this issue: therefore, some FORTRAN 77 processors may produce a different output form than Fortran 90 processors for certain combinations of values and G edit descriptors. SUBMITTED BY: Joanne Brixius, 121-JB-1 HISTORY: 121-ADT-7 pp 1-9, 92-076, 92-118 X3J3/92-149A m122 Approved 20-3 X3J3/92-267r m123 Edit approved N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000062 TITLE: Statement function constraints KEYWORDS: statement function, host association DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Does the last constraint under R1226 allow variables in a of a statement function definition to be accessed via host association or use association? PROGRAM HOST INTEGER I ... CONTAINS SUBROUTINE INNER() STMTFUNC()=I+1 ... ANSWER: Yes. Discussion: It was the intent of the committee to allow variables made accessible by use or host association to appear in a of a statement function definition. The text of the last constraint under R1226 needs clarification to better reflect that intent. REFERENCES: ISO/IEC 1539:1991 (E) section 12.5.4 EDITS: In the last constraint after R1226 in section 12.5.4 replace "local to" with "accessible in". [182:20] SUBMITTED BY: Janice C. Shepherd X3J3/92-015 HISTORY: X3J3/92-046 Discussed in, pp 28-29 X3J3/92-120 Initially drafted X3J3/92-160 m122 Approved 23-0 X3J3/92-182 Approved in ballot N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000063 TITLE: Interfaces and dummy procedure arguments KEYWORDS: interface, procedure - dummy DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Given a procedure that has a dummy argument, must an explicit interface for the procedure show sufficient information to indicate that its dummy argument is a dummy procedure? ANSWER: Yes. Discussion: The first sentence of the second paragraph in 12.3.2.1 indicates that an interface body must specify all of the procedures characteristics. Section 12.2 indicates that a procedure's characteristics include the characteristics of its arguments. Therefore, an interface body must include an EXTERNAL statement or a nested interface block for each dummy argument that is a dummy procedure, even though this may not be necessary in the procedure definition. REFERENCES: ISO/IEC 1539:1991 (E) Sections 12.2 and 12.3.2.1 EDITS: None. SUBMITTED BY: Janice C. Shepherd, X3J3/92-016 HISTORY: X3J3/92-161 m122 Approved 24-0 X3J3/92-182 Approved in ballot N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000064 TITLE: SPACING result for 0.0 KEYWORDS: SPACING intrinsic DEFECT TYPE: Erratum STATUS: WG5 approved; ready for SC22 QUESTION: Is the SPACING intrinsic function intended to return absolute spacing of model numbers about 0.0 when its argument is 0.0? Section 13.12.100 under Result Value specifies that the result should be b**(e-p); this is not equal to the absolute spacing of model numbers around zero because zero has e == 0, so b**(e-p) provides a much larger value than expected. ANSWER: Yes. Discussion: Since the smallest magnitude model numbers are TINY(X) and -TINY(X), the absolute spacing around zero is TINY(X). It was intended that the "otherwise" clause of the SPACING definition apply to this case. REFERENCES: ISO/IEC 1539:1991 (E) Sections 12.7.1 and 13.13.100. EDITS: In section 13.13.100, after "Result Value." change "The" to "If X is not zero, the". In the same section, change "; otherwise " to ". Otherwise". [234:6] SUBMITTED BY: John Reid HISTORY: N786a item 234/7 N815a item 6 (X3J3/92-136 item 6) X3J3/92-171 m122 Approved 22-0 X3J3/92-267r m123 Edit approved in N881 WG5 approval -------------------------------------------------------------------------------- NUMBER: 000065 TITLE: DO construct - Block and Nonblock KEYWORDS: DO construct - block and nonblock DEFECT TYPE: Interpretation STATUS: WG5 approved; ready for SC22 QUESTION: Consider the following DO loop: DO 10, I = 1, 10 K = I 10 CONTINUE It can be parsed using either of the following two paths: R816 is R817 is R818 is R819 is DO