+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>
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
--- /dev/null
+! {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