Commit e75eb64f by Fritz Reese Committed by Steven G. Kargl

re PR fortran/71047 (Allocatable component of INTENT(OUT) dummy not set correctly)

2016-05-14  Fritz Reese <fritzoreese@gmail.com>

	PR fortran/71047
	* expr.c (gfc_default_initializer): Avoid extra component refs in
	constructors for derived types and classes.

2016-05-14  Fritz Reese <fritzoreese@gmail.com>
	PR fortran/71047
	* gfortran.dg/pr71047.f08: New test.

From-SVN: r236241
parent 3a65d8d7
2016-05-14 Fritz Reese <fritzoreese@gmail.com>
PR fortran/71047
* expr.c (gfc_default_initializer): Avoid extra component refs in
constructors for derived types and classes.
2016-05-11 Jakub Jelinek <jakub@redhat.com> 2016-05-11 Jakub Jelinek <jakub@redhat.com>
PR fortran/70855 PR fortran/70855
......
...@@ -3975,7 +3975,10 @@ gfc_default_initializer (gfc_typespec *ts) ...@@ -3975,7 +3975,10 @@ gfc_default_initializer (gfc_typespec *ts)
if (comp->initializer) if (comp->initializer)
{ {
ctor->n.component = comp; /* Save the component ref for STRUCTUREs and UNIONs. */
if (ts->u.derived->attr.flavor == FL_STRUCT
|| ts->u.derived->attr.flavor == FL_UNION)
ctor->n.component = comp;
ctor->expr = gfc_copy_expr (comp->initializer); ctor->expr = gfc_copy_expr (comp->initializer);
if ((comp->ts.type != comp->initializer->ts.type if ((comp->ts.type != comp->initializer->ts.type
|| comp->ts.kind != comp->initializer->ts.kind) || comp->ts.kind != comp->initializer->ts.kind)
......
2016-05-14 Fritz Reese <fritzoreese@gmail.com>
PR fortran/71047
* gfortran.dg/pr71047.f08: New test.
2016-05-13 Joseph Myers <joseph@codesourcery.com> 2016-05-13 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/qual-return-5.c, gcc.dg/qual-return-6.c: New tests. * gcc.dg/qual-return-5.c, gcc.dg/qual-return-6.c: New tests.
......
! { dg-do compile }
! { dg-options "-fdump-tree-original" }
!
! Fortran/PR71047
!
module m
implicit none
type, abstract :: c_abstr
integer :: i = 0
end type c_abstr
type, extends(c_abstr) :: t_a
class(c_abstr), allocatable :: f
end type t_a
type, extends(c_abstr) :: t_b
end type t_b
contains
subroutine set(y,x)
class(c_abstr), intent(in) :: x
type(t_a), intent(out) :: y
allocate( y%f , source=x )
end subroutine set
end module m
program p
use m
implicit none
type(t_a) :: res
type(t_b) :: var
call set( res , var )
write(*,*) res%i
end program p
!
! Check to ensure the vtable is actually initialized.
!
! { dg-final { scan-tree-dump "t_a\\.\\d+\\.f\\._vptr =" "original" } }
!
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