(j3.2006) a question on cobounds

Bill Long longb
Thu Jul 30 09:23:14 EDT 2009


I've put paper 09-275 on the server to address the technical defects 
Malcolm noted below.

Cheers,
Bill



Bill Long wrote:
> 
> 
> Malcolm Cohen wrote:
>>
>> Bill Long wrote:

>> C529 says
>>    "(R511) A <lower-cobound> or <upper-cobound> that is not a constant 
>> expression shall appear only in a subprogram, derived type definition, 
>> or interface body."
>>
>> My followup question is: how can a cobound appear in a derived type 
>> definition?  
> 
> A coarray component has to be allocatable and the declaration for an 
> allocatable coarray does not contain cobounds, so a cobound would not 
> appear in a derived type definition.  The ", derived type definition," 
> should be deleted from C529.
> 
> 
>>
>> My followup question 2 relates to the text you quoted, which says
>>    "If an explicit-coshape coarray has cobounds that are not constant 
>> expressions, the cobounds are determined at entry to the procedure ...".
>> Well, if the definition appears in an interface body or derived type 
>> definition, those are not procedures.  Therefore explicit-coshape 
>> coarrays are not allowed in interface bodies or derived type 
>> definitions (seeing as how the standard just got an internal error).  
>> That would seem to be a problem for nonallocatable dummy coarrays.
> 
> 
> I don't understand the argument regarding interfaces.  If the interface 
> body and the corresponding subroutine definition are to match and you 
> allow non-constant cobounds one place, they have to be allowed in the 
> other as well.  This parallels the case of an explicit-shape array in a 
> subroutine that has bounds specified by variables.  Certainly a 
> declaration like this is allowed in an interface body.
> 
> 
>>
>> My followup question 3 relates to the BLOCK construct; viz, this is 
>> not integrated into it.  The quoted text says that in
>>    SUBROUTINE s(n) ! Suppose N is equal to 100 on entry.
>>    ...
>>    n = 10
>>    BLOCK
>>      REAL,SAVE :: cob[n:*]
>>      cob[n] = 3 ! PROBLEM
>>
> 
> Indeed, BLOCK constructs allow local variable declarations just like 
> subroutines do. This needs to be fixed.
> 
> Cheers,
> Bill
> 
> 
> 
> 

-- 
Bill Long                                   longb at cray.com
Fortran Technical Support    &              voice: 651-605-9024
Bioinformatics Software Development         fax:   651-605-9142
Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120





More information about the J3 mailing list