http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51652

             Bug #: 51652
           Summary: [F03] ICE with allocatable scalars
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: davidgkinnibu...@yahoo.co.uk


module settings

type keyword
!  character(60), allocatable :: c(:)   ! works but should it?
!  character(80), allocatable :: c(:)   ! works
   character(:), allocatable :: c(:)
end type keyword

type(keyword) :: kw(10)

contains

subroutine save_kw

!allocate(kw(1)%c(10))
allocate(character(80) :: kw(1)%c(10))

kw(1)%c(1) = 'abcd'

if (kw(1)%c(1).eq.'abcd') then  ! problem here
   print *, 'yes'
else
   print *, 'no'
endif

end subroutine save_kw

end module settings

!*************************************************************************

program ice
use settings

call save_kw

end program ice


gcc version 4.7.0 20111212 (experimental) [trunk revision 182257] (GCC)

=========================================================================
f951.exe: internal compiler error: in gfc_get_derived_type, at
fortran/trans-types.c:2401

I'm also interested in testing substrings like

if (kw(1)%c(1)(1:1).eq.'a') then ...

The above program works ok with non-deferred scalar lengths. However, it also
works when the component is assigned different lengths in the subroutine and
main body (e.g. 60 and 80) whereas Intel Fortran reports this as an error: "In
an ALLOCATE statement the type parameter values in type specification must be
the same as a corresponding nondeferred values of the objects being
allocated.".

Reply via email to