re PR fortran/46937 (gfortran.dg/pointer_intent_1.f90 FAILs with -fno-inline)

2010-12-14  Tobias Burnus  <burnus@net-b.de>

        PR fortran/46937
        * trans-types.c (create_fn_spec): "."-annotate derived types
        with (proc-)pointer components.

2010-12-14  Tobias Burnus  <burnus@net-b.de>

        PR fortran/46937
        * gfortran.dg/pointer_intent_4.f90: New.

From-SVN: r167806
This commit is contained in:
Tobias Burnus 2010-12-14 18:09:33 +01:00 committed by Tobias Burnus
parent 55256000cf
commit 39752c6b14
4 changed files with 48 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-12-14 Tobias Burnus <burnus@net-b.de>
PR fortran/46937
* trans-types.c (create_fn_spec): "."-annotate derived types
with (proc-)pointer components.
2010-12-14 Jakub Jelinek <jakub@redhat.com>
PR fortran/46874

View File

@ -2325,7 +2325,13 @@ create_fn_spec (gfc_symbol *sym, tree fntype)
if (spec_len < sizeof (spec))
{
if (!f->sym || f->sym->attr.pointer || f->sym->attr.target
|| f->sym->attr.external || f->sym->attr.cray_pointer)
|| f->sym->attr.external || f->sym->attr.cray_pointer
|| (f->sym->ts.type == BT_DERIVED
&& (f->sym->ts.u.derived->attr.proc_pointer_comp
|| f->sym->ts.u.derived->attr.pointer_comp))
|| (f->sym->ts.type == BT_CLASS
&& (CLASS_DATA (f->sym)->ts.u.derived->attr.proc_pointer_comp
|| CLASS_DATA (f->sym)->ts.u.derived->attr.pointer_comp)))
spec[spec_len++] = '.';
else if (f->sym->attr.intent == INTENT_IN)
spec[spec_len++] = 'r';

View File

@ -1,3 +1,8 @@
2010-12-14 Tobias Burnus <burnus@net-b.de>
PR fortran/46937
* gfortran.dg/pointer_intent_4.f90: New.
2010-12-14 Jakub Jelinek <jakub@redhat.com>
PR debug/46885

View File

@ -0,0 +1,30 @@
! { dg-do run }
! { dg-options "-fno-inline" }
!
! PR fortran/46937
!
! Check that a non-pointer INTENT(IN) dummy
! with pointer component is properly treated
!
program test
type myT
integer, pointer :: point
end type myT
type(myT) :: t2
allocate(t2%point)
t2%point = 42
call nonpointer(t2)
if(t2%point /= 7) call abort()
t2%point = 42
call nonpointer2(t2)
if(t2%point /= 66) call abort()
contains
subroutine nonpointer(t)
type(myT), intent(in) :: t
t%point = 7
end subroutine nonpointer
subroutine nonpointer2(t)
class(myT), intent(in) :: t
t%point = 66
end subroutine nonpointer2
end program