diff options
author | Tobias Burnus <burnus@net-b.de> | 2012-01-21 16:12:31 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2012-01-21 16:12:31 +0100 |
commit | 076ec830bf9d00dfa216beb88fb7d58650fbfbc1 (patch) | |
tree | 6ac4f2d46cd98cc29351bdc7d83dbe13811f7a2c /gcc | |
parent | 7eeb2aa717484ca0055e2274f50a49bc9565d1eb (diff) | |
download | gcc-076ec830bf9d00dfa216beb88fb7d58650fbfbc1.zip gcc-076ec830bf9d00dfa216beb88fb7d58650fbfbc1.tar.gz gcc-076ec830bf9d00dfa216beb88fb7d58650fbfbc1.tar.bz2 |
re PR fortran/51913 ([OOP] bug when submitting a class pointer to a subroutine)
2012-01-21 Tobias Burnus <burnus@net-b.de>
PR fortran/51913
* interface.c (compare_parameter): Fix CLASS comparison.
2012-01-21 Tobias Burnus <burnus@net-b.de>
PR fortran/51913
* gfortran.dg/class_47.f90: New.
From-SVN: r183368
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_47.f90 | 40 |
4 files changed, 53 insertions, 3 deletions
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 <burnus@net-b.de> + + PR fortran/51913 + * interface.c (compare_parameter): Fix CLASS comparison. + 2012-01-20 Tobias Burnus <burnus@net-b.de> Janus Weil <janus@gcc.gnu.org> 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 <burnus@net-b.de> + + PR fortran/51913 + * gfortran.dg/class_47.f90: New. + 2012-01-21 Eric Botcazou <ebotcazou@adacore.com> * 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" } } |