[Bug fortran/92785] New: expressions passed as real arguments to a dummy polymorphic argument fail with indexing error
urbanjost at comcast dot net
gcc-bugzilla@gcc.gnu.org
Wed Dec 4 03:28:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92785
Bug ID: 92785
Summary: expressions passed as real arguments to a dummy
polymorphic argument fail with indexing error
Product: gcc
Version: 9.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: urbanjost at comcast dot net
Target Milestone: ---
I thought this was a duplicate of Bug 84074 at first. I could not
find a way to tell when a fix is applied to a release and GNU Fortran
(Ubuntu 9.2.1-17ubuntu1~18.04.1) 9.2.1 20191102 seems to have come out
after the fix for 84074 was applied?
Is there a field somewhere I am missing that would tell at what release
a fix becomes available?
Anyway, I took the code from Bug 84074 and compiled it and it ran OK
so I now assume this is a similar but distinct bug:
TEST PROGRAM
program tst
use iso_fortran_env, only : compiler_version, compiler_options
implicit none
integer :: i
integer :: ibad=0
integer :: iarr(10)=[(i*10,i=1,size(iarr))]
character(len=:),allocatable :: line
character(len=*),parameter :: expected= '10 20 30 40 50 60 70 80 90 100'
print '(4a)', &
'This file was compiled by ', compiler_version(), &
' using the options ', compiler_options()
call write_row('iarr ',iarr) ! pass in the array, OK
call write_row('iarr+0 ',iarr+0) ! pass in an expression,
SHIFTED(?)
call write_row('-iarr ',-iarr) ! pass in an expression,
SHIFTED(?)
call write_row('iarr(::1) ',iarr(::1))
call write_row('[iarr(::1)] ',[iarr(::1)])
call write_row('[(i*10,i=1,size(iarr))]',[(i*10,i=1,size(iarr))])
call write_row('10*[(i,i=1,size(iarr))]',10*[(i,i=1,size(iarr))])
if(ibad.gt.0)stop 'FAILED'
contains
subroutine write_scalar(g1)
class(*) :: g1
character(len=20) :: word
select type(g1)
type is (integer)
write(word,'(i0)') g1
line=line//trim(word)//' '
end select
end subroutine write_scalar
subroutine write_row(string,array )
character(len=*) :: string
class(*) :: array(:)
integer :: i
line=''
do i = 1,size(array)
call write_scalar( array(i) )
enddo
if(expected.eq.line)then
write(*,*)string,':GOOD'
else
write(*,*)string,':BAD. EXPECTED [',expected,'] got
[',trim(line),']'
ibad=ibad+1
endif
end subroutine write_row
end program tst
OUTPUTS
GIVES BAD ANSWERS WITHOUT BOUNDS CHECK
This file was compiled by GCC version 9.2.1 20191102 using the options
-mtune=generic -march=x86-64 -Wall -Wextra -fno-strict-aliasing -fwrapv
iarr :GOOD
iarr+0 :BAD. EXPECTED [10 20 30 40 50 60 70 80 90 100] got
[20 30 40 50 60 70 80 90 100 335544320]
-iarr :BAD. EXPECTED [10 20 30 40 50 60 70 80 90 100] got
[-20 -30 -40 -50 -60 -70 -80 -90 -100 335544320]
iarr(::1) :GOOD
[iarr(::1)] :BAD. EXPECTED [10 20 30 40 50 60 70 80 90 100] got
[20 30 40 50 60 70 80 90 100 8064]
[(i*10,i=1,size(iarr))]:GOOD
10*[(i,i=1,size(iarr))]:GOOD
This file was compiled by GCC version 9.2.1 20191102 using the options
-mtune=generic -march=x86-64 -g0 -Wall -Wextra -fbacktrace -fno-strict-aliasing
-fwrapv -fbounds-check
iarr :GOOD
STOP FAILED
FAILS WITH BOUNDS CHECK
At line 36 of file xx.f90
Fortran runtime error: Index '10' of dimension 1 of array 'array%_data'
above upper bound of 9
Error termination. Backtrace:
#0 0x7fab5f57f74a
#1 0x7fab5f580235
#2 0x7fab5f580712
#3 0x7fab5fe0190d
#4 0x7fab5fe00f58
#5 0x7fab5fe01f40
#6 0x7fab5f181b96
#7 0x7fab5fe00b29
#8 0xffffffffffffffff
More information about the Gcc-bugs
mailing list