From d6a7a3be7489a8a89f352cc787fa6dbbe73ba85a Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Fri, 13 Apr 2007 16:01:36 +0000 Subject: re PR fortran/31550 (f951: segfault in fold-const.c:1963) 2007-04-13 Paul Thomas PR fortran/31550 * trans-types.c (copy_dt_decls_ifequal): Do not get pointer derived type components. 2007-04-13 Paul Thomas PR fortran/31550 * gfortran.dg/used_types_16.f90: New test. From-SVN: r123791 --- gcc/fortran/ChangeLog | 6 ++++ gcc/fortran/trans-types.c | 2 +- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gfortran.dg/used_types_16.f90 | 51 +++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/used_types_16.f90 (limited to 'gcc') 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 + + PR fortran/31550 + * trans-types.c (copy_dt_decls_ifequal): Do not get pointer + derived type components. + 2007-04-13 Tobias Schlüter 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 + + PR fortran/31550 + * gfortran.dg/used_types_16.f90: New test. + 2007-04-13 Tobias Schlüter 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 +! +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" } } -- cgit v1.1