Thanks for the interesting test case. I can reproduce the problem and have escalated it as issue DPD200238279. I will update this thread with any progress.
allocatable array assignment error
The guys at the comp.lang.fortran (CLF) newsgroup think this is a compiler bug. They provided a much simpler program that displays the same error:
program main
implicit none
real, allocatable:: a(:,:)
real, allocatable :: a2(:)
allocate(a(5,6))
a =10.0
a2 = 1.0 * a(2,:)
print "('shape of ',A,T30,*(I2,:,','))", &
'a(2,:))', shape(a(2,:))
print "('shape of ',A,T30,*(I2,:,','))", &
'1.0 * a(2,:)', shape(1.0 * a(2,:))
print "('shape of ',A,T30,*(I2,:,','))", &
'a2', shape(a2)
print *, a2(6)
end program main
>ifort /check:all /warn:all /standard-semantics "2012-11-08 danielh.f90" && "2012-11-08 danielh.exe" Intel(R) Visual Fortran Compiler XE for applications running on IA-32, Version 13.0.1.119 Build 20121008 ... shape of a(2,:)) 6 shape of 1.0 * a(2,:) 6 shape of a2 1 forrtl: severe (408): fort: (2): Subscript #1 of the array A2 has value 6 which is greater than the upper bound of 1
I have no doubt it's a compiler bug. Thanks for the simpler example.
We have a fix for this, but it's fairly complex and it will have to wait for a major release later this year. The problem occurs when you have an assignment of the form:
A = B(:,:,3,:) + 1
where the subscripts of B are colons except for one that is a scalar, and the array section is combined with an arithmetic operator. In this case, the shape of the section is not properly computed for the purpose of the automatic reallocation of the left side.
A workaround is to split the operation in two, such as:
A = B(:,3,:,:)
A = A + 1
We have confirmed that our fix handles both test programs, and appreciate your bringing this to our attention. We're somewhat astonished that this hasn't been reported before - the bug has been there for many years.
Steve,
Would
A = (B(:,:,3,:)) + 1
work as well?
Jim Dempsey
Blog: The Parallel Void
www.quickthreadprogramming.comAs far as I know, no, that would not work.




allocatable array assignment error
Hi
the following program displays behavior that I don't understand.
Compile with bounds checking, allowing for Fortran 2003 reallocation of allocatable arrays on assignment, e.g.:
Output is:
5 5 5 10
5 1 5 5
forrtl: severe (408): fort: (2): Subscript #2 of the array A2 has value 2 which is greater than the upper bound of 1
Traceback indicates the line containing print*, a2(1,2,3,4) as the source of the violation.
If you set case=1 or case=3, I get the expected output:
5 5 5 10
5 5 5 10
10.00000
*The question*: Why do I get the error in case=2 ?
*More information*: Not allowing for the Fortran 2003 reallocation on assignment yields the expected results in all cases. Turning off bounds checking yields somewhat strangely:
5 5 5 10
5 1 5 10
10.00000
Thanks in advance!
Daniel
PS: I am using Intel composer_xe_2013.0.079 on Ubuntu 12.04