re PR fortran/45586 (ICE non-trivial conversion at assignment)

2011-07-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45586
        * trans-types.c (gfc_get_derived_type): Ensure that pointer
        component types are marked as nonrestricted.

2011-07-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45586
        * gfortran.dg/lto/pr45586-2_0.f90: New.

From-SVN: r176852
This commit is contained in:
Tobias Burnus 2011-07-28 00:33:00 +02:00 committed by Tobias Burnus
parent fa8a398ea9
commit 4bfd470b85
4 changed files with 48 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2011-07-27 Tobias Burnus <burnus@net-b.de>
PR fortran/45586
* trans-types.c (gfc_get_derived_type): Ensure that pointer
component types are marked as nonrestricted.
2011-07-27 Daniel Carrera <dcarrera@gmail.com>
PR fortran/49755

View File

@ -2421,6 +2421,9 @@ gfc_get_derived_type (gfc_symbol * derived)
&& !c->attr.proc_pointer)
field_type = build_pointer_type (field_type);
if (c->attr.pointer)
field_type = gfc_nonrestricted_type (field_type);
/* vtype fields can point to different types to the base type. */
if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.vtype)
field_type = build_pointer_type_for_mode (TREE_TYPE (field_type),

View File

@ -1,3 +1,8 @@
2011-07-27 Tobias Burnus <burnus@net-b.de>
PR fortran/45586
* gfortran.dg/lto/pr45586-2_0.f90: New.
2011-07-27 Aldy Hernandez <aldyh@redhat.com>
PR middle-end/49875

View File

@ -0,0 +1,34 @@
! { dg-lto-do link }
!
! PR fortran/45586 (comment 53)
!
MODULE M1
INTEGER, PARAMETER :: dp=8
TYPE realspace_grid_type
REAL(KIND=dp), DIMENSION ( :, :, : ), ALLOCATABLE :: r
END TYPE realspace_grid_type
TYPE realspace_grid_p_type
TYPE(realspace_grid_type), POINTER :: rs_grid
END TYPE realspace_grid_p_type
TYPE realspaces_grid_p_type
TYPE(realspace_grid_p_type), DIMENSION(:), POINTER :: rs
END TYPE realspaces_grid_p_type
END MODULE
MODULE M2
USE M1
CONTAINS
SUBROUTINE S1()
INTEGER :: i,j
TYPE(realspaces_grid_p_type), DIMENSION(:), POINTER :: rs_gauge
REAL(dp), DIMENSION(:, :, :), POINTER :: y
y=>rs_gauge(i)%rs(j)%rs_grid%r
END SUBROUTINE
END MODULE
USE M2
CALL S1()
END
! { dg-final { cleanup-modules "m1 m2" } }