From eee767c6e7bde8344530425ca0100372f76f47d0 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Sun, 2 Jan 2011 21:58:03 +0000 Subject: [PATCH] backport: re PR fortran/45338 (Failure on interfacing a function passed as an argument as a custom operator) 2011-02-01 Thomas Koenig Backport from mainline PR fortran/45338 * resolve.c (resolve_operator): Mark function for user-defined operator as referenced. 2011-02-01 Thomas Koenig Backport from mainline PR fortran/45338 * gfortran.dg/userdef_operator_2.f90: New test case. From-SVN: r168410 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/resolve.c | 9 ++++++--- gcc/testsuite/ChangeLog | 6 ++++++ .../gfortran.dg/userdef_operator_2.f90 | 17 +++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/userdef_operator_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ef6aaf8e0314..614579dd14fc 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2011-02-01 Thomas Koenig + + Backport from mainline + PR fortran/45338 + * resolve.c (resolve_operator): Mark function for user-defined + operator as referenced. + 2010-12-16 Release Manager * GCC 4.5.2 released. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index a8054ae0b440..83d48b6653db 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3577,9 +3577,12 @@ resolve_operator (gfc_expr *e) sprintf (msg, _("Operand of user operator '%s' at %%L is %s"), e->value.op.uop->name, gfc_typename (&op1->ts)); else - sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"), - e->value.op.uop->name, gfc_typename (&op1->ts), - gfc_typename (&op2->ts)); + { + sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"), + e->value.op.uop->name, gfc_typename (&op1->ts), + gfc_typename (&op2->ts)); + e->value.op.uop->op->sym->attr.referenced = 1; + } goto bad_op; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28e16bfce464..21e8ee4709c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-02-01 Thomas Koenig + + Backport from mainline + PR fortran/45338 + * gfortran.dg/userdef_operator_2.f90: New test case. + 2010-12-27 Yao Qi Backport from mainline: diff --git a/gcc/testsuite/gfortran.dg/userdef_operator_2.f90 b/gcc/testsuite/gfortran.dg/userdef_operator_2.f90 new file mode 100644 index 000000000000..83392c6b6c39 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/userdef_operator_2.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! PR 45338 - no ICE when cmp is not used explicitly. +! Test case by Simon Smart +module test_mod + implicit none +contains + subroutine test_fn (cmp) + interface operator(.myop.) + pure function cmp (a, b) result(ret) + integer, intent(in) :: a, b + logical ret + end function cmp + end interface + integer :: a, b + print*, a .myop. b + end subroutine test_fn +end module test_mod -- 2.47.2