diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2013-02-04 19:06:06 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2013-02-04 19:06:06 +0000 |
commit | 49c8d79b277e0bcd0439ecf2ba987c63d6d59ce8 (patch) | |
tree | bdd3fdd8bf246deb7913c8b7ae95eff3758302a4 /gcc | |
parent | 4af8d042f849d47a694edad36c8b1884b938e5d8 (diff) | |
download | gcc-49c8d79b277e0bcd0439ecf2ba987c63d6d59ce8.zip gcc-49c8d79b277e0bcd0439ecf2ba987c63d6d59ce8.tar.gz gcc-49c8d79b277e0bcd0439ecf2ba987c63d6d59ce8.tar.bz2 |
re PR fortran/54195 ([OOP] IMPORT fails with GENERIC TBP: "is already present in the interface")
fortran/
PR fortran/54195
* resolve.c (resolve_typebound_procedures): Recurse through
resolve_symbol.
testsuite/
PR fortran/54195
* gfortran.dg/typebound_operator_19.f90: New test.
* gfortran.dg/typebound_assignment_4.f90: New test.
From-SVN: r195730
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/typebound_assignment_4.f90 | 35 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/typebound_operator_19.f90 | 29 |
5 files changed, 77 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bde2d1c..50d7538 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2013-02-04 Mikael Morin <mikael@gcc.gnu.org> + PR fortran/54195 + * resolve.c (resolve_typebound_procedures): Recurse through + resolve_symbol. + +2013-02-04 Mikael Morin <mikael@gcc.gnu.org> + PR fortran/54107 PR fortran/54195 * gfortran.h (struct gfc_symbol): New field 'resolved'. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 5083a5d..1bb18c9 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -12344,7 +12344,7 @@ resolve_typebound_procedures (gfc_symbol* derived) super_type = gfc_get_derived_super_type (derived); if (super_type) - resolve_typebound_procedures (super_type); + resolve_symbol (super_type); resolve_bindings_derived = derived; resolve_bindings_result = SUCCESS; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f40755..156fa38 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2013-02-04 Mikael Morin <mikael@gcc.gnu.org> + PR fortran/54195 + * gfortran.dg/typebound_operator_19.f90: New test. + * gfortran.dg/typebound_assignment_4.f90: New test. + +2013-02-04 Mikael Morin <mikael@gcc.gnu.org> + PR fortran/54107 * gfortran.dg/recursive_interface_1.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/typebound_assignment_4.f90 b/gcc/testsuite/gfortran.dg/typebound_assignment_4.f90 new file mode 100644 index 0000000..56f3b6e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_assignment_4.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! +! PR fortran/54195 +! The compiler used to diagnose a duplicate entity in the assignment interface +! because NC was resolved twice. +! +! Contributed by Andrew Benson <abenson@obs.carnegiescience.edu> + +module gn + + implicit none + + type :: nc + contains + procedure :: assign => nca + generic :: assignment(=) => assign + end type + + type, extends(nc) :: ncb + contains + procedure , nopass :: tis => bf + end type + +contains + + subroutine nca(to,from) + class(nc), intent(out) :: to + type(nc), intent(in) :: from + end subroutine + + logical function bf() + bf=.false. + end function + +end module diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_19.f90 b/gcc/testsuite/gfortran.dg/typebound_operator_19.f90 new file mode 100644 index 0000000..cf09379 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_operator_19.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! +! PR fortran/54195 +! The compiler used to diagnose a duplicate entity in the assignment interface +! because NC was resolved twice. +! +! Contributed by Damian Rouson <damian@rouson.net> + +module import_clashes_with_generic + + type ,abstract :: foo + contains + procedure :: unary + generic :: operator(-) => unary + end type + + abstract interface + integer function bar() + import :: foo + end function + end interface + +contains + + integer function unary(rhs) + class(foo) ,intent(in) :: rhs + end function + +end module |