From jwagener@trc.amoco.com Tue Nov 24 03:23:43 1992
Received: from noc.msc.edu by dkuug.dk with SMTP id AA25072
  (5.65c8/IDA-1.4.4j for <SC22WG5@dkuug.dk>); Tue, 24 Nov 1992 16:24:30 +0100
Received: from uc.msc.edu by noc.msc.edu (5.65/MSC/v3.0.1(920324))
	id AA07997; Tue, 24 Nov 92 09:24:13 -0600
Received: from [149.180.11.2] by uc.msc.edu (5.65/MSC/v3.0z(901212))
	id AA01866; Tue, 24 Nov 92 09:24:01 -0600
Received: from trc.amoco.com (apctrc.trc.amoco.com) by netserv2 (4.1/SMI-4.0)
	id AA01073; Tue, 24 Nov 92 09:23:51 CST
Received: from crmac1 by trc.amoco.com (4.1/SMI-4.1)
	id AA21722; Tue, 24 Nov 92 09:23:43 CST
Date: Tue, 24 Nov 92 09:23:43 CST
Message-Id: <9211241523.AA21722@trc.amoco.com>
From: Jerrold L. Wagener <jwagener@trc.amoco.com>
To: SC22WG5@dkuug.dk
Subject: S20.123, items 1-60
X-Charset: ASCII
X-Char-Esc: 29

##########################################################################
#                                                                        
#                              X3J3/S20.123                              
#                                                                        
#                           20 November 1992                            
#                                                                        
##########################################################################

Number Title															Status

000000 Minor edits and corrections to ISO/IEC 1539:1991 (E)				2: 3, 
21
																		3: 1, 
2, 4-20
000001 Equivalence of Expression Evaluations							3
000002 Default Main Program Name										2
000003 Preconnected Units and UNIT=*									2
000004 Blanks in Format Specifications in Free Form Source				2
000005 Namelist Output of Zero Length Character Strings					3
000006 Procedure Specifications in a Scoping Unit						2
000007 Duplicate module procedures in interface blocks					2
000008  - subsumed by 7 -
000009 Generic Interfaces with the Same Name in a Program				3
000010 Generic Interfaces with the Same Name in a Scoping Unit			3
000011 Multiple Accessible Defined Assignment Interfaces				1
000012 Type of a Named Constant											1
000013 Implicit Environment of an Interface Block						3
000014 Interface for a Character Function with a Variable Length Result	3
000015 Error in Fourth Constraint for R429								2
000016 Character Length Specification									3
000017 Creation of Entities by Local Names in rename-list				2
000018 Valid Characters for Indicating Fixed Form Statement Continuation3
000019 Correctness of Last Example in Section 4.5						2
000020 References to the Same Derived Type by Different Names			3
000021 References to Different Derived Types with the Same Name			3
000022 Use of Derived Type Name in Host Scoping Unit					3
000023 Type of a Named Constant in an Internal Procedure				1
000024 IMPLICIT NONE and the Type of an Internal Procedure Result		3
000025 Resolution of Internal Procedure References						3
000026 Bounds of Array Expressions										1
000027 Requirements for Pointers and Target Association					1
000028 Precedence of Use or Host Association							2
000029 Class of a Defined Operator										2
000030 Length of Character Literals in Array Constructors				1
000031 Scope and Type of an implied-DO Variable							2
000032 Implicit Declaration of a Derived Type							2
000033 Interface Blocks with the Same Name in a Program 				2
000034  - subsumed by 33 -
000035  - subsumed by 33 -
000036 Pointer to an Assumed-size Array									3
000037 Use of Array Sections in Pointer Assignment Statements			3
000038 Same Interface Body in Multiple Generic Interface Blocks			3
000039 Association of a Pointer Actual Argument with a Dummy Argument	2
000040 Allocation of Arrays of Pointers									3
000041 Procedure with Target Dummy Argument Requires Explicit Interface	1
000042 KIND parameter value												3
000043 List-directed character input									3
000044 END Statement and Fixed Form Source								3
000045 Array Intrinsics with Arrays of Derived-type Arguments			3
000046 RESULT clause for RECURSIVE functions							3
000047 Automatic data object in initialization expressions				3
000048 Pointer-valued statement functions								3
000049 Characteristics of Function Results								2
000050 Repeat counts on edit descriptors								3
000051 On Unambiguous generic procedure references						1
000052 Expressions in Statement Function Definitions					2
000053 Optional Intrinsic Function Arguments							1
000054 Resolving Generic Procedure References							1
000055 Characteristics of character function results					1
000056 TRANSFER intrinsic function description							2
000057 Prohibition against multiple explicit specific interfaces		2
000058 Ambiguous use of RkeywordS										1
000059 SEQUENCE derived type and component bounds						3
000060 Statement function argument references							2
000061 G edit descriptor with RdS = 0									3
000062 Statement function constraints									3
000063 Interfaces and dummy procedure arguments							3
000064 SPACING result for 0.0											3
000065 Block and Nonblock DO Construct									3
000066 Declaration of FUNCTION type										3
000067 Output of negative signed zero									3
000068 Pointer association status										2
000069 I/O implied DO variable											2
000070 Characteristics specified by interface bodies					2
000071 USE association and COMMON block name							2
000072 Missing constraint for SIZE=										2
000073 Description of the MERGE intrinsic function						1
000074 Meaning of "referenced" in 11.3.2								2
000075 Interface blocks in block data									1
000076 Attributes, Properties, Characteristics							1
000077 Misc. questions													1
000078 Intrinsic functions in MODULE specification statements			2
000079 Automatic character and ALLOCATABLE, ... attributes				1
000080 Vector subscripts in masked array assignment statements			2
000081 Pointer actual argument overlap									1
000082 Host association, generic name									1
000083 Generic Override of Intrinsic Procedure							1
000084 Change masked array assignment constraint to prose				2
000085 Nondefault Integer Data Type for UNIT=, ... Specifiers			2
000086 USE and Host Association											1
000087    - not assigned -
000088 Common block names and local names								1
000089 Errors in the DATA statement description							1
000090 Subroutine and Function names in nested scopes					1
000091 Constraint diagnosis for SEQUENCE attributes						1
000092 Pointer and Storage Association									1
000093 Scalar Pointer Function Results									1
000094 Varying length function result, implied-DO loop					2
000095 Varying length function result, implied-DO loop					2
000096 Definition of "Declaration"										1
000097 Specification Expression											2
000098 KIND param and list directed I/O									2
000099 Generic interfaces												1
000100 ASSOCIATED intrinsic and zero sized objects						1
000101 Specification statements											1
000102 Returned value for INQUIRE POSITION= on an empty file			2
000103 Statement Function with unreferenced dummy argument				2
000104 rounding formatted output										2
000105 Parallel Evaluation of Operands and Arguments					1
000106 Multiple USE of modules; renaming rules							1
000107 USE renaming of generic and specific interfaces					2
000108 Referencing disassociated pointers								1
000109  Intrinsic Function ASSOCIATED									2
000110 Named Constant Shape Specification								2
000111 Array constructors in masked assignment statements				1
000112 Sequence Derived Type External Functions							1
000113 Ordering of Array Specification and Initialization				1
000114 Named Constant Attribute Specification							2
000115 Multiple dummy arguments											2
000116 Scoping Units and statement labels								2
000117 A clarification request on generic interfaces					1
000118 Named constructs and host association							2
000119 Rank of assumed-shape array										2
000120 PRESENT intrinsic and host association							2
000121 R;S As a Statement Separator										1


