aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2007-04-13 16:01:36 +0000
committerPaul Thomas <pault@gcc.gnu.org>2007-04-13 16:01:36 +0000
commitd6a7a3be7489a8a89f352cc787fa6dbbe73ba85a (patch)
tree7a40dd5e9cd1696ff750cbbedd9e56dddec6c1b1 /gcc
parent0615f92345112bf405492e83c49273f4956e6df2 (diff)
downloadgcc-d6a7a3be7489a8a89f352cc787fa6dbbe73ba85a.zip
gcc-d6a7a3be7489a8a89f352cc787fa6dbbe73ba85a.tar.gz
gcc-d6a7a3be7489a8a89f352cc787fa6dbbe73ba85a.tar.bz2
re PR fortran/31550 (f951: segfault in fold-const.c:1963)
2007-04-13 Paul Thomas <pault@gcc.gnu.org> PR fortran/31550 * trans-types.c (copy_dt_decls_ifequal): Do not get pointer derived type components. 2007-04-13 Paul Thomas <pault@gcc.gnu.org> PR fortran/31550 * gfortran.dg/used_types_16.f90: New test. From-SVN: r123791
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-types.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/used_types_16.f9051
4 files changed, 63 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3079268..df60120 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-13 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31550
+ * trans-types.c (copy_dt_decls_ifequal): Do not get pointer
+ derived type components.
+
2007-04-13 Tobias Schlüter <tobi@gcc.gnu.org>
PR fortran/18937
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 24a3f3c..1462f33 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -1446,7 +1446,7 @@ copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to)
for (; to_cm; to_cm = to_cm->next, from_cm = from_cm->next)
{
to_cm->backend_decl = from_cm->backend_decl;
- if (from_cm->ts.type == BT_DERIVED)
+ if (!from_cm->pointer && from_cm->ts.type == BT_DERIVED)
gfc_get_derived_type (to_cm->ts.derived);
else if (from_cm->ts.type == BT_CHARACTER)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a22295a..04007bc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-13 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31550
+ * gfortran.dg/used_types_16.f90: New test.
+
2007-04-13 Tobias Schlüter <tobi@gcc.gnu.org>
PR fortran/18937
diff --git a/gcc/testsuite/gfortran.dg/used_types_16.f90 b/gcc/testsuite/gfortran.dg/used_types_16.f90
new file mode 100644
index 0000000..b1ad779
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/used_types_16.f90
@@ -0,0 +1,51 @@
+! { dg-do compile }
+! Tests the fix for PR31550 in which pointers to derived type components
+! were being TREE-SSA declared in the wrong order and so in the incorrect
+! context.
+!
+! Contributed by Daniel Franke <dfranke@gcc.gnu.org>
+!
+MODULE class_dummy_atom_types
+TYPE :: dummy_atom_list
+ TYPE(dummy_atom), DIMENSION(:), POINTER :: table
+ INTEGER :: nused
+END TYPE
+
+TYPE :: dummy_atom
+ TYPE(dummy_atom_private), POINTER :: p
+END TYPE
+
+TYPE :: dummy_atom_private
+ TYPE(dummy_atom_list) :: neighbours
+END TYPE
+END MODULE
+
+MODULE class_dummy_atom_list
+USE class_dummy_atom_types, ONLY: dummy_atom_list
+
+INTERFACE
+ SUBROUTINE dummy_atom_list_init_copy(this, other)
+ USE class_dummy_atom_types, ONLY: dummy_atom_list
+ TYPE(dummy_atom_list), INTENT(out) :: this
+ TYPE(dummy_atom_list), INTENT(in) :: other
+ END SUBROUTINE
+END INTERFACE
+
+INTERFACE
+ SUBROUTINE dummy_atom_list_merge(this, other)
+ USE class_dummy_atom_types, ONLY: dummy_atom_list
+ TYPE(dummy_atom_list), INTENT(inout) :: this
+ TYPE(dummy_atom_list), INTENT(in) :: other
+ END SUBROUTINE
+END INTERFACE
+END MODULE
+
+SUBROUTINE dummy_atom_list_init_copy(this, other)
+ USE class_dummy_atom_list, ONLY: dummy_atom_list, dummy_atom_list_merge
+
+ TYPE(dummy_atom_list), INTENT(out) :: this
+ TYPE(dummy_atom_list), INTENT(in) :: other
+
+ this%table(1:this%nused) = other%table(1:other%nused)
+END SUBROUTINE
+! { dg-final { cleanup-modules "class_dummy_atom_types class_dummy_atom_list" } }