From jwagener@trc.amoco.com Wed Dec  9 07:45:43 1992
Received: from noc.msc.edu by dkuug.dk with SMTP id AA21702
  (5.65c8/IDA-1.4.4j for <SC22WG5@dkuug.dk>); Wed, 9 Dec 1992 20:46:19 +0100
Received: from uc.msc.edu by noc.msc.edu (5.65/MSC/v3.0.1(920324))
	id AA02759; Wed, 9 Dec 92 13:46:09 -0600
Received: from [149.180.11.2] by uc.msc.edu (5.65/MSC/v3.0z(901212))
	id AA15551; Wed, 9 Dec 92 13:45:59 -0600
Received: from trc.amoco.com (apctrc.trc.amoco.com) by netserv2 (4.1/SMI-4.0)
	id AA28339; Wed, 9 Dec 92 13:45:52 CST
Received: from crmac1 by trc.amoco.com (4.1/SMI-4.1)
	id AA17967; Wed, 9 Dec 92 13:45:44 CST
Date: Wed, 9 Dec 92 13:45:43 CST
Message-Id: <9212091945.AA17967@trc.amoco.com>
From: Jerrold L. Wagener <jwagener@trc.amoco.com>
To: SC22WG5@dkuug.dk
Subject: S20.123, items 0-30
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                                           2
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 Continuation  3
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                  2
000024 IMPLICIT NONE and the Type of an Internal Procedure Result         3
000025 Resolution of Internal Procedure References                        3
000026 Bounds of Array Expressions                                        2
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                        2
000052 Expressions in Statement Function Definitions                      2
000053 Optional Intrinsic Function Arguments                              2
000054 Resolving Generic Procedure References                             2
000055 Characteristics of character function results                      2
000056 TRANSFER intrinsic function description                            2
000057 Prohibition against multiple explicit specific interfaces          2
000058 Ambiguous use of "keyword"                                         1
000059 SEQUENCE derived type and component bounds                         3
000060 Statement function argument references                             2
000061 G edit descriptor with "d" = 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 attribute                        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 ";" 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 "X3J3 draft response".

   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 "X3J3 consideration in  
   progress".

   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 "WG5 approved; ready for
   SC22".

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): (section numbers to be added to each item)

   1. xvi/1-2 Delete the sentence "The section concludes ... names."

   2. 15/25 Change "of" to "or".

   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 both section 
1.4 of ANSI X3.9-1978 and section C.11.1 of  ISO/IEC 1539:1991. 
Specifically, section 1.4, item (1), of ISO/IEC 1539:1991 states:

     A processor conforms to this International Standard if: 
(1) It executes any standard-conforming  program in a manner that fulfills
     the interpretations prescribed herein, subject to any limits that the  
     processor may impose on the size and complexity of the program.

If, as in the example provided, the processor supplies a PROGRAM 
statement with a symbolic name that conflicts with 
another global name in the program such that the program fails to 
execute, then the processor does not conform to the standard. The 
processor may supply a default name which does not conflict with another 
global name and be standard conforming.

REFERENCES: ISO/IEC 1539:1991 (E) 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 both 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:

      "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]...'."

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

   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: 119-JTM-2
         119-RPK-1
         X3J3/92-044               S20.120, number 4
         X3J3/92-075
         X3J3/92-145               Draft Interpretation by CIO, withdrawn
         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: 

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)
	revised in response to ballot comments at meeting 123, 
	but no vote taken - withheld for further consideration

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

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

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 implicit mapping currently in effect for a scoping unit is affected by 
all IMPLICIT statements in the scoping unit even those appearing subsequent 
to PARAMETER statements. A subsequent IMPLICIT statement may specify the 
type of a named constant appearing in a PARAMETER statement, but in that 
case, it must confirm the type of the named constant.

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
	X3J3/92-172, as modified, passed at meeting 122

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

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.
Thus "CALL Q" in the subroutine is legal.

Discussion:
In section 11.3.2 [158:15-16], the standard states that a local name in
the rename list is a "local name for the entity"  which is intended to mean 
that a new entity is not created.

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

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 draft response

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: 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 implicit mapping currently in effect for a scoping unit is affected by 
all IMPLICIT statements in the scoping unit even those appearing subsequent 
to PARAMETER statements. A subsequent IMPLICIT statement may specify the 
type of a named constant appearing in a PARAMETER statement, but in that 
case, it must confirm the type of the named constant.

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 draft response

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) F
        F
        T

 (a) Each lower bound is 1, and each upper bound is the size of the
     corresponding dimension of the array section.
 (b) The declared bounds of the whole array.
 (c) Each lower bound is the declared lower bound of the assumed
     shape 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 
		(unanimous consent)

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 (unanimous consent)

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

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

if the entities in 14.1.2 class 1 are divided into two categories and, at
the same time, "generic identifiers" is replaced 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:

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

 2. defined operators

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 the first 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, 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. In the last sentence of the next to last section of the Foreword, 
      entitled "Program Units", 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)

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