INTRODUCTION

This document is an internal working document of X3J3, the Fortran
Technical Committee of the American National Standards Association, and
contains the committee's responses to the defect reports received against
ISO/IEC 1539:1991 (E).

The status of each item in this document is tracked with the STATUS field,
the six values of which are:

   1. X3J3 consideration in progress

   Submitted via the hardcopy route or via the RFI or RFC email route and
   being processed by X3J3, but as yet no response has been adopted by an
   X3J3 formal vote.

   2. X3J3 draft response

   A response (ANSWER field) has been approved by a formal X3J3 vote but
   not yet approved by subsequent letter ballot.

   3. X3J3 approved; ready for WG5

   Approved by an X3J3 letter ballot. This vote will be taken only on
   items having a STATUS of RX3J3 draft responseS.

   4. WG5 approved; ready for SC22

   Approved by WG5 for further processing within ISO as a corrigendum
   item. WG5 will advise X3J3 when an item reaches this status.

   5. Returned by WG5 for X3J3 reconsideration

   Returned to X3J3 after the item had been forwarded to WG5 but failed to
   gain WG5 approval. This status is equivalent to RX3J3 consideration in
   progressS.

   6. Published

   Published as an item in an approved corrigenda report, or incorporated
   into the next draft revision of the standard. In either case the item
   must have previously attained the status of RWG5 approved; ready for
   SC22S.

Each entry is categorized by its defect type of which there are three
kinds (these definitions are taken from the X3/SD-2 of February 1992):

   1. Erratum

   The standard may be modified with corrigenda to:

     a) Correct a typographical error.

    b) Insert a missing word, sentence, paragraph, figure, example,
       table, or clause.

     c) Delete a extraneous word, sentence, paragraph, figure, example,
        table, or clause.

   Any such modification of the standard shall not introduce technical
   changes or changes in what it means to conform to the standard.

   2. Amendment

   Any modification of the standard that introduces technical changes or
   changes in what it means to conform to the standard shall be treated as
   an amendment to the standard.

   3. Interpretation

   An interpretation is a clarifying commentary on the standard that does
   not introduce either a technical change or a change in what it means to
   conform to the standard.

The first entry, which has the number 000000, contains details of minor
edits and corrections to the standard. It is updated as required and the
updates are tracked in the HISTORY section.

==========================================================================

NUMBER: 000000
TITLE: Minor edits and corrections to ISO/IEC 1539:1991 (E)
KEYWORDS: edits, typos, typographical errors
DEFECT TYPE: Erratum
STATUS: X3J3 draft response: edits 3 (not a minor edit), 21 (new at meeting 
123)
                 X3J3 approved; ready for WG5: edits 1, 2, 4-20 (but add 
section numbers)

QUESTION: None.

ANSWER: None.

REFERENCES: ISO/IEC 1539:1991 (E)

EDIT(S):

   1. xvi/1-2 Delete the sentence RThe section concludes ... names.S

   2. 15/25 Change RofS to RorS.

   3. 177/29 Add new sentence "When a statement function is invoked, an
             instance of that statement function is created."

   4. 203/23 Change "1,sh" to "sh,1".

   5. 220/25 Change",[" to "[" (i.e. delete comma).

   6. 255/27 Change "2.4.7" to "2.4.5".

   7. 255/38 Change "2.4.4" to "2.4.3.1.2".

   8. 256/23 Change "2," to "2)".

   9. 257/8 Change "2.4.7" to " 2.4.5".

  10. 258/19 Change "2.4.4" to "2.4.3.1.2".

  11. 258/22 Change "2," to "2)".

  12. 258/25 Change "4," to "4)".

  13. 258/34 Change "2.4.4" to "2.4.3.1.2".

  14. 259/19 Change "3," to "3)".

  15. 259/31 Change "2.4.7" to "2.4.5".

  16. 260/12 Change "2.4.7" to "2.4.5".

  17. 260/14 Change "2.4.7" to "2.4.5".

  18. 260/35 Change "2.4.3.2" to "2.4.3.1".

  19. 261/9  Change "specified in a" to "specified in a TARGET statement
             or".

  20. 261/30 Change "2.4.5" to "2.4.3.1.1".

  21. 172/41 Change "of the the dummy" to "of the dummy"

SUBMITTED BY: WG5 (Victoria, BC) items 1 through 20.

HISTORY: Items 1 through 20 approved as X3J3/92-152A at meeting 122 by
                                 unanimous consent
                   Indicated items in STATUS approved in ballot 92-182
                   Item 21 added at meeting 123 (92-303, unanimous consent)

--------------------------------------------------------------------------

NUMBER: 000001
TITLE: Equivalence of Expression Evaluations
KEYWORDS: arithmetic expressions, mathematical equivalence, numeric
operations
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

QUESTION: In the following code fragments must the values of D be the same
for all legal values of A, B, and C?

          TEMP=A+B
          D=C+TEMP
and
          D=C+(A+B)

ANSWER: No.

Discussion: Section 7.1.7.3 "Evaluation of numeric operations", specifies
that processors may evaluate any mathematically equivalent expression and
notes, for example, that X+Y can be evaluated as Y+X.  Thus, the
statements in the question could legitimately be evaluated as:

          TEMP=A+B
          D=C+TEMP
and
          D=C+(B+A)

Consequently, there is no requirement that the computational result be the
same.

REFERENCE: ISO/IEC 1539:1991 (E) section 7.1.7.3

EDIT(S): None.

SUBMITTED BY: J.C.Adams 119-JCA-2 (119.002)

HISTORY: 119-RL-1 (119.047)
         92-044   (S20.120A)
         92-104   (Interpretation)
         Approved as 92-147 at meeting 122 by a vote of 21-1
         Edit approved in 92-267r at meeting 123

--------------------------------------------------------------------------

