aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2010-12-31 11:20:22 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2010-12-31 11:20:22 +0000
commit7c1a49fa1b2535dcce600d03887e2c72a463cc2c (patch)
treedce35256c392415d4df903f203fc6983ac3ba369 /gcc
parent1da41015bc4dbdd06cc0b94bbacfcfc537b42f25 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c9
-rw-r--r--gcc/testsuite/ChangeLog13
-rw-r--r--gcc/testsuite/gfortran.dg/userdef_operator_2.f9017
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