aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-07-28 00:33:00 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2011-07-28 00:33:00 +0200
commit4bfd470b854a067ba8b391b755ff5b12cd3a86ee (patch)
treed3f39e5b8327605b3d5e3c4f21ad48b4d1bdd185
parentfa8a398ea90c5e990dfdec7218c09766e70216ba (diff)
downloadgcc-4bfd470b854a067ba8b391b755ff5b12cd3a86ee.zip
gcc-4bfd470b854a067ba8b391b755ff5b12cd3a86ee.tar.gz
gcc-4bfd470b854a067ba8b391b755ff5b12cd3a86ee.tar.bz2
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
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-types.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/lto/pr45586-2_0.f9034
4 files changed, 48 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a2614a0..275285e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index b66941f..bec2a11 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -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),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b4f95b5..485057f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/lto/pr45586-2_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr45586-2_0.f90
new file mode 100644
index 0000000..52e2bb1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/lto/pr45586-2_0.f90
@@ -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" } }