NUMBER: 000002
TITLE: Default Main Program Name 
KEYWORDS: main program, default name
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

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 section 
1.4 of ANSI X3.9-1978 and section C.11.1 of  ISO/IEC 1539:1991. 
Specifically, lines 25-27 of ANSI X3.9-1978 state:

     A processor conforms to this standard if it executes
     standard-conforming  programs in a manner that fulfills
     the interpretations prescribed herein.

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) section C.11.1
            ANSI X3.9-1978 section 1.4 (page 1-2, lines 25-27)

EDIT(S): 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 meeting 120

-----------------------------------------------------------------------

NUMBER: 000003
TITLE: Preconnected Units and UNIT=* 
KEYWORDS: preconnected units, identifying a unit, UNIT=*
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

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 section 12.9.2 of ANSI X3.9-1978 
and section 9.3 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 & 9.4.4.2 
            ANSI X3.9-1978 section 12.9.2

EDIT(S): None.

SUBMITTED BY: A. D. Tait, 118-ADT-2 (118.024)
HISTORY: Approved as 119-ADT-2 (119.013)

-----------------------------------------------------------------------

NUMBER: 000004
TITLE: Blanks in Format Specifications in Free Form Source
KEYWORDS: free form source, format specification, blanks
DEFECT TYPE: Erratum
STATUS: X3J3 draft response

QUESTION: Is the following format specification valid in free form source?

                 FORMAT (B  N)

ANSWER: YES.

Discussion: Sections of Fortran 90 are not consistent.

   3.3.1: In free form, blank characters must not appear within lexical
          tokens other than in a character context.

      and

          A blank must be used to separate names, constants, or labels
          from adjacent keywords, names, constants, ...

  10.1.1: Additional blank characters may appear at any point within the
          format specification, with no effect on the interpretation of
          the format specification, except within a character string
          edit descriptor.

It can be seen that the text in chapter 3 does not consider edit
descriptors.  The text will be revised so that:

     -- edit descriptors are not in the category "keywords"
        and need not be delimited by blanks.

     -- blanks are allowed in edit descriptors.

Note that the first edit below depends on a change made in 
S20 item 58 which moves the line from section 3.2.1 to 2.5.2

REFERENCES: ISO/IEC 1539:1991 (E) sections 3.3.1, 10.1.1

EDIT(S): 

   1. Section 2.5.2 following the sentence "Keywords appear ... through
      12." add the following:

   2. Section 3.2 page 19 last sentence [19:35-36]
      insert ", edit descriptors" following "... , labels".

      "Note that in addition to keywords, upper-case letters may also
       appear in various other lexical tokens.  Examples include operators
       such as .EQ., edit descriptors such as BN or Iw[.m],
       and literal constants such as B'digit[digit]...'."

   3. Section 3.3.1 p22 2nd pp [22:6]
      change "... character context."
      to "... character context or in a format specification."

SUBMITTED BY: J.T. Martin 119-JTM-2 (119.015)

HISTORY: X3J3/92-145               Draft Interpretation by CIO, withdrawn
         X3J3/92-075
         X3J3/92-044               S20.120, number 4
         119-RPK-1
         119-JTM-2
         Approved as X3J3/92-176 at meeting 122 by unanimous consent

--------------------------------------------------------------------------

NUMBER: 000005
TITLE: Namelist Output of Zero Length Character Strings 
KEYWORDS: namelist output, zero length, character string
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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,

EDIT(S): 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

-----------------------------------------------------------------------

NUMBER: 000006
TITLE: Procedure Specifications in a Scoping Unit 
KEYWORDS: procedure specification, scoping unit, interface body
DEFECT TYPE: Erratum
STATUS: X3J3 draft response

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 shows 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(S): At the end of the fourth paragraph following R1207 in 12.3.2.2,
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: Approved as X3J3/92-170 at meeting 122 by unanimous consent
	Revised following letter ballot at meeting 123, in 92-312.
	Revision approved by unanimous consent at meeting 123.

--------------------------------------------------------------------------

NUMBER: 000007
TITLE: Duplicate module procedures in interface blocks
KEYWORDS: module procedure name, interface block, generic
DEFECT TYPE: Erratum
STATUS: X3J3 draft response

QUESTION: May a module procedure name be referenced on more than one
MODULE PROCEDURE statement for a given generic name in a scoping unit,
either in a single interface block or in multiple interface blocks
specifying that generic name?

ANSWER: No.

Discussion: The standard routinely disallows such redundant specifications
within a scoping unit.  The prohibition for this case was inadvertently
overlooked. This deficiency is remedied by the supplied edit.

Example:
          INTERFACE INT_1
            MODULE PROCEDURE FOO, FOO ! second FOO is illegal
            MODULE PROCEDURE FOO1
            MODULE PROCEDURE FOO1     ! FOO1 is illegal here
          END INTERFACE INT_1

          INTERFACE INT_2
            MODULE PROCEDURE FOO2A, FOO2B
          END INTERFACE INT_2

          INTERFACE INT_2
            MODULE PROCEDURE FOO2B, FOO2C !FOO2B is illegal here
          END INTERFACE INT_2

Note, however, that if the two interface blocks for INT_2 were placed in
separate modules, the second appearance of FOO2B would have been
permitted, as would a scoping unit which used both modules.

For example:

        MODULE MOD1
          USE SOME_OTHER_MODULE    ! the source of FOO2B
            INTERFACE INT_2
              MODULE PROCEDURE FOO2A, FOO2B
            END INTERFACE INT_2
           ...
        END MODULE MOD1

        MODULE MOD2
          USE SOME_OTHER_MODULE    ! the source of FOO2B
            INTERFACE INT_2
              MODULE PROCEDURE FOO2B, FOO2C !FOO2B is legal here
            END INTERFACE INT_2
           ...
        END MODULE MOD2

The following USE statements would be allowed:

                            USE MOD1
                            USE MOD2    ! no problem using both modules here

EDIT(S): The following additional constraint should be added to section
12.3.2.1:

     Constraint: A <procedure-name> in a <module-procedure-stmt>
     must not be one which previously had been established to be
     associated with the <generic-spec> of the <interface-block>
     in which it appears, either by a previous appearance in an
     <interface-block> or by use or host association.

REFERENCES: ISO/IEC 1539:1991(E) Section 12.3.2.1

SUBMITTED BY: S.M.Lammers, 119-SML-1 (119.019)

HISTORY: Original interpretation was 120-MBSH-4A (120.096A)

         Modified based on X3J3/92-039 arguments. Adopted because
         this interpretation is more consistent with requirements
         concerning duplication of other specification statements in
         a given scoping unit.

         Interpretation modification presented in X3J3/92-095
         Commented on by N786A from WG5 Victoria meeting in item
         marked 1167/36+.

         Approved as X3J3/92-155A at meeting 122 by unanimous consent.

