From 0f8ad7621b89c896547eb7b3521d03cc3b0a1a18 Mon Sep 17 00:00:00 2001 From: janus Date: Thu, 7 Oct 2010 17:35:18 +0000 Subject: [PATCH] 2010-10-07 Janus Weil PR fortran/45933 * resolve.c (resolve_typebound_function): Use correct declared type for type-bound operators. 2010-10-07 Janus Weil PR fortran/45933 * gfortran.dg/typebound_operator_5.f03: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165126 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/resolve.c | 5 ++-- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/typebound_operator_5.f03 | 30 ++++++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/typebound_operator_5.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 18e4dd94faa..641807fac3e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-10-07 Janus Weil + + PR fortran/45933 + * resolve.c (resolve_typebound_function): Use correct declared type + for type-bound operators. + 2010-10-07 Mikael Morin PR fortran/45916 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 526e6df32a0..a5aa62a4b41 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5719,13 +5719,12 @@ resolve_typebound_function (gfc_expr* e) /* Deal with typebound operators for CLASS objects. */ expr = e->value.compcall.base_object; - if (expr && expr->symtree->n.sym->ts.type == BT_CLASS - && e->value.compcall.name) + if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name) { /* Since the typebound operators are generic, we have to ensure that any delays in resolution are corrected and that the vtab is present. */ - ts = expr->symtree->n.sym->ts; + ts = expr->ts; declared = ts.u.derived; c = gfc_find_component (declared, "$vptr", true, true); if (c->ts.u.derived == NULL) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8f841ea490..b68689c2a6d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-10-07 Janus Weil + + PR fortran/45933 + * gfortran.dg/typebound_operator_5.f03: New. + 2010-10-07 Nicola Pero Merge from 'apple/trunk' branch on FSF servers. diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_5.f03 b/gcc/testsuite/gfortran.dg/typebound_operator_5.f03 new file mode 100644 index 00000000000..440c1b52c68 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_operator_5.f03 @@ -0,0 +1,30 @@ +! { dg-do compile } +! +! PR 45933: [4.6 regression] [OOP] ICE in gfc_add_component_ref, at fortran/class.c:77 +! +! Contributed by Mark Rashid + +MODULE DEF1 + TYPE :: DAT + INTEGER :: NN + CONTAINS + PROCEDURE :: LESS_THAN + GENERIC :: OPERATOR (.LT.) => LESS_THAN + END TYPE +CONTAINS + LOGICAL FUNCTION LESS_THAN(A, B) + CLASS (DAT), INTENT (IN) :: A, B + LESS_THAN = (A%NN .LT. B%NN) + END FUNCTION +END MODULE + +PROGRAM P + USE DEF1 + TYPE NODE + TYPE (DAT), POINTER :: PT + END TYPE + CLASS (NODE),POINTER :: A, B + PRINT *, A%PT .LT. B%PT +END + +! { dg-final { cleanup-modules "DEF1" } } -- 2.11.4.GIT