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.".