--------------------------------------------------------------------------

NUMBER: 000008
TITLE: Module Procedure Name in Multiple Interface Blocks 
KEYWORDS: module procedure name, interface block
DEFECT TYPE: Interpretation
STATUS: deleted; subsumed by item 7

QUESTION: May a module procedure name be referred to on more than one 
MODULE PROCEDURE statement in multiple interface blocks specifying the 
same generic name?

ANSWER: Yes.

Discussion: There is no restriction that forbids the situation in this 
question and therefore it is legal.

Example:

	INTERFACE INT_1
		MODULE PROCEDURE FOO,FOO        ! FOO is illegal
		MODULE PROCEDURE FOO1
		MODULE PROCEDURE FOO1           ! FOO1 is illegal
		MODULE PROCEDURE FOO2
	END INTERFACE INT_1

	INTERFACE INT_1
		MODULE PROCEDURE FOO2           ! legal
	END INTERFACE INT_1

REFERENCES: 120-MBSH-4A (120.096A)

EDIT(S): None.

SUBMITTED BY: S. M. Lammers, 119-SML-1 (119.019) item 5, question 4

HISTORY: Interpretation questioned in X3J3/92-039
         Resolved by X3J3/92-155A (approved by unanimous consent as the
         response to NUMBER 000007)

-----------------------------------------------------------------------

NUMBER: 000009
TITLE: Generic Interfaces with the Same Name in a Program 
KEYWORDS: generic, interface,
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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).

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-4 (120.029), question 1

HISTORY: Proposed as 120-MBSH-1A (120.084A) at meeting 120
	 Questioned in X3J3/92-040 (121-JKR-8)
	 Approved as X3J3/92-099
                           Edit approved in 92-267r at meeting 123

-----------------------------------------------------------------------

NUMBER: 000010
TITLE: Generic Interfaces with the Same Name in a Scoping Unit 
KEYWORDS: generic, interface, scoping unit
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

QUESTION: Are two generic interfaces with the same name allowed in the 
same scoping unit?

Discussion: 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)

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-4 (120.029), question 2

HISTORY: Proposed as 120-MBSH-1A (120.084A) at meeting 120
	 Questioned in X3J3/92-040 (121-JKR-8)
	 Approved as X3J3/92-100
                           Edit approved in 92-267r at meeting 123

----------------------------------------------------------------------

NUMBER: 000011
TITLE: Multiple Accessible Defined Assignment Interfaces 
KEYWORDS: interfaces, defined assignment
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

QUESTION: Consider the following excerpts from section 14.1.2 [241]:

Excerpt (a): Within a scoping unit, entities in the following classes:

       (1) Named variables that are not statement entities (14.1.3),...,
       generic identifiers, derived types, and namelist group names
       ...
       are local entities of that scoping unit.

Excerpt (b):  Within a scoping unit, a name that identifies a local entity of
	one class must not be used to identify another local entity of
	the same class, except in the case of generic names (12.3.2.1). A
	name that identifies a local entity of one class may be used to
	identify a local entity of another class.

The standard defines both the terms "generic identifier" and "generic
name" in section 12.3.2.1 [168]. "Generic identifier" is defined to
encompass the three concepts of a generic name, a defined operator, r an
equals symbol on a generic specification.  "Generic name" harkens back to
the BNF term for the name that may appear on an interface specification.

The text from section 14 cited in (a) uses the term "Generic identifier"
but the text cited in (b) uses the term "generic name".  Is the intent of
choosing the different words in section 14 to prohibit a program from
containing multiple interface blocks for the same operator and multiple
accessible defined assignment interfaces?

ANSWER: No.

Discussion:  Section 11.3.2 states:

"If two or more generic interfaces that are accessible in a scoping unit
have the same name, the same operator, or are both assignments, they
are interpreted as a single generic interface" 

Thus, two or more interfaces that have the same name, the same operator,
or are assignment interfaces are not only permitted but the interfaces
are considered to be a single generic interface.  The text cited in (b)
above was specifically discussing "names" and hence "generic names" were
singled out.

REFERENCES: ISO/IEC 1539:1991 (E) sections 11.3.2, 12.3.2.1, & 14.1.2

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-4 (120.029), question 3

LAST SIGNIFICANT CHANGE: before meeting 123

HISTORY: 120-MBSH-1A (120.084A)
         passed in 92-
         revised in response to ballot comments at meeting 123 but no vote 
taken

-----------------------------------------------------------------------

NUMBER: 000012
TITLE: Type of a Named Constant 
KEYWORDS: named constant, parameter statement
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

QUESTION: Is the following code fragment valid Fortran 90?
     
          PARAMETER (A=1)
          IMPLICIT INTEGER (A)
     
ANSWER: No.
     
Discussion: In any scoping unit there is only one (possibly null) 
implicit typing map (5.3).  Thus, in the statement (5.2.10),
     
     The named constant must have its type, shape, and any type
     parameters specified either by a previous occurrence in a type
     declaration statement in the same scoping unit, or by the
     implicit typing rules currently in effect for the scoping unit.

the word "currently" is intended to mean that any IMPLICIT statement 
which would affect the named constant must occur previously in the 
scoping unit.

REFERENCES: ISO/IEC 1539:1991 (E) sections 5.2.10 & 5.3

EDIT(S): None.

SUBMITTED BY: J. T. Martin, 120-JTM-9 (120.046), question 3 

HISTORY: 120-LJM-5 (120-098)
         Response in X3J3/92-172, must be identical to response to
         NUMBER 000023

-----------------------------------------------------------------------

NUMBER: 000013
TITLE: Implicit Mapping of an Interface Block 
KEYWORDS: implicit mapping, interface block
DEFECT TYPE: Amendment
STATUS: X3J3 approved; ready for WG5

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

EDIT(S):

   1. In Section 5.3 in the second paragraph after the constraints, 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 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, change "INTEGER FUN, I" to
      be "INTEGER FUN".

SUBMITTED BY: L.R.Rolison 120-LRR-3 (120.028)

HISTORY: Draft response in 92-102A, questioned in N786A of the Victoria
WG5 meeting. Revised edit approved as 92-154A at meeting 122 by a vote of
21-1.  Edit approved in 92-267r at meeting 123.

--------------------------------------------------------------------------

NUMBER: 000014
TITLE: Interface for a Character Function with a Variable Length Result 
KEYWORDS: character function, variable length, interface
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 119-LRR-1, part II

HISTORY: 119-KWH-3A (119-70A)
                   Approved in ballot 92-182

-----------------------------------------------------------------------

