From RAH@vz.cis.umn.edu Wed Jan 11 02:26:14 1995
Received: from vz.cis.umn.edu by dkuug.dk with SMTP id AA09574
  (5.65c8/IDA-1.4.4j for <SC22WG5@dkuug.dk>); Wed, 11 Jan 1995 14:25:47 +0100
Received: from vz.cis.umn.edu by vz.cis.umn.edu (PMDF #2574 ) id
 <01HLPM52ZWACB1218B@vz.cis.umn.edu>; Wed, 11 Jan 1995 07:26:14 CDT
Date: 11 Jan 1995 07:26:14 -0500 (CDT)
From: Dick Hendrickson <RAH@vz.cis.umn.edu>
Subject: Re: (SC22WG5.670) informal ballot of 17 defect responces
To: SC22WG5@dkuug.dk
Message-Id: <01HLPM52ZWAEB1218B@vz.cis.umn.edu>
X-Envelope-To: SC22WG5@dkuug.dk
X-Vms-To: IN%"SC22WG5@dkuug.dk"
Mime-Version: 1.0
Content-Transfer-Encoding: 7BIT
X-Charset: ASCII
X-Char-Esc: 29

A couple of weeks ago Lawrie voted NO on defect item 100 and offered an
explanation for his vote.  Since I originally agreed with his opinion,
in fact the first version of the response that I wrote had a mathematical
"proof" that .TRUE. was the correct answer, I'll try to explain why I
changed my mind.

Basically I was convinced that obvious rules that apply to zero-sized
sections of an array are obviously wrong when applied to zero-sized
sections of different arrays.  Lawrie says:

The rule for all zero-sized objects is that they should behave as the obvious 
limiting case when one of the extents goes to zero. Behaviour should NOT be 
discontinuous. The proposed edits in 100 violate this rule."

Consider:

     REAL, TARGET :: A(10),B(10)
     POINTER C(:)

     C => A(I:5)
     print *, ASSOCIATED (C, B(I:5)

This will print .FALSE. for I <= 5 and .TRUE. isn't an "obvious limit"
when I becomes > 5.  You might argue that the "base address" is different 
for A and B; but, the standard doesn't define base addresses and there doesn't
seem to be a natural way to define them.  Consider:

     Parameter (N = some expression)
     common  D(10), E(N), F(N), G(10)
     
     C => E

Most people would think E and F always have different base addresses, after
all they are different arrays.  It's surprising to think that
ASSOCIATED (C, F) will be .TRUE. for N <= 0.         

It's as bad for sections of two dimensional arrays, consider:
     REAL, TARGET :: H(10,10)

     C => H(5, I:5)
     print *, ASSOCIATED (C, H(6,I:5))

Surprising to have this be .TRUE. for I > 5

The answer is that there isn't a good answer.  We had to pick something
and .FALSE. seems to be "correct" for lots of cases.

I don't know if this is what convinced most people at the meeting, but it's
what I remember of the discussions.

Dick
