diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2010-12-31 11:20:22 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2010-12-31 11:20:22 +0000 |
commit | 7c1a49fa1b2535dcce600d03887e2c72a463cc2c (patch) | |
tree | dce35256c392415d4df903f203fc6983ac3ba369 /gcc | |
parent | 1da41015bc4dbdd06cc0b94bbacfcfc537b42f25 (diff) | |
download | gcc-7c1a49fa1b2535dcce600d03887e2c72a463cc2c.zip gcc-7c1a49fa1b2535dcce600d03887e2c72a463cc2c.tar.gz gcc-7c1a49fa1b2535dcce600d03887e2c72a463cc2c.tar.bz2 |
re PR fortran/45338 (Failure on interfacing a function passed as an argument as a custom operator)
2010-12-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45338
* resolve.c (resolve_operator): Mark function for user-defined
operator as referenced.
2010-12-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45338
* gfortran.dg/userdef_operator_2.f90: New test case.
From-SVN: r168366
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/userdef_operator_2.f90 | 17 |
4 files changed, 38 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 696ad58..c210331 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-12-31 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/45338 + * resolve.c (resolve_operator): Mark function for user-defined + operator as referenced. + 2010-12-31 Janus Weil <janus@gcc.gnu.org> PR fortran/46971 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 7081146..9a5dcc1 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3793,9 +3793,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 b8798c7..4e4601d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-31 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/45338 + * gfortran.dg/userdef_operator_2.f90: New test case. + 2010-12-31 Janus Weil <janus@gcc.gnu.org> PR fortran/46971 @@ -6,16 +11,16 @@ 2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com> * objc.dg/method-conflict-3.m: New. - * objc.dg/method-conflict-4.m: New. - * obj-c++.dg/method-conflict-3.m: New. + * objc.dg/method-conflict-4.m: New. + * obj-c++.dg/method-conflict-3.m: New. * obj-c++.dg/method-conflict-4.mm: New. 2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com> - + * objc.dg/class-extension-3.m: Updated. * objc.dg/method-1.m: Updated. * objc.dg/method-conflict-1.m: New. - * objc.dg/method-conflict-2.m: New. + * objc.dg/method-conflict-2.m: New. * obj-c++.dg/class-extension-3.mm: Updated. * obj-c++.dg/method-8.mm: Updated. * obj-c++.dg/method-conflict-1.mm: New. 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 0000000..83392c6 --- /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 |