NUMBER: 000015
TITLE: Error in Fourth Constraint for R429 
KEYWORDS: constraints, R429, <component-decl>
DEFECT TYPE: Erratum
STATUS: X3J3 draft response

QUESTION: Should the fourth constraint for R429 also apply to a <char-
selector> in the <type-spec>?

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 <type-spec> 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(S): Replace the fourth constraint after R429 with:

     The character length specified by the <char-length> in a
     <component-decl> or the <char-selector> in a <type-spec> (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)

-----------------------------------------------------------------------

NUMBER: 000016
TITLE: Character Length Specification
KEYWORDS: character length specification, <char-length>, R508
DEFECT TYPE: Erratum
STATUS: X3J3 approved; ready for WG5

QUESTION: Is there a similar interaction between a <char-length> 
specified in both a <component-decl> and a <char-selector> as there is 
between a <char-length> specified in both an <entity-decl> and a <char-
selector>?

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(S): Replace the text following the constraints for R508 with:

     The <char-selector> in a CHARACTER <type-spec> and the * <char-
     length> in an <entity-decl> or in a <component-decl> of a type
     definition specify character length. The * <char-length> in an
     <entity-decl> or <component-decl> specifies an individual length
     and overrides the length specified in the <char-selector>, if any.
     If a * <char-length> is not specified in an <entity-decl> or
     <component-decl>, the <length-selector> or <type-param-value>
     specified in the <char-selector> is the character length. If the
     length is not specified in a <char-selector> or a * <char-length>,
     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

-----------------------------------------------------------------------

NUMBER: 000017
TITLE: Creation of Entities by Local Names in rename-list 
KEYWORDS: local names, data entity
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

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 
	                    ! is Q 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 <use-name> do not constitute 
separate entities. Subsequent appearances of the <local-name> refer to 
the single entity. In the example, Q does not create a new entity.

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

EDIT(S):   none.

SUBMITTED BY: E. A. Johnson, 119-EAJ-1 (119.057)

HISTORY: 120-LF-1 (120.089)
         Response proposed in 92-296, 
         approved by unanimous consent at meeting 123

-----------------------------------------------------------------------

NUMBER: 000018
TITLE: Valid Characters for Indicating Fixed Form Statement Continuation 
KEYWORDS: fixed form source, statement continuation, character set
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: J. C. Adams, 120-JCA-13 (120.013)

HISTORY: Originally proposed as 120-RL-1 (120.058)
	 Approved as X3J3/92-105 at meeting 121 by a vote of 20-0
                           Edit approved in 92-267r at meeting 123

-----------------------------------------------------------------------

NUMBER: 000019
TITLE: Correctness of Last Example in Section 4.5 
KEYWORDS:
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

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 & 4.5

EDIT(S): None.

SUBMITTED BY: J. C. Adams, 120-JCA-14 (120.014)

HISTORY: 120-JTM-10 (120.057)

-----------------------------------------------------------------------

NUMBER: 000020
TITLE: References to the Same Derived Type by Different Names 
KEYWORDS: derived types, derived type definition
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): 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

-----------------------------------------------------------------------

NUMBER: 000021
TITLE: References to Different Derived Types with the Same Name 
KEYWORDS: derived type definition
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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 <type-name> in a
     <derived-type-stmt> ... 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

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-1 (120.019)

HISTORY: Originally answered in 120-KWH-2A (120.083A)
	 Modification requested by X3J3/92-037 (121-JKR-5)
	 Discussed in X3J3/92-049 (121-ADT-9) p7 &
	 X3J3/92-050 (121-ADT-10) p4
	 Approved as X3J3/92-080 at meeting 121 by a vote of 20-0
                           Edit approved in 92-267r at meeting 123

-----------------------------------------------------------------------

NUMBER: 000022
TITLE: Use of Derived Type Name in Host Scoping Unit 
KEYWORDS: derived type, <type-name>, host scoping unit, internal procedure
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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 <type-name> in a
     <derived-type-stmt> ... 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 says 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

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-2 (120.020) cases 1 and 2

HISTORY: Proposed as 120-RPK-1A (120.092A)
	 Questioned by X3J3/92-038 (121-JKR-6)
	 Approved as X3J3/92-097 at meeting 121 by a vote of 20-0
                           Edit approved in 92-267r at meeting 123

-----------------------------------------------------------------------

NUMBER: 000023
TITLE: Type of a Named Constant in an Internal Procedure 
KEYWORDS: named constant, internal procedure, parameter statement, host
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

QUESTION: Given that an implicit mapping is established for a letter in 
a host scoping unit. An internal procedure of that host scoping unit 
contains a PARAMETER statement which defines a named constant whose name 
begins with the letter in question. This is followed by an IMPLICIT 
statement which defines a different mapping for this letter. Is this 
legal?

ANSWER: No.

Discussion: 5.3 indicates that:

     In each scoping unit, there is a mapping, ... between each of the
     letters ... and a type...

Hence within the internal procedure, the implicit mapping for X is to 
the type CHARACTER and the PARAMETER statement is illegal.

REFERENCES: ISO/IEC 1539:1991 (E) section 5.3

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-2 (120.020) case 3

HISTORY: 120-LJM-5 (120-093)
         Response in X3J3/92-172, must be identical to response to
         NUMBER 000012

-----------------------------------------------------------------------

NUMBER: 000024
TITLE: IMPLICIT NONE and the Type of a Function Result 
KEYWORDS: IMPLICIT NONE, internal procedure, function result type
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-2 (120.020) case 4

HISTORY: 120-RPK-3A (120-094A)
                   Edit approved in 92-267r at meeting 123

-----------------------------------------------------------------------

NUMBER: 000025
TITLE: Resolution of Internal Procedure References 
KEYWORDS: host, internal procedure, IMPLICIT NONE, procedure references
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-2 (120.020) case 5

HISTORY: Proposed meeting 120 120-RPK-4 (120-095)
                           Questioned X3J3/92-050 (121-ADT-10) page 4
                           X3J3 draft response at meeting 121
                           Approved in ballot 92-182

-----------------------------------------------------------------------

NUMBER: 000026
TITLE: Bounds of Array Expressions 
KEYWORDS: lower bound, upper bound, array expression
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

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)

