allocate with mold

Brad Finney brad.finney@humboldt.edu
Tue Aug 23 16:01:00 GMT 2016



On 08/23/2016 02:17 AM, Andre Vehreschild wrote:
> Hi all,
>
> let me add my knowledge to this, because I have added the Fortran 2003
> feature of taking the array specification from the source=/mold=
> expression instead of having to give an explicit array specification:
>
> - the feature was added during the for this necessary rework of the
>   ALLOCATE() routines in the compiler, which was done for the
>   gcc-6-branch,
>
> - porting it back to gcc-5 is not feasible without porting back a major
>   part of the code, which would render the gcc-5 release identical to
>   the gcc-6 release.
>
> Therefore, IMO is this just not supported in gcc-5 and will not be. If
> you need this feature, you will have to take all the benefits of a
> gcc-6-series compiler.
>
> Regards,
> 	Andre
>
> On Mon, 22 Aug 2016 22:32:45 -0700
> Damian Rouson <damian@sourceryinstitute.org> wrote:
>
>>
>> I have confirmed that the reported behavior exists in gfortran 5.4.0
>> based on the following simplified version of the submitted code:
>>
>> integer, allocatable :: b(:)
>> allocate(b,mold=[1])
>> end
>>
>> whereas gfortran 6.1.0 compiles the above code without error. I guess
>> the only question is whether this feature can be ported back to the
>> GCC 5 branch.  I see no mention of "mold=“ in the GCC 5 series
>> release notes at https://gcc.gnu.org/gcc-5/changes.html.
>>
>> Damian
>>
>>
>> On August 22, 2016 at 11:28:18 AM, B Finney
>> (brad.finney@humboldt.edu(mailto:brad.finney@humboldt.edu)) wrote:
>>
>>> My understanding (likely wrong) is that the mold= attribute for
>>> allocate was available in gfortran from (at least) 5.1. The
>>> following program complied with gfortran version 5.3
>>>
>>> gcc version 5.3.1 20160301 [gcc-5-branch revision 233849] (SUSE
>>> Linux)
>>>
>>> results in an error that suggests mold isn't working?
>>>
>>> program allocate_array
>>> implicit none
>>> integer, dimension(3,2)::a
>>> integer, dimension(:,:),allocatable::b
>>> a=reshape([1,3,5,2,4,6],[3,2])
>>> allocate(b,mold=a)
>>> b=a
>>> end program allocate_array
>>>
>>> allocatearray2.f90:6:11:
>>>
>>> allocate(b,mold=a)
>>> 1
>>> Error: Array specification required in ALLOCATE statement at (1)
>>
>
>

Thanks everybody for your replies.  My belief that mold= was implemented 
in version 5.x was from the chart at
http://fortranwiki.org/fortran/show/Fortran+2008+status
which lists the feature in version 5.2.  Clearly the chart is wrong.



More information about the Fortran mailing list