From 1bf89755640faf3d9d3c319c8e503af83d46eb90 Mon Sep 17 00:00:00 2001 From: burnus Date: Sat, 21 Jan 2012 15:12:31 +0000 Subject: [PATCH] 2012-01-21 Tobias Burnus PR fortran/51913 * interface.c (compare_parameter): Fix CLASS comparison. 2012-01-21 Tobias Burnus PR fortran/51913 * gfortran.dg/class_47.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183368 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/interface.c | 6 ++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/class_47.f90 | 40 ++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/class_47.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 22828ef..bff42e5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2012-01-21 Tobias Burnus + + PR fortran/51913 + * interface.c (compare_parameter): Fix CLASS comparison. + 2012-01-20 Tobias Burnus Janus Weil diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 94f767d..9acd1fb 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1706,7 +1706,7 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, return 0; } - /* F2003, 12.5.2.5. */ + /* F2008, 12.5.2.5. */ if (formal->ts.type == BT_CLASS && (CLASS_DATA (formal)->attr.class_pointer || CLASS_DATA (formal)->attr.allocatable)) @@ -1718,8 +1718,8 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, formal->name, &actual->where); return 0; } - if (CLASS_DATA (actual)->ts.u.derived - != CLASS_DATA (formal)->ts.u.derived) + if (!gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived, + CLASS_DATA (formal)->ts.u.derived)) { if (where) gfc_error ("Actual argument to '%s' at %L must have the same " diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7d3d095..81597d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-21 Tobias Burnus + + PR fortran/51913 + * gfortran.dg/class_47.f90: New. + 2012-01-21 Eric Botcazou * gnat.dg/renaming5.ad[sb]: New test. diff --git a/gcc/testsuite/gfortran.dg/class_47.f90 b/gcc/testsuite/gfortran.dg/class_47.f90 new file mode 100644 index 0000000..90a7560 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_47.f90 @@ -0,0 +1,40 @@ +! { dg-do compile } +! +! PR fortran/51913 +! +! Contributed by Alexander Tismer +! +MODULE m_sparseMatrix + + implicit none + + type :: sparseMatrix_t + + end type sparseMatrix_t +END MODULE m_sparseMatrix + +!=============================================================================== +module m_subroutine +! USE m_sparseMatrix !< when uncommenting this line program works fine + + implicit none + + contains + subroutine test(matrix) + use m_sparseMatrix + class(sparseMatrix_t), pointer :: matrix + end subroutine +end module + +!=============================================================================== +PROGRAM main + use m_subroutine + USE m_sparseMatrix + implicit none + + CLASS(sparseMatrix_t), pointer :: sparseMatrix + + call test(sparseMatrix) +END PROGRAM + +! { dg-final { cleanup-modules "m_sparsematrix m_subroutine" } } -- 2.7.4