ICE on PR20541 - allocatable components of derived types (TR15581)

Salvatore Filippone salvatore.filippone@uniroma2.it
Mon Jul 17 09:36:00 GMT 2006


1st ICE example attached (probably not minimal, but manageable)

[sfilippo@localhost ALLOCATABLE]$ gfortran -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../gcc-4.2-20060715/configure --prefix=/usr/local/gcc42
Thread model: posix
gcc version 4.2.0 20060715 (experimental)
[sfilippo@localhost ALLOCATABLE]$ gfortran -O -c test_ab_1.f90 
test_ab_1.f90: In function 'test_ab_1':
test_ab_1.f90:39: internal compiler error: in
gfc_conv_descriptor_data_get, at fortran/trans-array.c:148
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

Regards
salvatore

-------------- next part --------------
subroutine test_ab_1(v_in,v_out)
  implicit none

  interface reallocv
    Subroutine reallocate1i(len,rrax,info,pad)
      
      ! ...Subroutine Arguments  
      Integer,Intent(in)                 :: len
      Integer,allocatable, intent(inout) :: rrax(:)
      integer         :: info
      integer, optional, intent(in) :: pad
    End Subroutine reallocate1i
  end interface


  !     ...parameter arrays....      
  integer              :: v_in(:)
  integer, allocatable :: v_out(:)
  !     ...local scalars...
  integer :: i,p_item,ret,j, info
  integer :: dim_v_out, dim

  !     ...external function...
  integer  :: find_item
  external :: find_item


  if (allocated(v_out)) then 
    dim_v_out=size(v_out)
  else
    allocate(v_out(1))
    v_out(1) = -1
    dim_v_out = 1
  endif
  i=1
  p_item=1
  do while (v_in(i).ne.-1)

    i=i+1
    do j=1,v_in(i)
      ret=find_item(v_out,p_item-2,v_in(i+j))
      if (ret.eq.-1) then
        v_out(p_item)=v_in(i+j)  
        v_out(p_item+1)=2             
        p_item=p_item+2              
        if (p_item.gt.dim_v_out) then
          dim_v_out=(3*size(v_out))/2+2
          write(0,*) 'calling realloc crea_v_out',dim
          call reallocv(dim_v_out,v_out,info)
        endif
      else
        v_out(ret+1)=v_out(ret+1)+1
      endif
    enddo
    i=i+2*v_in(i)+2
  enddo
  v_out(p_item)=-1

end subroutine test_ab_1


More information about the Fortran mailing list