From b5228c55900494653f0f2050af2b7a5969461594 Mon Sep 17 00:00:00 2001 From: janus Date: Fri, 16 Nov 2012 17:02:02 +0000 Subject: [PATCH] 2012-11-16 Janus Weil PR fortran/55297 * resolve.c (resolve_typebound_intrinsic_op): Only add typebound operators to the operator list in the namespace of the derived type. 2012-11-16 Janus Weil PR fortran/55297 * gfortran.dg/typebound_operator_18.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193568 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ .../gfortran.dg/typebound_operator_18.f90 | 25 ++++++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/typebound_operator_18.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 74ea42aefec..439eae5719a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2012-11-16 Janus Weil + + PR fortran/55297 + * resolve.c (resolve_typebound_intrinsic_op): Only add typebound + operators to the operator list in the namespace of the derived type. + 2012-11-12 Jan Hubicka * f95-lang.c (ATTR_NOTHROW_LEAF_MALLOC_LIST): New macro. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index e39a137fd4f..53d695cd456 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11540,7 +11540,7 @@ resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op, /* Add target to non-typebound operator list. */ if (!target->specific->deferred && !derived->attr.use_assoc - && p->access != ACCESS_PRIVATE) + && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns) { gfc_interface *head, *intr; if (gfc_check_new_interface (derived->ns->op[op], target_proc, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d93adcc3497..7606bace75d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-16 Janus Weil + + PR fortran/55297 + * gfortran.dg/typebound_operator_18.f90: New. + 2012-11-16 Vladimir Makarov PR rtl-optimization/55330 diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_18.f90 b/gcc/testsuite/gfortran.dg/typebound_operator_18.f90 new file mode 100644 index 00000000000..d5ac9e97533 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_operator_18.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! +! PR 55297: [4.8 Regression] [OOP] type-bound operator clashes with abstract interface +! +! Contributed by Damian Rouson + +module athlete_module + type athlete + contains + procedure :: negative + generic :: operator(-) => negative + end type + abstract interface + integer function sum_interface(this) + import athlete + class(athlete) this + end function + end interface +contains + integer function negative(this) + class(athlete) ,intent(in) :: this + end function +end module + +! { dg-final { cleanup-modules "athlete_module" } } -- 2.11.4.GIT