the print statement results in the value 1 being written. Previous 
versions of the draft state lower bounds of array expressions were 1.  
Where are those words in the current draft?  

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) .FALSE.
        .FALSE.
        .TRUE.

 (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 array, or, if omitted, 1, and each upper bound is the size
     of the 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 (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).
     
Case (c) is described in section 5.1.2.4.2.
     
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

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-3 (120.021)

HISTORY: 120-LJM-4A (120.088A)

-----------------------------------------------------------------------

NUMBER: 000027
TITLE: Requirements for Pointers and Target Association 
KEYWORDS: POINTER attribute, TARGET attribute, pointer association
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

QUESTION: If PTR has the POINTER attribute and TGT has the TARGET or 
POINTER attribute, under which of the following other conditions are PTR 
and TGT considered to be pointer associated, i.e., under which of the  
                 
following conditions does ASSOCIATED(PTR,TGT) return .TRUE.:
     
   a) PTR and TGT have different types?
   b) PTR and TGT have different type parameters?
   c) PTR and TGT have different ranks?
   d) PTR and TGT have different sizes?
   e) PTR and TGT have different shapes?
   f) PTR and TGT have different bounds?
   g) PTR and TGT refer to the same set of array elements/storage units,
      but not in the same array element order?
   h) PTR and TGT have array elements/storage units whose range of
      memory addresses overlap, but they have no identical array
      elements/storage units?
   i) PTR and TGT have at least one but not all identical array
      elements/storage units and all the identical elements have the
      same subscript order value in both PTR and TGT?
   j) PTR and TGT have at least one but not all identical array
      elements/storage units but not all the identical elements have
      the same subscript order value in both PTR and TGT?
     
ANSWER: ASSOCIATED(PTR,TGT) returns false under any of the above 
conditions except, possibly, (f).  In determining whether a pointer and 
a target are associated, the bounds are not relevant, but the extents 
are.  The extents of each dimension of PTR and TGT must be the same, 
thus their shapes must match which is covered by condition (e).
     
Discussion: There are only three means by which a pointer may become 
pointer associated: via the ALLOCATE statement (6.3.1), via pointer 
assignment (7.5.2), or via argument association (12.4.1.1).  In an 
ALLOCATE statement, the object created inherits its type, type 
parameters, rank, shape, size and bounds from those declared for, or 
specified with, the pointer name.  In a pointer assignment, the type, 
type parameters, and rank of the pointer and target must conform, and 
the shape and size of the target determine those of the pointer.  When a 
pointer actual argument is passed to a pointer dummy argument, the 
pointer dummy argument becomes pointer associated with the same target 
as the pointer actual argument.  In all three of these cases, array 
elements of the pointer and the target correspond with one another in 
array element order.  Thus, since there is no other way for two objects 
to become pointer associated, all these properties must be the same.
     
Note that other forms of association (name association and storage 
association) are distinct from, and orthogonal to, pointer association 
(14.6).
     
REFERENCES: ISO/IEC 1539:1991 (E) 5.1.2.4.3, 6.3.1, 7.5.2, 12.4.1.1, &
            14.6

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-4 (120.022)

LAST SIGNIFICANT CHANGE: Approval rescinded at meeting 123 (uc)

HISTORY: 120-LJM-3A (120.081A)
         Original response proposed at meeting 121
	 Questioned in X3J3/92-061 (121-ADT-9) p9 &
	 X3J3/92-061 (121-ADT-13) item 27
	 Approved as X3J3/92-093A at meeting 121
         Approval rescinded at meeting 123 (uc)

-----------------------------------------------------------------------

NUMBER: 000028
TITLE: Precedence of Use or Host Association 
KEYWORDS: use association, host association
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

QUESTION: Is an implicitly typed entity with the same name as a host or 
use associated entity a reference to a local entity or the host or use 
associated entity?

ANSWER: It is a reference to the host or use associated entity. 5.3, 
in the fourth paragraph beginning "Any data entity ...", states that
use or host association takes precedence over implicit typing.

REFERENCES: ISO/IEC 1539:1991 (E) section 5.3

EDIT(S): None.

SUBMITTED BY: J. L. Steidel, 120-JLS-6 (120.024))

HISTORY: 120-RL-3 (120.060)

-----------------------------------------------------------------------

NUMBER: 000029
TITLE: Class of a Defined Operator
KEYWORDS: defined operator, generic identifier, classes of local entities
DEFECT TYPE: Erratum
STATUS: X3J3 draft response

QUESTION: Is a defined operator name a generic identifier?  Thus is it
illegal for a defined operator name to be the same as another class 1
entity within the same scoping unit (as defined in 14.1.2)?

ANSWER: "defined operator name" is not a Fortran 90 concept.  
Perhaps the question can be rewritten as:

     Is a defined operator a generic identifier? Thus is it illegal
     for a defined operator to be the same as another class 1 entity
     within the same scoping unit (As defined in 14.1.2)?

Note that Section 14 uses the undefined term "generic operator" and 
therefore the three occurrences are changed to "defined operator".

With these changes:

For the first part of the question:

     Is a defined operator a generic identifier?

the answer is "YES".  12.3.2.1, page 168, in the paragraph beginning 
"A procedure" states:

     The generic name, defined operator, or ... is a generic identifier.

For the 2nd part of the question:

     Thus is it illegal for a defined operator to be the same as
     another class 1 entity within the same scoping unit (as defined
     in 14.1.2)?

divide the entities in 14.1.2 class 1 into two categories and, at
the same time, replace "generic identifiers" with "generic name, defined
operator, and equals symbol" (from the definition of generic identifier,
12.3.2.1).  The two categories of interest are then:

     named variables that are not statement entities, named constants,
     named constructs, statement functions, internal procedures,
     module procedures, dummy procedures, intrinsic procedures,
     generic names, equals symbol, derived types, and namelist group
     names and defined operators

For the first category, "named variables that are ....", note that
defined operators, R704 and R724, are syntactically disjoint from names,
R304, and equals symbols and thus cannot be the same as any entity in this
category.  For example, given the expression:

          (.SAM.SAM)

".SAM." is a defined unary operator and "SAM" is a name. That both share
the letters "SAM" has no effect on their interpretations.

The answer, then, for this category, is that it is not possible to
construct a defined operator that is the same as a member of this
category.

For the second category, "defined operators", note that 12.3.2.1.1 states:

      A given defined operator may, as with generic names, apply
      to more than one function, in which case it is generic in exact
      analogy to generic procedure names.

Unfortunately, section 14 contains an error and is not consistent with
section 12.  According to section 14.1.2, page 241, in the paragraph 
beginning "Within a  scoping unit, a name that":

      Within a scoping unit, a name that identifies a local entity
      of one class must not be used to identify another local entity
      of the same class, except in the case of generic names (12.3.2.1).

This text fails to consider defined operators; an edit is specified,
below, to make defined operators an exact analogy to generic names as
stated in 12.3.2.1.1.

With this correction, the answer for this category is "No".

The term "generic procedure names" in 12.3.2.1.1, above, 
is not consistent with the many references to "generic names". 
This is corrected by edit 2 below.

