Commit 48188959 by Paul Thomas

re PR fortran/65024 ([OOP] unlimited polymorphic pointer structure not built when it should be)

2015-03-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65024
	* trans-expr.c (gfc_conv_component_ref): If the component
	backend declaration is missing and the derived type symbol is
	available in the reference, call gfc_build_derived_type.

2015-03-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/65024
	* gfortran.dg/unlimited_polymorphic_23.f90: New test

From-SVN: r221334
parent 704c7904
2015-03-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65024
* trans-expr.c (gfc_conv_component_ref): If the component
backend declaration is missing and the derived type symbol is
available in the reference, call gfc_build_derived_type.
2015-03-10 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
Tobias Burnus <burnus@net-b.de>
......
......@@ -1930,10 +1930,12 @@ gfc_conv_component_ref (gfc_se * se, gfc_ref * ref)
c = ref->u.c.component;
gcc_assert (c->backend_decl);
if (c->backend_decl == NULL_TREE
&& ref->u.c.sym != NULL)
gfc_get_derived_type (ref->u.c.sym);
field = c->backend_decl;
gcc_assert (TREE_CODE (field) == FIELD_DECL);
gcc_assert (field && TREE_CODE (field) == FIELD_DECL);
decl = se->expr;
/* Components can correspond to fields of different containing
......
2015-03-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/65024
* gfortran.dg/unlimited_polymorphic_23.f90: New test
2015-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/65127
......
! {dg-do run }
!
! Test the fix for PR65024, in which the structure for the 'info'
! component of type 'T' was not being converted into TREE_SSA and
! so caused an ICE in trans-expr.c:gfc_conv_component_ref.
!
! Reported by <matt@gneilson.plus.com>
!
MODULE X
TYPE T
CLASS(*), pointer :: info
END TYPE
END MODULE
PROGRAM P
call bug
CONTAINS
SUBROUTINE BUG
USE X
CLASS(T), pointer :: e
integer, target :: i = 42
allocate(e)
e%info => NULL () ! used to ICE
if (.not.associated(e%info)) e%info => i ! used to ICE
select type (z => e%info)
type is (integer)
if (z .ne.i) call abort
end select
END SUBROUTINE
SUBROUTINE NEXT
USE X
CLASS (T), pointer :: e
END SUBROUTINE
END
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