Commit f36a7f04 by Paul Thomas

re PR fortran/82814 (ICE from submodule character function)

2017-11-23  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/82814
	* trans-types.c (gfc_sym_type): If a character function result
	is missing the charlen backend_decl, use the one from the name-
	space procedure symbol, if present.

2017-11-23  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/82814
	* gfortran.dg/submodule_31.f08: New test.

From-SVN: r255094
parent d7a160a4
2017-11-23 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82814
* trans-types.c (gfc_sym_type): If a character function result
is missing the charlen backend_decl, use the one from the name-
space procedure symbol, if present.
2017-11-22 David Malcolm <dmalcolm@redhat.com>
PR c++/62170
......
......@@ -2201,6 +2201,12 @@ gfc_sym_type (gfc_symbol * sym)
if (sym->backend_decl && !sym->attr.function)
return TREE_TYPE (sym->backend_decl);
if (sym->attr.result
&& sym->ts.type == BT_CHARACTER
&& sym->ts.u.cl->backend_decl == NULL_TREE
&& sym->ns->proc_name->ts.u.cl->backend_decl != NULL_TREE)
sym->ts.u.cl->backend_decl = sym->ns->proc_name->ts.u.cl->backend_decl;
if (sym->ts.type == BT_CHARACTER
&& ((sym->attr.function && sym->attr.is_bind_c)
|| (sym->attr.result
......
2017-11-23 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82814
* gfortran.dg/submodule_31.f08: New test.
2017-11-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/23094
......
! { dg-do run }
!
! Test the fix for PR82814 in which an ICE occurred for the submodule allocation.
!
! Contributed by "Werner Blokbuster" <werner.blokbuster@gmail.com>
!
module u
implicit none
interface unique
module function uniq_char(input) result(uniq)
character(*), intent(in) :: input(:)
character(size(input)), allocatable :: uniq(:)
end function uniq_char
end interface unique
contains
module function uniq2(input) result(uniq)
character(*), intent(in) :: input(:)
character(size(input)), allocatable :: uniq(:)
allocate(uniq(1))
uniq = 'A'
end function uniq2
end module u
submodule (u) z
implicit none
contains
module function uniq_char(input) result(uniq)
character(*), intent(in) :: input(:)
character(size(input)), allocatable :: uniq(:)
allocate(uniq(1)) ! This used to ICE
uniq = 'A'
end function uniq_char
end submodule z
program test_uniq
use u
implicit none
character(1), dimension(4) :: chr = ['1','2','1','2']
write(*,*) unique(chr)
write(*,*) uniq2(chr)
end program test_uniq
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment