ICE on deferred-length, allocatable character variable function result
Rouson, Damian
rouson@sandia.gov
Tue Aug 9 02:18:00 GMT 2011
Comment 9 on Bug (45170
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45170) states that gfortran
does not yet support "function result variables which are
character(len=:), pointer". Presumably this also implies a lack ofsupport
for replacing these with allocatable, deferred-length character variables.
I'm adding the case below because it produces an ICE with gfortran 4.6.1.
This is a reduced case. In my intended application, the "speaker" type
is abstract with deferred "speak" procedure that implements an abstract
interface matching the actual "speak" procedure below:
$ cat speaker.F90
module speaker_class
type speaker
contains
procedure :: speak
end type
contains
function speak(this)
class(speaker) ,intent(in) :: this
character(:) ,allocatable :: speak
end function
subroutine say_something(somebody)
class(speaker) :: somebody
print *,somebody%speak()
end subroutine
end module
$ gfortran -c speaker.F90
speaker.F90: In function 'say_something':
speaker.F90:13:0: internal compiler error: in fold_convert_loc, at
fold-const.c:1906
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
$ gfortran --version
GNU Fortran (GCC) 4.6.1 20110325 (prerelease)
Copyright (C) 2011 Free Software Foundation, Inc.
GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING
More information about the Fortran
mailing list