REFERENCES: ISO/IEC 1539:1991 (E) sections 12.3.2.1 & 14.1.2

EDIT(S):
   1. page xvi, last line:
      change "generic procedure names" to "generic names"

   2. section 12.3.2.1.1:
      change "A given defined operator may,... generic procedure names."
          to "A given defined operator may,... generic names."

   3. section 14.1.2:
      replace first sentence of third paragraph (beginning "Within a
      scoping unit, a name...) with
          "Within a scoping unit, a generic name or defined operator may
           identify one or more interface blocks (12.3.2.1).  Otherwise,
           within a scoping unit, a name that identifies a local entity
           of one class must not be used to identify another local entity
           of the same class."

   4. section 14.1.2.3:
      in the first sentence of first paragraph change "generic operator"
      to "defined operator"

   5. section 14.1.2.3:
      in the first sentence of second paragraph change "generic operator"
      to "defined operator"

   6. section 14.4
      in the first paragraph change "generic operator" to "defined
      operator"

SUBMITTED BY: J. L. Steidel, 120-JLS-7 (120.025)

HISTORY: 120-RL-2A (120.059A)
         121-LRR-8 Opposed to 121-JKR-2
         121-JKR-2 Opposed to S20/29 (120-59a)
         X3J3/92-106 Interpretation based on 121-JKR-2
         Approved as X3J3/92-148A at meeting 122 by unanimous consent
--------------------------------------------------------------------------

NUMBER: 000030
TITLE: Length of Character Literals in Array Constructors 
KEYWORDS: array constructors, character literals, character length
DEFECT TYPE: Interpretation
STATUS: X3J3 consideration in progress

QUESTION: Consider the following example:

          CHARACTER :: NAMES(3)*20
          NAMES = (/TOM,DICK,HARRY/)

This is believed to be illegal. From section 4.5, "Construction of array 
values":

Constraint: Each <ac-value> expression in the <array-constructor> 
must have the same type and type parameters.

The length of the string is a type parameter. Thus the array constructor
sample above is illegal because the strings have different lengths.

Consider another example:

          CALL SUB (/TOM,DICK,HARRY/)
          ...
          SUBROUTINE SUB(NAMES)
            CHARACTER :: NAMES(:)*(*)
            WRITE(*,*) LEN(NAMES)
            ...

This also looks illegal.

 1. Must each character string literal constant in an array constructor
    be the same length?
 2. If the answer to 1 is "No", what values are printed by the second
    example?

ANSWER: Each character literal constant in an array constructor must be 
the same length.  Both examples are nonstandard conforming.

Discussion: The reasoning is correct. The length of a character constant 
is a type parameter. Therefore, by the cited constraint, all character 
literal constants in an array constructor must have the same length.

This awkwardness was noted by X3J3, but the committee could not reach 
agreement on an acceptable way to allow character literal constants of 
differing lengths in an array constructor.

REFERENCES: ISO/IEC 1539:1991 (E) section 4.5

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-1 (120.026)

HISTORY: 120-LJO-1 (120.074)

