Commit 1f8dd420 by Andre Vehreschild

re PR fortran/70842 (internal compiler error with character members within a polymorphic pointer)

gcc/testsuite/ChangeLog:

2016-07-14  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70842
	* gfortran.dg/select_type_35.f03: New test.

gcc/fortran/ChangeLog:

2016-07-14  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70842
	* simplify.c (gfc_simplify_len): Only for unlimited polymorphic
	types replace the expression's _data ref with a _len ref.

From-SVN: r238347
parent aefae0f1
2016-07-14 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70842
* simplify.c (gfc_simplify_len): Only for unlimited polymorphic
types replace the expression's _data ref with a _len ref.
2016-07-09 Thomas Koenig <tkoenig@gcc.gnu.org> 2016-07-09 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/71783 PR fortran/71783
......
...@@ -3816,8 +3816,12 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind) ...@@ -3816,8 +3816,12 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind)
} }
else if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_CHARACTER else if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_CHARACTER
&& e->symtree->n.sym && e->symtree->n.sym
&& e->symtree->n.sym->ts.type != BT_DERIVED
&& e->symtree->n.sym->assoc && e->symtree->n.sym->assoc->target && e->symtree->n.sym->assoc && e->symtree->n.sym->assoc->target
&& e->symtree->n.sym->assoc->target->ts.type == BT_DERIVED) && e->symtree->n.sym->assoc->target->ts.type == BT_DERIVED
&& e->symtree->n.sym->assoc->target->symtree->n.sym
&& UNLIMITED_POLY (e->symtree->n.sym->assoc->target->symtree->n.sym))
/* The expression in assoc->target points to a ref to the _data component /* The expression in assoc->target points to a ref to the _data component
of the unlimited polymorphic entity. To get the _len component the last of the unlimited polymorphic entity. To get the _len component the last
_data ref needs to be stripped and a ref to the _len component added. */ _data ref needs to be stripped and a ref to the _len component added. */
......
2016-07-14 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70842
* gfortran.dg/select_type_35.f03: New test.
2016-07-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2016-07-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/65951 PR target/65951
......
! { dg-do run }
!
! Contributed by Nathanael Huebbe
! Check fix for PR/70842
program foo
TYPE, ABSTRACT :: t_Intermediate
END TYPE t_Intermediate
type, extends(t_Intermediate) :: t_Foo
character(:), allocatable :: string
end type t_Foo
class(t_Foo), allocatable :: obj
allocate(obj)
obj%string = "blabarfoo"
call bar(obj)
deallocate(obj)
contains
subroutine bar(me)
class(t_Intermediate), target :: me
class(*), pointer :: alias
select type(me)
type is(t_Foo)
if (len(me%string) /= 9) call abort()
end select
alias => me
select type(alias)
type is(t_Foo)
if (len(alias%string) /= 9) call abort()
end select
end subroutine bar
end program foo
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