-----------------------------------------------------------------------

 NUMBER: 000031
 TITLE: Overloaded Implied-DO Variable Names
 KEYWORD: implied-Do variable, DATA statement
 DEFECT TYPE: Erratum
 STATUS: X3J3 draft response

 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 your 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 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

 EDITS: Replace the last paragraph of section 14.1.3 with the
 following two paragraphs:

      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: L. R. ROLISON, 120-LRR-2 (120.027)
 HISTORY: 1st response - 120-RRR-1A (92.069a) -- all prohibited
          Griffiths' complaint (92.49, p. 11ff)
          2nd response (92.112) -- all allowed
          Email discussion (92.132, #4, 5, 32, 33, 38, 39, 49)
          WG5 suggests F77 restrictions (92.136, N815-7)
          3rd response (92.167a) drafted by DATA subgroup at
            meeting 122; final action deferred due to 2 week rule
          Improved edits suggested by Janice Shepherd (private
            communication)
          4th response (92-229r2) submitted to meeting 123

-----------------------------------------------------------------------

NUMBER: 000032
TITLE: Implicit Declaration of a Derived Type 
KEYWORDS: derived type, IMPLICIT statement
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

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                     ! 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

EDIT(S):
  1. In the first paragraph of 5.1.1.7, change "is specified" to
     "is explicitly declared".
  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."
  3. In paragraph 3 of 12.1.2.2.1 after "prior to the DATA statement.",
     insert a new paragraph:
       "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: L. R. Rolison, 120-LRR-5 (120.030)

LAST SIGNIFICANT CHANGE: 1992 11 10, revised content

HISTORY: 120-TMRE-2 (120.075)
  Questioned by 92-035, 92-049(p14), 92-050(p4)
  Revised at meeting 121 but rejected
  Revised response proposed in 92-280,
  approved by unanimous consent at meeting 123

-----------------------------------------------------------------------

NUMBER: 000033
TITLE: Interface Blocks with the Same Name in a Program
KEYWORDS: generic interface blocks, module, USE statement
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

QUESTION: 
Question 1: In the following program, both interface blocks 
have the same generic name and thus might be considered to be merged 
into a  single generic interface block. Is function F1 (from 
MODULE MOD_1) accessible to the program but FUNCTION F2 (from 
MODULE MOD_2) hidden?

          MODULE MOD_1
             PUBLIC INT_1
             INTERFACE INT_1       ! Generic interface - PUBLIC.
                INTEGER FUNCTION F1(K)
                   INTEGER K
                END FUNCTION
             END INTERFACE 
            ...
          END MODULE MOD_1

          MODULE MOD_2
             PRIVATE INT_1
             INTERFACE INT_1       ! Generic interface, same name - PRIVATE
               INTEGER FUNCTION F2(L)
                 LOGICAL L
               END FUNCTION
             END INTERFACE
          ...
          END MODULE MOD_2
        
          PROGRAM EXAMPLE_1
            USE MOD_1; USE MOD_2      ! Program accesses both modules.
            ...
          END

Question 2: If the following module is added to the above example
and the USE statement in the main program is changed to
"USE MOD_1; USE MOD_2; USE MOD_3", is the resulting program standard 
conforming?

          MODULE MOD_3
            PUBLIC INT_1
            INTERFACE INT_1     ! Generic interface, same name - PUBLIC.
              INTEGER FUNCTION F3(L)
                LOGICAL L
              END FUNCTION
            END INTERFACE
            ...
          END MODULE MOD_3


Question 3: If the program and modules shown above are
altered so that module MOD_2 USEs MOD_1 and the program EXAMPLE_1 only 
USEs MOD_2 directly, is this an example of a standard conforming 
program? If it is standard conforming, does the program have access to 
function F1 but not F2?


ANSWER 1: No. The program is not standard conforming.

ANSWER 2: Yes, but not for the reason implied by the question.

ANSWER 3: Yes, the program is standard conforming.

Discussion: Because the name INT_1 is private in the module MOD_2, the 
interface for the function F2 is accessible in the program EXAMPLE_1, 
but NOT the generic name INT_1. Therefore, the two interface blocks are 
NOT merged into a single generic interface block.

The function F1 is, therefore, accessible in the program EXAMPLE_1 by 
either its specific name F1 or the generic name INT_1; the function F2, 
on the other hand is accessible only by its specific name F2.

This shows that the function F2 (from MODULE MOD_2) does not share 
the same generic name, INT_1, as the function F1 (from MODULE MOD_1).

When the example is modified as specified by Question 2, the new module 
MOD_3 defines a new interface block INT_1, which will be 
combined with the identically named interface block from module MOD_1. 
In the program EXAMPLE_1 the generic name INT_1 has the two specific 
names F1 and F3. However, since F2 is not part of the combined generic 
interface block the fact that F2 and F3 have the same dummy argument and 
result characteristics is of no significance, and the program is 
standard conforming.

When the example is modified as specified by Question 3, within module 
MOD_2 the two generic interface blocks are combined
into a single interface block. However, since INT_1 is declared 
to be private within module MOD_2 only the specific names of the 
functions F1 and F2 are accessible to program units using MOD_2.

Therefore, both the function F1 and F2 are accessible within the 
program  EXAMPLE_1, but only by their specific names.


REFERENCES:

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-6 (120.031) 

HISTORY: 120-TMRE-3 (120.076)
         Included into S20 as three items (33-35).  
         Recombined in 92-308.
         Approved by unanimous consent at meeting 123.

-----------------------------------------------------------------------

NUMBER: 000034
TITLE: Interface Blocks with the Same Name in a Program - II
KEYWORDS: generic interface blocks, module, USE statement
DEFECT TYPE: Interpretation
STATUS:  - subsumed by item 33 -

QUESTION: If the following module is added to the example given in 
NUMBER 000033, and the USE statement in the main program is changed to
"USE MOD_1, MOD_2, MOD_3", is the resulting program standard  conforming?

          MODULE MOD_3
            PUBLIC INT_1
            INTERFACE INT_1     ! Generic interface, same name - PUBLIC.
              INTEGER FUNCTION F3(L)
                LOGICAL L
              END FUNCTION
            END INTERFACE
            ...
          END MODULE MOD_3

ANSWER: Yes, but not for the reason implied by the question.

Discussion: The answer in NUMBER 000033 shows that the function
F2 (from MODULE MOD_2) does not share the same generic name, INT_1, as
the function F1 (from MODULE MOD_1).

The new module MOD_3 defines a new interface block INT_1, which will be 
combined with the identically named interface block from module MOD_1. 
In the program EXAMPLE_1 the generic name INT_1 has the two specific 
names F1 and F3. However, since F2 is not part of the combined generic 
interface block the fact that F2 and F3 have the same dummy argument and 
result characteristics is of no significance, and the program is 
standard conforming.

REFERENCES:

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-6 (120.031) Part 2

HISTORY: 120-TMRE-3 (120.076)

-----------------------------------------------------------------------

NUMBER: 000035
TITLE: Interface Blocks with the Same Name in a Program - III
KEYWORDS: generic interface block, module, USE statement
DEFECT TYPE: Interpretation
STATUS:  - subsumed by item 33 -

QUESTION: If the program and modules shown in NUMBER 000033 are
altered so that module MOD_2 USEs MOD_1 and the program EXAMPLE_1 only 
USEs MOD_2 directly, is this an example of a standard conforming 
program? If it is standard conforming, does the program have access to 
function F1 but not F2?

ANSWER: Yes, the program is standard conforming.

Discussion: Within module MOD_2 the two generic interface blocks are 
combined into a single interface block. However, since INT_1 is declared 
to be private within module MOD_2 only the specific names of the 
functions F1 and F2 are accessible to program units using MOD_2 (c.f. 
NUMBER 000033).

Therefore, both the function F1 and F2 are accessible within the program 
EXAMPLE_1, but only by their specific names.

REFERENCES:

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-6 (120.031) Part 3

HISTORY: 120-TMRE-3 (120.076)

-----------------------------------------------------------------------

NUMBER: 000036
TITLE: Pointer to an Assumed-size Array 
KEYWORDS: pointer, assumed-size array, pointer assignment statement
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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, second paragraph, 
second sentence.

REFERENCES: ISO/IEC 1539:1991 (E) section 6.2.1

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-7 (120.032)

HISTORY: 120-RRR-2A (120.087A)
                   Approved in ballot 92-182

-----------------------------------------------------------------------

NUMBER: 000037
TITLE: Use of Array Sections in Pointer Assignment Statements 
KEYWORDS: pointer assignment statement, array sections, pointer
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: L. R. Rolison, 120-LRR-7 (120.032)

HISTORY: 120-RRR-2A (120.087A)
                   Approved in ballot 92-182

-----------------------------------------------------------------------

NUMBER: 000038
TITLE: Same Interface Body in Multiple Generic Interface Blocks 
KEYWORDS: interface body, generic interface blocks, scoping unit
DEFECT TYPE: Interpretation
STATUS: X3J3 approved; ready for WG5

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

EDIT(S): None.

SUBMITTED BY: L. R. 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

--------------------------------------------------------------------------

NUMBER: 000039
TITLE: Association of a Pointer Actual Argument with a Dummy Argument 
KEYWORDS: pointer, actual argument, dummy argument, argument association
DEFECT TYPE: Interpretation
STATUS: X3J3 draft response

QUESTION: When a pointer is passed as an actual argument, is the intent 
of the standard as follows:  Dereferencing of the pointer is dependent 
on the interface of the called procedure. That is, if the dummy argument 
is known to be a pointer (with matching type, etc.)  then the pointer 
actual argument is NOT dereferenced - the pointer itself is passed. 
Conversely, if the dummy argument is unknown or is known to not be a 
pointer then the pointer dummy argument is dereferenced so that its 
target is passed (possibly through a temporary)?  If yes, please quote 
the text that specifies the meaning of passing a pointer as an actual 
argument.

ANSWER: Section 5.1.2.4.3 indicates that a pointer actual argument may 
be associated with either a pointer dummy argument or a nonpointer 
dummy argument.  The semantics of a pointer actual argument associated 
with a pointer dummy argument are specified in section 12.4.1.1.  When a 
pointer actual argument is associated with a nonpointer dummy argument, 

